diff --git a/.changeset/rules_release-wicked-carrots-obey-2.md b/.changeset/rules_release-wicked-carrots-obey-2.md new file mode 100644 index 000000000..f0fea9390 --- /dev/null +++ b/.changeset/rules_release-wicked-carrots-obey-2.md @@ -0,0 +1,5 @@ +--- +"rules_release": minor +--- + +Add publish_github_release to make publishing GitHub releases easier. diff --git a/.changeset/rules_release-wicked-carrots-obey.md b/.changeset/rules_release-wicked-carrots-obey.md new file mode 100644 index 000000000..67c982c53 --- /dev/null +++ b/.changeset/rules_release-wicked-carrots-obey.md @@ -0,0 +1,5 @@ +--- +"rules_release": patch +--- + +Setup release flow for rules_release diff --git a/.changeset/rules_task-ninety-lobsters-fold-2.md b/.changeset/rules_task-ninety-lobsters-fold-2.md new file mode 100644 index 000000000..e4d0b2084 --- /dev/null +++ b/.changeset/rules_task-ninety-lobsters-fold-2.md @@ -0,0 +1,5 @@ +--- +"rules_task": patch +--- + +Replaced semantic release with rules_release release flow. diff --git a/.changeset/rules_task-ninety-lobsters-fold.md b/.changeset/rules_task-ninety-lobsters-fold.md new file mode 100644 index 000000000..6c4dae5e4 --- /dev/null +++ b/.changeset/rules_task-ninety-lobsters-fold.md @@ -0,0 +1,7 @@ +--- +"rules_task": major +--- + +BREAKING CHANGE: Restructure the directory layout so it's the same as rules_release. This enables +using development dependencies in the root BUILD.bazel file without having to install those +when this rule is used in another repository. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index fff25c411..000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: Release -on: - push: - branches: - - "master" - pull_request: - branches: - - "*" -jobs: - rules_task: - name: rules_task - timeout-minutes: 10 - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - persist-credentials: false - ref: ${{ github.head_ref }} - - - uses: pnpm/action-setup@v2 - with: - version: 8 - run_install: | - - cwd: ./rules/rules_task - - - name: Load secret - uses: 1password/load-secrets-action@v1 - with: - export-env: true - env: - OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.ONEPASSWORD_SERVICE_ACCOUNT_TOKEN_DEV }} - GH_TOKEN: "op://vgijssel-dev/semantic-release-setup/credential" - - # From https://github.com/semantic-release/semantic-release/discussions/1886#discussioncomment-6899211 - - name: Dry run release - run: | - unset GITHUB_ACTIONS - unset GITHUB_EVENT_NAME - pnpm exec semantic-release --dry-run --no-ci --branches $TARGET_BRANCH - if: ${{ github.event_name == 'pull_request' }} - working-directory: ./rules/rules_task - env: - TARGET_BRANCH: ${{ github.head_ref }} - - - name: Run release - run: pnpm exec semantic-release - if: ${{ github.event_name == 'push' }} - working-directory: ./rules/rules_task diff --git a/BUILD.bazel b/BUILD.bazel index 667bd9454..836a7a361 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,5 +1,5 @@ load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") load( "@jvolkman_rules_pycross//pycross:defs.bzl", "pycross_lock_file", @@ -229,10 +229,13 @@ task( release_manager( name = "release_manager", + bazel_diff_args = "--fineGrainedHashExternalRepos=rules_release,rules_task", publish_cmds = [ ":push_git_changes", ], deps = [ - "//tools/bunq2ynab:bunq2ynab_release", + "//tools/bunq2ynab:release", + "@rules_release//:release", + "@rules_task//:release", ], ) diff --git a/MODULE.bazel b/MODULE.bazel index e20e18fb5..182ad7dcb 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,13 +19,15 @@ bazel_dep(name = "platforms", version = "0.0.8") # ------------------------------------ rules_skylib ------------------------------------ # bazel_dep(name = "bazel_skylib", version = "1.4.2") -bazel_dep(name = "aspect_bazel_lib", version = "2.0.0-rc1") + +# ------------------------------------ aspect_bazel_lib ------------------------------------ # +bazel_dep(name = "aspect_bazel_lib", version = "2.0.1") # ------------------------------------ rules_pkg ------------------------------------ # bazel_dep(name = "rules_pkg", version = "0.9.1") # ------------------------------------ rules_task ------------------------------------ # -bazel_dep(name = "rules_task", version = "0.1.0") +bazel_dep(name = "rules_task", version = "0.0.0") local_path_override( module_name = "rules_task", diff --git a/WORKSPACE.bzlmod b/WORKSPACE.bzlmod index 0dd8bf7c7..e6b86d097 100644 --- a/WORKSPACE.bzlmod +++ b/WORKSPACE.bzlmod @@ -326,28 +326,3 @@ exports_files(["image.tar.gz"]) nix_file = "//:python310_base_image.nix", repository = "@nixpkgs//:default.nix", ) - -# ------------------------------------ GitHub CLI ------------------------------------ # - -# From https://github.com/cli/cli/releases/ - -http_archive( - name = "github_cli_linux_arm64", - build_file = "//tools/github_cli:BUILD.repositories.bazel.tpl", - sha256 = "e29e51efae58693cab394b983771bc0c73b400e429dd1d7339fc62c8b257c74a", - url = "https://github.com/cli/cli/releases/download/v2.39.1/gh_2.39.1_linux_arm64.tar.gz", -) - -http_archive( - name = "github_cli_linux_amd64", - build_file = "//tools/github_cli:BUILD.repositories.bazel.tpl", - sha256 = "18a1bc97eb72305ff20e965d3c67aee7e1ac607fabc6251c7374226d8c41422b", - url = "https://github.com/cli/cli/releases/download/v2.39.1/gh_2.39.1_linux_amd64.tar.gz", -) - -http_archive( - name = "github_cli_darwin_arm64", - build_file = "//tools/github_cli:BUILD.repositories.bazel.tpl", - sha256 = "f854225778b7215480c442cd2e3eeec1a56d33876bbbad19daf557c1b00d6913", - url = "https://github.com/cli/cli/releases/download/v2.39.1/gh_2.39.1_macOS_arm64.zip", -) diff --git a/infrastructure/BUILD.bazel b/infrastructure/BUILD.bazel index 826595ed9..bbf9d3e4a 100644 --- a/infrastructure/BUILD.bazel +++ b/infrastructure/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") load("@pdm-setup//:requirements.bzl", "requirement") package(default_visibility = ["//visibility:public"]) diff --git a/occupancy_component/BUILD.bazel b/occupancy_component/BUILD.bazel index 87bb48710..2e8eeea73 100755 --- a/occupancy_component/BUILD.bazel +++ b/occupancy_component/BUILD.bazel @@ -1,6 +1,6 @@ load("@pdm-setup//:requirements.bzl", "requirement") load("//tools/pytest:pytest.bzl", "py_pytest_test") -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") py_library( name = "lib", diff --git a/provisioner/BUILD.bazel b/provisioner/BUILD.bazel index c9d2ed5ae..de859d33d 100644 --- a/provisioner/BUILD.bazel +++ b/provisioner/BUILD.bazel @@ -1,5 +1,5 @@ load("//tools/pyinfra:defs.bzl", "pyinfra_run") -load("@rules_task//:defs.bzl", "cmd", "task", "task_test") +load("@rules_task//task:defs.bzl", "cmd", "task", "task_test") load("//tools/docker:docker.bzl", "docker_load") load("@pdm-setup//:requirements.bzl", "requirement") load("//tools/onepassword:defs.bzl", "secrets") diff --git a/rules/rules_release/BUILD.bazel b/rules/rules_release/BUILD.bazel index 245526bd1..ce8839844 100644 --- a/rules/rules_release/BUILD.bazel +++ b/rules/rules_release/BUILD.bazel @@ -1,9 +1,42 @@ load("@npm//:defs.bzl", "npm_link_all_packages") -load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_library", "js_test") +load("@aspect_rules_js//js:defs.bzl", "js_binary") load("@rules_java//java:defs.bzl", "java_binary") +load("@rules_task//task:defs.bzl", "cmd") +load("//release:defs.bzl", "publish_github_release", "release") +load("@aspect_bazel_lib//lib:tar.bzl", "mtree_spec", "tar") package(default_visibility = ["//visibility:public"]) +_darwin_arm64 = [ + "@platforms//os:macos", + "@platforms//cpu:arm64", +] + +_linux_amd64 = [ + "@platforms//os:linux", + "@platforms//cpu:x86_64", +] + +_linux_arm64 = [ + "@platforms//os:linux", + "@platforms//cpu:arm64", +] + +config_setting( + name = "is_linux_amd64", + constraint_values = _linux_amd64, +) + +config_setting( + name = "is_linux_arm64", + constraint_values = _linux_arm64, +) + +config_setting( + name = "is_darwin_arm64", + constraint_values = _darwin_arm64, +) + npm_link_all_packages() java_binary( @@ -33,7 +66,7 @@ js_binary( ], entry_point = "cli.mjs", env = { - "WORKSPACE_NAME": repository_name().lstrip("@"), + "WORKSPACE_NAME": repository_name().removeprefix("@"), }, ) @@ -46,3 +79,107 @@ js_binary( ], entry_point = "changesets_cli.mjs", ) + +filegroup( + name = "all_files", + srcs = glob(["**/*"]) + [ + "//release:all_files", + "//release/private:all_files", + ], +) + +mtree_spec( + name = "release_archive_mtree", + srcs = [ + ":all_files", + ], +) + +# Remove `../rules_release~override` from each line because otherwise +# this results in an empty archive when extracting. +genrule( + name = "release_archive_mtree_normalized", + srcs = [ + ":release_archive_mtree", + ], + outs = [ + "release_archive_mtree_normalized.spec", + ], + cmd = """ + sed 's|../{}/||' $< > $@ + """.format(repository_name().removeprefix("@")), +) + +tar( + name = "release_archive", + srcs = [ + ":all_files", + ], + out = "rules_release.tar.gz", + compress = "gzip", + mtree = ":release_archive_mtree_normalized", +) + +genrule( + name = "github_release_template", + srcs = [ + ":release.version_changelog", + ":release.version", + ":release_archive", + ], + outs = [ + "github_release_template.txt", + ], + cmd = """ +export VERSION="v$$(cat $(location :release.version))" +export SHA=$$(shasum -a 256 $(location :release_archive) | awk '{print $$1}') +export PREFIX="rules_release-$${VERSION}" +export ARCHIVE="rules_release.tar.gz" + +cat < $(OUTS) +## Using WORKSPACE: + +\\`\\`\\`starlark +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "rules_release", + sha256 = "$${SHA}", + url = "https://github.com/vgijssel/setup/releases/download/$${PREFIX}/$${ARCHIVE}", +) +\\`\\`\\` +EOF + +cat $(location :release.version_changelog) >> $(OUTS) + """, +) + +publish_github_release( + name = "publish_github_release", + assets = [ + ":release_archive", + ], + before_cmds = [ + "export OP_SERVICE_ACCOUNT_TOKEN=${ONEPASSWORD_SERVICE_ACCOUNT_TOKEN_PROD:-}", + "export GH_TOKEN=$($OP read op://vgijssel-prod/github-release/credential)", + ], + changelog_file = ":github_release_template", + env = { + "OP": cmd.executable("//tools/onepassword:op"), + }, + release = ":release", +) + +release( + name = "release", + changelog_file = "CHANGELOG.md", + publish_cmds = [ + ":publish_github_release", + ], + release_name = "rules_release", + target = ":all_files", + version_file = "version.txt", + deps = [ + "@rules_task//:release", + ], +) diff --git a/rules/rules_release/CHANGELOG.md b/rules/rules_release/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/rules/rules_release/MODULE.bazel b/rules/rules_release/MODULE.bazel index 657f8e350..eeb1d2303 100644 --- a/rules/rules_release/MODULE.bazel +++ b/rules/rules_release/MODULE.bazel @@ -8,22 +8,44 @@ module( version = "0.0.0", ) +non_module_dependencies = use_extension(":extensions.bzl", "non_module_dependencies") + +# ------------------------------------ platforms ------------------------------------ # +bazel_dep(name = "platforms", version = "0.0.8") + +# ------------------------------------ bazel_skylib ------------------------------------ # bazel_dep( name = "bazel_skylib", version = "1.4.2", ) +# ------------------------------------ aspect_bazel_lib ------------------------------------ # +bazel_dep(name = "aspect_bazel_lib", version = "2.0.1") + # ------------------------------------ rules_java ------------------------------------ # bazel_dep(name = "rules_java", version = "7.0.6") -non_module_dependencies = use_extension(":extensions.bzl", "non_module_dependencies") - +# ------------------------------------ bazel-diff ------------------------------------ # use_repo(non_module_dependencies, "bazel_diff") +# ------------------------------------ github_cli ------------------------------------ # +use_repo(non_module_dependencies, "github_cli_linux_arm64") + +use_repo(non_module_dependencies, "github_cli_linux_amd64") + +use_repo(non_module_dependencies, "github_cli_darwin_arm64") + +# ------------------------------------ onepassword ------------------------------------ # +use_repo(non_module_dependencies, "onepassword_linux_arm64") + +use_repo(non_module_dependencies, "onepassword_linux_amd64") + +use_repo(non_module_dependencies, "onepassword_darwin_arm64") + # ------------------------------------ rules_js ------------------------------------ # bazel_dep( name = "aspect_rules_js", - version = "1.33.1", + version = "1.34.1", ) ####### Node.js version ######### @@ -51,3 +73,11 @@ npm.npm_translate_lock( ) use_repo(npm, "npm") + +# ------------------------------------ rules_task ------------------------------------ # +bazel_dep(name = "rules_task", version = "0.0.0") + +local_path_override( + module_name = "rules_task", + path = "../rules_task", +) diff --git a/rules/rules_release/release/BUILD.bazel b/rules/rules_release/release/BUILD.bazel index e69de29bb..6a915928c 100644 --- a/rules/rules_release/release/BUILD.bazel +++ b/rules/rules_release/release/BUILD.bazel @@ -0,0 +1,6 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**/*"]), +) diff --git a/rules/rules_release/release/defs.bzl b/rules/rules_release/release/defs.bzl index 9ce8f9cd0..db880af85 100644 --- a/rules/rules_release/release/defs.bzl +++ b/rules/rules_release/release/defs.bzl @@ -1,5 +1,7 @@ load("//release/private:release.bzl", _release = "release") load("//release/private:release_manager.bzl", _release_manager = "release_manager") +load("//release/private:publish_github_release.bzl", _publish_github_release = "publish_github_release") release = _release release_manager = _release_manager +publish_github_release = _publish_github_release diff --git a/rules/rules_release/release/private/BUILD.bazel b/rules/rules_release/release/private/BUILD.bazel index 9e96f5f7b..67a7c93f8 100644 --- a/rules/rules_release/release/private/BUILD.bazel +++ b/rules/rules_release/release/private/BUILD.bazel @@ -2,6 +2,11 @@ load("@aspect_rules_js//js:defs.bzl", "js_binary") package(default_visibility = ["//visibility:public"]) +filegroup( + name = "all_files", + srcs = glob(["**/*"]), +) + js_binary( name = "version_changelog", data = [ diff --git a/rules/rules_release/release/private/publish_github_release.bzl b/rules/rules_release/release/private/publish_github_release.bzl new file mode 100644 index 000000000..ec82a298e --- /dev/null +++ b/rules/rules_release/release/private/publish_github_release.bzl @@ -0,0 +1,36 @@ +load("@rules_task//task:defs.bzl", "cmd", "task") + +def publish_github_release(name, release, changelog_file = None, assets = [], before_cmds = [], env = {}): + version_file = "{}.version".format(release) + changelog_file = changelog_file or "{}.version_changelog".format(release) + release_name_file = "{}.release_name".format(release) + + assets_to_upload = [cmd.file(a) for a in assets] + + target_env = { + "VERSION_FILE": cmd.file(version_file), + "CHANGELOG_FILE": cmd.file(changelog_file), + "RELEASE_NAME_FILE": cmd.file(release_name_file), + "GH": cmd.executable(Label("//tools/github_cli")), + "ASSETS": cmd.shell(*assets_to_upload), + } + + for k, v in env.items(): + if k in target_env: + fail("env key {} already exists".format(k)) + + target_env[k] = v + + task( + name = name, + cmds = before_cmds + [ + "export VERSION=$(cat $VERSION_FILE)", + "export RELEASE_NAME=$(cat $RELEASE_NAME_FILE)", + "export RELEASE_TAG=$RELEASE_NAME-v$VERSION", + "export RELEASE_EXISTS=$($GH release view $RELEASE_TAG > /dev/null 2>&1 && echo true || echo false)", + "if [ $RELEASE_EXISTS = true ]; then echo 'Release already exists, exitting.'; exit 0; fi", + "$GH release create $RELEASE_TAG --notes-file $CHANGELOG_FILE --title $RELEASE_TAG $ASSETS", + ], + env = target_env, + cwd = "$BUILD_WORKSPACE_DIRECTORY", + ) diff --git a/rules/rules_release/release/private/release.bzl b/rules/rules_release/release/private/release.bzl index 5d2250c28..008e5762a 100644 --- a/rules/rules_release/release/private/release.bzl +++ b/rules/rules_release/release/private/release.bzl @@ -7,13 +7,13 @@ def _to_label_string(label): workspace_name = "" else: # TODO: Wonder if there is a better way to get the workspace name of a locally overriden external repository - workspace_name = "@" + label.workspace_name.rstrip("~override") + workspace_name = "@" + label.workspace_name.removesuffix("~override") return workspace_name + "//" + label.package + ":" + label.name def _release_impl(ctx): release_config_file = ctx.actions.declare_file(ctx.label.name + ".json") - release_name = ctx.attr.release_name or ctx.label.name + release_name = ctx.attr.release_name publish_cmds_paths = [] @@ -58,17 +58,28 @@ _release = rule( "target": attr.label(mandatory = True), "version_file": attr.label(allow_single_file = True, mandatory = True), "publish_cmds": attr.label_list(cfg = "target"), - "release_name": attr.string(), + "release_name": attr.string(mandatory = True), "changelog_file": attr.label(allow_single_file = True, mandatory = True), }, ) def release(**kwargs): name = kwargs.get("name") + release_name = kwargs.pop("release_name") or name + version_changelog_name = "{}.version_changelog".format(name) version_changelog_out_file = "{}.out".format(version_changelog_name) - _release(**kwargs) + version_name = "{}.version".format(name) + version_out_file = "{}.out".format(version_name) + + release_file_name = "{}.release_name".format(name) + release_file_out_file = "{}.out".format(release_name) + + changelog_name = "{}.changelog".format(name) + changelog_out_file = "{}.out".format(changelog_name) + + _release(release_name = release_name, **kwargs) js_run_binary( name = version_changelog_name, @@ -86,3 +97,33 @@ def release(**kwargs): "$(rootpath {})".format(version_changelog_out_file), ], ) + + native.genrule( + name = version_name, + srcs = [ + kwargs.get("version_file"), + ], + outs = [ + version_out_file, + ], + cmd = "cat $(location {}) > $(OUTS)".format(kwargs.get("version_file")), + ) + + native.genrule( + name = release_file_name, + outs = [ + release_file_out_file, + ], + cmd = "echo {} > $(OUTS)".format(release_name), + ) + + native.genrule( + name = changelog_name, + srcs = [ + kwargs.get("changelog_file"), + ], + outs = [ + changelog_out_file, + ], + cmd = "cat $(location {}) > $(OUTS)".format(kwargs.get("changelog_file")), + ) diff --git a/rules/rules_release/repositories.bzl b/rules/rules_release/repositories.bzl index 25b55e7bb..cd8bc7504 100644 --- a/rules/rules_release/repositories.bzl +++ b/rules/rules_release/repositories.bzl @@ -1,4 +1,4 @@ -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_jar") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_jar") def dependencies(): http_jar( @@ -8,3 +8,46 @@ def dependencies(): "https://github.com/Tinder/bazel-diff/releases/download/5.0.0/bazel-diff_deploy.jar", ], ) + + http_archive( + name = "github_cli_linux_arm64", + build_file = "//tools/github_cli:BUILD.repositories.bazel.tpl", + sha256 = "e29e51efae58693cab394b983771bc0c73b400e429dd1d7339fc62c8b257c74a", + url = "https://github.com/cli/cli/releases/download/v2.39.1/gh_2.39.1_linux_arm64.tar.gz", + ) + + http_archive( + name = "github_cli_linux_amd64", + build_file = "//tools/github_cli:BUILD.repositories.bazel.tpl", + sha256 = "18a1bc97eb72305ff20e965d3c67aee7e1ac607fabc6251c7374226d8c41422b", + url = "https://github.com/cli/cli/releases/download/v2.39.1/gh_2.39.1_linux_amd64.tar.gz", + ) + + http_archive( + name = "github_cli_darwin_arm64", + build_file = "//tools/github_cli:BUILD.repositories.bazel.tpl", + sha256 = "f854225778b7215480c442cd2e3eeec1a56d33876bbbad19daf557c1b00d6913", + url = "https://github.com/cli/cli/releases/download/v2.39.1/gh_2.39.1_macOS_arm64.zip", + ) + + # From https://app-updates.agilebits.com/product_history/CLI2 + http_archive( + name = "onepassword_linux_arm64", + build_file = "//tools/onepassword:BUILD.repositories.bazel.tpl", + sha256 = "b93a8e0dc42c0979bb13047ac4412bd73092be57bb84ad223eeca295151159fa", + url = "https://cache.agilebits.com/dist/1P/op2/pkg/v2.18.0/op_linux_arm64_v2.18.0.zip", + ) + + http_archive( + name = "onepassword_linux_amd64", + build_file = "//tools/onepassword:BUILD.repositories.bazel.tpl", + sha256 = "2baf610b476727f24c62cc843419f55b157e1a05521a698c1c8b4ed676a766aa", + url = "https://cache.agilebits.com/dist/1P/op2/pkg/v2.18.0/op_linux_amd64_v2.18.0.zip", + ) + + http_archive( + name = "onepassword_darwin_arm64", + build_file = "//tools/onepassword:BUILD.repositories.bazel.tpl", + sha256 = "b9ae52df3003216b454f6ac0a402c71bcfb4804eafb3ee3593a84a2002930d27", + url = "https://cache.agilebits.com/dist/1P/op2/pkg/v2.22.0/op_darwin_arm64_v2.22.0.zip", + ) diff --git a/tools/github_cli/BUILD.bazel b/rules/rules_release/tools/github_cli/BUILD.bazel similarity index 91% rename from tools/github_cli/BUILD.bazel rename to rules/rules_release/tools/github_cli/BUILD.bazel index 0fe17270a..df24bf3dd 100644 --- a/tools/github_cli/BUILD.bazel +++ b/rules/rules_release/tools/github_cli/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") package(default_visibility = ["//visibility:public"]) diff --git a/tools/github_cli/BUILD.repositories.bazel.tpl b/rules/rules_release/tools/github_cli/BUILD.repositories.bazel.tpl similarity index 100% rename from tools/github_cli/BUILD.repositories.bazel.tpl rename to rules/rules_release/tools/github_cli/BUILD.repositories.bazel.tpl diff --git a/rules/rules_release/tools/onepassword/BUILD.bazel b/rules/rules_release/tools/onepassword/BUILD.bazel new file mode 100644 index 000000000..c7020f9b7 --- /dev/null +++ b/rules/rules_release/tools/onepassword/BUILD.bazel @@ -0,0 +1,24 @@ +load("@rules_task//task:defs.bzl", "cmd", "task") + +package(default_visibility = ["//visibility:public"]) + +op_file = select({ + "//:is_linux_amd64": ["@onepassword_linux_amd64//:op"], + "//:is_linux_arm64": ["@onepassword_linux_arm64//:op"], + "//:is_darwin_arm64": ["@onepassword_darwin_arm64//:op"], +}) + +sh_binary( + name = "op_binary", + srcs = op_file, +) + +task( + name = "op", + cmds = [ + cmd.shell( + cmd.executable(":op_binary"), + "$CLI_ARGS", + ), + ], +) diff --git a/rules/rules_release/tools/onepassword/BUILD.repositories.bazel.tpl b/rules/rules_release/tools/onepassword/BUILD.repositories.bazel.tpl new file mode 100644 index 000000000..11c809fa3 --- /dev/null +++ b/rules/rules_release/tools/onepassword/BUILD.repositories.bazel.tpl @@ -0,0 +1,5 @@ +package(default_visibility = ["//visibility:public"]) + +exports_files([ + "op" +]) \ No newline at end of file diff --git a/rules/rules_release/version.txt b/rules/rules_release/version.txt new file mode 100644 index 000000000..bd52db81d --- /dev/null +++ b/rules/rules_release/version.txt @@ -0,0 +1 @@ +0.0.0 \ No newline at end of file diff --git a/rules/rules_task/.releaserc b/rules/rules_task/.releaserc deleted file mode 100644 index 3fb3cce8c..000000000 --- a/rules/rules_task/.releaserc +++ /dev/null @@ -1,110 +0,0 @@ -{ - "branches": [ - { - "name": "master" - } - ], - "tagFormat": "rules_task-v${version}", - "extends": [ - "./commit-paths.js" - ], - "commitPaths": [ - "rules/rules_task/*" - ], - "plugins": [ - [ - "@semantic-release/commit-analyzer", - { - "releaseRules": [ - { - "type": "docs", - "release": "patch" - }, - { - "type": "build", - "release": "patch" - }, - { - "type": "refactor", - "release": "patch" - } - ], - "preset": "conventionalcommits" - } - ], - [ - "@semantic-release/exec", - { - "generateNotesCmd": "./generate-release-notes.sh ${nextRelease.version}" - } - ], - [ - "@semantic-release/release-notes-generator", - { - "preset": "conventionalcommits", - "presetConfig": { - "types": [ - { - "type": "feat", - "section": "Features" - }, - { - "type": "feature", - "section": "Features" - }, - { - "type": "fix", - "section": "Bug Fixes" - }, - { - "type": "perf", - "section": "Performance Improvements" - }, - { - "type": "revert", - "section": "Reverts" - }, - { - "type": "docs", - "section": "Documentation" - }, - { - "type": "style", - "section": "Styles" - }, - { - "type": "chore", - "section": "Miscellaneous Chores" - }, - { - "type": "refactor", - "section": "Code Refactoring" - }, - { - "type": "test", - "section": "Tests" - }, - { - "type": "build", - "section": "Build System" - }, - { - "type": "ci", - "section": "Continuous Integration" - } - ] - } - } - ], - [ - "@semantic-release/github", - { - "assets": [ - { - "path": "*.tar.gz" - } - ] - } - ] - ] -} diff --git a/rules/rules_task/BUILD.bazel b/rules/rules_task/BUILD.bazel index 9c0dc2cb1..e4a730bde 100644 --- a/rules/rules_task/BUILD.bazel +++ b/rules/rules_task/BUILD.bazel @@ -1,16 +1,116 @@ -load("@rules_task//tools:defs.bzl", "compile_pip_requirements") -load(":defs.bzl", "cmd", "task") +load("@rules_release//release:defs.bzl", "publish_github_release", "release") +load("@aspect_bazel_lib//lib:tar.bzl", "mtree_spec", "tar") +load("//task:defs.bzl", "cmd") +load("//tools:defs.bzl", "compile_pip_requirements") package(default_visibility = ["//visibility:public"]) -exports_files([ - "runner.py", - "py_binary_cmd_main.tpl.py", -]) - compile_pip_requirements( name = "requirements", extra_args = ["--allow-unsafe"], requirements_in = "requirements.in", requirements_txt = "requirements.txt", ) + +filegroup( + name = "all_files", + srcs = glob(["**/*"]) + [ + "//tests:all_files", + "//tools:all_files", + "//task:all_files", + "//task/private:all_files", + ], +) + +mtree_spec( + name = "release_archive_mtree", + srcs = [ + ":all_files", + ], +) + +# Remove `../rules_task~override` from each line because otherwise +# this results in an empty archive when extracting. +genrule( + name = "release_archive_mtree_normalized", + srcs = [ + ":release_archive_mtree", + ], + outs = [ + "release_archive_mtree_normalized.spec", + ], + cmd = """ + sed 's|../{}/||' $< > $@ + """.format(repository_name().removeprefix("@")), +) + +tar( + name = "release_archive", + srcs = [ + ":all_files", + ], + out = "rules_task.tar.gz", + compress = "gzip", + mtree = ":release_archive_mtree_normalized", +) + +genrule( + name = "github_release_template", + srcs = [ + ":release.version_changelog", + ":release.version", + ":release_archive", + ], + outs = [ + "github_release_template.txt", + ], + cmd = """ +export VERSION="v$$(cat $(location :release.version))" +export SHA=$$(shasum -a 256 $(location :release_archive) | awk '{print $$1}') +export PREFIX="rules_task-$${VERSION}" +export ARCHIVE="rules_task.tar.gz" + +cat < $(OUTS) +## Using WORKSPACE: + +\\`\\`\\`starlark +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "rules_task", + sha256 = "$${SHA}", + url = "https://github.com/vgijssel/setup/releases/download/$${PREFIX}/$${ARCHIVE}", +) +\\`\\`\\` +EOF + +cat $(location :release.version_changelog) >> $(OUTS) + """, +) + +publish_github_release( + name = "publish_github_release", + assets = [ + ":release_archive", + ], + before_cmds = [ + "export OP_SERVICE_ACCOUNT_TOKEN=${ONEPASSWORD_SERVICE_ACCOUNT_TOKEN_PROD:-}", + "export GH_TOKEN=$($OP read op://vgijssel-prod/github-release/credential)", + ], + changelog_file = ":github_release_template", + env = { + "OP": cmd.executable("@rules_release//tools/onepassword:op"), + }, + release = ":release", +) + +release( + name = "release", + changelog_file = "CHANGELOG.md", + publish_cmds = [ + ":publish_github_release", + ], + release_name = "rules_task", + target = ":all_files", + version_file = "version.txt", +) diff --git a/rules/rules_task/CHANGELOG.md b/rules/rules_task/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/rules/rules_task/MODULE.bazel b/rules/rules_task/MODULE.bazel index 6d2f96720..3ab2a76af 100644 --- a/rules/rules_task/MODULE.bazel +++ b/rules/rules_task/MODULE.bazel @@ -31,3 +31,11 @@ pip.parse( ) use_repo(pip, "pip") + +# ------------------------------------ rules_release ------------------------------------ # +bazel_dep(name = "rules_release", version = "0.0.0") + +local_path_override( + module_name = "rules_release", + path = "../rules_release", +) diff --git a/rules/rules_task/commit-paths.js b/rules/rules_task/commit-paths.js deleted file mode 100644 index 1bed6bf1e..000000000 --- a/rules/rules_task/commit-paths.js +++ /dev/null @@ -1,95 +0,0 @@ -const gitLogParser = require("git-log-parser"); -const oldParse = gitLogParser.parse; -const { execSync } = require("child_process"); -const { wrap } = require("module"); - -let commitPaths = null; - -// Copied from https://github.com/pmowrer/semantic-release-plugin-decorators/blob/master/src/wrapStep.js -// This executes the "stepName" method of all plugins and afterwards executes the "wrapFn" method -const wrapStep = ( - stepName, - wrapFn, - { defaultReturn = undefined, wrapperName = "" } = {} -) => { - const wrapperFn = async function (globalPluginConfig, context) { - const { - options: { plugins }, - } = context; - - for (const pluginDefinition of plugins) { - const [pluginName, pluginConfig] = Array.isArray(pluginDefinition) - ? pluginDefinition - : [pluginDefinition, {}]; - - if (!pluginName) { - // Still needed ? - context.logger.log(`Falsy plugin name at index "${index}"`); - continue; - } else if (typeof pluginName !== "string") { - throw new Error( - `${ - wrapperName ? wrapperName : "semantic-release-plugin-decorators" - }: Incorrect plugin name type. Expected string but was ${JSON.stringify( - pluginName - )}.` - ); - } - - const plugin = await import(pluginName); - const step = plugin && plugin[stepName]; - - if (!step) { - context.logger.log( - `Plugin "${pluginName}" does not provide step "${stepName}"` - ); - continue; - } - - context.logger.log(`Start step "${stepName}" of plugin "${pluginName}"`); - - await step(globalPluginConfig, context); - - context.logger.log( - `Completed step "${stepName}" of plugin "${pluginName}"` - ); - } - - return await wrapFn(globalPluginConfig, context); - }; - - Object.defineProperty(wrapperFn, "name", { value: wrapperName }); - - return wrapperFn; -}; - -// Wrapping the verifyConditions step to get the config so we can globally set the commitPaths for the git-log-parser -const verifyConditions = wrapStep( - "verifyConditions", - (globalPluginConfig) => { - commitPaths = globalPluginConfig["commitPaths"]; - }, - { - wrapperName: "get-commit-paths", - } -); - -gitLogParser.parse = function (config, options) { - // get the git root and change the cwd so all the commitPaths are relative to the git root - const newCwd = execSync("git rev-parse --show-toplevel", { - encoding: "utf-8", - }).trim(); - const configValue = config["_"]; - const newConfig = { - _: [configValue, "--", ...commitPaths], - }; - const newOptions = { - ...options, - cwd: newCwd, - }; - return oldParse(newConfig, newOptions); -}; - -module.exports = { - verifyConditions, -}; diff --git a/rules/rules_task/generate-release-notes.sh b/rules/rules_task/generate-release-notes.sh deleted file mode 100755 index 49e869fcf..000000000 --- a/rules/rules_task/generate-release-notes.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -set -Eeou pipefail - -export VERSION="v$1" - -export PREFIX="rules_task-$VERSION" -export ARCHIVE="rules_task-$VERSION.tar.gz" - -git archive --format=tar --prefix=${PREFIX}/ HEAD | gzip > $ARCHIVE - -export SHA=$(shasum -a 256 $ARCHIVE | awk '{print $1}') - -cat << EOF -## Using WORKSPACE: - -\`\`\`starlark - -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - -http_archive( - name = "rules_task", - sha256 = "${SHA}", - strip_prefix = "${PREFIX}", - url = "https://github.com/vgijssel/setup/releases/download/${PREFIX}/${ARCHIVE}", -) -EOF - -echo "\`\`\`" \ No newline at end of file diff --git a/rules/rules_task/package.json b/rules/rules_task/package.json deleted file mode 100644 index 34d64a688..000000000 --- a/rules/rules_task/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "rules_task", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@semantic-release/commit-analyzer": "11.0.0", - "@semantic-release/exec": "6.0.3", - "@semantic-release/github": "9.2.1", - "@semantic-release/release-notes-generator": "12.0.0", - "conventional-changelog-conventionalcommits": "7.0.2", - "semantic-release": "22.0.5" - } -} diff --git a/rules/rules_task/pnpm-lock.yaml b/rules/rules_task/pnpm-lock.yaml deleted file mode 100644 index 42df0c869..000000000 --- a/rules/rules_task/pnpm-lock.yaml +++ /dev/null @@ -1,1996 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@semantic-release/commit-analyzer': - specifier: 11.0.0 - version: 11.0.0(semantic-release@22.0.5) - '@semantic-release/exec': - specifier: 6.0.3 - version: 6.0.3(semantic-release@22.0.5) - '@semantic-release/github': - specifier: 9.2.1 - version: 9.2.1(semantic-release@22.0.5) - '@semantic-release/release-notes-generator': - specifier: 12.0.0 - version: 12.0.0(semantic-release@22.0.5) - conventional-changelog-conventionalcommits: - specifier: 7.0.2 - version: 7.0.2 - semantic-release: - specifier: 22.0.5 - version: 22.0.5 - -packages: - - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - dev: false - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: false - - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - requiresBuild: true - dev: false - optional: true - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: false - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: false - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: false - - /@octokit/auth-token@4.0.0: - resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} - engines: {node: '>= 18'} - dev: false - - /@octokit/core@5.0.1: - resolution: {integrity: sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==} - engines: {node: '>= 18'} - dependencies: - '@octokit/auth-token': 4.0.0 - '@octokit/graphql': 7.0.2 - '@octokit/request': 8.1.2 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.0.0 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.0 - dev: false - - /@octokit/endpoint@9.0.1: - resolution: {integrity: sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==} - engines: {node: '>= 18'} - dependencies: - '@octokit/types': 12.0.0 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.0 - dev: false - - /@octokit/graphql@7.0.2: - resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} - engines: {node: '>= 18'} - dependencies: - '@octokit/request': 8.1.2 - '@octokit/types': 12.0.0 - universal-user-agent: 6.0.0 - dev: false - - /@octokit/openapi-types@19.0.0: - resolution: {integrity: sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==} - dev: false - - /@octokit/plugin-paginate-rest@9.0.0(@octokit/core@5.0.1): - resolution: {integrity: sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=5' - dependencies: - '@octokit/core': 5.0.1 - '@octokit/types': 12.0.0 - dev: false - - /@octokit/plugin-retry@6.0.1(@octokit/core@5.0.1): - resolution: {integrity: sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=5' - dependencies: - '@octokit/core': 5.0.1 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.0.0 - bottleneck: 2.19.5 - dev: false - - /@octokit/plugin-throttling@8.0.0(@octokit/core@5.0.1): - resolution: {integrity: sha512-OkMbHYUidj81q92YRkPzWmwXkEtsI3KOcSkNm763aqUOh9IEplyX05XjKAdZFANAvaYH0Q4JBZwu4h2VnPVXZA==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': ^5.0.0 - dependencies: - '@octokit/core': 5.0.1 - '@octokit/types': 12.0.0 - bottleneck: 2.19.5 - dev: false - - /@octokit/request-error@5.0.1: - resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} - engines: {node: '>= 18'} - dependencies: - '@octokit/types': 12.0.0 - deprecation: 2.3.1 - once: 1.4.0 - dev: false - - /@octokit/request@8.1.2: - resolution: {integrity: sha512-A0RJJfzjlZQwb+39eDm5UM23dkxbp28WEG4p2ueH+Q2yY4p349aRK/vcUlEuIB//ggcrHJceoYYkBP/LYCoXEg==} - engines: {node: '>= 18'} - dependencies: - '@octokit/endpoint': 9.0.1 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.0.0 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.0 - dev: false - - /@octokit/types@12.0.0: - resolution: {integrity: sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==} - dependencies: - '@octokit/openapi-types': 19.0.0 - dev: false - - /@pnpm/config.env-replace@1.1.0: - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - dev: false - - /@pnpm/network.ca-file@1.0.2: - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - dependencies: - graceful-fs: 4.2.10 - dev: false - - /@pnpm/npm-conf@2.2.2: - resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} - engines: {node: '>=12'} - dependencies: - '@pnpm/config.env-replace': 1.1.0 - '@pnpm/network.ca-file': 1.0.2 - config-chain: 1.1.13 - dev: false - - /@semantic-release/commit-analyzer@11.0.0(semantic-release@22.0.5): - resolution: {integrity: sha512-uEXyf4Z0AWJuxI9TbSQP5kkIYqus1/E1NcmE7pIv6d6/m/5EJcNWAGR4FOo34vrV26FhEaRVkxFfYzp/M7BKIg==} - engines: {node: ^18.17 || >=20.6.1} - peerDependencies: - semantic-release: '>=20.1.0' - dependencies: - conventional-changelog-angular: 7.0.0 - conventional-commits-filter: 4.0.0 - conventional-commits-parser: 5.0.0 - debug: 4.3.4 - import-from: 4.0.0 - lodash-es: 4.17.21 - micromatch: 4.0.5 - semantic-release: 22.0.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@semantic-release/error@3.0.0: - resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==} - engines: {node: '>=14.17'} - dev: false - - /@semantic-release/error@4.0.0: - resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} - engines: {node: '>=18'} - dev: false - - /@semantic-release/exec@6.0.3(semantic-release@22.0.5): - resolution: {integrity: sha512-bxAq8vLOw76aV89vxxICecEa8jfaWwYITw6X74zzlO0mc/Bgieqx9kBRz9z96pHectiTAtsCwsQcUyLYWnp3VQ==} - engines: {node: '>=14.17'} - peerDependencies: - semantic-release: '>=18.0.0' - dependencies: - '@semantic-release/error': 3.0.0 - aggregate-error: 3.1.0 - debug: 4.3.4 - execa: 5.1.1 - lodash: 4.17.21 - parse-json: 5.2.0 - semantic-release: 22.0.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@semantic-release/github@9.2.1(semantic-release@22.0.5): - resolution: {integrity: sha512-fEn9uOe6jwWR6ro2Wh6YNBCBuZ5lRi8Myz+1j3KDTSt8OuUGlpVM4lFac/0bDrql2NOKrIEAMGCfWb9WMIdzIg==} - engines: {node: '>=18'} - peerDependencies: - semantic-release: '>=20.1.0' - dependencies: - '@octokit/core': 5.0.1 - '@octokit/plugin-paginate-rest': 9.0.0(@octokit/core@5.0.1) - '@octokit/plugin-retry': 6.0.1(@octokit/core@5.0.1) - '@octokit/plugin-throttling': 8.0.0(@octokit/core@5.0.1) - '@semantic-release/error': 4.0.0 - aggregate-error: 5.0.0 - debug: 4.3.4 - dir-glob: 3.0.1 - globby: 13.2.2 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - issue-parser: 6.0.0 - lodash-es: 4.17.21 - mime: 3.0.0 - p-filter: 3.0.0 - semantic-release: 22.0.5 - url-join: 5.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@semantic-release/npm@11.0.0(semantic-release@22.0.5): - resolution: {integrity: sha512-ozNCiPUp14Xp2rgeY7j96yFTEhDncLSWOJr0IAUr888+ax6fH5xgYkNVv08vpkV8C5GIXBgnGd9coRiOCD6oqQ==} - engines: {node: ^18.17 || >=20} - peerDependencies: - semantic-release: '>=20.1.0' - dependencies: - '@semantic-release/error': 4.0.0 - aggregate-error: 5.0.0 - execa: 8.0.1 - fs-extra: 11.1.1 - lodash-es: 4.17.21 - nerf-dart: 1.0.0 - normalize-url: 8.0.0 - npm: 10.2.0 - rc: 1.2.8 - read-pkg: 8.1.0 - registry-auth-token: 5.0.2 - semantic-release: 22.0.5 - semver: 7.5.4 - tempy: 3.1.0 - dev: false - - /@semantic-release/release-notes-generator@12.0.0(semantic-release@22.0.5): - resolution: {integrity: sha512-m7Ds8ComP1KJgA2Lke2xMwE1TOOU40U7AzP4lT8hJ2tUAeicziPz/1GeDFmRkTOkMFlfHvE6kuvMkvU+mIzIDQ==} - engines: {node: ^18.17 || >=20.6.1} - peerDependencies: - semantic-release: '>=20.1.0' - dependencies: - conventional-changelog-angular: 7.0.0 - conventional-changelog-writer: 7.0.1 - conventional-commits-filter: 4.0.0 - conventional-commits-parser: 5.0.0 - debug: 4.3.4 - get-stream: 7.0.1 - import-from: 4.0.0 - into-stream: 7.0.0 - lodash-es: 4.17.21 - read-pkg-up: 10.1.0 - semantic-release: 22.0.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@sindresorhus/is@3.1.2: - resolution: {integrity: sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==} - engines: {node: '>=10'} - dev: false - - /@types/normalize-package-data@2.4.2: - resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} - dev: false - - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: false - - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: false - - /aggregate-error@4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} - engines: {node: '>=12'} - dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 - dev: false - - /aggregate-error@5.0.0: - resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} - engines: {node: '>=18'} - dependencies: - clean-stack: 5.2.0 - indent-string: 5.0.0 - dev: false - - /ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} - engines: {node: '>=14.16'} - dependencies: - type-fest: 3.13.1 - dev: false - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: false - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: false - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - - /ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - dev: false - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: false - - /argv-formatter@1.0.0: - resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} - dev: false - - /array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - dev: false - - /before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - dev: false - - /bottleneck@2.19.5: - resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - dev: false - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: false - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: false - - /cardinal@2.1.1: - resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true - dependencies: - ansicolors: 0.3.2 - redeyed: 2.1.1 - dev: false - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: false - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false - - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: false - - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: false - - /clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} - dependencies: - escape-string-regexp: 5.0.0 - dev: false - - /clean-stack@5.2.0: - resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} - engines: {node: '>=14.16'} - dependencies: - escape-string-regexp: 5.0.0 - dev: false - - /cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} - engines: {node: 10.* || >= 12.*} - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - dev: false - - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: false - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: false - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: false - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - - /compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - dev: false - - /config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - dev: false - - /conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} - dependencies: - compare-func: 2.0.0 - dev: false - - /conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} - dependencies: - compare-func: 2.0.0 - dev: false - - /conventional-changelog-writer@7.0.1: - resolution: {integrity: sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==} - engines: {node: '>=16'} - hasBin: true - dependencies: - conventional-commits-filter: 4.0.0 - handlebars: 4.7.8 - json-stringify-safe: 5.0.1 - meow: 12.1.1 - semver: 7.5.4 - split2: 4.2.0 - dev: false - - /conventional-commits-filter@4.0.0: - resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==} - engines: {node: '>=16'} - dev: false - - /conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true - dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 - dev: false - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false - - /cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - dev: false - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: false - - /crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - dependencies: - type-fest: 1.4.0 - dev: false - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: false - - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: false - - /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dev: false - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: false - - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - dev: false - - /duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - dependencies: - readable-stream: 2.3.8 - dev: false - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false - - /emojilib@2.4.0: - resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} - dev: false - - /env-ci@10.0.0: - resolution: {integrity: sha512-U4xcd/utDYFgMh0yWj07R1H6L5fwhVbmxBCpnL0DbVSDZVnsC82HONw0wxtxNkIAcua3KtbomQvIk5xFZGAQJw==} - engines: {node: ^18.17 || >=20.6.1} - dependencies: - execa: 8.0.1 - java-properties: 1.0.2 - dev: false - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: false - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: false - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: false - - /escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - dev: false - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: false - - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: false - - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: false - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: false - - /figures@2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: false - - /figures@5.0.0: - resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} - engines: {node: '>=14'} - dependencies: - escape-string-regexp: 5.0.0 - is-unicode-supported: 1.3.0 - dev: false - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: false - - /find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - dependencies: - locate-path: 2.0.0 - dev: false - - /find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - dev: false - - /find-versions@5.1.0: - resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} - engines: {node: '>=12'} - dependencies: - semver-regex: 4.0.5 - dev: false - - /from2@2.3.0: - resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.8 - dev: false - - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: false - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: false - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: false - - /get-stream@7.0.1: - resolution: {integrity: sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==} - engines: {node: '>=16'} - dev: false - - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: false - - /git-log-parser@1.2.0: - resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} - dependencies: - argv-formatter: 1.0.0 - spawn-error-forwarder: 1.0.0 - split2: 1.0.0 - stream-combiner2: 1.1.1 - through2: 2.0.5 - traverse: 0.6.7 - dev: false - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: false - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 - dev: false - - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: false - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: false - - /handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.17.4 - dev: false - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: false - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: false - - /has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - dev: false - - /hook-std@3.0.0: - resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - - /hosted-git-info@7.0.1: - resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - lru-cache: 10.0.1 - dev: false - - /http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: false - - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: false - - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: false - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: false - - /import-from@4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} - dev: false - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: false - - /indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - dev: false - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: false - - /into-stream@7.0.0: - resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} - engines: {node: '>=12'} - dependencies: - from2: 2.3.0 - p-is-promise: 3.0.0 - dev: false - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false - - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.4 - dev: false - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: false - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: false - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: false - - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: false - - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: false - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: false - - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - - /is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} - dependencies: - text-extensions: 2.4.0 - dev: false - - /is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - dev: false - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: false - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: false - - /issue-parser@6.0.0: - resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} - engines: {node: '>=10.13'} - dependencies: - lodash.capitalize: 4.2.1 - lodash.escaperegexp: 4.1.2 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.uniqby: 4.7.0 - dev: false - - /java-properties@1.0.2: - resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} - engines: {node: '>= 0.6.0'} - dev: false - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: false - - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: false - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: false - - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: false - - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: false - - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.11 - dev: false - - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: false - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false - - /lines-and-columns@2.0.3: - resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - - /load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - dev: false - - /locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - dev: false - - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-locate: 6.0.0 - dev: false - - /lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - dev: false - - /lodash.capitalize@4.2.1: - resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} - dev: false - - /lodash.escaperegexp@4.1.2: - resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} - dev: false - - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: false - - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: false - - /lodash.uniqby@4.7.0: - resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - dev: false - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - - /lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} - engines: {node: 14 || >=16.14} - dev: false - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: false - - /marked-terminal@6.0.0(marked@9.0.3): - resolution: {integrity: sha512-6rruICvqRfA4N+Mvdc0UyDbLA0A0nI5omtARIlin3P2F+aNc3EbW91Rd9HTuD0v9qWyHmNIu8Bt40gAnPfldsg==} - engines: {node: '>=16.0.0'} - peerDependencies: - marked: '>=1 <10' - dependencies: - ansi-escapes: 6.2.0 - cardinal: 2.1.1 - chalk: 5.3.0 - cli-table3: 0.6.3 - marked: 9.0.3 - node-emoji: 2.1.0 - supports-hyperlinks: 3.0.0 - dev: false - - /marked@9.0.3: - resolution: {integrity: sha512-pI/k4nzBG1PEq1J3XFEHxVvjicfjl8rgaMaqclouGSMPhk7Q3Ejb2ZRxx/ZQOcQ1909HzVoWCFYq6oLgtL4BpQ==} - engines: {node: '>= 16'} - hasBin: true - dev: false - - /meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - dev: false - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: false - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: false - - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: false - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: false - - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: false - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: false - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false - - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false - - /nerf-dart@1.0.0: - resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} - dev: false - - /node-emoji@2.1.0: - resolution: {integrity: sha512-tcsBm9C6FmPN5Wo7OjFi9lgMyJjvkAeirmjR/ax8Ttfqy4N8PoFic26uqFTIgayHPNI5FH4ltUvfh9kHzwcK9A==} - dependencies: - '@sindresorhus/is': 3.1.2 - char-regex: 1.0.2 - emojilib: 2.4.0 - skin-tone: 2.0.0 - dev: false - - /normalize-package-data@6.0.0: - resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - hosted-git-info: 7.0.1 - is-core-module: 2.13.0 - semver: 7.5.4 - validate-npm-package-license: 3.0.4 - dev: false - - /normalize-url@8.0.0: - resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} - engines: {node: '>=14.16'} - dev: false - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: false - - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: false - - /npm@10.2.0: - resolution: {integrity: sha512-Auyq6d4cfg/SY4URjZE2aePLOPzK4lUD+qyMxY/7HbxAvCnOCKtMlyLPcbLSOq9lhEGBZN800S1o+UmfjA5dTg==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - dev: false - bundledDependencies: - - '@isaacs/string-locale-compare' - - '@npmcli/arborist' - - '@npmcli/config' - - '@npmcli/fs' - - '@npmcli/map-workspaces' - - '@npmcli/package-json' - - '@npmcli/promise-spawn' - - '@npmcli/run-script' - - '@sigstore/tuf' - - abbrev - - archy - - cacache - - chalk - - ci-info - - cli-columns - - cli-table3 - - columnify - - fastest-levenshtein - - fs-minipass - - glob - - graceful-fs - - hosted-git-info - - ini - - init-package-json - - is-cidr - - json-parse-even-better-errors - - libnpmaccess - - libnpmdiff - - libnpmexec - - libnpmfund - - libnpmhook - - libnpmorg - - libnpmpack - - libnpmpublish - - libnpmsearch - - libnpmteam - - libnpmversion - - make-fetch-happen - - minimatch - - minipass - - minipass-pipeline - - ms - - node-gyp - - nopt - - normalize-package-data - - npm-audit-report - - npm-install-checks - - npm-package-arg - - npm-pick-manifest - - npm-profile - - npm-registry-fetch - - npm-user-validate - - npmlog - - p-map - - pacote - - parse-conflict-json - - proc-log - - qrcode-terminal - - read - - semver - - spdx-expression-parse - - ssri - - strip-ansi - - supports-color - - tar - - text-table - - tiny-relative-date - - treeverse - - validate-npm-package-name - - which - - write-file-atomic - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: false - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: false - - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - dependencies: - mimic-fn: 4.0.0 - dev: false - - /p-each-series@3.0.0: - resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} - engines: {node: '>=12'} - dev: false - - /p-filter@3.0.0: - resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-map: 5.5.0 - dev: false - - /p-is-promise@3.0.0: - resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} - engines: {node: '>=8'} - dev: false - - /p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - dependencies: - p-try: 1.0.0 - dev: false - - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: false - - /p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - dependencies: - p-limit: 1.3.0 - dev: false - - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-limit: 4.0.0 - dev: false - - /p-map@5.5.0: - resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} - engines: {node: '>=12'} - dependencies: - aggregate-error: 4.0.1 - dev: false - - /p-reduce@3.0.0: - resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} - engines: {node: '>=12'} - dev: false - - /p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - dev: false - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: false - - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - dev: false - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.22.13 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: false - - /parse-json@7.1.0: - resolution: {integrity: sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==} - engines: {node: '>=16'} - dependencies: - '@babel/code-frame': 7.22.13 - error-ex: 1.3.2 - json-parse-even-better-errors: 3.0.0 - lines-and-columns: 2.0.3 - type-fest: 3.13.1 - dev: false - - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: false - - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: false - - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: false - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: false - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: false - - /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - dev: false - - /pkg-conf@2.1.0: - resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} - engines: {node: '>=4'} - dependencies: - find-up: 2.1.0 - load-json-file: 4.0.0 - dev: false - - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false - - /proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - dev: false - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: false - - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - dev: false - - /read-pkg-up@10.1.0: - resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} - engines: {node: '>=16'} - dependencies: - find-up: 6.3.0 - read-pkg: 8.1.0 - type-fest: 4.3.3 - dev: false - - /read-pkg@8.1.0: - resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} - engines: {node: '>=16'} - dependencies: - '@types/normalize-package-data': 2.4.2 - normalize-package-data: 6.0.0 - parse-json: 7.1.0 - type-fest: 4.3.3 - dev: false - - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - - /redeyed@2.1.1: - resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} - dependencies: - esprima: 4.0.1 - dev: false - - /registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} - engines: {node: '>=14'} - dependencies: - '@pnpm/npm-conf': 2.2.2 - dev: false - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: false - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: false - - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: false - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: false - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: false - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false - - /semantic-release@22.0.5: - resolution: {integrity: sha512-ESCEQsZlBj1DWMA84RthaJzQHHnihoGk49s9nUxHfRNUNZelLE9JZrE94bHO2Y00EWb7iwrzr1OYhv5QNVmf8A==} - engines: {node: ^18.17 || >=20.6.1} - hasBin: true - dependencies: - '@semantic-release/commit-analyzer': 11.0.0(semantic-release@22.0.5) - '@semantic-release/error': 4.0.0 - '@semantic-release/github': 9.2.1(semantic-release@22.0.5) - '@semantic-release/npm': 11.0.0(semantic-release@22.0.5) - '@semantic-release/release-notes-generator': 12.0.0(semantic-release@22.0.5) - aggregate-error: 5.0.0 - cosmiconfig: 8.3.6 - debug: 4.3.4 - env-ci: 10.0.0 - execa: 8.0.1 - figures: 5.0.0 - find-versions: 5.1.0 - get-stream: 6.0.1 - git-log-parser: 1.2.0 - hook-std: 3.0.0 - hosted-git-info: 7.0.1 - lodash-es: 4.17.21 - marked: 9.0.3 - marked-terminal: 6.0.0(marked@9.0.3) - micromatch: 4.0.5 - p-each-series: 3.0.0 - p-reduce: 3.0.0 - read-pkg-up: 10.1.0 - resolve-from: 5.0.0 - semver: 7.5.4 - semver-diff: 4.0.0 - signale: 1.4.0 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} - dependencies: - semver: 7.5.4 - dev: false - - /semver-regex@4.0.5: - resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} - engines: {node: '>=12'} - dev: false - - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: false - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: false - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: false - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false - - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: false - - /signale@1.4.0: - resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} - engines: {node: '>=6'} - dependencies: - chalk: 2.4.2 - figures: 2.0.0 - pkg-conf: 2.1.0 - dev: false - - /skin-tone@2.0.0: - resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} - engines: {node: '>=8'} - dependencies: - unicode-emoji-modifier-base: 1.0.0 - dev: false - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: false - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: false - - /spawn-error-forwarder@1.0.0: - resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} - dev: false - - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.15 - dev: false - - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: false - - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.15 - dev: false - - /spdx-license-ids@3.0.15: - resolution: {integrity: sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==} - dev: false - - /split2@1.0.0: - resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} - dependencies: - through2: 2.0.5 - dev: false - - /split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - dev: false - - /stream-combiner2@1.1.1: - resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} - dependencies: - duplexer2: 0.1.4 - readable-stream: 2.3.8 - dev: false - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: false - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: false - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: false - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: false - - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: false - - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: false - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: false - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: false - - /supports-hyperlinks@3.0.0: - resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} - engines: {node: '>=14.18'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: false - - /temp-dir@3.0.0: - resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} - engines: {node: '>=14.16'} - dev: false - - /tempy@3.1.0: - resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} - engines: {node: '>=14.16'} - dependencies: - is-stream: 3.0.0 - temp-dir: 3.0.0 - type-fest: 2.19.0 - unique-string: 3.0.0 - dev: false - - /text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - dev: false - - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 - dev: false - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: false - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: false - - /traverse@0.6.7: - resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} - dev: false - - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: false - - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: false - - /type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - dev: false - - /type-fest@4.3.3: - resolution: {integrity: sha512-bxhiFii6BBv6UiSDq7uKTMyADT9unXEl3ydGefndVLxFeB44LRbT4K7OJGDYSyDrKnklCC1Pre68qT2wbUl2Aw==} - engines: {node: '>=16'} - dev: false - - /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: false - optional: true - - /unicode-emoji-modifier-base@1.0.0: - resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} - engines: {node: '>=4'} - dev: false - - /unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - dependencies: - crypto-random-string: 4.0.0 - dev: false - - /universal-user-agent@6.0.0: - resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} - dev: false - - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - dev: false - - /url-join@5.0.0: - resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false - - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: false - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false - - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: false - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: false - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: false - - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: false - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: false - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false - - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: false - - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: false - - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: false diff --git a/rules/rules_task/task/BUILD.bazel b/rules/rules_task/task/BUILD.bazel new file mode 100644 index 000000000..6a915928c --- /dev/null +++ b/rules/rules_task/task/BUILD.bazel @@ -0,0 +1,6 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**/*"]), +) diff --git a/rules/rules_task/task/defs.bzl b/rules/rules_task/task/defs.bzl new file mode 100644 index 000000000..6fa811238 --- /dev/null +++ b/rules/rules_task/task/defs.bzl @@ -0,0 +1,12 @@ +""" +Public API for defining tasks. +""" + +load("//task/private:cmd.bzl", _cmd = "cmd") +load("//task/private:task.bzl", _task = "task", _task_test = "task_test") +load("//task/private:py_binary_cmd.bzl", _py_binary_cmd = "py_binary_cmd") + +cmd = _cmd +task = _task +task_test = _task_test +py_binary_cmd = _py_binary_cmd diff --git a/rules/rules_task/task/private/BUILD.bazel b/rules/rules_task/task/private/BUILD.bazel new file mode 100644 index 000000000..6a915928c --- /dev/null +++ b/rules/rules_task/task/private/BUILD.bazel @@ -0,0 +1,6 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**/*"]), +) diff --git a/rules/rules_task/task/private/cmd.bzl b/rules/rules_task/task/private/cmd.bzl new file mode 100644 index 000000000..190b65347 --- /dev/null +++ b/rules/rules_task/task/private/cmd.bzl @@ -0,0 +1,122 @@ +load(":utils.bzl", "fq_label") + +def _wrap_root_args(args): + result = [] + + for arg in args: + # Turn all reguluar string nodes into a cmd.shell nodes + if type(arg) == "string": + arg = cmd.shell(arg) + + if type(arg) != "dict": + fail("Argument passed to root should either be string or dict, got value '{}' of type {}".format(arg, type(arg))) + + if "defer" in arg: + arg = cmd.defer(arg["defer"]) + + result.append(arg) + + return result + +def _wrap_env(env): + for key, value in env.items(): + if type(value) == "string": + env[key] = cmd.string(value) + return env + +def _wrap_shell_args(args): + result = [] + + for arg in args: + # Turn all reguluar string nodes into a cmd.string nodes + if type(arg) == "string": + arg = cmd.string(arg) + + if type(arg) != "dict": + fail("Argument passed to shell should either be string or dict, got value '{}' of type {}".format(arg, type(arg))) + + result.append(arg) + + return result + +def _wrap_python_args(args): + result = [] + + for arg in args: + # Turn all reguluar string nodes into a cmd.string nodes + if type(arg) == "string": + arg = cmd.string(arg) + + if type(arg) != "dict": + fail("Argument passed to python_entry_point should either be string or dict, got value '{}' of type {}".format(arg, type(arg))) + + result.append(arg) + + return result + +def _wrap_defer(node): + if type(node) == "string": + node = cmd.string(node) + + return node + +def _python_entry_point(entry_point, args): + # Translate + # tap_gitlab:Tap.cli + # into + # from tap_gitlab import Tap + # Tap.cli() + python_import, python_method = entry_point.split(":") + python_class = python_method.split(".")[0] + python_import = "from {} import {}".format(python_import, python_class) + python_method = "{}()".format(python_method) + + python_code = """ + import sys + {python_import} + sys.exit({python_method}) + """.format(python_import = python_import, python_method = python_method) + + return cmd.python(python_code, *args) + +cmd = struct( + root = lambda args: { + "type": "root", + "args": _wrap_root_args(args), + }, + env = lambda env: { + "type": "env", + "env": _wrap_env(env), + }, + defer = lambda node: { + "type": "defer", + "node": _wrap_defer(node), + }, + shell = lambda *args: { + "type": "shell", + "args": _wrap_shell_args(args), + }, + file = lambda label: { + "type": "file", + "label": fq_label(label), + }, + files = lambda label: { + "type": "files", + "label": fq_label(label), + }, + executable = lambda label: { + "type": "executable", + "label": fq_label(label), + }, + string = lambda string: { + "type": "string", + "value": string, + }, + python = lambda code, *args: { + "type": "python", + "code": code, + "args": _wrap_python_args(args), + "label": None, + }, + python_entry_point = lambda entry_point, *args: _python_entry_point(entry_point, args), +) diff --git a/rules/rules_task/task/private/py_binary_cmd.bzl b/rules/rules_task/task/private/py_binary_cmd.bzl new file mode 100644 index 000000000..e1b744b3d --- /dev/null +++ b/rules/rules_task/task/private/py_binary_cmd.bzl @@ -0,0 +1,23 @@ +load("@bazel_skylib//rules:expand_template.bzl", "expand_template") +load("@rules_python//python:defs.bzl", "py_binary") +load("@pip//:requirements.bzl", "requirement") + +def py_binary_cmd(name, code): + main_name = "{}_main".format(name) + main_name_file = "{}.py".format(main_name) + + expand_template( + name = main_name, + template = Label("py_binary_cmd_main.tpl.py"), + out = main_name_file, + substitutions = { + "{{python_code}}": code, + }, + ) + + py_binary( + name = name, + srcs = [main_name_file], + main = main_name_file, + deps = [requirement("deepdiff")], + ) diff --git a/rules/rules_task/py_binary_cmd_main.tpl.py b/rules/rules_task/task/private/py_binary_cmd_main.tpl.py similarity index 100% rename from rules/rules_task/py_binary_cmd_main.tpl.py rename to rules/rules_task/task/private/py_binary_cmd_main.tpl.py diff --git a/rules/rules_task/runner.py b/rules/rules_task/task/private/runner.py similarity index 100% rename from rules/rules_task/runner.py rename to rules/rules_task/task/private/runner.py diff --git a/rules/rules_task/defs.bzl b/rules/rules_task/task/private/task.bzl similarity index 72% rename from rules/rules_task/defs.bzl rename to rules/rules_task/task/private/task.bzl index 99faf412e..9cda031db 100644 --- a/rules/rules_task/defs.bzl +++ b/rules/rules_task/task/private/task.bzl @@ -1,15 +1,13 @@ -""" -Public API for defining tasks. -""" - -load("@bazel_skylib//lib:new_sets.bzl", "sets") load("@bazel_skylib//lib:shell.bzl", "shell") -load("@bazel_skylib//rules:expand_template.bzl", "expand_template") +load("@bazel_skylib//lib:new_sets.bzl", "sets") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") load("@aspect_bazel_lib//lib:paths.bzl", "to_rlocation_path") +load("@aspect_bazel_lib//lib:base64.bzl", "base64") load("@pip//:requirements.bzl", "requirement") load("@rules_python//python:defs.bzl", "py_binary") -load("@aspect_bazel_lib//lib:base64.bzl", "base64") -load("@bazel_skylib//rules:native_binary.bzl", "native_test") +load(":py_binary_cmd.bzl", "py_binary_cmd") +load(":cmd.bzl", "cmd") +load(":utils.bzl", "fq_label") def _visit(context, node): return _visit_method(context, node)(context, node) @@ -113,25 +111,6 @@ def _executable_label_to_jinja_path(ctx, label): rlocation = to_rlocation_path(ctx, executable) return _jinja_rlocation(rlocation) -def _python_entry_point(entry_point, args): - # Translate - # tap_gitlab:Tap.cli - # into - # from tap_gitlab import Tap - # Tap.cli() - python_import, python_method = entry_point.split(":") - python_class = python_method.split(".")[0] - python_import = "from {} import {}".format(python_import, python_class) - python_method = "{}()".format(python_method) - - python_code = """ - import sys - {python_import} - sys.exit({python_method}) - """.format(python_import = python_import, python_method = python_method) - - return cmd.python(python_code, *args) - def _serialize_python(context, node): args = " ".join(_visit_python(context, node)) label = _executable_label_to_jinja_path(context.ctx, node["label"]) @@ -162,9 +141,6 @@ def _serialize_defer(context, node): return code -def _fq_label(string): - return str(native.package_relative_label(string)) - def _flatten(list): result = [] @@ -186,7 +162,7 @@ def _generate_py_binary_cmd(context, node): code = node["code"], ) context.state["target_index"] += 1 - node["label"] = _fq_label(target_name) + node["label"] = fq_label(target_name) _serializer = { "visit_root": lambda context, node: _visit_root(context, node), @@ -260,7 +236,7 @@ def _task_impl(ctx): script = """ import json import base64 -from runner import main +from task.private.runner import main INSTRUCTIONS = \"\"\" {instructions} @@ -337,7 +313,7 @@ def _task_rule_prep(name, kwargs, testonly = False): py_binary( name = name, main = script_name, - srcs = [script_name, "@rules_task//:runner.py"], + srcs = [script_name, Label("//task/private:runner.py")], testonly = testonly, deps = [ requirement("bazel-runfiles"), @@ -368,125 +344,3 @@ def task_test(size = None, timeout = None, flaky = False, shard_count = None, lo local = local, **kwargs ) - -def _wrap_root_args(args): - result = [] - - for arg in args: - # Turn all reguluar string nodes into a cmd.shell nodes - if type(arg) == "string": - arg = cmd.shell(arg) - - if type(arg) != "dict": - fail("Argument passed to root should either be string or dict, got value '{}' of type {}".format(arg, type(arg))) - - if "defer" in arg: - arg = cmd.defer(arg["defer"]) - - result.append(arg) - - return result - -def _wrap_env(env): - for key, value in env.items(): - if type(value) == "string": - env[key] = cmd.string(value) - return env - -def _wrap_shell_args(args): - result = [] - - for arg in args: - # Turn all reguluar string nodes into a cmd.string nodes - if type(arg) == "string": - arg = cmd.string(arg) - - if type(arg) != "dict": - fail("Argument passed to shell should either be string or dict, got value '{}' of type {}".format(arg, type(arg))) - - result.append(arg) - - return result - -def _wrap_python_args(args): - result = [] - - for arg in args: - # Turn all reguluar string nodes into a cmd.string nodes - if type(arg) == "string": - arg = cmd.string(arg) - - if type(arg) != "dict": - fail("Argument passed to python_entry_point should either be string or dict, got value '{}' of type {}".format(arg, type(arg))) - - result.append(arg) - - return result - -def _wrap_defer(node): - if type(node) == "string": - node = cmd.string(node) - - return node - -cmd = struct( - root = lambda args: { - "type": "root", - "args": _wrap_root_args(args), - }, - env = lambda env: { - "type": "env", - "env": _wrap_env(env), - }, - defer = lambda node: { - "type": "defer", - "node": _wrap_defer(node), - }, - shell = lambda *args: { - "type": "shell", - "args": _wrap_shell_args(args), - }, - file = lambda label: { - "type": "file", - "label": _fq_label(label), - }, - files = lambda label: { - "type": "files", - "label": _fq_label(label), - }, - executable = lambda label: { - "type": "executable", - "label": _fq_label(label), - }, - string = lambda string: { - "type": "string", - "value": string, - }, - python = lambda code, *args: { - "type": "python", - "code": code, - "args": _wrap_python_args(args), - "label": None, - }, - python_entry_point = lambda entry_point, *args: _python_entry_point(entry_point, args), -) - -def py_binary_cmd(name, code): - main_name = "{}_main".format(name) - main_name_file = "{}.py".format(main_name) - - expand_template( - name = main_name, - template = "@rules_task//:py_binary_cmd_main.tpl.py", - out = main_name_file, - substitutions = { - "{{python_code}}": code, - }, - ) - - py_binary( - name = name, - srcs = [main_name_file], - main = main_name_file, - deps = [requirement("deepdiff")], - ) diff --git a/rules/rules_task/task/private/utils.bzl b/rules/rules_task/task/private/utils.bzl new file mode 100644 index 000000000..76394db2a --- /dev/null +++ b/rules/rules_task/task/private/utils.bzl @@ -0,0 +1,2 @@ +def fq_label(string): + return str(native.package_relative_label(string)) diff --git a/rules/rules_task/tests/BUILD.bazel b/rules/rules_task/tests/BUILD.bazel index 8aa15b3da..23b211edc 100644 --- a/rules/rules_task/tests/BUILD.bazel +++ b/rules/rules_task/tests/BUILD.bazel @@ -1,7 +1,14 @@ -load("@rules_task//:defs.bzl", "cmd", "task", "task_test") +load("@rules_task//task:defs.bzl", "cmd", "task", "task_test") load("@pip//:requirements.bzl", "requirement") load("@rules_python//python:defs.bzl", "py_binary") +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**/*"]), +) + py_binary( name = "test_py_binary", srcs = ["test_py_binary.py"], diff --git a/rules/rules_task/tools/BUILD.bazel b/rules/rules_task/tools/BUILD.bazel index ffd0fb0cd..6a915928c 100644 --- a/rules/rules_task/tools/BUILD.bazel +++ b/rules/rules_task/tools/BUILD.bazel @@ -1 +1,6 @@ package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_files", + srcs = glob(["**/*"]), +) diff --git a/rules/rules_task/tools/defs.bzl b/rules/rules_task/tools/defs.bzl index 672c3e464..d7fe515ad 100644 --- a/rules/rules_task/tools/defs.bzl +++ b/rules/rules_task/tools/defs.bzl @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") load("@pip//:requirements.bzl", "requirement") load("@bazel_skylib//rules:diff_test.bzl", "diff_test") diff --git a/rules/rules_task/version.txt b/rules/rules_task/version.txt new file mode 100644 index 000000000..a6a3a43c3 --- /dev/null +++ b/rules/rules_task/version.txt @@ -0,0 +1 @@ +1.0.4 \ No newline at end of file diff --git a/tools/black/BUILD.bazel b/tools/black/BUILD.bazel index 1008bb627..6e224e6b3 100644 --- a/tools/black/BUILD.bazel +++ b/tools/black/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") load("@pdm-setup//:requirements.bzl", "requirement") package(default_visibility = ["//visibility:public"]) diff --git a/tools/bunq2ynab/BUILD.bazel b/tools/bunq2ynab/BUILD.bazel index 50ab1b46c..bf9789024 100644 --- a/tools/bunq2ynab/BUILD.bazel +++ b/tools/bunq2ynab/BUILD.bazel @@ -1,8 +1,8 @@ load("@rules_python//python:defs.bzl", "py_binary") -load("@rules_task//:defs.bzl", "cmd", "task", "task_test") +load("@rules_task//task:defs.bzl", "cmd", "task", "task_test") load("//tools/python:defs.bzl", "py_image") load("@pdm-setup//:requirements.bzl", "requirement") -load("@rules_release//release:defs.bzl", "release") +load("@rules_release//release:defs.bzl", "publish_github_release", "release") load("@rules_oci//oci:defs.bzl", "oci_push") package(default_visibility = ["//visibility:public"]) @@ -146,36 +146,31 @@ task_test( }, ) +publish_github_release( + name = "publish_github_release", + before_cmds = [ + "export OP_SERVICE_ACCOUNT_TOKEN=${ONEPASSWORD_SERVICE_ACCOUNT_TOKEN_PROD:-}", + "export GH_TOKEN=$($OP read op://vgijssel-prod/github-release/credential)", + ], + env = { + "OP": cmd.executable("//tools/onepassword:op"), + }, + release = ":release", +) + release( - name = "bunq2ynab_release", + name = "release", changelog_file = "CHANGELOG.md", publish_cmds = [ ":bunq2ynab_image_push", - ":bunq2ynab_github_release", + ":publish_github_release", ], + release_name = "bunq2ynab", target = ":bunq2ynab_image", version_file = "version.txt", -) - -task( - name = "bunq2ynab_github_release", - cmds = [ - "export OP_SERVICE_ACCOUNT_TOKEN=${ONEPASSWORD_SERVICE_ACCOUNT_TOKEN_PROD:-}", - "export DIGEST=$(cat $DIGEST_FILE)", - "export VERSION=$(cat $VERSION_FILE)", - "export RELEASE_TAG=bunq2ynab-v$VERSION", - "export GH_TOKEN=$($OP read op://vgijssel-prod/github-release/credential)", - "export RELEASE_EXISTS=$($GH release view $RELEASE_TAG > /dev/null 2>&1 && echo true || echo false)", - "if [ $RELEASE_EXISTS = true ]; then echo 'Release already exists, exitting.'; exit 0; fi", - "$GH release create $RELEASE_TAG --notes-file $CHANGELOG_FILE --title $RELEASE_TAG", + deps = [ + "@rules_task//:release", ], - env = { - "DIGEST_FILE": cmd.file(":bunq2ynab_image.digest"), - "VERSION_FILE": cmd.file("version.txt"), - "CHANGELOG_FILE": cmd.file(":bunq2ynab_release.version_changelog"), - "OP": cmd.executable("//tools/onepassword:op"), - "GH": cmd.executable("//tools/github_cli"), - }, ) oci_push( diff --git a/tools/docker/docker.bzl b/tools/docker/docker.bzl index daa966e6b..63a9d404b 100644 --- a/tools/docker/docker.bzl +++ b/tools/docker/docker.bzl @@ -2,7 +2,7 @@ For quickly loading and running docker images built by Bazel. """ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") def docker_load(name, image, **kwargs): """ diff --git a/tools/mutagen/BUILD.bazel b/tools/mutagen/BUILD.bazel index 3fdc9134b..e094eb995 100644 --- a/tools/mutagen/BUILD.bazel +++ b/tools/mutagen/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") package(default_visibility = ["//visibility:public"]) diff --git a/tools/onepassword/BUILD.bazel b/tools/onepassword/BUILD.bazel index 06a10cd97..f77197e40 100644 --- a/tools/onepassword/BUILD.bazel +++ b/tools/onepassword/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") package(default_visibility = ["//visibility:public"]) diff --git a/tools/onepassword/defs.bzl b/tools/onepassword/defs.bzl index 2d2a15da2..cc2d04e5d 100644 --- a/tools/onepassword/defs.bzl +++ b/tools/onepassword/defs.bzl @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd") +load("@rules_task//task:defs.bzl", "cmd") def secrets(data): json_data = json.encode(data) diff --git a/tools/pyinfra/defs.bzl b/tools/pyinfra/defs.bzl index 6a608dd29..3292d59b8 100644 --- a/tools/pyinfra/defs.bzl +++ b/tools/pyinfra/defs.bzl @@ -2,7 +2,7 @@ Bazel macro to make it easy to run Pyinfra. """ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") load("@rules_python//python:defs.bzl", "py_binary") load("@pdm-setup//:requirements.bzl", "requirement") diff --git a/tools/python/defs.bzl b/tools/python/defs.bzl index 2e1e039af..f6f2dd617 100644 --- a/tools/python/defs.bzl +++ b/tools/python/defs.bzl @@ -1,7 +1,7 @@ load("@aspect_bazel_lib//lib:tar.bzl", "mtree_spec", "tar") load("@rules_oci//oci:defs.bzl", "oci_image", "oci_tarball") load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") load("@local_config_platform//:constraints.bzl", "HOST_CONSTRAINTS") # This sets up a platform for the Python toolchain to run in a container. diff --git a/tools/regctl/BUILD.bazel b/tools/regctl/BUILD.bazel index c368680f6..db49f0743 100644 --- a/tools/regctl/BUILD.bazel +++ b/tools/regctl/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") package(default_visibility = ["//visibility:public"]) diff --git a/tools/teleport/BUILD.bazel b/tools/teleport/BUILD.bazel index 523628da2..e235e89a7 100644 --- a/tools/teleport/BUILD.bazel +++ b/tools/teleport/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") package(default_visibility = ["//visibility:public"]) diff --git a/tools/tilt/BUILD.bazel b/tools/tilt/BUILD.bazel index 84832f706..18ba32c21 100755 --- a/tools/tilt/BUILD.bazel +++ b/tools/tilt/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") package(default_visibility = ["//visibility:public"]) diff --git a/workstation/BUILD.bazel b/workstation/BUILD.bazel index 19adf95dd..54702c8ce 100644 --- a/workstation/BUILD.bazel +++ b/workstation/BUILD.bazel @@ -4,7 +4,7 @@ load("@io_bazel_rules_docker//docker/package_managers:download_pkgs.bzl", "downl load("@io_bazel_rules_docker//container:container.bzl", "container_image") load("@io_bazel_rules_docker//docker/util:run.bzl", "container_run_and_commit_layer") load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("@rules_task//:defs.bzl", "cmd", "task") +load("@rules_task//task:defs.bzl", "cmd", "task") pyinfra_run( name = "provision",