renovate 41.0.0-next.21 → 41.0.0-next.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/decrypt.js +5 -3
- package/dist/config/decrypt.js.map +1 -1
- package/dist/config/options/index.js +45 -3
- package/dist/config/options/index.js.map +1 -1
- package/dist/config/presets/github/index.js +2 -2
- package/dist/config/presets/github/index.js.map +1 -1
- package/dist/config/presets/internal/group.js +21 -0
- package/dist/config/presets/internal/group.js.map +1 -1
- package/dist/config/presets/internal/workarounds.js +11 -0
- package/dist/config/presets/internal/workarounds.js.map +1 -1
- package/dist/config/secrets.d.ts +2 -0
- package/dist/config/secrets.js +10 -77
- package/dist/config/secrets.js.map +1 -1
- package/dist/config/types.d.ts +9 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config-validator.js +4 -2
- package/dist/config-validator.js.map +1 -1
- package/dist/data/monorepo.json +10 -1
- package/dist/data-files.generated.d.ts +1 -1
- package/dist/data-files.generated.js +2 -1
- package/dist/data-files.generated.js.map +1 -1
- package/dist/instrumentation/index.js +5 -3
- package/dist/instrumentation/index.js.map +1 -1
- package/dist/instrumentation/reporting.d.ts +2 -2
- package/dist/instrumentation/reporting.js +3 -7
- package/dist/instrumentation/reporting.js.map +1 -1
- package/dist/instrumentation/types.d.ts +11 -5
- package/dist/instrumentation/types.js.map +1 -1
- package/dist/instrumentation/utils.js +3 -2
- package/dist/instrumentation/utils.js.map +1 -1
- package/dist/logger/once.js +2 -0
- package/dist/logger/once.js.map +1 -1
- package/dist/modules/datasource/aws-eks-addon/schema.d.ts +14 -38
- package/dist/modules/datasource/aws-eks-addon/schema.js +11 -22
- package/dist/modules/datasource/aws-eks-addon/schema.js.map +1 -1
- package/dist/modules/datasource/cdnjs/index.js +2 -1
- package/dist/modules/datasource/cdnjs/index.js.map +1 -1
- package/dist/modules/datasource/crate/index.js +7 -2
- package/dist/modules/datasource/crate/index.js.map +1 -1
- package/dist/modules/datasource/docker/ecr.js +2 -2
- package/dist/modules/datasource/docker/ecr.js.map +1 -1
- package/dist/modules/datasource/docker/index.js +26 -9
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/docker/schema.d.ts +9 -87
- package/dist/modules/datasource/docker/schema.js +1 -1
- package/dist/modules/datasource/docker/schema.js.map +1 -1
- package/dist/modules/datasource/git-refs/base.js +2 -6
- package/dist/modules/datasource/git-refs/base.js.map +1 -1
- package/dist/modules/datasource/go/goproxy-parser.js +6 -2
- package/dist/modules/datasource/go/goproxy-parser.js.map +1 -1
- package/dist/modules/datasource/go/index.js +4 -2
- package/dist/modules/datasource/go/index.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +3 -2
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/index.js +1 -1
- package/dist/modules/datasource/index.js.map +1 -1
- package/dist/modules/datasource/maven/index.js +5 -19
- package/dist/modules/datasource/maven/index.js.map +1 -1
- package/dist/modules/datasource/maven/util.js +8 -1
- package/dist/modules/datasource/maven/util.js.map +1 -1
- package/dist/modules/datasource/npm/get.js +2 -1
- package/dist/modules/datasource/npm/get.js.map +1 -1
- package/dist/modules/datasource/npm/npmrc.js +2 -1
- package/dist/modules/datasource/npm/npmrc.js.map +1 -1
- package/dist/modules/datasource/nuget/v3.js +3 -2
- package/dist/modules/datasource/nuget/v3.js.map +1 -1
- package/dist/modules/datasource/pod/index.js +3 -1
- package/dist/modules/datasource/pod/index.js.map +1 -1
- package/dist/modules/datasource/pypi/index.js +2 -1
- package/dist/modules/datasource/pypi/index.js.map +1 -1
- package/dist/modules/datasource/types.d.ts +2 -1
- package/dist/modules/datasource/types.js.map +1 -1
- package/dist/modules/manager/asdf/upgradeable-tooling.js +8 -0
- package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
- package/dist/modules/manager/bazel/rules/git.d.ts +7 -7
- package/dist/modules/manager/bazel/rules/git.js +6 -1
- package/dist/modules/manager/bazel/rules/git.js.map +1 -1
- package/dist/modules/manager/bazel-module/bazelrc.d.ts +2 -0
- package/dist/modules/manager/bazel-module/bazelrc.js +30 -1
- package/dist/modules/manager/bazel-module/bazelrc.js.map +1 -1
- package/dist/modules/manager/bazel-module/parser/rules.js +1 -0
- package/dist/modules/manager/bazel-module/parser/rules.js.map +1 -1
- package/dist/modules/manager/bazel-module/rules.d.ts +62 -24
- package/dist/modules/manager/bazel-module/rules.js +10 -4
- package/dist/modules/manager/bazel-module/rules.js.map +1 -1
- package/dist/modules/manager/cargo/extract.js +2 -1
- package/dist/modules/manager/cargo/extract.js.map +1 -1
- package/dist/modules/manager/composer/schema.js +1 -1
- package/dist/modules/manager/composer/schema.js.map +1 -1
- package/dist/modules/manager/docker-compose/extract.js +2 -0
- package/dist/modules/manager/docker-compose/extract.js.map +1 -1
- package/dist/modules/manager/docker-compose/schema.d.ts +120 -9
- package/dist/modules/manager/docker-compose/schema.js +35 -4
- package/dist/modules/manager/docker-compose/schema.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +19 -19
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/fleet/extract.js +2 -2
- package/dist/modules/manager/fleet/extract.js.map +1 -1
- package/dist/modules/manager/fleet/schema.d.ts +5 -5
- package/dist/modules/manager/fleet/schema.js +1 -1
- package/dist/modules/manager/fleet/schema.js.map +1 -1
- package/dist/modules/manager/flux/extract.js +1 -1
- package/dist/modules/manager/flux/extract.js.map +1 -1
- package/dist/modules/manager/git-submodules/extract.js +2 -6
- package/dist/modules/manager/git-submodules/extract.js.map +1 -1
- package/dist/modules/manager/git-submodules/update.js +3 -7
- package/dist/modules/manager/git-submodules/update.js.map +1 -1
- package/dist/modules/manager/github-actions/extract.js +1 -1
- package/dist/modules/manager/github-actions/extract.js.map +1 -1
- package/dist/modules/manager/gleam/artifacts.js +5 -1
- package/dist/modules/manager/gleam/artifacts.js.map +1 -1
- package/dist/modules/manager/gomod/artifacts.js +8 -6
- package/dist/modules/manager/gomod/artifacts.js.map +1 -1
- package/dist/modules/manager/gradle/extract.js +4 -1
- package/dist/modules/manager/gradle/extract.js.map +1 -1
- package/dist/modules/manager/gradle/utils.js +8 -14
- package/dist/modules/manager/gradle/utils.js.map +1 -1
- package/dist/modules/manager/helmfile/utils.js +1 -1
- package/dist/modules/manager/helmfile/utils.js.map +1 -1
- package/dist/modules/manager/helmv3/artifacts.js +8 -2
- package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
- package/dist/modules/manager/helmv3/common.d.ts +1 -1
- package/dist/modules/manager/helmv3/common.js +9 -3
- package/dist/modules/manager/helmv3/common.js.map +1 -1
- package/dist/modules/manager/hermit/artifacts.js +2 -2
- package/dist/modules/manager/hermit/artifacts.js.map +1 -1
- package/dist/modules/manager/kubernetes/extract.js +2 -2
- package/dist/modules/manager/kubernetes/extract.js.map +1 -1
- package/dist/modules/manager/kustomize/artifacts.js +1 -1
- package/dist/modules/manager/kustomize/artifacts.js.map +1 -1
- package/dist/modules/manager/maven/extract.d.ts +1 -1
- package/dist/modules/manager/maven/extract.js +82 -24
- package/dist/modules/manager/maven/extract.js.map +1 -1
- package/dist/modules/manager/maven/index.d.ts +0 -1
- package/dist/modules/manager/maven/index.js +2 -4
- package/dist/modules/manager/maven/index.js.map +1 -1
- package/dist/modules/manager/maven/update.js +15 -0
- package/dist/modules/manager/maven/update.js.map +1 -1
- package/dist/modules/manager/mise/backends.d.ts +48 -0
- package/dist/modules/manager/mise/backends.js +219 -0
- package/dist/modules/manager/mise/backends.js.map +1 -0
- package/dist/modules/manager/mise/extract.js +77 -10
- package/dist/modules/manager/mise/extract.js.map +1 -1
- package/dist/modules/manager/mise/index.js +37 -2
- package/dist/modules/manager/mise/index.js.map +1 -1
- package/dist/modules/manager/mise/schema.d.ts +24 -0
- package/dist/modules/manager/mise/schema.js +7 -1
- package/dist/modules/manager/mise/schema.js.map +1 -1
- package/dist/modules/manager/mise/upgradeable-tooling.js +210 -1
- package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
- package/dist/modules/manager/mix/artifacts.js +5 -0
- package/dist/modules/manager/mix/artifacts.js.map +1 -1
- package/dist/modules/manager/npm/extract/index.js +27 -24
- package/dist/modules/manager/npm/extract/index.js.map +1 -1
- package/dist/modules/manager/npm/post-update/index.js +9 -3
- package/dist/modules/manager/npm/post-update/index.js.map +1 -1
- package/dist/modules/manager/npm/post-update/npm.js +8 -5
- package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
- package/dist/modules/manager/npm/post-update/pnpm.js +4 -0
- package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
- package/dist/modules/manager/npm/post-update/utils.js +17 -0
- package/dist/modules/manager/npm/post-update/utils.js.map +1 -1
- package/dist/modules/manager/npm/post-update/yarn.js +7 -5
- package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
- package/dist/modules/manager/npm/schema.d.ts +116 -0
- package/dist/modules/manager/npm/schema.js +9 -0
- package/dist/modules/manager/npm/schema.js.map +1 -1
- package/dist/modules/manager/npm/utils.js +1 -1
- package/dist/modules/manager/npm/utils.js.map +1 -1
- package/dist/modules/manager/nuget/util.js +9 -0
- package/dist/modules/manager/nuget/util.js.map +1 -1
- package/dist/modules/manager/pep621/processors/uv.js +1 -1
- package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
- package/dist/modules/manager/pip-compile/artifacts.js +6 -4
- package/dist/modules/manager/pip-compile/artifacts.js.map +1 -1
- package/dist/modules/manager/pip_requirements/common.js +2 -1
- package/dist/modules/manager/pip_requirements/common.js.map +1 -1
- package/dist/modules/manager/poetry/schema.js +2 -1
- package/dist/modules/manager/poetry/schema.js.map +1 -1
- package/dist/modules/manager/pre-commit/index.js +2 -1
- package/dist/modules/manager/pre-commit/index.js.map +1 -1
- package/dist/modules/manager/renovate-config-presets/index.d.ts +1 -1
- package/dist/modules/manager/renovate-config-presets/index.js +1 -3
- package/dist/modules/manager/renovate-config-presets/index.js.map +1 -1
- package/dist/modules/manager/terraform/extractors/others/modules.js +4 -9
- package/dist/modules/manager/terraform/extractors/others/modules.js.map +1 -1
- package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.d.ts +1 -0
- package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.js +9 -4
- package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.js.map +1 -1
- package/dist/modules/manager/terraform/extractors/resources/utils.d.ts +1 -0
- package/dist/modules/manager/terraform/extractors/resources/utils.js +4 -1
- package/dist/modules/manager/terraform/extractors/resources/utils.js.map +1 -1
- package/dist/modules/manager/terraform/hcl/types.d.ts +1 -0
- package/dist/modules/manager/terraform/hcl/types.js.map +1 -1
- package/dist/modules/manager/types.d.ts +3 -0
- package/dist/modules/manager/types.js.map +1 -1
- package/dist/modules/platform/bitbucket-server/index.js +4 -2
- package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
- package/dist/modules/platform/codecommit/codecommit-client.js +7 -5
- package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
- package/dist/modules/platform/codecommit/index.js +7 -5
- package/dist/modules/platform/codecommit/index.js.map +1 -1
- package/dist/modules/platform/default-scm.d.ts +1 -0
- package/dist/modules/platform/default-scm.js +3 -0
- package/dist/modules/platform/default-scm.js.map +1 -1
- package/dist/modules/platform/gerrit/client.d.ts +6 -7
- package/dist/modules/platform/gerrit/client.js +58 -38
- package/dist/modules/platform/gerrit/client.js.map +1 -1
- package/dist/modules/platform/gerrit/index.d.ts +4 -3
- package/dist/modules/platform/gerrit/index.js +103 -42
- package/dist/modules/platform/gerrit/index.js.map +1 -1
- package/dist/modules/platform/gerrit/scm.d.ts +1 -1
- package/dist/modules/platform/gerrit/scm.js +56 -34
- package/dist/modules/platform/gerrit/scm.js.map +1 -1
- package/dist/modules/platform/gerrit/types.d.ts +23 -12
- package/dist/modules/platform/gerrit/types.js.map +1 -1
- package/dist/modules/platform/gerrit/utils.d.ts +8 -4
- package/dist/modules/platform/gerrit/utils.js +24 -12
- package/dist/modules/platform/gerrit/utils.js.map +1 -1
- package/dist/modules/platform/gitea/index.js +7 -2
- package/dist/modules/platform/gitea/index.js.map +1 -1
- package/dist/modules/platform/gitea/types.d.ts +2 -1
- package/dist/modules/platform/gitea/types.js.map +1 -1
- package/dist/modules/platform/github/index.js +12 -26
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/modules/platform/gitlab/code-owners.d.ts +2 -0
- package/dist/modules/platform/gitlab/code-owners.js +38 -0
- package/dist/modules/platform/gitlab/code-owners.js.map +1 -0
- package/dist/modules/platform/gitlab/index.d.ts +2 -1
- package/dist/modules/platform/gitlab/index.js +29 -56
- package/dist/modules/platform/gitlab/index.js.map +1 -1
- package/dist/modules/platform/gitlab/pr-cache.d.ts +21 -0
- package/dist/modules/platform/gitlab/pr-cache.js +124 -0
- package/dist/modules/platform/gitlab/pr-cache.js.map +1 -0
- package/dist/modules/platform/gitlab/types.d.ts +7 -0
- package/dist/modules/platform/gitlab/types.js.map +1 -1
- package/dist/modules/platform/gitlab/utils.js +1 -0
- package/dist/modules/platform/gitlab/utils.js.map +1 -1
- package/dist/modules/platform/types.d.ts +8 -0
- package/dist/modules/platform/types.js.map +1 -1
- package/dist/modules/versioning/api.js +2 -0
- package/dist/modules/versioning/api.js.map +1 -1
- package/dist/modules/versioning/cargo/index.js +20 -0
- package/dist/modules/versioning/cargo/index.js.map +1 -1
- package/dist/modules/versioning/composer/index.js +4 -0
- package/dist/modules/versioning/composer/index.js.map +1 -1
- package/dist/modules/versioning/lambda-node/index.d.ts +8 -0
- package/dist/modules/versioning/lambda-node/index.js +27 -0
- package/dist/modules/versioning/lambda-node/index.js.map +1 -0
- package/dist/modules/versioning/lambda-node/schedule.d.ts +10 -0
- package/dist/modules/versioning/lambda-node/schedule.js +19 -0
- package/dist/modules/versioning/lambda-node/schedule.js.map +1 -0
- package/dist/modules/versioning/npm/index.js +2 -0
- package/dist/modules/versioning/npm/index.js.map +1 -1
- package/dist/modules/versioning/npm/range.js +4 -0
- package/dist/modules/versioning/npm/range.js.map +1 -1
- package/dist/modules/versioning/pep440/index.js +1 -1
- package/dist/modules/versioning/pep440/index.js.map +1 -1
- package/dist/modules/versioning/python/index.d.ts +1 -0
- package/dist/modules/versioning/python/index.js +9 -0
- package/dist/modules/versioning/python/index.js.map +1 -1
- package/dist/modules/versioning/semver/index.d.ts +1 -0
- package/dist/modules/versioning/semver/index.js +15 -0
- package/dist/modules/versioning/semver/index.js.map +1 -1
- package/dist/modules/versioning/semver-coerced/index.js +9 -0
- package/dist/modules/versioning/semver-coerced/index.js.map +1 -1
- package/dist/modules/versioning/types.d.ts +1 -0
- package/dist/modules/versioning/types.js.map +1 -1
- package/dist/util/cache/memory/index.d.ts +1 -0
- package/dist/util/cache/memory/index.js +17 -6
- package/dist/util/cache/memory/index.js.map +1 -1
- package/dist/util/cache/package/index.js +2 -1
- package/dist/util/cache/package/index.js.map +1 -1
- package/dist/util/cache/package/key.js +1 -1
- package/dist/util/cache/package/key.js.map +1 -1
- package/dist/util/cache/package/types.d.ts +2 -2
- package/dist/util/cache/package/types.js.map +1 -1
- package/dist/util/cache/repository/impl/s3.js +2 -1
- package/dist/util/cache/repository/impl/s3.js.map +1 -1
- package/dist/util/cache/repository/types.d.ts +3 -0
- package/dist/util/cache/repository/types.js.map +1 -1
- package/dist/util/env.d.ts +6 -0
- package/dist/util/env.js +13 -0
- package/dist/util/env.js.map +1 -1
- package/dist/util/exec/common.js +2 -1
- package/dist/util/exec/common.js.map +1 -1
- package/dist/util/exec/containerbase.js +2 -1
- package/dist/util/exec/containerbase.js.map +1 -1
- package/dist/util/exec/env.js +1 -0
- package/dist/util/exec/env.js.map +1 -1
- package/dist/util/exec/utils.d.ts +1 -1
- package/dist/util/exec/utils.js +1 -1
- package/dist/util/exec/utils.js.map +1 -1
- package/dist/util/fs/index.js +2 -2
- package/dist/util/fs/index.js.map +1 -1
- package/dist/util/git/auth.js +4 -2
- package/dist/util/git/auth.js.map +1 -1
- package/dist/util/git/error.js +2 -1
- package/dist/util/git/error.js.map +1 -1
- package/dist/util/git/index.d.ts +20 -0
- package/dist/util/git/index.js +140 -10
- package/dist/util/git/index.js.map +1 -1
- package/dist/util/git/types.d.ts +1 -0
- package/dist/util/git/types.js.map +1 -1
- package/dist/util/github/graphql/datasource-fetcher.js +2 -3
- package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
- package/dist/util/github/graphql/query-adapters/tags-query-adapter.d.ts +48 -2
- package/dist/util/github/graphql/query-adapters/tags-query-adapter.js +27 -7
- package/dist/util/github/graphql/query-adapters/tags-query-adapter.js.map +1 -1
- package/dist/util/host-rules.js +4 -3
- package/dist/util/host-rules.js.map +1 -1
- package/dist/util/http/cache/package-http-cache-provider.d.ts +4 -4
- package/dist/util/http/cache/package-http-cache-provider.js +4 -4
- package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
- package/dist/util/http/github.js +20 -12
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/gitlab.js +2 -1
- package/dist/util/http/gitlab.js.map +1 -1
- package/dist/util/http/http.js +7 -3
- package/dist/util/http/http.js.map +1 -1
- package/dist/util/interpolator.d.ts +8 -0
- package/dist/util/interpolator.js +85 -0
- package/dist/util/interpolator.js.map +1 -0
- package/dist/util/merge-confidence/index.js +4 -1
- package/dist/util/merge-confidence/index.js.map +1 -1
- package/dist/util/promises.d.ts +4 -4
- package/dist/util/promises.js +3 -4
- package/dist/util/promises.js.map +1 -1
- package/dist/util/regex.js +3 -2
- package/dist/util/regex.js.map +1 -1
- package/dist/util/{schema-utils.d.ts → schema-utils/index.d.ts} +2 -2
- package/dist/util/{schema-utils.js → schema-utils/index.js} +5 -5
- package/dist/util/schema-utils/index.js.map +1 -0
- package/dist/util/schema-utils/v4.d.ts +7 -0
- package/dist/util/schema-utils/v4.js +64 -0
- package/dist/util/schema-utils/v4.js.map +1 -0
- package/dist/util/stats.d.ts +13 -2
- package/dist/util/stats.js +38 -27
- package/dist/util/stats.js.map +1 -1
- package/dist/workers/global/config/parse/codespaces.js +7 -4
- package/dist/workers/global/config/parse/codespaces.js.map +1 -1
- package/dist/workers/global/index.js +7 -5
- package/dist/workers/global/index.js.map +1 -1
- package/dist/workers/repository/config-migration/branch/migrated-data.js +1 -1
- package/dist/workers/repository/config-migration/branch/migrated-data.js.map +1 -1
- package/dist/workers/repository/dependency-dashboard.d.ts +1 -0
- package/dist/workers/repository/dependency-dashboard.js +47 -0
- package/dist/workers/repository/dependency-dashboard.js.map +1 -1
- package/dist/workers/repository/index.js +1 -0
- package/dist/workers/repository/index.js.map +1 -1
- package/dist/workers/repository/init/inherited.js +10 -6
- package/dist/workers/repository/init/inherited.js.map +1 -1
- package/dist/workers/repository/init/merge.d.ts +2 -2
- package/dist/workers/repository/init/merge.js +12 -5
- package/dist/workers/repository/init/merge.js.map +1 -1
- package/dist/workers/repository/package-files.js +11 -1
- package/dist/workers/repository/package-files.js.map +1 -1
- package/dist/workers/repository/process/extract-update.d.ts +1 -1
- package/dist/workers/repository/process/extract-update.js +15 -10
- package/dist/workers/repository/process/extract-update.js.map +1 -1
- package/dist/workers/repository/process/index.d.ts +1 -1
- package/dist/workers/repository/process/index.js +6 -3
- package/dist/workers/repository/process/index.js.map +1 -1
- package/dist/workers/repository/process/libyear.js +15 -7
- package/dist/workers/repository/process/libyear.js.map +1 -1
- package/dist/workers/repository/process/lookup/abandonment.d.ts +3 -0
- package/dist/workers/repository/process/lookup/abandonment.js +50 -0
- package/dist/workers/repository/process/lookup/abandonment.js.map +1 -0
- package/dist/workers/repository/process/lookup/current.js +0 -5
- package/dist/workers/repository/process/lookup/current.js.map +1 -1
- package/dist/workers/repository/process/lookup/generate.js +10 -0
- package/dist/workers/repository/process/lookup/generate.js.map +1 -1
- package/dist/workers/repository/process/lookup/index.js +7 -0
- package/dist/workers/repository/process/lookup/index.js.map +1 -1
- package/dist/workers/repository/process/lookup/timestamps.d.ts +4 -4
- package/dist/workers/repository/process/lookup/timestamps.js +10 -10
- package/dist/workers/repository/process/lookup/timestamps.js.map +1 -1
- package/dist/workers/repository/process/lookup/types.d.ts +4 -0
- package/dist/workers/repository/process/lookup/types.js.map +1 -1
- package/dist/workers/repository/update/branch/auto-replace.js +30 -7
- package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
- package/dist/workers/repository/update/branch/bump-versions.d.ts +2 -0
- package/dist/workers/repository/update/branch/bump-versions.js +192 -0
- package/dist/workers/repository/update/branch/bump-versions.js.map +1 -0
- package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +14 -8
- package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
- package/dist/workers/repository/update/branch/get-updated.js +3 -4
- package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
- package/dist/workers/repository/update/branch/index.js +3 -0
- package/dist/workers/repository/update/branch/index.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/release-notes.js +23 -19
- package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
- package/dist/workers/repository/update/pr/code-owners.js +13 -9
- package/dist/workers/repository/update/pr/code-owners.js.map +1 -1
- package/dist/workers/repository/updates/generate.js +1 -0
- package/dist/workers/repository/updates/generate.js.map +1 -1
- package/package.json +75 -80
- package/renovate-schema.json +78 -14
- package/dist/util/schema-utils.js.map +0 -1
@@ -10,6 +10,7 @@ exports.getPr = getPr;
|
|
10
10
|
exports.updatePr = updatePr;
|
11
11
|
exports.createPr = createPr;
|
12
12
|
exports.getBranchPr = getBranchPr;
|
13
|
+
exports.refreshPr = refreshPr;
|
13
14
|
exports.getPrList = getPrList;
|
14
15
|
exports.mergePr = mergePr;
|
15
16
|
exports.getBranchStatus = getBranchStatus;
|
@@ -29,6 +30,8 @@ exports.ensureIssue = ensureIssue;
|
|
29
30
|
exports.findIssue = findIssue;
|
30
31
|
exports.getIssueList = getIssueList;
|
31
32
|
const tslib_1 = require("tslib");
|
33
|
+
const is_1 = require("@sindresorhus/is");
|
34
|
+
const luxon_1 = require("luxon");
|
32
35
|
const logger_1 = require("../../../logger");
|
33
36
|
const common_1 = require("../../../util/common");
|
34
37
|
const git = tslib_1.__importStar(require("../../../util/git"));
|
@@ -98,7 +101,8 @@ async function initRepo({ repository, gitUrl, }) {
|
|
98
101
|
label: '-2',
|
99
102
|
});
|
100
103
|
for (const change of rejectedChanges) {
|
101
|
-
await client_1.client.abandonChange(change._number);
|
104
|
+
await client_1.client.abandonChange(change._number, 'This change has been abandoned as it was voted with Code-Review -2.');
|
105
|
+
logger_1.logger.info(`Abandoned change ${change._number} with Code-Review -2 in repository ${repository}`);
|
102
106
|
}
|
103
107
|
const repoConfig = {
|
104
108
|
defaultBranch: config.head,
|
@@ -107,13 +111,21 @@ async function initRepo({ repository, gitUrl, }) {
|
|
107
111
|
};
|
108
112
|
return repoConfig;
|
109
113
|
}
|
110
|
-
async function findPr(findPRConfig
|
111
|
-
const change = (await client_1.client.findChanges(config.repository,
|
112
|
-
|
114
|
+
async function findPr(findPRConfig) {
|
115
|
+
const change = (await client_1.client.findChanges(config.repository, {
|
116
|
+
...findPRConfig,
|
117
|
+
limit: 1,
|
118
|
+
requestDetails: utils_1.REQUEST_DETAILS_FOR_PRS,
|
119
|
+
})).pop();
|
120
|
+
return change
|
121
|
+
? (0, utils_1.mapGerritChangeToPr)(change, {
|
122
|
+
sourceBranch: findPRConfig.branchName,
|
123
|
+
})
|
124
|
+
: null;
|
113
125
|
}
|
114
|
-
async function getPr(number) {
|
126
|
+
async function getPr(number, refreshCache) {
|
115
127
|
try {
|
116
|
-
const change = await client_1.client.getChange(number);
|
128
|
+
const change = await client_1.client.getChange(number, refreshCache, utils_1.REQUEST_DETAILS_FOR_PRS);
|
117
129
|
return (0, utils_1.mapGerritChangeToPr)(change);
|
118
130
|
}
|
119
131
|
catch (err) {
|
@@ -134,25 +146,52 @@ async function updatePr(prConfig) {
|
|
134
146
|
}
|
135
147
|
async function createPr(prConfig) {
|
136
148
|
logger_1.logger.debug(`createPr(${prConfig.sourceBranch}, ${prConfig.prTitle}, ${prConfig.labels?.toString() ?? ''})`);
|
137
|
-
const
|
149
|
+
const change = (await client_1.client.findChanges(config.repository, {
|
138
150
|
branchName: prConfig.sourceBranch,
|
139
151
|
targetBranch: prConfig.targetBranch,
|
140
152
|
state: 'open',
|
141
|
-
|
142
|
-
|
153
|
+
limit: 1,
|
154
|
+
refreshCache: true,
|
155
|
+
requestDetails: utils_1.REQUEST_DETAILS_FOR_PRS,
|
156
|
+
})).pop();
|
157
|
+
if (change === undefined) {
|
143
158
|
throw new Error(`the change should be created automatically from previous push to refs/for/${prConfig.sourceBranch}`);
|
144
159
|
}
|
145
|
-
|
146
|
-
|
160
|
+
const created = luxon_1.DateTime.fromISO(change.created.replace(' ', 'T'), {});
|
161
|
+
const fiveMinutesAgo = luxon_1.DateTime.utc().minus({ minutes: 5 });
|
162
|
+
if (created < fiveMinutesAgo) {
|
163
|
+
throw new Error(`the change should have been created automatically from previous push to refs/for/${prConfig.sourceBranch}, but it was not created in the last 5 minutes (${change.created})`);
|
164
|
+
}
|
165
|
+
await client_1.client.addMessageIfNotAlreadyExists(change._number, prConfig.prBody, utils_1.TAG_PULL_REQUEST_BODY, change.messages);
|
166
|
+
return (0, utils_1.mapGerritChangeToPr)(change, {
|
167
|
+
sourceBranch: prConfig.sourceBranch,
|
168
|
+
prBody: prConfig.prBody,
|
169
|
+
});
|
170
|
+
}
|
171
|
+
async function getBranchPr(branchName, targetBranch) {
|
172
|
+
const change = (await client_1.client.findChanges(config.repository, {
|
173
|
+
branchName,
|
174
|
+
state: 'open',
|
175
|
+
targetBranch,
|
176
|
+
limit: 1,
|
177
|
+
requestDetails: utils_1.REQUEST_DETAILS_FOR_PRS,
|
178
|
+
})).pop();
|
179
|
+
return change
|
180
|
+
? (0, utils_1.mapGerritChangeToPr)(change, {
|
181
|
+
sourceBranch: branchName,
|
182
|
+
})
|
183
|
+
: null;
|
147
184
|
}
|
148
|
-
async function
|
149
|
-
|
150
|
-
|
185
|
+
async function refreshPr(number) {
|
186
|
+
// refresh cache
|
187
|
+
await getPr(number, true);
|
151
188
|
}
|
152
|
-
function getPrList() {
|
153
|
-
|
154
|
-
|
155
|
-
|
189
|
+
async function getPrList() {
|
190
|
+
const changes = await client_1.client.findChanges(config.repository, {
|
191
|
+
branchName: '',
|
192
|
+
requestDetails: utils_1.REQUEST_DETAILS_FOR_PRS,
|
193
|
+
});
|
194
|
+
return changes.map((change) => (0, utils_1.mapGerritChangeToPr)(change)).filter(is_1.isTruthy);
|
156
195
|
}
|
157
196
|
async function mergePr(config) {
|
158
197
|
logger_1.logger.debug(`mergePr(${config.id}, ${config.branchName}, ${config.strategy})`);
|
@@ -174,21 +213,25 @@ async function mergePr(config) {
|
|
174
213
|
*/
|
175
214
|
async function getBranchStatus(branchName) {
|
176
215
|
logger_1.logger.debug(`getBranchStatus(${branchName})`);
|
177
|
-
const
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
216
|
+
const change = (await client_1.client.findChanges(config.repository, {
|
217
|
+
state: 'open',
|
218
|
+
branchName,
|
219
|
+
limit: 1,
|
220
|
+
refreshCache: true,
|
221
|
+
requestDetails: ['LABELS', 'SUBMITTABLE', 'CHECK'],
|
222
|
+
})).pop();
|
223
|
+
if (change) {
|
224
|
+
const hasProblems = change.problems && change.problems.length > 0;
|
185
225
|
if (hasProblems) {
|
186
226
|
return 'red';
|
187
227
|
}
|
188
|
-
const hasBlockingLabels =
|
228
|
+
const hasBlockingLabels = Object.values(change.labels ?? {}).some((label) => label.blocking);
|
189
229
|
if (hasBlockingLabels) {
|
190
230
|
return 'red';
|
191
231
|
}
|
232
|
+
if (change.submittable) {
|
233
|
+
return 'green';
|
234
|
+
}
|
192
235
|
}
|
193
236
|
return 'yellow';
|
194
237
|
}
|
@@ -199,17 +242,23 @@ async function getBranchStatus(branchName) {
|
|
199
242
|
* @param context renovate/stability-days || ...
|
200
243
|
*/
|
201
244
|
async function getBranchStatusCheck(branchName, context) {
|
202
|
-
const
|
203
|
-
if (
|
204
|
-
const change = (await client_1.client.findChanges(config.repository, {
|
245
|
+
const labelConfig = config.labels[context];
|
246
|
+
if (labelConfig) {
|
247
|
+
const change = (await client_1.client.findChanges(config.repository, {
|
248
|
+
branchName,
|
249
|
+
state: 'open',
|
250
|
+
limit: 1,
|
251
|
+
refreshCache: true,
|
252
|
+
requestDetails: ['LABELS'],
|
253
|
+
})).pop();
|
205
254
|
if (change) {
|
206
|
-
const
|
207
|
-
if (
|
208
|
-
// Check for rejected first, as a label could have both rejected and approved
|
209
|
-
if (
|
255
|
+
const label = change.labels[context];
|
256
|
+
if (label) {
|
257
|
+
// Check for rejected or blocking first, as a label could have both rejected and approved
|
258
|
+
if (label.rejected || label.blocking) {
|
210
259
|
return 'red';
|
211
260
|
}
|
212
|
-
if (
|
261
|
+
if (label.approved) {
|
213
262
|
return 'green';
|
214
263
|
}
|
215
264
|
}
|
@@ -226,17 +275,29 @@ async function setBranchStatus(branchStatusConfig) {
|
|
226
275
|
const label = config.labels[branchStatusConfig.context];
|
227
276
|
const labelValue = label && (0, utils_1.mapBranchStatusToLabel)(branchStatusConfig.state, label);
|
228
277
|
if (branchStatusConfig.context && labelValue) {
|
229
|
-
const
|
230
|
-
|
278
|
+
const change = (await client_1.client.findChanges(config.repository, {
|
279
|
+
branchName: branchStatusConfig.branchName,
|
280
|
+
state: 'open',
|
281
|
+
limit: 1,
|
282
|
+
requestDetails: ['LABELS'],
|
283
|
+
})).pop();
|
284
|
+
const labelKey = branchStatusConfig.context;
|
285
|
+
if (!change?.labels || !Object.hasOwn(change.labels, labelKey)) {
|
231
286
|
return;
|
232
287
|
}
|
233
|
-
await client_1.client.setLabel(
|
288
|
+
await client_1.client.setLabel(change._number, labelKey, labelValue);
|
234
289
|
}
|
235
290
|
}
|
236
|
-
function getRawFile(fileName, repoName, branchOrTag) {
|
237
|
-
const repo = repoName ?? config.repository
|
238
|
-
|
239
|
-
|
291
|
+
async function getRawFile(fileName, repoName, branchOrTag) {
|
292
|
+
const repo = repoName ?? config.repository;
|
293
|
+
if (!repo) {
|
294
|
+
logger_1.logger.debug('No repo so cannot getRawFile');
|
295
|
+
return null;
|
296
|
+
}
|
297
|
+
const branch = branchOrTag ??
|
298
|
+
(repo === config.repository ? (config.head ?? 'HEAD') : 'HEAD');
|
299
|
+
const result = await client_1.client.getFile(repo, branch, fileName);
|
300
|
+
return result;
|
240
301
|
}
|
241
302
|
async function getJsonFile(fileName, repoName, branchOrTag) {
|
242
303
|
const raw = await getRawFile(fileName, repoName, branchOrTag);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gerrit/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport type { BranchStatus } from '../../../types';\nimport { parseJson } from '../../../util/common';\nimport * as git from '../../../util/git';\nimport { setBaseUrl } from '../../../util/http/gerrit';\nimport { regEx } from '../../../util/regex';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport type {\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfigByContent,\n EnsureCommentRemovalConfigByTopic,\n EnsureIssueConfig,\n EnsureIssueResult,\n FindPRConfig,\n Issue,\n MergePRConfig,\n PlatformParams,\n PlatformResult,\n Pr,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types';\nimport { repoFingerprint } from '../util';\n\nimport { smartTruncate } from '../utils/pr-body';\nimport { readOnlyIssueBody } from '../utils/read-only-issue-body';\nimport { client } from './client';\nimport { configureScm } from './scm';\nimport type { GerritLabelTypeInfo, GerritProjectInfo } from './types';\nimport {\n TAG_PULL_REQUEST_BODY,\n getGerritRepoUrl,\n mapBranchStatusToLabel,\n mapGerritChangeToPr,\n} from './utils';\n\nexport const id = 'gerrit';\n\nconst defaults: {\n endpoint?: string;\n} = {};\n\nlet config: {\n repository?: string;\n head?: string;\n config?: GerritProjectInfo;\n labels: Record<string, GerritLabelTypeInfo>;\n gerritUsername?: string;\n} = {\n labels: {},\n};\n\nexport function writeToConfig(newConfig: typeof config): void {\n config = { ...config, ...newConfig };\n}\n\nexport function initPlatform({\n endpoint,\n username,\n password,\n}: PlatformParams): Promise<PlatformResult> {\n logger.debug(`initPlatform(${endpoint!}, ${username!})`);\n if (!endpoint) {\n throw new Error('Init: You must configure a Gerrit Server endpoint');\n }\n if (!(username && password)) {\n throw new Error(\n 'Init: You must configure a Gerrit Server username/password',\n );\n }\n config.gerritUsername = username;\n defaults.endpoint = ensureTrailingSlash(endpoint);\n setBaseUrl(defaults.endpoint);\n const platformConfig: PlatformResult = {\n endpoint: defaults.endpoint,\n };\n return Promise.resolve(platformConfig);\n}\n\n/**\n * Get all state=\"ACTIVE\" and type=\"CODE\" repositories from gerrit\n */\nexport async function getRepos(): Promise<string[]> {\n logger.debug(`getRepos()`);\n return await client.getRepos();\n}\n\n/**\n * Clone repository to local directory\n * @param config\n */\nexport async function initRepo({\n repository,\n gitUrl,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(${repository}, ${gitUrl})`);\n const projectInfo = await client.getProjectInfo(repository);\n const branchInfo = await client.getBranchInfo(repository);\n\n config = {\n ...config,\n repository,\n head: branchInfo.revision,\n config: projectInfo,\n labels: projectInfo.labels ?? {},\n };\n const baseUrl = defaults.endpoint!;\n const url = getGerritRepoUrl(repository, baseUrl);\n configureScm(repository, config.gerritUsername!);\n await git.initRepo({ url });\n\n //abandon \"open\" and \"rejected\" changes at startup\n const rejectedChanges = await client.findChanges(config.repository!, {\n branchName: '',\n state: 'open',\n label: '-2',\n });\n for (const change of rejectedChanges) {\n await client.abandonChange(change._number);\n }\n const repoConfig: RepoResult = {\n defaultBranch: config.head!,\n isFork: false,\n repoFingerprint: repoFingerprint(repository, baseUrl),\n };\n return repoConfig;\n}\n\nexport async function findPr(\n findPRConfig: FindPRConfig,\n refreshCache?: boolean,\n): Promise<Pr | null> {\n const change = (\n await client.findChanges(config.repository!, findPRConfig, refreshCache)\n ).pop();\n return change ? mapGerritChangeToPr(change) : null;\n}\n\nexport async function getPr(number: number): Promise<Pr | null> {\n try {\n const change = await client.getChange(number);\n return mapGerritChangeToPr(change);\n } catch (err) {\n if (err.statusCode === 404) {\n return null;\n }\n throw err;\n }\n}\n\nexport async function updatePr(prConfig: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prConfig.number}, ${prConfig.prTitle})`);\n if (prConfig.prBody) {\n await client.addMessageIfNotAlreadyExists(\n prConfig.number,\n prConfig.prBody,\n TAG_PULL_REQUEST_BODY,\n );\n }\n if (prConfig.state && prConfig.state === 'closed') {\n await client.abandonChange(prConfig.number);\n }\n}\n\nexport async function createPr(prConfig: CreatePRConfig): Promise<Pr | null> {\n logger.debug(\n `createPr(${prConfig.sourceBranch}, ${prConfig.prTitle}, ${\n prConfig.labels?.toString() ?? ''\n })`,\n );\n const pr = (\n await client.findChanges(\n config.repository!,\n {\n branchName: prConfig.sourceBranch,\n targetBranch: prConfig.targetBranch,\n state: 'open',\n },\n true,\n )\n ).pop();\n if (pr === undefined) {\n throw new Error(\n `the change should be created automatically from previous push to refs/for/${prConfig.sourceBranch}`,\n );\n }\n await client.addMessageIfNotAlreadyExists(\n pr._number,\n prConfig.prBody,\n TAG_PULL_REQUEST_BODY,\n );\n return getPr(pr._number);\n}\n\nexport async function getBranchPr(branchName: string): Promise<Pr | null> {\n const change = (\n await client.findChanges(config.repository!, { branchName, state: 'open' })\n ).pop();\n return change ? mapGerritChangeToPr(change) : null;\n}\n\nexport function getPrList(): Promise<Pr[]> {\n return client\n .findChanges(config.repository!, { branchName: '' })\n .then((res) => res.map((change) => mapGerritChangeToPr(change)));\n}\n\nexport async function mergePr(config: MergePRConfig): Promise<boolean> {\n logger.debug(\n `mergePr(${config.id}, ${config.branchName!}, ${config.strategy!})`,\n );\n try {\n const change = await client.submitChange(config.id);\n return change.status === 'MERGED';\n } catch (err) {\n if (err.statusCode === 409) {\n logger.warn(\n { err },\n \"Can't submit the change, because the submit rule doesn't allow it.\",\n );\n return false;\n }\n throw err;\n }\n}\n\n/**\n * BranchStatus for Gerrit assumes that the branchName refers to a change.\n * @param branchName\n */\nexport async function getBranchStatus(\n branchName: string,\n): Promise<BranchStatus> {\n logger.debug(`getBranchStatus(${branchName})`);\n const changes = await client.findChanges(\n config.repository!,\n { state: 'open', branchName },\n true,\n );\n if (changes.length > 0) {\n const allSubmittable =\n changes.filter((change) => change.submittable === true).length ===\n changes.length;\n if (allSubmittable) {\n return 'green';\n }\n const hasProblems =\n changes.filter((change) => change.problems.length > 0).length > 0;\n if (hasProblems) {\n return 'red';\n }\n const hasBlockingLabels =\n changes.filter((change) =>\n Object.values(change.labels ?? {}).some((label) => label.blocking),\n ).length > 0;\n if (hasBlockingLabels) {\n return 'red';\n }\n }\n return 'yellow';\n}\n\n/**\n * check the gerrit-change for the presence of the corresponding \"$context\" Gerrit label if configured,\n * return 'yellow' if not configured or not set\n * @param branchName\n * @param context renovate/stability-days || ...\n */\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n const label = config.labels[context];\n if (label) {\n const change = (\n await client.findChanges(\n config.repository!,\n { branchName, state: 'open' },\n true,\n )\n ).pop();\n if (change) {\n const labelRes = change.labels?.[context];\n if (labelRes) {\n // Check for rejected first, as a label could have both rejected and approved\n if (labelRes.rejected) {\n return 'red';\n }\n if (labelRes.approved) {\n return 'green';\n }\n }\n }\n }\n return 'yellow';\n}\n\n/**\n * Apply the branch state $context to the corresponding gerrit label (if available)\n * context === \"renovate/stability-days\" / \"renovate/merge-confidence\" and state === \"green\"/...\n * @param branchStatusConfig\n */\nexport async function setBranchStatus(\n branchStatusConfig: BranchStatusConfig,\n): Promise<void> {\n const label = config.labels[branchStatusConfig.context];\n const labelValue =\n label && mapBranchStatusToLabel(branchStatusConfig.state, label);\n if (branchStatusConfig.context && labelValue) {\n const pr = await getBranchPr(branchStatusConfig.branchName);\n if (pr === null) {\n return;\n }\n await client.setLabel(pr.number, branchStatusConfig.context, labelValue);\n }\n}\n\nexport function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n const repo = repoName ?? config.repository ?? 'All-Projects';\n const branch =\n branchOrTag ?? (repo === config.repository ? config.head! : 'HEAD');\n return client.getFile(repo, branch, fileName);\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\nexport async function addReviewers(\n number: number,\n reviewers: string[],\n): Promise<void> {\n await client.addReviewers(number, reviewers);\n}\n\n/**\n * add \"CC\" (only one possible)\n */\nexport async function addAssignees(\n number: number,\n assignees: string[],\n): Promise<void> {\n if (assignees.length) {\n if (assignees.length > 1) {\n logger.debug(\n `addAssignees(${number}, ${assignees.toString()}) called with more then one assignee! Gerrit only supports one assignee! Using the first from list.`,\n );\n }\n await client.addAssignee(number, assignees[0]);\n }\n}\n\nexport async function ensureComment(\n ensureComment: EnsureCommentConfig,\n): Promise<boolean> {\n logger.debug(\n `ensureComment(${ensureComment.number}, ${ensureComment.topic!}, ${\n ensureComment.content\n })`,\n );\n await client.addMessageIfNotAlreadyExists(\n ensureComment.number,\n ensureComment.content,\n ensureComment.topic ?? undefined,\n );\n return true;\n}\n\nexport function massageMarkdown(prBody: string): string {\n //TODO: do more Gerrit specific replacements?\n return smartTruncate(readOnlyIssueBody(prBody), maxBodyLength())\n .replace(regEx(/Pull Request(s)?/g), 'Change-Request$1')\n .replace(regEx(/\\bPR(s)?\\b/g), 'Change-Request$1')\n .replace(regEx(/<\\/?summary>/g), '**')\n .replace(regEx(/<\\/?details>/g), '')\n .replace(regEx(/​/g), '') //remove zero-width-space not supported in gerrit-markdown\n .replace(\n 'close this Change-Request unmerged.',\n 'abandon or down vote this Change-Request with -2.',\n )\n .replace('Branch creation', 'Change creation')\n .replace(\n 'Close this Change-Request',\n 'Down-vote this Change-Request with -2',\n )\n .replace(\n 'you tick the rebase/retry checkbox',\n 'add \"rebase!\" at the beginning of the commit message.',\n )\n .replace(regEx(`\\n---\\n\\n.*?<!-- rebase-check -->.*?\\n`), '')\n .replace(regEx(/<!--renovate-(?:debug|config-hash):.*?-->/g), '');\n}\n\nexport function maxBodyLength(): number {\n return 16384; //TODO: check the real gerrit limit (max. chars)\n}\n\nexport function deleteLabel(number: number, label: string): Promise<void> {\n return Promise.resolve();\n}\n\nexport function ensureCommentRemoval(\n ensureCommentRemoval:\n | EnsureCommentRemovalConfigByTopic\n | EnsureCommentRemovalConfigByContent,\n): Promise<void> {\n return Promise.resolve();\n}\n\nexport function ensureIssueClosing(title: string): Promise<void> {\n return Promise.resolve();\n}\n\nexport function ensureIssue(\n issueConfig: EnsureIssueConfig,\n): Promise<EnsureIssueResult | null> {\n return Promise.resolve(null);\n}\n\nexport function findIssue(title: string): Promise<Issue | null> {\n return Promise.resolve(null);\n}\n\nexport function getIssueList(): Promise<Issue[]> {\n return Promise.resolve([]);\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gerrit/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { isTruthy } from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { logger } from '../../../logger';\nimport type { BranchStatus } from '../../../types';\nimport { parseJson } from '../../../util/common';\nimport * as git from '../../../util/git';\nimport { setBaseUrl } from '../../../util/http/gerrit';\nimport { regEx } from '../../../util/regex';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport type {\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfigByContent,\n EnsureCommentRemovalConfigByTopic,\n EnsureIssueConfig,\n EnsureIssueResult,\n FindPRConfig,\n Issue,\n MergePRConfig,\n PlatformParams,\n PlatformResult,\n Pr,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types';\nimport { repoFingerprint } from '../util';\n\nimport { smartTruncate } from '../utils/pr-body';\nimport { readOnlyIssueBody } from '../utils/read-only-issue-body';\nimport { client } from './client';\nimport { configureScm } from './scm';\nimport type { GerritLabelTypeInfo, GerritProjectInfo } from './types';\nimport {\n REQUEST_DETAILS_FOR_PRS,\n TAG_PULL_REQUEST_BODY,\n getGerritRepoUrl,\n mapBranchStatusToLabel,\n mapGerritChangeToPr,\n} from './utils';\n\nexport const id = 'gerrit';\n\nconst defaults: {\n endpoint?: string;\n} = {};\n\nlet config: {\n repository?: string;\n head?: string;\n config?: GerritProjectInfo;\n labels: Record<string, GerritLabelTypeInfo>;\n gerritUsername?: string;\n} = {\n labels: {},\n};\n\nexport function writeToConfig(newConfig: typeof config): void {\n config = { ...config, ...newConfig };\n}\n\nexport function initPlatform({\n endpoint,\n username,\n password,\n}: PlatformParams): Promise<PlatformResult> {\n logger.debug(`initPlatform(${endpoint!}, ${username!})`);\n if (!endpoint) {\n throw new Error('Init: You must configure a Gerrit Server endpoint');\n }\n if (!(username && password)) {\n throw new Error(\n 'Init: You must configure a Gerrit Server username/password',\n );\n }\n config.gerritUsername = username;\n defaults.endpoint = ensureTrailingSlash(endpoint);\n setBaseUrl(defaults.endpoint);\n const platformConfig: PlatformResult = {\n endpoint: defaults.endpoint,\n };\n return Promise.resolve(platformConfig);\n}\n\n/**\n * Get all state=\"ACTIVE\" and type=\"CODE\" repositories from gerrit\n */\nexport async function getRepos(): Promise<string[]> {\n logger.debug(`getRepos()`);\n return await client.getRepos();\n}\n\n/**\n * Clone repository to local directory\n * @param config\n */\nexport async function initRepo({\n repository,\n gitUrl,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(${repository}, ${gitUrl})`);\n const projectInfo = await client.getProjectInfo(repository);\n const branchInfo = await client.getBranchInfo(repository);\n\n config = {\n ...config,\n repository,\n head: branchInfo.revision,\n config: projectInfo,\n labels: projectInfo.labels ?? {},\n };\n const baseUrl = defaults.endpoint!;\n const url = getGerritRepoUrl(repository, baseUrl);\n configureScm(repository, config.gerritUsername!);\n await git.initRepo({ url });\n\n //abandon \"open\" and \"rejected\" changes at startup\n const rejectedChanges = await client.findChanges(config.repository!, {\n branchName: '',\n state: 'open',\n label: '-2',\n });\n for (const change of rejectedChanges) {\n await client.abandonChange(\n change._number,\n 'This change has been abandoned as it was voted with Code-Review -2.',\n );\n logger.info(\n `Abandoned change ${change._number} with Code-Review -2 in repository ${repository}`,\n );\n }\n const repoConfig: RepoResult = {\n defaultBranch: config.head!,\n isFork: false,\n repoFingerprint: repoFingerprint(repository, baseUrl),\n };\n return repoConfig;\n}\n\nexport async function findPr(findPRConfig: FindPRConfig): Promise<Pr | null> {\n const change = (\n await client.findChanges(config.repository!, {\n ...findPRConfig,\n limit: 1,\n requestDetails: REQUEST_DETAILS_FOR_PRS,\n })\n ).pop();\n return change\n ? mapGerritChangeToPr(change, {\n sourceBranch: findPRConfig.branchName,\n })\n : null;\n}\n\nexport async function getPr(\n number: number,\n refreshCache?: boolean,\n): Promise<Pr | null> {\n try {\n const change = await client.getChange(\n number,\n refreshCache,\n REQUEST_DETAILS_FOR_PRS,\n );\n return mapGerritChangeToPr(change);\n } catch (err) {\n if (err.statusCode === 404) {\n return null;\n }\n throw err;\n }\n}\n\nexport async function updatePr(prConfig: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prConfig.number}, ${prConfig.prTitle})`);\n if (prConfig.prBody) {\n await client.addMessageIfNotAlreadyExists(\n prConfig.number,\n prConfig.prBody,\n TAG_PULL_REQUEST_BODY,\n );\n }\n if (prConfig.state && prConfig.state === 'closed') {\n await client.abandonChange(prConfig.number);\n }\n}\n\nexport async function createPr(prConfig: CreatePRConfig): Promise<Pr | null> {\n logger.debug(\n `createPr(${prConfig.sourceBranch}, ${prConfig.prTitle}, ${\n prConfig.labels?.toString() ?? ''\n })`,\n );\n const change = (\n await client.findChanges(config.repository!, {\n branchName: prConfig.sourceBranch,\n targetBranch: prConfig.targetBranch,\n state: 'open',\n limit: 1,\n refreshCache: true,\n requestDetails: REQUEST_DETAILS_FOR_PRS,\n })\n ).pop();\n if (change === undefined) {\n throw new Error(\n `the change should be created automatically from previous push to refs/for/${prConfig.sourceBranch}`,\n );\n }\n const created = DateTime.fromISO(change.created.replace(' ', 'T'), {});\n const fiveMinutesAgo = DateTime.utc().minus({ minutes: 5 });\n if (created < fiveMinutesAgo) {\n throw new Error(\n `the change should have been created automatically from previous push to refs/for/${prConfig.sourceBranch}, but it was not created in the last 5 minutes (${change.created})`,\n );\n }\n await client.addMessageIfNotAlreadyExists(\n change._number,\n prConfig.prBody,\n TAG_PULL_REQUEST_BODY,\n change.messages,\n );\n return mapGerritChangeToPr(change, {\n sourceBranch: prConfig.sourceBranch,\n prBody: prConfig.prBody,\n });\n}\n\nexport async function getBranchPr(\n branchName: string,\n targetBranch?: string,\n): Promise<Pr | null> {\n const change = (\n await client.findChanges(config.repository!, {\n branchName,\n state: 'open',\n targetBranch,\n limit: 1,\n requestDetails: REQUEST_DETAILS_FOR_PRS,\n })\n ).pop();\n return change\n ? mapGerritChangeToPr(change, {\n sourceBranch: branchName,\n })\n : null;\n}\n\nexport async function refreshPr(number: number): Promise<void> {\n // refresh cache\n await getPr(number, true);\n}\n\nexport async function getPrList(): Promise<Pr[]> {\n const changes = await client.findChanges(config.repository!, {\n branchName: '',\n requestDetails: REQUEST_DETAILS_FOR_PRS,\n });\n return changes.map((change) => mapGerritChangeToPr(change)).filter(isTruthy);\n}\n\nexport async function mergePr(config: MergePRConfig): Promise<boolean> {\n logger.debug(\n `mergePr(${config.id}, ${config.branchName!}, ${config.strategy!})`,\n );\n try {\n const change = await client.submitChange(config.id);\n return change.status === 'MERGED';\n } catch (err) {\n if (err.statusCode === 409) {\n logger.warn(\n { err },\n \"Can't submit the change, because the submit rule doesn't allow it.\",\n );\n return false;\n }\n throw err;\n }\n}\n\n/**\n * BranchStatus for Gerrit assumes that the branchName refers to a change.\n * @param branchName\n */\nexport async function getBranchStatus(\n branchName: string,\n): Promise<BranchStatus> {\n logger.debug(`getBranchStatus(${branchName})`);\n const change = (\n await client.findChanges(config.repository!, {\n state: 'open',\n branchName,\n limit: 1,\n refreshCache: true,\n requestDetails: ['LABELS', 'SUBMITTABLE', 'CHECK'],\n })\n ).pop();\n if (change) {\n const hasProblems = change.problems && change.problems.length > 0;\n if (hasProblems) {\n return 'red';\n }\n const hasBlockingLabels = Object.values(change.labels ?? {}).some(\n (label) => label.blocking,\n );\n if (hasBlockingLabels) {\n return 'red';\n }\n if (change.submittable) {\n return 'green';\n }\n }\n return 'yellow';\n}\n\n/**\n * check the gerrit-change for the presence of the corresponding \"$context\" Gerrit label if configured,\n * return 'yellow' if not configured or not set\n * @param branchName\n * @param context renovate/stability-days || ...\n */\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n const labelConfig = config.labels[context];\n if (labelConfig) {\n const change = (\n await client.findChanges(config.repository!, {\n branchName,\n state: 'open',\n limit: 1,\n refreshCache: true,\n requestDetails: ['LABELS'],\n })\n ).pop();\n if (change) {\n const label = change.labels![context];\n if (label) {\n // Check for rejected or blocking first, as a label could have both rejected and approved\n if (label.rejected || label.blocking) {\n return 'red';\n }\n if (label.approved) {\n return 'green';\n }\n }\n }\n }\n return 'yellow';\n}\n\n/**\n * Apply the branch state $context to the corresponding gerrit label (if available)\n * context === \"renovate/stability-days\" / \"renovate/merge-confidence\" and state === \"green\"/...\n * @param branchStatusConfig\n */\nexport async function setBranchStatus(\n branchStatusConfig: BranchStatusConfig,\n): Promise<void> {\n const label = config.labels[branchStatusConfig.context];\n const labelValue =\n label && mapBranchStatusToLabel(branchStatusConfig.state, label);\n if (branchStatusConfig.context && labelValue) {\n const change = (\n await client.findChanges(config.repository!, {\n branchName: branchStatusConfig.branchName,\n state: 'open',\n limit: 1,\n requestDetails: ['LABELS'],\n })\n ).pop();\n\n const labelKey = branchStatusConfig.context;\n if (!change?.labels || !Object.hasOwn(change.labels, labelKey)) {\n return;\n }\n\n await client.setLabel(change._number, labelKey, labelValue);\n }\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n const repo = repoName ?? config.repository;\n if (!repo) {\n logger.debug('No repo so cannot getRawFile');\n return null;\n }\n const branch =\n branchOrTag ??\n (repo === config.repository ? (config.head ?? 'HEAD') : 'HEAD');\n const result = await client.getFile(repo, branch, fileName);\n return result;\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\nexport async function addReviewers(\n number: number,\n reviewers: string[],\n): Promise<void> {\n await client.addReviewers(number, reviewers);\n}\n\n/**\n * add \"CC\" (only one possible)\n */\nexport async function addAssignees(\n number: number,\n assignees: string[],\n): Promise<void> {\n if (assignees.length) {\n if (assignees.length > 1) {\n logger.debug(\n `addAssignees(${number}, ${assignees.toString()}) called with more then one assignee! Gerrit only supports one assignee! Using the first from list.`,\n );\n }\n await client.addAssignee(number, assignees[0]);\n }\n}\n\nexport async function ensureComment(\n ensureComment: EnsureCommentConfig,\n): Promise<boolean> {\n logger.debug(\n `ensureComment(${ensureComment.number}, ${ensureComment.topic!}, ${\n ensureComment.content\n })`,\n );\n await client.addMessageIfNotAlreadyExists(\n ensureComment.number,\n ensureComment.content,\n ensureComment.topic ?? undefined,\n );\n return true;\n}\n\nexport function massageMarkdown(prBody: string): string {\n //TODO: do more Gerrit specific replacements?\n return smartTruncate(readOnlyIssueBody(prBody), maxBodyLength())\n .replace(regEx(/Pull Request(s)?/g), 'Change-Request$1')\n .replace(regEx(/\\bPR(s)?\\b/g), 'Change-Request$1')\n .replace(regEx(/<\\/?summary>/g), '**')\n .replace(regEx(/<\\/?details>/g), '')\n .replace(regEx(/​/g), '') //remove zero-width-space not supported in gerrit-markdown\n .replace(\n 'close this Change-Request unmerged.',\n 'abandon or down vote this Change-Request with -2.',\n )\n .replace('Branch creation', 'Change creation')\n .replace(\n 'Close this Change-Request',\n 'Down-vote this Change-Request with -2',\n )\n .replace(\n 'you tick the rebase/retry checkbox',\n 'add \"rebase!\" at the beginning of the commit message.',\n )\n .replace(regEx(`\\n---\\n\\n.*?<!-- rebase-check -->.*?\\n`), '')\n .replace(regEx(/<!--renovate-(?:debug|config-hash):.*?-->/g), '');\n}\n\nexport function maxBodyLength(): number {\n return 16384; //TODO: check the real gerrit limit (max. chars)\n}\n\nexport function deleteLabel(number: number, label: string): Promise<void> {\n return Promise.resolve();\n}\n\nexport function ensureCommentRemoval(\n ensureCommentRemoval:\n | EnsureCommentRemovalConfigByTopic\n | EnsureCommentRemovalConfigByContent,\n): Promise<void> {\n return Promise.resolve();\n}\n\nexport function ensureIssueClosing(title: string): Promise<void> {\n return Promise.resolve();\n}\n\nexport function ensureIssue(\n issueConfig: EnsureIssueConfig,\n): Promise<EnsureIssueResult | null> {\n return Promise.resolve(null);\n}\n\nexport function findIssue(title: string): Promise<Issue | null> {\n return Promise.resolve(null);\n}\n\nexport function getIssueList(): Promise<Issue[]> {\n return Promise.resolve([]);\n}\n"]}
|
@@ -6,7 +6,7 @@ export declare class GerritScm extends DefaultGitScm {
|
|
6
6
|
getBranchCommit(branchName: string): Promise<LongCommitSha | null>;
|
7
7
|
isBranchBehindBase(branchName: string, baseBranch: string): Promise<boolean>;
|
8
8
|
isBranchConflicted(baseBranch: string, branch: string): Promise<boolean>;
|
9
|
-
isBranchModified(branchName: string): Promise<boolean>;
|
9
|
+
isBranchModified(branchName: string, baseBranch: string): Promise<boolean>;
|
10
10
|
commitAndPush(commit: CommitFilesConfig): Promise<LongCommitSha | null>;
|
11
11
|
deleteBranch(branchName: string): Promise<void>;
|
12
12
|
mergeToLocal(branchName: string): Promise<void>;
|
@@ -17,20 +17,27 @@ function configureScm(repo, login) {
|
|
17
17
|
}
|
18
18
|
class GerritScm extends default_scm_1.DefaultGitScm {
|
19
19
|
async branchExists(branchName) {
|
20
|
-
const searchConfig = {
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
const searchConfig = {
|
21
|
+
state: 'open',
|
22
|
+
branchName,
|
23
|
+
limit: 1,
|
24
|
+
refreshCache: true,
|
25
|
+
};
|
26
|
+
const change = (await client_1.client.findChanges(repository, searchConfig)).pop();
|
24
27
|
if (change) {
|
25
28
|
return true;
|
26
29
|
}
|
27
30
|
return git.branchExists(branchName);
|
28
31
|
}
|
29
32
|
async getBranchCommit(branchName) {
|
30
|
-
const searchConfig = {
|
31
|
-
|
32
|
-
|
33
|
-
|
33
|
+
const searchConfig = {
|
34
|
+
state: 'open',
|
35
|
+
branchName,
|
36
|
+
limit: 1,
|
37
|
+
refreshCache: true,
|
38
|
+
requestDetails: ['CURRENT_REVISION'],
|
39
|
+
};
|
40
|
+
const change = (await client_1.client.findChanges(repository, searchConfig)).pop();
|
34
41
|
if (change) {
|
35
42
|
return change.current_revision;
|
36
43
|
}
|
@@ -41,13 +48,14 @@ class GerritScm extends default_scm_1.DefaultGitScm {
|
|
41
48
|
state: 'open',
|
42
49
|
branchName,
|
43
50
|
targetBranch: baseBranch,
|
51
|
+
limit: 1,
|
52
|
+
refreshCache: true,
|
53
|
+
requestDetails: ['CURRENT_REVISION', 'CURRENT_ACTIONS'],
|
44
54
|
};
|
45
|
-
const change = await client_1.client
|
46
|
-
.findChanges(repository, searchConfig, true)
|
47
|
-
.then((res) => res.pop());
|
55
|
+
const change = (await client_1.client.findChanges(repository, searchConfig)).pop();
|
48
56
|
if (change) {
|
49
|
-
const
|
50
|
-
return
|
57
|
+
const currentRevision = change.revisions[change.current_revision];
|
58
|
+
return currentRevision.actions.rebase.enabled === true;
|
51
59
|
}
|
52
60
|
return true;
|
53
61
|
}
|
@@ -56,6 +64,7 @@ class GerritScm extends default_scm_1.DefaultGitScm {
|
|
56
64
|
state: 'open',
|
57
65
|
branchName: branch,
|
58
66
|
targetBranch: baseBranch,
|
67
|
+
limit: 1,
|
59
68
|
};
|
60
69
|
const change = (await client_1.client.findChanges(repository, searchConfig)).pop();
|
61
70
|
if (change) {
|
@@ -67,14 +76,19 @@ class GerritScm extends default_scm_1.DefaultGitScm {
|
|
67
76
|
return true;
|
68
77
|
}
|
69
78
|
}
|
70
|
-
async isBranchModified(branchName) {
|
71
|
-
const searchConfig = {
|
72
|
-
|
73
|
-
|
74
|
-
|
79
|
+
async isBranchModified(branchName, baseBranch) {
|
80
|
+
const searchConfig = {
|
81
|
+
state: 'open',
|
82
|
+
branchName,
|
83
|
+
targetBranch: baseBranch,
|
84
|
+
limit: 1,
|
85
|
+
refreshCache: true,
|
86
|
+
requestDetails: ['CURRENT_REVISION', 'DETAILED_ACCOUNTS'],
|
87
|
+
};
|
88
|
+
const change = (await client_1.client.findChanges(repository, searchConfig)).pop();
|
75
89
|
if (change) {
|
76
|
-
const
|
77
|
-
return
|
90
|
+
const currentRevision = change.revisions[change.current_revision];
|
91
|
+
return currentRevision.uploader.username !== username;
|
78
92
|
}
|
79
93
|
return false;
|
80
94
|
}
|
@@ -84,10 +98,11 @@ class GerritScm extends default_scm_1.DefaultGitScm {
|
|
84
98
|
state: 'open',
|
85
99
|
branchName: commit.branchName,
|
86
100
|
targetBranch: commit.baseBranch,
|
101
|
+
limit: 1,
|
102
|
+
refreshCache: true,
|
103
|
+
requestDetails: ['CURRENT_REVISION'],
|
87
104
|
};
|
88
|
-
const existingChange = await client_1.client
|
89
|
-
.findChanges(repository, searchConfig, true)
|
90
|
-
.then((res) => res.pop());
|
105
|
+
const existingChange = (await client_1.client.findChanges(repository, searchConfig)).pop();
|
91
106
|
let hasChanges = true;
|
92
107
|
const message = typeof commit.message === 'string' ? [commit.message] : commit.message;
|
93
108
|
// In Gerrit, the change subject/title is the first line of the commit message
|
@@ -96,17 +111,19 @@ class GerritScm extends default_scm_1.DefaultGitScm {
|
|
96
111
|
firstMessageLines[0] = commit.prTitle;
|
97
112
|
message[0] = firstMessageLines.join('\n');
|
98
113
|
}
|
114
|
+
const changeId = existingChange?.change_id ?? generateChangeId();
|
99
115
|
commit.message = [
|
100
116
|
...message,
|
101
|
-
`Renovate-Branch: ${commit.branchName}\nChange-Id: ${
|
117
|
+
`Renovate-Branch: ${commit.branchName}\nChange-Id: ${changeId}`,
|
102
118
|
];
|
103
119
|
const commitResult = await git.prepareCommit({ ...commit, force: true });
|
104
120
|
if (commitResult) {
|
105
121
|
const { commitSha } = commitResult;
|
106
|
-
if (existingChange
|
107
|
-
const
|
108
|
-
|
109
|
-
|
122
|
+
if (existingChange) {
|
123
|
+
const currentRevision = existingChange.revisions[existingChange.current_revision];
|
124
|
+
const fetchRefSpec = currentRevision.ref;
|
125
|
+
await git.fetchRevSpec(fetchRefSpec); // fetch current ChangeSet for git diff
|
126
|
+
hasChanges = await git.hasDiff('HEAD', 'FETCH_HEAD'); // avoid pushing empty patch sets
|
110
127
|
}
|
111
128
|
if (hasChanges || commit.force) {
|
112
129
|
const pushOptions = ['notify=NONE'];
|
@@ -123,18 +140,23 @@ class GerritScm extends default_scm_1.DefaultGitScm {
|
|
123
140
|
}
|
124
141
|
}
|
125
142
|
}
|
126
|
-
return null; //empty commit, no changes in this Gerrit
|
143
|
+
return null; // empty commit, no changes in this Gerrit Change
|
127
144
|
}
|
128
145
|
deleteBranch(branchName) {
|
129
146
|
return Promise.resolve();
|
130
147
|
}
|
131
148
|
async mergeToLocal(branchName) {
|
132
|
-
const searchConfig = {
|
133
|
-
|
134
|
-
|
135
|
-
|
149
|
+
const searchConfig = {
|
150
|
+
state: 'open',
|
151
|
+
branchName,
|
152
|
+
limit: 1,
|
153
|
+
refreshCache: true,
|
154
|
+
requestDetails: ['CURRENT_REVISION'],
|
155
|
+
};
|
156
|
+
const change = (await client_1.client.findChanges(repository, searchConfig)).pop();
|
136
157
|
if (change) {
|
137
|
-
|
158
|
+
const currentRevision = change.revisions[change.current_revision];
|
159
|
+
return super.mergeToLocal(currentRevision.ref);
|
138
160
|
}
|
139
161
|
return super.mergeToLocal(branchName);
|
140
162
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scm.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gerrit/scm.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'crypto';\nimport { logger } from '../../../logger';\nimport * as git from '../../../util/git';\nimport type { CommitFilesConfig, LongCommitSha } from '../../../util/git/types';\nimport { hash } from '../../../util/hash';\nimport { DefaultGitScm } from '../default-scm';\nimport { client } from './client';\nimport type { GerritFindPRConfig } from './types';\n\nlet repository: string;\nlet username: string;\nexport function configureScm(repo: string, login: string): void {\n repository = repo;\n username = login;\n}\n\nexport class GerritScm extends DefaultGitScm {\n override async branchExists(branchName: string): Promise<boolean> {\n const searchConfig: GerritFindPRConfig = { state: 'open', branchName };\n const change = await client\n .findChanges(repository, searchConfig, true)\n .then((res) => res.pop());\n if (change) {\n return true;\n }\n return git.branchExists(branchName);\n }\n\n override async getBranchCommit(\n branchName: string,\n ): Promise<LongCommitSha | null> {\n const searchConfig: GerritFindPRConfig = { state: 'open', branchName };\n const change = await client\n .findChanges(repository, searchConfig, true)\n .then((res) => res.pop());\n if (change) {\n return change.current_revision as LongCommitSha;\n }\n return git.getBranchCommit(branchName);\n }\n\n override async isBranchBehindBase(\n branchName: string,\n baseBranch: string,\n ): Promise<boolean> {\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName,\n targetBranch: baseBranch,\n };\n const change = await client\n .findChanges(repository, searchConfig, true)\n .then((res) => res.pop());\n if (change) {\n const currentGerritPatchset = change.revisions[change.current_revision];\n return currentGerritPatchset.actions?.rebase.enabled === true;\n }\n return true;\n }\n\n override async isBranchConflicted(\n baseBranch: string,\n branch: string,\n ): Promise<boolean> {\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName: branch,\n targetBranch: baseBranch,\n };\n const change = (await client.findChanges(repository, searchConfig)).pop();\n if (change) {\n const mergeInfo = await client.getMergeableInfo(change);\n return !mergeInfo.mergeable;\n } else {\n logger.warn(\n { branch, baseBranch },\n 'There is no open change with this branch',\n );\n return true;\n }\n }\n\n override async isBranchModified(branchName: string): Promise<boolean> {\n const searchConfig: GerritFindPRConfig = { state: 'open', branchName };\n const change = await client\n .findChanges(repository, searchConfig, true)\n .then((res) => res.pop());\n if (change) {\n const currentGerritPatchset = change.revisions[change.current_revision];\n return currentGerritPatchset.uploader.username !== username;\n }\n return false;\n }\n\n override async commitAndPush(\n commit: CommitFilesConfig,\n ): Promise<LongCommitSha | null> {\n logger.debug(`commitAndPush(${commit.branchName})`);\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName: commit.branchName,\n targetBranch: commit.baseBranch,\n };\n const existingChange = await client\n .findChanges(repository, searchConfig, true)\n .then((res) => res.pop());\n\n let hasChanges = true;\n const message =\n typeof commit.message === 'string' ? [commit.message] : commit.message;\n\n // In Gerrit, the change subject/title is the first line of the commit message\n if (commit.prTitle) {\n const firstMessageLines = message[0].split('\\n');\n firstMessageLines[0] = commit.prTitle;\n message[0] = firstMessageLines.join('\\n');\n }\n\n commit.message = [\n ...message,\n `Renovate-Branch: ${commit.branchName}\\nChange-Id: ${existingChange?.change_id ?? generateChangeId()}`,\n ];\n const commitResult = await git.prepareCommit({ ...commit, force: true });\n if (commitResult) {\n const { commitSha } = commitResult;\n if (existingChange?.revisions && existingChange.current_revision) {\n const fetchRefSpec =\n existingChange.revisions[existingChange.current_revision].ref;\n await git.fetchRevSpec(fetchRefSpec); //fetch current ChangeSet for git diff\n hasChanges = await git.hasDiff('HEAD', 'FETCH_HEAD'); //avoid empty patchsets\n }\n if (hasChanges || commit.force) {\n const pushOptions = ['notify=NONE'];\n if (commit.autoApprove) {\n pushOptions.push('label=Code-Review+2');\n }\n const pushResult = await git.pushCommit({\n sourceRef: commit.branchName,\n targetRef: `refs/for/${commit.baseBranch!}%${pushOptions.join(',')}`,\n files: commit.files,\n });\n if (pushResult) {\n return commitSha;\n }\n }\n }\n return null; //empty commit, no changes in this Gerrit-Change\n }\n\n override deleteBranch(branchName: string): Promise<void> {\n return Promise.resolve();\n }\n\n override async mergeToLocal(branchName: string): Promise<void> {\n const searchConfig: GerritFindPRConfig = { state: 'open', branchName };\n const change = await client\n .findChanges(repository, searchConfig, true)\n .then((res) => res.pop());\n if (change) {\n return super.mergeToLocal(change.revisions[change.current_revision].ref);\n }\n return super.mergeToLocal(branchName);\n }\n}\n\n/**\n * This function should generate a Gerrit Change-ID analogous to the commit hook. We avoid the commit hook cause of security concerns.\n * random=$( (whoami ; hostname ; date; cat $1 ; echo $RANDOM) | git hash-object --stdin) prefixed with an 'I'.\n * TODO: Gerrit don't accept longer Change-IDs (sha256), but what happens with this https://git-scm.com/docs/hash-function-transition/ ?\n */\nfunction generateChangeId(): string {\n return 'I' + hash(randomUUID(), 'sha1');\n}\n"]}
|
1
|
+
{"version":3,"file":"scm.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gerrit/scm.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'crypto';\nimport { logger } from '../../../logger';\nimport * as git from '../../../util/git';\nimport type { CommitFilesConfig, LongCommitSha } from '../../../util/git/types';\nimport { hash } from '../../../util/hash';\nimport { DefaultGitScm } from '../default-scm';\nimport { client } from './client';\nimport type { GerritFindPRConfig } from './types';\n\nlet repository: string;\nlet username: string;\nexport function configureScm(repo: string, login: string): void {\n repository = repo;\n username = login;\n}\n\nexport class GerritScm extends DefaultGitScm {\n override async branchExists(branchName: string): Promise<boolean> {\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName,\n limit: 1,\n refreshCache: true,\n };\n const change = (await client.findChanges(repository, searchConfig)).pop();\n if (change) {\n return true;\n }\n return git.branchExists(branchName);\n }\n\n override async getBranchCommit(\n branchName: string,\n ): Promise<LongCommitSha | null> {\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName,\n limit: 1,\n refreshCache: true,\n requestDetails: ['CURRENT_REVISION'],\n };\n const change = (await client.findChanges(repository, searchConfig)).pop();\n if (change) {\n return change.current_revision as LongCommitSha;\n }\n return git.getBranchCommit(branchName);\n }\n\n override async isBranchBehindBase(\n branchName: string,\n baseBranch: string,\n ): Promise<boolean> {\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName,\n targetBranch: baseBranch,\n limit: 1,\n refreshCache: true,\n requestDetails: ['CURRENT_REVISION', 'CURRENT_ACTIONS'],\n };\n const change = (await client.findChanges(repository, searchConfig)).pop();\n if (change) {\n const currentRevision = change.revisions![change.current_revision!];\n return currentRevision.actions!.rebase.enabled === true;\n }\n return true;\n }\n\n override async isBranchConflicted(\n baseBranch: string,\n branch: string,\n ): Promise<boolean> {\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName: branch,\n targetBranch: baseBranch,\n limit: 1,\n };\n const change = (await client.findChanges(repository, searchConfig)).pop();\n if (change) {\n const mergeInfo = await client.getMergeableInfo(change);\n return !mergeInfo.mergeable;\n } else {\n logger.warn(\n { branch, baseBranch },\n 'There is no open change with this branch',\n );\n return true;\n }\n }\n\n override async isBranchModified(\n branchName: string,\n baseBranch: string,\n ): Promise<boolean> {\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName,\n targetBranch: baseBranch,\n limit: 1,\n refreshCache: true,\n requestDetails: ['CURRENT_REVISION', 'DETAILED_ACCOUNTS'],\n };\n const change = (await client.findChanges(repository, searchConfig)).pop();\n if (change) {\n const currentRevision = change.revisions![change.current_revision!];\n return currentRevision.uploader.username !== username;\n }\n return false;\n }\n\n override async commitAndPush(\n commit: CommitFilesConfig,\n ): Promise<LongCommitSha | null> {\n logger.debug(`commitAndPush(${commit.branchName})`);\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName: commit.branchName,\n targetBranch: commit.baseBranch,\n limit: 1,\n refreshCache: true,\n requestDetails: ['CURRENT_REVISION'],\n };\n const existingChange = (\n await client.findChanges(repository, searchConfig)\n ).pop();\n\n let hasChanges = true;\n const message =\n typeof commit.message === 'string' ? [commit.message] : commit.message;\n\n // In Gerrit, the change subject/title is the first line of the commit message\n if (commit.prTitle) {\n const firstMessageLines = message[0].split('\\n');\n firstMessageLines[0] = commit.prTitle;\n message[0] = firstMessageLines.join('\\n');\n }\n\n const changeId = existingChange?.change_id ?? generateChangeId();\n commit.message = [\n ...message,\n `Renovate-Branch: ${commit.branchName}\\nChange-Id: ${changeId}`,\n ];\n const commitResult = await git.prepareCommit({ ...commit, force: true });\n if (commitResult) {\n const { commitSha } = commitResult;\n if (existingChange) {\n const currentRevision =\n existingChange.revisions![existingChange.current_revision!];\n const fetchRefSpec = currentRevision.ref;\n await git.fetchRevSpec(fetchRefSpec); // fetch current ChangeSet for git diff\n hasChanges = await git.hasDiff('HEAD', 'FETCH_HEAD'); // avoid pushing empty patch sets\n }\n if (hasChanges || commit.force) {\n const pushOptions = ['notify=NONE'];\n if (commit.autoApprove) {\n pushOptions.push('label=Code-Review+2');\n }\n const pushResult = await git.pushCommit({\n sourceRef: commit.branchName,\n targetRef: `refs/for/${commit.baseBranch!}%${pushOptions.join(',')}`,\n files: commit.files,\n });\n if (pushResult) {\n return commitSha;\n }\n }\n }\n return null; // empty commit, no changes in this Gerrit Change\n }\n\n override deleteBranch(branchName: string): Promise<void> {\n return Promise.resolve();\n }\n\n override async mergeToLocal(branchName: string): Promise<void> {\n const searchConfig: GerritFindPRConfig = {\n state: 'open',\n branchName,\n limit: 1,\n refreshCache: true,\n requestDetails: ['CURRENT_REVISION'],\n };\n const change = (await client.findChanges(repository, searchConfig)).pop();\n if (change) {\n const currentRevision = change.revisions![change.current_revision!];\n return super.mergeToLocal(currentRevision.ref);\n }\n return super.mergeToLocal(branchName);\n }\n}\n\n/**\n * This function should generate a Gerrit Change-ID analogous to the commit hook. We avoid the commit hook cause of security concerns.\n * random=$( (whoami ; hostname ; date; cat $1 ; echo $RANDOM) | git hash-object --stdin) prefixed with an 'I'.\n * TODO: Gerrit don't accept longer Change-IDs (sha256), but what happens with this https://git-scm.com/docs/hash-function-transition/ ?\n */\nfunction generateChangeId(): string {\n return 'I' + hash(randomUUID(), 'sha1');\n}\n"]}
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import type { FindPRConfig } from '../types';
|
2
2
|
export interface GerritFindPRConfig extends FindPRConfig {
|
3
3
|
label?: string;
|
4
|
+
limit?: number;
|
5
|
+
requestDetails?: GerritRequestDetail[];
|
4
6
|
}
|
5
7
|
/**
|
6
8
|
* The Interfaces for the Gerrit API Responses ({@link https://gerrit-review.googlesource.com/Documentation/rest-api.html | REST-API})
|
@@ -23,36 +25,44 @@ export interface GerritBranchInfo {
|
|
23
25
|
revision: string;
|
24
26
|
}
|
25
27
|
export type GerritChangeStatus = 'NEW' | 'MERGED' | 'ABANDONED';
|
26
|
-
export type
|
28
|
+
export type GerritRequestDetail = 'SUBMITTABLE' | 'CHECK' | 'MESSAGES' | 'DETAILED_ACCOUNTS' | 'LABELS' | 'CURRENT_ACTIONS' | 'CURRENT_REVISION' | 'COMMIT_FOOTERS';
|
27
29
|
export interface GerritChange {
|
28
30
|
branch: string;
|
29
31
|
change_id: string;
|
30
32
|
subject: string;
|
31
33
|
status: GerritChangeStatus;
|
32
34
|
created: string;
|
35
|
+
/** Requires o=SUBMITTABLE. */
|
33
36
|
submittable?: boolean;
|
34
37
|
_number: number;
|
38
|
+
/** Requires o=LABELS. */
|
35
39
|
labels?: Record<string, GerritLabelInfo>;
|
36
|
-
|
40
|
+
/** Requires o=LABELS. */
|
41
|
+
reviewers?: {
|
42
|
+
REVIEWER?: GerritAccountInfo[];
|
43
|
+
};
|
44
|
+
/** Requires o=MESSAGES. */
|
37
45
|
messages?: GerritChangeMessageInfo[];
|
38
|
-
|
46
|
+
/** Requires o=CURRENT_REVISION. */
|
47
|
+
current_revision?: string;
|
39
48
|
/**
|
40
49
|
* All patch sets of this change as a map that maps the commit ID of the patch set to a RevisionInfo entity.
|
50
|
+
* Requires o=CURRENT_REVISION.
|
41
51
|
*/
|
42
|
-
revisions
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
52
|
+
revisions?: Record<string, GerritRevisionInfo>;
|
53
|
+
/**
|
54
|
+
* Potential consistency issues with the change (not related to labels).
|
55
|
+
* Requires o=CHECKS. */
|
56
|
+
problems?: unknown[];
|
47
57
|
}
|
48
58
|
export interface GerritRevisionInfo {
|
49
59
|
uploader: GerritAccountInfo;
|
50
|
-
/**
|
51
|
-
* The Git reference for the patch set.
|
52
|
-
*/
|
60
|
+
/** The Git reference for the patch set. */
|
53
61
|
ref: string;
|
62
|
+
/** Requires o=CURRENT_ACTIONS. */
|
54
63
|
actions?: Record<string, GerritActionInfo>;
|
55
|
-
|
64
|
+
/** Requires o=COMMIT_FOOTERS. */
|
65
|
+
commit_with_footers?: string;
|
56
66
|
}
|
57
67
|
export interface GerritChangeMessageInfo {
|
58
68
|
id: string;
|
@@ -71,6 +81,7 @@ export interface GerritActionInfo {
|
|
71
81
|
}
|
72
82
|
export interface GerritAccountInfo {
|
73
83
|
_account_id: number;
|
84
|
+
/** Requires o=DETAILED_ACCOUNTS. */
|
74
85
|
username?: string;
|
75
86
|
}
|
76
87
|
export interface GerritMergeableInfo {
|