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
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gerrit/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { FindPRConfig } from '../types';\n\nexport interface GerritFindPRConfig extends FindPRConfig {\n label?: string;\n}\n\n/**\n * The Interfaces for the Gerrit API Responses ({@link https://gerrit-review.googlesource.com/Documentation/rest-api.html | REST-API})\n * minimized to only needed properties.\n *\n * @packageDocumentation\n */\n\nexport interface GerritProjectInfo {\n id: string;\n name: string;\n state?: 'ACTIVE' | 'READ_ONLY' | 'HIDDEN';\n labels?: Record<string, GerritLabelTypeInfo>;\n}\n\nexport interface GerritLabelTypeInfo {\n values: Record<number, string>;\n default_value: number;\n}\n\nexport interface GerritBranchInfo {\n ref: string;\n revision: string;\n}\n\nexport type GerritChangeStatus = 'NEW' | 'MERGED' | 'ABANDONED';\n\nexport type
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gerrit/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { FindPRConfig } from '../types';\n\nexport interface GerritFindPRConfig extends FindPRConfig {\n label?: string;\n limit?: number;\n requestDetails?: GerritRequestDetail[];\n}\n\n/**\n * The Interfaces for the Gerrit API Responses ({@link https://gerrit-review.googlesource.com/Documentation/rest-api.html | REST-API})\n * minimized to only needed properties.\n *\n * @packageDocumentation\n */\n\nexport interface GerritProjectInfo {\n id: string;\n name: string;\n state?: 'ACTIVE' | 'READ_ONLY' | 'HIDDEN';\n labels?: Record<string, GerritLabelTypeInfo>;\n}\n\nexport interface GerritLabelTypeInfo {\n values: Record<number, string>;\n default_value: number;\n}\n\nexport interface GerritBranchInfo {\n ref: string;\n revision: string;\n}\n\nexport type GerritChangeStatus = 'NEW' | 'MERGED' | 'ABANDONED';\n\nexport type GerritRequestDetail =\n | 'SUBMITTABLE'\n | 'CHECK'\n | 'MESSAGES'\n | 'DETAILED_ACCOUNTS'\n | 'LABELS'\n | 'CURRENT_ACTIONS'\n | 'CURRENT_REVISION'\n | 'COMMIT_FOOTERS';\n\nexport interface GerritChange {\n branch: string;\n change_id: string;\n subject: string;\n status: GerritChangeStatus;\n created: string;\n /** Requires o=SUBMITTABLE. */\n submittable?: boolean;\n _number: number;\n /** Requires o=LABELS. */\n labels?: Record<string, GerritLabelInfo>;\n /** Requires o=LABELS. */\n reviewers?: {\n REVIEWER?: GerritAccountInfo[];\n };\n /** Requires o=MESSAGES. */\n messages?: GerritChangeMessageInfo[];\n /** Requires o=CURRENT_REVISION. */\n current_revision?: string;\n /**\n * All patch sets of this change as a map that maps the commit ID of the patch set to a RevisionInfo entity.\n * Requires o=CURRENT_REVISION.\n */\n revisions?: Record<string, GerritRevisionInfo>;\n /**\n * Potential consistency issues with the change (not related to labels).\n * Requires o=CHECKS. */\n problems?: unknown[];\n}\n\nexport interface GerritRevisionInfo {\n uploader: GerritAccountInfo;\n /** The Git reference for the patch set. */\n ref: string;\n /** Requires o=CURRENT_ACTIONS. */\n actions?: Record<string, GerritActionInfo>;\n /** Requires o=COMMIT_FOOTERS. */\n commit_with_footers?: string;\n}\n\nexport interface GerritChangeMessageInfo {\n id: string;\n message: string;\n tag?: string;\n}\n\nexport interface GerritLabelInfo {\n approved?: GerritAccountInfo;\n rejected?: GerritAccountInfo;\n /** If true, the label blocks submit operation. If not set, the default is false. */\n blocking?: boolean;\n}\n\nexport interface GerritActionInfo {\n method?: string;\n enabled?: boolean;\n}\n\nexport interface GerritAccountInfo {\n _account_id: number;\n /** Requires o=DETAILED_ACCOUNTS. */\n username?: string;\n}\n\nexport interface GerritMergeableInfo {\n submit_type:\n | 'MERGE_IF_NECESSARY'\n | 'FAST_FORWARD_ONLY'\n | 'REBASE_IF_NECESSARY'\n | 'REBASE_ALWAYS'\n | 'MERGE_ALWAYS'\n | 'CHERRY_PICK';\n mergeable: boolean;\n}\n"]}
|
@@ -1,11 +1,15 @@
|
|
1
1
|
import type { BranchStatus, PrState } from '../../../types';
|
2
2
|
import type { Pr } from '../types';
|
3
|
-
import type { GerritChange, GerritChangeStatus, GerritLabelTypeInfo } from './types';
|
3
|
+
import type { GerritChange, GerritChangeStatus, GerritLabelTypeInfo, GerritRequestDetail } from './types';
|
4
4
|
export declare const TAG_PULL_REQUEST_BODY = "pull-request";
|
5
|
+
export declare const REQUEST_DETAILS_FOR_PRS: GerritRequestDetail[];
|
5
6
|
export declare function getGerritRepoUrl(repository: string, endpoint: string): string;
|
6
|
-
export declare function mapPrStateToGerritFilter(state?: PrState): string;
|
7
|
-
export declare function mapGerritChangeToPr(change: GerritChange
|
8
|
-
|
7
|
+
export declare function mapPrStateToGerritFilter(state?: PrState): string | null;
|
8
|
+
export declare function mapGerritChangeToPr(change: GerritChange, knownProperties?: {
|
9
|
+
sourceBranch?: string;
|
10
|
+
prBody?: string;
|
11
|
+
}): Pr | null;
|
12
|
+
export declare function mapGerritChangeStateToPrState(state: GerritChangeStatus): 'merged' | 'open' | 'closed';
|
9
13
|
export declare function extractSourceBranch(change: GerritChange): string | undefined;
|
10
14
|
export declare function findPullRequestBody(change: GerritChange): string | undefined;
|
11
15
|
export declare function mapBranchStatusToLabel(state: BranchStatus | 'UNKNOWN', // suppress default path code removal
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.TAG_PULL_REQUEST_BODY = void 0;
|
3
|
+
exports.REQUEST_DETAILS_FOR_PRS = exports.TAG_PULL_REQUEST_BODY = void 0;
|
4
4
|
exports.getGerritRepoUrl = getGerritRepoUrl;
|
5
5
|
exports.mapPrStateToGerritFilter = mapPrStateToGerritFilter;
|
6
6
|
exports.mapGerritChangeToPr = mapGerritChangeToPr;
|
@@ -16,6 +16,13 @@ const regex_1 = require("../../../util/regex");
|
|
16
16
|
const url_1 = require("../../../util/url");
|
17
17
|
const pr_body_1 = require("../pr-body");
|
18
18
|
exports.TAG_PULL_REQUEST_BODY = 'pull-request';
|
19
|
+
exports.REQUEST_DETAILS_FOR_PRS = [
|
20
|
+
'MESSAGES', // to get the pr body
|
21
|
+
'LABELS', // to get the reviewers
|
22
|
+
'DETAILED_ACCOUNTS', // to get the reviewers usernames
|
23
|
+
'CURRENT_REVISION', // to get the commit message
|
24
|
+
'COMMIT_FOOTERS', // to get the commit message
|
25
|
+
];
|
19
26
|
function getGerritRepoUrl(repository, endpoint) {
|
20
27
|
// Find options for current host and determine Git endpoint
|
21
28
|
const opts = hostRules.find({
|
@@ -37,31 +44,36 @@ function getGerritRepoUrl(repository, endpoint) {
|
|
37
44
|
}
|
38
45
|
function mapPrStateToGerritFilter(state) {
|
39
46
|
switch (state) {
|
40
|
-
case 'closed':
|
41
|
-
return 'status:closed';
|
42
47
|
case 'merged':
|
43
48
|
return 'status:merged';
|
44
|
-
case '!open':
|
45
|
-
return '-status:open';
|
46
49
|
case 'open':
|
47
50
|
return 'status:open';
|
51
|
+
case 'closed':
|
52
|
+
return 'status:abandoned';
|
53
|
+
case '!open':
|
54
|
+
return '-status:open';
|
48
55
|
case 'all':
|
49
56
|
default:
|
50
|
-
return
|
57
|
+
return null;
|
51
58
|
}
|
52
59
|
}
|
53
|
-
function mapGerritChangeToPr(change) {
|
60
|
+
function mapGerritChangeToPr(change, knownProperties) {
|
61
|
+
const sourceBranch = knownProperties?.sourceBranch ?? extractSourceBranch(change);
|
62
|
+
if (!sourceBranch) {
|
63
|
+
return null;
|
64
|
+
}
|
54
65
|
return {
|
55
66
|
number: change._number,
|
56
67
|
state: mapGerritChangeStateToPrState(change.status),
|
57
|
-
sourceBranch
|
68
|
+
sourceBranch,
|
58
69
|
targetBranch: change.branch,
|
59
70
|
title: change.subject,
|
60
71
|
createdAt: change.created?.replace(' ', 'T'),
|
61
|
-
reviewers: change.reviewers?.REVIEWER?.
|
72
|
+
reviewers: change.reviewers?.REVIEWER?.map((reviewer) => reviewer.username) ?? [],
|
62
73
|
bodyStruct: {
|
63
|
-
hash: (0, pr_body_1.hashBody)(findPullRequestBody(change)),
|
74
|
+
hash: (0, pr_body_1.hashBody)(knownProperties?.prBody ?? findPullRequestBody(change)),
|
64
75
|
},
|
76
|
+
sha: change.current_revision,
|
65
77
|
};
|
66
78
|
}
|
67
79
|
function mapGerritChangeStateToPrState(state) {
|
@@ -73,13 +85,13 @@ function mapGerritChangeStateToPrState(state) {
|
|
73
85
|
case 'ABANDONED':
|
74
86
|
return 'closed';
|
75
87
|
}
|
76
|
-
return 'all';
|
77
88
|
}
|
78
89
|
function extractSourceBranch(change) {
|
79
90
|
let sourceBranch = undefined;
|
80
91
|
if (change.current_revision) {
|
81
92
|
const re = (0, regex_1.regEx)(/^Renovate-Branch: (.+)$/m);
|
82
|
-
const
|
93
|
+
const currentRevision = change.revisions[change.current_revision];
|
94
|
+
const message = currentRevision.commit_with_footers;
|
83
95
|
if (message) {
|
84
96
|
sourceBranch = re.exec(message)?.[1];
|
85
97
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gerrit/utils.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gerrit/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { CONFIG_GIT_URL_UNAVAILABLE } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus, PrState } from '../../../types';\nimport type { LongCommitSha } from '../../../util/git/types';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport { hashBody } from '../pr-body';\nimport type { Pr } from '../types';\nimport type {\n GerritChange,\n GerritChangeStatus,\n GerritLabelTypeInfo,\n GerritRequestDetail,\n} from './types';\n\nexport const TAG_PULL_REQUEST_BODY = 'pull-request';\n\nexport const REQUEST_DETAILS_FOR_PRS: GerritRequestDetail[] = [\n 'MESSAGES', // to get the pr body\n 'LABELS', // to get the reviewers\n 'DETAILED_ACCOUNTS', // to get the reviewers usernames\n 'CURRENT_REVISION', // to get the commit message\n 'COMMIT_FOOTERS', // to get the commit message\n] as const;\n\nexport function getGerritRepoUrl(repository: string, endpoint: string): string {\n // Find options for current host and determine Git endpoint\n const opts = hostRules.find({\n hostType: 'gerrit',\n url: endpoint,\n });\n\n const url = parseUrl(endpoint);\n if (!url) {\n throw new Error(CONFIG_GIT_URL_UNAVAILABLE);\n }\n if (!(opts.username && opts.password)) {\n throw new Error(\n 'Init: You must configure a Gerrit Server username/password',\n );\n }\n url.username = opts.username;\n url.password = opts.password;\n url.pathname = joinUrlParts(\n url.pathname,\n 'a',\n encodeURIComponent(repository),\n );\n logger.trace(\n { url: url.toString() },\n 'using URL based on configured endpoint',\n );\n return url.toString();\n}\n\nexport function mapPrStateToGerritFilter(state?: PrState): string | null {\n switch (state) {\n case 'merged':\n return 'status:merged';\n case 'open':\n return 'status:open';\n case 'closed':\n return 'status:abandoned';\n case '!open':\n return '-status:open';\n case 'all':\n default:\n return null;\n }\n}\n\nexport function mapGerritChangeToPr(\n change: GerritChange,\n knownProperties?: {\n sourceBranch?: string;\n prBody?: string;\n },\n): Pr | null {\n const sourceBranch =\n knownProperties?.sourceBranch ?? extractSourceBranch(change);\n if (!sourceBranch) {\n return null;\n }\n return {\n number: change._number,\n state: mapGerritChangeStateToPrState(change.status),\n sourceBranch,\n targetBranch: change.branch,\n title: change.subject,\n createdAt: change.created?.replace(' ', 'T'),\n reviewers:\n change.reviewers?.REVIEWER?.map((reviewer) => reviewer.username!) ?? [],\n bodyStruct: {\n hash: hashBody(knownProperties?.prBody ?? findPullRequestBody(change)),\n },\n sha: change.current_revision as LongCommitSha,\n };\n}\n\nexport function mapGerritChangeStateToPrState(\n state: GerritChangeStatus,\n): 'merged' | 'open' | 'closed' {\n switch (state) {\n case 'NEW':\n return 'open';\n case 'MERGED':\n return 'merged';\n case 'ABANDONED':\n return 'closed';\n }\n}\n\nexport function extractSourceBranch(change: GerritChange): string | undefined {\n let sourceBranch: string | undefined = undefined;\n\n if (change.current_revision) {\n const re = regEx(/^Renovate-Branch: (.+)$/m);\n const currentRevision = change.revisions![change.current_revision];\n const message = currentRevision.commit_with_footers;\n if (message) {\n sourceBranch = re.exec(message)?.[1];\n }\n }\n\n return sourceBranch ?? undefined;\n}\n\nexport function findPullRequestBody(change: GerritChange): string | undefined {\n const msg = Array.from(change.messages ?? [])\n .reverse()\n .find((msg) => msg.tag === TAG_PULL_REQUEST_BODY);\n if (msg) {\n return msg.message.replace(/^Patch Set \\d+:\\n\\n/, ''); //TODO: check how to get rid of the auto-added prefix?\n }\n return undefined;\n}\n\nexport function mapBranchStatusToLabel(\n state: BranchStatus | 'UNKNOWN', // suppress default path code removal\n label: GerritLabelTypeInfo,\n): number {\n const numbers = Object.keys(label.values).map((x) => parseInt(x, 10));\n switch (state) {\n case 'green':\n return Math.max(...numbers);\n case 'yellow':\n case 'red':\n return Math.min(...numbers);\n }\n /* v8 ignore next */\n return label.default_value;\n}\n"]}
|
@@ -10,6 +10,7 @@ const error_messages_1 = require("../../../constants/error-messages");
|
|
10
10
|
const logger_1 = require("../../../logger");
|
11
11
|
const array_1 = require("../../../util/array");
|
12
12
|
const common_1 = require("../../../util/common");
|
13
|
+
const env_1 = require("../../../util/env");
|
13
14
|
const git = tslib_1.__importStar(require("../../../util/git"));
|
14
15
|
const gitea_1 = require("../../../util/http/gitea");
|
15
16
|
const promises_1 = require("../../../util/promises");
|
@@ -134,9 +135,10 @@ const platform = {
|
|
134
135
|
gitAuthor = `${user.full_name ?? user.username} <${user.email}>`;
|
135
136
|
botUserID = user.id;
|
136
137
|
botUserName = user.username;
|
138
|
+
const env = (0, env_1.getEnv)();
|
137
139
|
/* v8 ignore start: experimental feature */
|
138
|
-
if (semver_1.default.valid(
|
139
|
-
defaults.version =
|
140
|
+
if (semver_1.default.valid(env.RENOVATE_X_PLATFORM_VERSION)) {
|
141
|
+
defaults.version = env.RENOVATE_X_PLATFORM_VERSION;
|
140
142
|
} /* v8 ignore stop */
|
141
143
|
else {
|
142
144
|
defaults.version = await helper.getVersion({ token });
|
@@ -213,6 +215,9 @@ const platform = {
|
|
213
215
|
else if (repo.allow_merge_commits) {
|
214
216
|
config.mergeMethod = 'merge';
|
215
217
|
}
|
218
|
+
else if (repo.allow_fast_forward_only_merge) {
|
219
|
+
config.mergeMethod = 'fast-forward';
|
220
|
+
}
|
216
221
|
else {
|
217
222
|
logger_1.logger.debug('Repository has no allowed merge methods - aborting renovation');
|
218
223
|
throw new Error(error_messages_1.REPOSITORY_BLOCKED);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gitea/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport semver from 'semver';\nimport {\n REPOSITORY_ACCESS_FORBIDDEN,\n REPOSITORY_ARCHIVED,\n REPOSITORY_BLOCKED,\n REPOSITORY_CHANGED,\n REPOSITORY_EMPTY,\n REPOSITORY_MIRRORED,\n} from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus } from '../../../types';\nimport { deduplicateArray } from '../../../util/array';\nimport { parseJson } from '../../../util/common';\nimport * as git from '../../../util/git';\nimport { setBaseUrl } from '../../../util/http/gitea';\nimport { map } from '../../../util/promises';\nimport { sanitize } from '../../../util/sanitize';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport { getPrBodyStruct, hashBody } from '../pr-body';\nimport type {\n AutodiscoverConfig,\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueConfig,\n FindPRConfig,\n Issue,\n MergePRConfig,\n Platform,\n PlatformParams,\n PlatformResult,\n Pr,\n RepoParams,\n RepoResult,\n RepoSortMethod,\n SortMethod,\n UpdatePrConfig,\n} from '../types';\nimport { repoFingerprint } from '../util';\nimport { smartTruncate } from '../utils/pr-body';\nimport * as helper from './gitea-helper';\nimport { giteaHttp } from './gitea-helper';\nimport { GiteaPrCache } from './pr-cache';\nimport type {\n CombinedCommitStatus,\n Comment,\n IssueState,\n Label,\n PRMergeMethod,\n PRUpdateParams,\n Repo,\n} from './types';\nimport {\n DRAFT_PREFIX,\n getMergeMethod,\n getRepoUrl,\n smartLinks,\n toRenovatePR,\n trimTrailingApiPath,\n usableRepo,\n} from './utils';\n\ninterface GiteaRepoConfig {\n ignorePrAuthor: boolean;\n repository: string;\n mergeMethod: PRMergeMethod;\n\n issueList: Promise<Issue[]> | null;\n labelList: Promise<Label[]> | null;\n defaultBranch: string;\n cloneSubmodules: boolean;\n cloneSubmodulesFilter: string[] | undefined;\n hasIssuesEnabled: boolean;\n}\n\nexport const id = 'gitea';\n\nconst defaults = {\n hostType: 'gitea',\n endpoint: 'https://gitea.com/',\n version: '0.0.0',\n isForgejo: false,\n};\n\nlet config: GiteaRepoConfig = {} as any;\nlet botUserID: number;\nlet botUserName: string;\n\nexport function resetPlatform(): void {\n config = {} as any;\n botUserID = undefined as never;\n botUserName = undefined as never;\n defaults.hostType = 'gitea';\n defaults.endpoint = 'https://gitea.com/';\n defaults.version = '0.0.0';\n defaults.isForgejo = false;\n setBaseUrl(defaults.endpoint);\n}\n\nfunction toRenovateIssue(data: Issue): Issue {\n return {\n number: data.number,\n state: data.state,\n title: data.title,\n body: data.body,\n };\n}\n\nfunction matchesState(actual: string, expected: string): boolean {\n if (expected === 'all') {\n return true;\n }\n if (expected.startsWith('!')) {\n return actual !== expected.substring(1);\n }\n\n return actual === expected;\n}\n\nfunction findCommentByTopic(\n comments: Comment[],\n topic: string,\n): Comment | null {\n return comments.find((c) => c.body.startsWith(`### ${topic}\\n\\n`)) ?? null;\n}\n\nfunction findCommentByContent(\n comments: Comment[],\n content: string,\n): Comment | null {\n return comments.find((c) => c.body.trim() === content) ?? null;\n}\n\nfunction getLabelList(): Promise<Label[]> {\n if (config.labelList === null) {\n const repoLabels = helper\n .getRepoLabels(config.repository, {\n memCache: false,\n })\n .then((labels) => {\n logger.debug(`Retrieved ${labels.length} repo labels`);\n return labels;\n });\n\n const orgLabels = helper\n .getOrgLabels(config.repository.split('/')[0], {\n memCache: false,\n })\n .then((labels) => {\n logger.debug(`Retrieved ${labels.length} org labels`);\n return labels;\n })\n .catch((err) => {\n // Will fail if owner of repo is not org or Gitea version < 1.12\n logger.debug(`Unable to fetch organization labels`);\n return [] as Label[];\n });\n\n config.labelList = Promise.all([repoLabels, orgLabels]).then((labels) =>\n ([] as Label[]).concat(...labels),\n );\n }\n\n return config.labelList;\n}\n\nasync function lookupLabelByName(name: string): Promise<number | null> {\n logger.debug(`lookupLabelByName(${name})`);\n const labelList = await getLabelList();\n return labelList.find((l) => l.name === name)?.id ?? null;\n}\n\ninterface FetchRepositoriesArgs {\n topic?: string;\n sort?: RepoSortMethod;\n order?: SortMethod;\n}\n\nasync function fetchRepositories({\n topic,\n sort,\n order,\n}: FetchRepositoriesArgs): Promise<string[]> {\n const repos = await helper.searchRepos({\n uid: botUserID,\n archived: false,\n ...(topic && {\n topic: true,\n q: topic,\n }),\n ...(sort && {\n sort,\n }),\n ...(order && {\n order,\n }),\n });\n return repos.filter(usableRepo).map((r) => r.full_name);\n}\n\nconst platform: Platform = {\n async initPlatform({\n endpoint,\n token,\n }: PlatformParams): Promise<PlatformResult> {\n if (!token) {\n throw new Error('Init: You must configure a Gitea personal access token');\n }\n\n if (endpoint) {\n let baseEndpoint = trimTrailingApiPath(endpoint);\n baseEndpoint = ensureTrailingSlash(baseEndpoint);\n defaults.endpoint = baseEndpoint;\n } else {\n logger.debug('Using default Gitea endpoint: ' + defaults.endpoint);\n }\n setBaseUrl(defaults.endpoint);\n\n let gitAuthor: string;\n try {\n const user = await helper.getCurrentUser({ token });\n gitAuthor = `${user.full_name ?? user.username} <${user.email}>`;\n botUserID = user.id;\n botUserName = user.username;\n /* v8 ignore start: experimental feature */\n if (semver.valid(process.env.RENOVATE_X_PLATFORM_VERSION)) {\n defaults.version = process.env.RENOVATE_X_PLATFORM_VERSION!;\n } /* v8 ignore stop */ else {\n defaults.version = await helper.getVersion({ token });\n }\n if (defaults.version?.includes('gitea-')) {\n defaults.isForgejo = true;\n }\n logger.debug(\n `${defaults.isForgejo ? 'Forgejo' : 'Gitea'} version: ${defaults.version}`,\n );\n } catch (err) {\n logger.debug(\n { err },\n 'Error authenticating with Gitea. Check your token',\n );\n throw new Error('Init: Authentication failure');\n }\n\n return {\n endpoint: defaults.endpoint,\n gitAuthor,\n };\n },\n\n async getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n ): Promise<string | null> {\n const repo = repoName ?? config.repository;\n const contents = await helper.getRepoContents(repo, fileName, branchOrTag);\n return contents.contentString ?? null;\n },\n\n async getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n ): Promise<any> {\n // TODO #22198\n const raw = await platform.getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n },\n\n async initRepo({\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n gitUrl,\n ignorePrAuthor,\n }: RepoParams): Promise<RepoResult> {\n let repo: Repo;\n\n config = {} as any;\n config.repository = repository;\n config.cloneSubmodules = !!cloneSubmodules;\n config.cloneSubmodulesFilter = cloneSubmodulesFilter;\n config.ignorePrAuthor = !!ignorePrAuthor;\n\n // Try to fetch information about repository\n try {\n repo = await helper.getRepo(repository);\n } catch (err) {\n logger.debug({ err }, 'Unknown Gitea initRepo error');\n throw err;\n }\n\n // Ensure appropriate repository state and permissions\n if (repo.archived) {\n logger.debug('Repository is archived - aborting renovation');\n throw new Error(REPOSITORY_ARCHIVED);\n }\n if (repo.mirror) {\n logger.debug('Repository is a mirror - aborting renovation');\n throw new Error(REPOSITORY_MIRRORED);\n }\n if (repo.permissions.pull === false || repo.permissions.push === false) {\n logger.debug(\n 'Repository does not permit pull or push - aborting renovation',\n );\n throw new Error(REPOSITORY_ACCESS_FORBIDDEN);\n }\n if (repo.empty) {\n logger.debug('Repository is empty - aborting renovation');\n throw new Error(REPOSITORY_EMPTY);\n }\n\n if (repo.has_pull_requests === false) {\n logger.debug('Repo has disabled pull requests - aborting renovation');\n throw new Error(REPOSITORY_BLOCKED);\n }\n\n if (repo.allow_rebase) {\n config.mergeMethod = 'rebase';\n } else if (repo.allow_rebase_explicit) {\n config.mergeMethod = 'rebase-merge';\n } else if (repo.allow_squash_merge) {\n config.mergeMethod = 'squash';\n } else if (repo.allow_merge_commits) {\n config.mergeMethod = 'merge';\n } else {\n logger.debug(\n 'Repository has no allowed merge methods - aborting renovation',\n );\n throw new Error(REPOSITORY_BLOCKED);\n }\n\n // Determine author email and branches\n config.defaultBranch = repo.default_branch;\n logger.debug(`${repository} default branch = ${config.defaultBranch}`);\n\n const url = getRepoUrl(repo, gitUrl, defaults.endpoint);\n\n // Initialize Git storage\n await git.initRepo({\n ...config,\n url,\n });\n\n // Reset cached resources\n config.issueList = null;\n config.labelList = null;\n config.hasIssuesEnabled = !repo.external_tracker && repo.has_issues;\n\n return {\n defaultBranch: config.defaultBranch,\n isFork: !!repo.fork,\n repoFingerprint: repoFingerprint(repo.id, defaults.endpoint),\n };\n },\n\n async getRepos(config?: AutodiscoverConfig): Promise<string[]> {\n logger.debug('Auto-discovering Gitea repositories');\n try {\n if (config?.topics) {\n logger.debug({ topics: config.topics }, 'Auto-discovering by topics');\n const fetchRepoArgs: FetchRepositoriesArgs[] = config.topics.map(\n (topic) => {\n return {\n topic,\n sort: config.sort,\n order: config.order,\n };\n },\n );\n const repos = await map(fetchRepoArgs, fetchRepositories);\n return deduplicateArray(repos.flat());\n } else if (config?.namespaces) {\n logger.debug(\n { namespaces: config.namespaces },\n 'Auto-discovering by organization',\n );\n const repos = await map(\n config.namespaces,\n async (organization: string) => {\n const orgRepos = await helper.orgListRepos(organization);\n return orgRepos\n .filter((r) => !r.mirror && !r.archived)\n .map((r) => r.full_name);\n },\n );\n return deduplicateArray(repos.flat());\n } else {\n return await fetchRepositories({\n sort: config?.sort,\n order: config?.order,\n });\n }\n } catch (err) {\n logger.error({ err }, 'Gitea getRepos() error');\n throw err;\n }\n },\n\n async setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: target_url,\n }: BranchStatusConfig): Promise<void> {\n try {\n // Create new status for branch commit\n const branchCommit = git.getBranchCommit(branchName);\n // TODO: check branchCommit\n\n await helper.createCommitStatus(config.repository, branchCommit!, {\n state: helper.renovateToGiteaStatusMapping[state] || 'pending',\n context,\n description,\n ...(target_url && { target_url }),\n });\n\n // Refresh caches by re-fetching commit status for branch\n await helper.getCombinedCommitStatus(config.repository, branchName, {\n memCache: false,\n });\n } catch (err) {\n logger.warn({ err }, 'Failed to set branch status');\n }\n },\n\n async getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n ): Promise<BranchStatus> {\n let ccs: CombinedCommitStatus;\n try {\n ccs = await helper.getCombinedCommitStatus(config.repository, branchName);\n } catch (err) {\n if (err.statusCode === 404) {\n logger.debug(\n 'Received 404 when checking branch status, assuming branch deletion',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n\n logger.debug('Unknown error when checking branch status');\n throw err;\n }\n\n logger.debug({ ccs }, 'Branch status check result');\n if (\n !internalChecksAsSuccess &&\n ccs.worstStatus === 'success' &&\n ccs.statuses.every((status) => status.context?.startsWith('renovate/'))\n ) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n return 'yellow';\n }\n\n /* v8 ignore next */\n return helper.giteaToRenovateStatusMapping[ccs.worstStatus] ?? 'yellow';\n },\n\n async getBranchStatusCheck(\n branchName: string,\n context: string,\n ): Promise<BranchStatus | null> {\n const ccs = await helper.getCombinedCommitStatus(\n config.repository,\n branchName,\n );\n const cs = ccs.statuses.find((s) => s.context === context);\n if (!cs) {\n return null;\n } // no status check exists\n const status = helper.giteaToRenovateStatusMapping[cs.status];\n if (status) {\n return status;\n }\n logger.warn(\n { check: cs },\n 'Could not map Gitea status value to Renovate status',\n );\n return 'yellow';\n },\n\n getPrList(): Promise<Pr[]> {\n return GiteaPrCache.getPrs(\n giteaHttp,\n config.repository,\n config.ignorePrAuthor,\n botUserName,\n );\n },\n\n async getPr(number: number): Promise<Pr | null> {\n // Search for pull request in cached list or attempt to query directly\n const prList = await platform.getPrList();\n let pr = prList.find((p) => p.number === number) ?? null;\n if (pr) {\n logger.debug('Returning from cached PRs');\n } else {\n logger.debug('PR not found in cached PRs - trying to fetch directly');\n const gpr = await helper.getPR(config.repository, number);\n pr = toRenovatePR(gpr, botUserName);\n\n // Add pull request to cache for further lookups / queries\n if (pr) {\n await GiteaPrCache.setPr(\n giteaHttp,\n config.repository,\n config.ignorePrAuthor,\n botUserName,\n pr,\n );\n }\n }\n\n // Abort and return null if no match was found\n if (!pr) {\n return null;\n }\n\n return pr;\n },\n\n async findPr({\n branchName,\n prTitle: title,\n state = 'all',\n includeOtherAuthors,\n targetBranch,\n }: FindPRConfig): Promise<Pr | null> {\n logger.debug(`findPr(${branchName}, ${title!}, ${state})`);\n if (includeOtherAuthors && is.string(targetBranch)) {\n // do not use pr cache as it only fetches prs created by the bot account\n const pr = await helper.getPRByBranch(\n config.repository,\n targetBranch,\n branchName,\n );\n if (!pr) {\n return null;\n }\n\n return toRenovatePR(pr, null);\n }\n const prList = await platform.getPrList();\n const pr = prList.find(\n (p) =>\n p.sourceRepo === config.repository &&\n p.sourceBranch === branchName &&\n matchesState(p.state, state) &&\n (!title || p.title === title),\n );\n\n if (pr) {\n logger.debug(`Found PR #${pr.number}`);\n }\n return pr ?? null;\n },\n\n async createPr({\n sourceBranch,\n targetBranch,\n prTitle,\n prBody: rawBody,\n labels: labelNames,\n platformPrOptions,\n draftPR,\n }: CreatePRConfig): Promise<Pr> {\n let title = prTitle;\n const base = targetBranch;\n const head = sourceBranch;\n const body = sanitize(rawBody);\n if (draftPR) {\n title = DRAFT_PREFIX + title;\n }\n\n logger.debug(`Creating pull request: ${title} (${head} => ${base})`);\n try {\n const labels = Array.isArray(labelNames)\n ? await map(labelNames, lookupLabelByName)\n : [];\n const gpr = await helper.createPR(config.repository, {\n base,\n head,\n title,\n body,\n labels: labels.filter(is.number),\n });\n\n if (platformPrOptions?.usePlatformAutomerge) {\n // Only Gitea v1.24.0+ and Forgejo v10.0.0+ support delete_branch_after_merge.\n // This is required to not have undesired behavior when renovate finds existing branches on next run.\n if (\n semver.gte(defaults.version, defaults.isForgejo ? '10.0.0' : '1.24.0')\n ) {\n try {\n await helper.mergePR(config.repository, gpr.number, {\n Do:\n getMergeMethod(platformPrOptions?.automergeStrategy) ??\n config.mergeMethod,\n merge_when_checks_succeed: true,\n delete_branch_after_merge: true,\n });\n\n logger.debug(\n { prNumber: gpr.number },\n 'Gitea-native automerge: success',\n );\n } catch (err) {\n logger.warn(\n { err, prNumber: gpr.number },\n 'Gitea-native automerge: fail',\n );\n }\n } else {\n logger.debug(\n { prNumber: gpr.number },\n `Gitea-native automerge: not supported on this version of ${defaults.isForgejo ? 'Forgejo' : 'Gitea'}. Use ${defaults.isForgejo ? '10.0.0' : '1.24.0'} or newer.`,\n );\n }\n }\n\n const pr = toRenovatePR(gpr, botUserName);\n if (!pr) {\n throw new Error('Can not parse newly created Pull Request');\n }\n\n await GiteaPrCache.setPr(\n giteaHttp,\n config.repository,\n config.ignorePrAuthor,\n botUserName,\n pr,\n );\n return pr;\n } catch (err) {\n // When the user manually deletes a branch from Renovate, the PR remains but is no longer linked to any branch. In\n // the most recent versions of Gitea, the PR gets automatically closed when that happens, but older versions do\n // not handle this properly and keep the PR open. As pushing a branch with the same name resurrects the PR, this\n // would cause a HTTP 409 conflict error, which we hereby gracefully handle.\n if (err.statusCode === 409) {\n logger.warn(\n { prTitle: title, sourceBranch },\n 'Attempting to gracefully recover from 409 Conflict response in createPr()',\n );\n\n // Refresh cached PR list and search for pull request with matching information\n GiteaPrCache.forceSync();\n const pr = await platform.findPr({\n branchName: sourceBranch,\n state: 'open',\n });\n\n // If a valid PR was found, return and gracefully recover from the error. Otherwise, abort and throw error.\n if (pr?.bodyStruct) {\n if (pr.title !== title || pr.bodyStruct.hash !== hashBody(body)) {\n logger.debug(\n `Recovered from 409 Conflict, but PR for ${sourceBranch} is outdated. Updating...`,\n );\n await platform.updatePr({\n number: pr.number,\n prTitle: title,\n prBody: body,\n });\n pr.title = title;\n pr.bodyStruct = getPrBodyStruct(body);\n } else {\n logger.debug(\n `Recovered from 409 Conflict and PR for ${sourceBranch} is up-to-date`,\n );\n }\n\n return pr;\n }\n }\n\n throw err;\n }\n },\n\n async updatePr({\n number,\n prTitle,\n prBody: body,\n labels,\n state,\n targetBranch,\n }: UpdatePrConfig): Promise<void> {\n let title = prTitle;\n if ((await getPrList()).find((pr) => pr.number === number)?.isDraft) {\n title = DRAFT_PREFIX + title;\n }\n\n const prUpdateParams: PRUpdateParams = {\n title,\n ...(body && { body }),\n ...(state && { state }),\n };\n if (targetBranch) {\n prUpdateParams.base = targetBranch;\n }\n\n /**\n * Update PR labels.\n * In the Gitea API, labels are replaced on each update if the field is present.\n * If the field is not present (i.e., undefined), labels aren't updated.\n * However, the labels array must contain label IDs instead of names,\n * so a lookup is performed to fetch the details (including the ID) of each label.\n */\n if (Array.isArray(labels)) {\n prUpdateParams.labels = (await map(labels, lookupLabelByName)).filter(\n is.number,\n );\n if (labels.length !== prUpdateParams.labels.length) {\n logger.warn(\n 'Some labels could not be looked up. Renovate may halt label updates assuming changes by others.',\n );\n }\n }\n\n const gpr = await helper.updatePR(\n config.repository,\n number,\n prUpdateParams,\n );\n const pr = toRenovatePR(gpr, botUserName);\n if (pr) {\n await GiteaPrCache.setPr(\n giteaHttp,\n config.repository,\n config.ignorePrAuthor,\n botUserName,\n pr,\n );\n }\n },\n\n async mergePr({ id, strategy }: MergePRConfig): Promise<boolean> {\n try {\n await helper.mergePR(config.repository, id, {\n Do: getMergeMethod(strategy) ?? config.mergeMethod,\n });\n return true;\n } catch (err) {\n logger.warn({ err, id }, 'Merging of PR failed');\n return false;\n }\n },\n\n getIssueList(): Promise<Issue[]> {\n if (config.hasIssuesEnabled === false) {\n return Promise.resolve([]);\n }\n config.issueList ??= helper\n .searchIssues(config.repository, { state: 'all' }, { memCache: false })\n .then((issues) => {\n const issueList = issues.map(toRenovateIssue);\n logger.debug(`Retrieved ${issueList.length} Issues`);\n return issueList;\n });\n\n return config.issueList;\n },\n\n async getIssue(number: number, memCache = true): Promise<Issue | null> {\n if (config.hasIssuesEnabled === false) {\n return null;\n }\n try {\n const body = (\n await helper.getIssue(config.repository, number, { memCache })\n ).body;\n return {\n number,\n body,\n };\n } catch (err) /* v8 ignore start */ {\n logger.debug({ err, number }, 'Error getting issue');\n return null;\n } /* v8 ignore stop */\n },\n\n async findIssue(title: string): Promise<Issue | null> {\n const issueList = await platform.getIssueList();\n const issue = issueList.find(\n (i) => i.state === 'open' && i.title === title,\n );\n\n if (!issue) {\n return null;\n }\n // TODO: types (#22198)\n logger.debug(`Found Issue #${issue.number!}`);\n // TODO #22198\n return getIssue!(issue.number!);\n },\n\n async ensureIssue({\n title,\n reuseTitle,\n body: content,\n labels: labelNames,\n shouldReOpen,\n once,\n }: EnsureIssueConfig): Promise<'updated' | 'created' | null> {\n logger.debug(`ensureIssue(${title})`);\n if (config.hasIssuesEnabled === false) {\n logger.info(\n 'Cannot ensure issue because issues are disabled in this repository',\n );\n return null;\n }\n try {\n const body = smartLinks(content);\n\n const issueList = await platform.getIssueList();\n let issues = issueList.filter((i) => i.title === title);\n if (!issues.length) {\n issues = issueList.filter((i) => i.title === reuseTitle);\n }\n\n const labels = Array.isArray(labelNames)\n ? (await Promise.all(labelNames.map(lookupLabelByName))).filter(\n is.number,\n )\n : undefined;\n\n // Update any matching issues which currently exist\n if (issues.length) {\n let activeIssue = issues.find((i) => i.state === 'open');\n\n // If no active issue was found, decide if it shall be skipped, re-opened or updated without state change\n if (!activeIssue) {\n if (once) {\n logger.debug('Issue already closed - skipping update');\n return null;\n }\n if (shouldReOpen) {\n logger.debug('Reopening previously closed Issue');\n }\n\n // Pick the last issue in the list as the active one\n activeIssue = issues[issues.length - 1];\n }\n\n // Close any duplicate issues\n for (const issue of issues) {\n if (issue.state === 'open' && issue.number !== activeIssue.number) {\n // TODO: types (#22198)\n logger.warn({ issueNo: issue.number! }, 'Closing duplicate issue');\n // TODO #22198\n await helper.closeIssue(config.repository, issue.number!);\n }\n }\n\n // Check if issue has already correct state\n if (\n activeIssue.title === title &&\n activeIssue.body === body &&\n activeIssue.state === 'open'\n ) {\n logger.debug(\n // TODO: types (#22198)\n `Issue #${activeIssue.number!} is open and up to date - nothing to do`,\n );\n return null;\n }\n\n // Update issue body and re-open if enabled\n // TODO: types (#22198)\n logger.debug(`Updating Issue #${activeIssue.number!}`);\n const existingIssue = await helper.updateIssue(\n config.repository,\n // TODO #22198\n activeIssue.number!,\n {\n body,\n title,\n state: shouldReOpen ? 'open' : (activeIssue.state as IssueState),\n },\n );\n\n // Test whether the issues need to be updated\n const existingLabelIds = (existingIssue.labels ?? []).map(\n (label) => label.id,\n );\n if (\n labels &&\n (labels.length !== existingLabelIds.length ||\n labels.filter((labelId) => !existingLabelIds.includes(labelId))\n .length !== 0)\n ) {\n await helper.updateIssueLabels(\n config.repository,\n // TODO #22198\n activeIssue.number!,\n {\n labels,\n },\n );\n }\n\n return 'updated';\n }\n\n // Create new issue and reset cache\n const issue = await helper.createIssue(config.repository, {\n body,\n title,\n labels,\n });\n logger.debug(`Created new Issue #${issue.number}`);\n config.issueList = null;\n\n return 'created';\n } catch (err) {\n logger.warn({ err }, 'Could not ensure issue');\n }\n\n return null;\n },\n\n async ensureIssueClosing(title: string): Promise<void> {\n logger.debug(`ensureIssueClosing(${title})`);\n if (config.hasIssuesEnabled === false) {\n return;\n }\n const issueList = await platform.getIssueList();\n for (const issue of issueList) {\n if (issue.state === 'open' && issue.title === title) {\n logger.debug(`Closing issue...issueNo: ${issue.number!}`);\n // TODO #22198\n await helper.closeIssue(config.repository, issue.number!);\n }\n }\n },\n\n async deleteLabel(issue: number, labelName: string): Promise<void> {\n logger.debug(`Deleting label ${labelName} from Issue #${issue}`);\n const label = await lookupLabelByName(labelName);\n if (label) {\n await helper.unassignLabel(config.repository, issue, label);\n } else {\n logger.warn({ issue, labelName }, 'Failed to lookup label for deletion');\n }\n },\n\n async ensureComment({\n number: issue,\n topic,\n content,\n }: EnsureCommentConfig): Promise<boolean> {\n try {\n let body = sanitize(content);\n const commentList = await helper.getComments(config.repository, issue);\n\n // Search comment by either topic or exact body\n let comment: Comment | null = null;\n if (topic) {\n comment = findCommentByTopic(commentList, topic);\n body = `### ${topic}\\n\\n${body}`;\n } else {\n comment = findCommentByContent(commentList, body);\n }\n\n // Create a new comment if no match has been found, otherwise update if necessary\n if (!comment) {\n comment = await helper.createComment(config.repository, issue, body);\n logger.info(\n { repository: config.repository, issue, comment: comment.id },\n 'Comment added',\n );\n } else if (comment.body === body) {\n logger.debug(`Comment #${comment.id} is already up-to-date`);\n } else {\n await helper.updateComment(config.repository, comment.id, body);\n logger.debug(\n { repository: config.repository, issue, comment: comment.id },\n 'Comment updated',\n );\n }\n\n return true;\n } catch (err) {\n logger.warn({ err, issue, subject: topic }, 'Error ensuring comment');\n return false;\n }\n },\n\n async ensureCommentRemoval(\n deleteConfig: EnsureCommentRemovalConfig,\n ): Promise<void> {\n const { number: issue } = deleteConfig;\n const key =\n deleteConfig.type === 'by-topic'\n ? deleteConfig.topic\n : deleteConfig.content;\n logger.debug(`Ensuring comment \"${key}\" in #${issue} is removed`);\n const commentList = await helper.getComments(config.repository, issue);\n\n let comment: Comment | null = null;\n if (deleteConfig.type === 'by-topic') {\n comment = findCommentByTopic(commentList, deleteConfig.topic);\n } else if (deleteConfig.type === 'by-content') {\n const body = sanitize(deleteConfig.content);\n comment = findCommentByContent(commentList, body);\n }\n\n // Abort and do nothing if no matching comment was found\n if (!comment) {\n return;\n }\n\n // Try to delete comment\n try {\n await helper.deleteComment(config.repository, comment.id);\n } catch (err) {\n logger.warn(\n { err, issue, config: deleteConfig },\n 'Error deleting comment',\n );\n }\n },\n\n async getBranchPr(branchName: string): Promise<Pr | null> {\n logger.debug(`getBranchPr(${branchName})`);\n const pr = await platform.findPr({ branchName, state: 'open' });\n return pr ? platform.getPr(pr.number) : null;\n },\n\n async addAssignees(number: number, assignees: string[]): Promise<void> {\n logger.debug(\n `Updating assignees '${assignees?.join(', ')}' on Issue #${number}`,\n );\n await helper.updateIssue(config.repository, number, {\n assignees,\n });\n },\n\n async addReviewers(number: number, reviewers: string[]): Promise<void> {\n logger.debug(`Adding reviewers '${reviewers?.join(', ')}' to #${number}`);\n if (semver.lt(defaults.version, '1.14.0')) {\n logger.debug(\n { version: defaults.version },\n 'Adding reviewer not yet supported.',\n );\n return;\n }\n try {\n await helper.requestPrReviewers(config.repository, number, { reviewers });\n } catch (err) {\n logger.warn({ err, number, reviewers }, 'Failed to assign reviewer');\n }\n },\n\n massageMarkdown(prBody: string): string {\n return smartTruncate(smartLinks(prBody), maxBodyLength());\n },\n\n maxBodyLength,\n};\n\nexport function maxBodyLength(): number {\n return 1000000;\n}\n\n/* eslint-disable @typescript-eslint/unbound-method */\nexport const {\n addAssignees,\n addReviewers,\n createPr,\n deleteLabel,\n ensureComment,\n ensureCommentRemoval,\n ensureIssue,\n ensureIssueClosing,\n findIssue,\n findPr,\n getBranchPr,\n getBranchStatus,\n getBranchStatusCheck,\n getIssue,\n getRawFile,\n getJsonFile,\n getIssueList,\n getPr,\n massageMarkdown,\n getPrList,\n getRepos,\n initPlatform,\n initRepo,\n mergePr,\n setBranchStatus,\n updatePr,\n} = platform;\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gitea/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport semver from 'semver';\nimport {\n REPOSITORY_ACCESS_FORBIDDEN,\n REPOSITORY_ARCHIVED,\n REPOSITORY_BLOCKED,\n REPOSITORY_CHANGED,\n REPOSITORY_EMPTY,\n REPOSITORY_MIRRORED,\n} from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus } from '../../../types';\nimport { deduplicateArray } from '../../../util/array';\nimport { parseJson } from '../../../util/common';\nimport { getEnv } from '../../../util/env';\nimport * as git from '../../../util/git';\nimport { setBaseUrl } from '../../../util/http/gitea';\nimport { map } from '../../../util/promises';\nimport { sanitize } from '../../../util/sanitize';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport { getPrBodyStruct, hashBody } from '../pr-body';\nimport type {\n AutodiscoverConfig,\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueConfig,\n FindPRConfig,\n Issue,\n MergePRConfig,\n Platform,\n PlatformParams,\n PlatformResult,\n Pr,\n RepoParams,\n RepoResult,\n RepoSortMethod,\n SortMethod,\n UpdatePrConfig,\n} from '../types';\nimport { repoFingerprint } from '../util';\nimport { smartTruncate } from '../utils/pr-body';\nimport * as helper from './gitea-helper';\nimport { giteaHttp } from './gitea-helper';\nimport { GiteaPrCache } from './pr-cache';\nimport type {\n CombinedCommitStatus,\n Comment,\n IssueState,\n Label,\n PRMergeMethod,\n PRUpdateParams,\n Repo,\n} from './types';\nimport {\n DRAFT_PREFIX,\n getMergeMethod,\n getRepoUrl,\n smartLinks,\n toRenovatePR,\n trimTrailingApiPath,\n usableRepo,\n} from './utils';\n\ninterface GiteaRepoConfig {\n ignorePrAuthor: boolean;\n repository: string;\n mergeMethod: PRMergeMethod;\n\n issueList: Promise<Issue[]> | null;\n labelList: Promise<Label[]> | null;\n defaultBranch: string;\n cloneSubmodules: boolean;\n cloneSubmodulesFilter: string[] | undefined;\n hasIssuesEnabled: boolean;\n}\n\nexport const id = 'gitea';\n\nconst defaults = {\n hostType: 'gitea',\n endpoint: 'https://gitea.com/',\n version: '0.0.0',\n isForgejo: false,\n};\n\nlet config: GiteaRepoConfig = {} as any;\nlet botUserID: number;\nlet botUserName: string;\n\nexport function resetPlatform(): void {\n config = {} as any;\n botUserID = undefined as never;\n botUserName = undefined as never;\n defaults.hostType = 'gitea';\n defaults.endpoint = 'https://gitea.com/';\n defaults.version = '0.0.0';\n defaults.isForgejo = false;\n setBaseUrl(defaults.endpoint);\n}\n\nfunction toRenovateIssue(data: Issue): Issue {\n return {\n number: data.number,\n state: data.state,\n title: data.title,\n body: data.body,\n };\n}\n\nfunction matchesState(actual: string, expected: string): boolean {\n if (expected === 'all') {\n return true;\n }\n if (expected.startsWith('!')) {\n return actual !== expected.substring(1);\n }\n\n return actual === expected;\n}\n\nfunction findCommentByTopic(\n comments: Comment[],\n topic: string,\n): Comment | null {\n return comments.find((c) => c.body.startsWith(`### ${topic}\\n\\n`)) ?? null;\n}\n\nfunction findCommentByContent(\n comments: Comment[],\n content: string,\n): Comment | null {\n return comments.find((c) => c.body.trim() === content) ?? null;\n}\n\nfunction getLabelList(): Promise<Label[]> {\n if (config.labelList === null) {\n const repoLabels = helper\n .getRepoLabels(config.repository, {\n memCache: false,\n })\n .then((labels) => {\n logger.debug(`Retrieved ${labels.length} repo labels`);\n return labels;\n });\n\n const orgLabels = helper\n .getOrgLabels(config.repository.split('/')[0], {\n memCache: false,\n })\n .then((labels) => {\n logger.debug(`Retrieved ${labels.length} org labels`);\n return labels;\n })\n .catch((err) => {\n // Will fail if owner of repo is not org or Gitea version < 1.12\n logger.debug(`Unable to fetch organization labels`);\n return [] as Label[];\n });\n\n config.labelList = Promise.all([repoLabels, orgLabels]).then((labels) =>\n ([] as Label[]).concat(...labels),\n );\n }\n\n return config.labelList;\n}\n\nasync function lookupLabelByName(name: string): Promise<number | null> {\n logger.debug(`lookupLabelByName(${name})`);\n const labelList = await getLabelList();\n return labelList.find((l) => l.name === name)?.id ?? null;\n}\n\ninterface FetchRepositoriesArgs {\n topic?: string;\n sort?: RepoSortMethod;\n order?: SortMethod;\n}\n\nasync function fetchRepositories({\n topic,\n sort,\n order,\n}: FetchRepositoriesArgs): Promise<string[]> {\n const repos = await helper.searchRepos({\n uid: botUserID,\n archived: false,\n ...(topic && {\n topic: true,\n q: topic,\n }),\n ...(sort && {\n sort,\n }),\n ...(order && {\n order,\n }),\n });\n return repos.filter(usableRepo).map((r) => r.full_name);\n}\n\nconst platform: Platform = {\n async initPlatform({\n endpoint,\n token,\n }: PlatformParams): Promise<PlatformResult> {\n if (!token) {\n throw new Error('Init: You must configure a Gitea personal access token');\n }\n\n if (endpoint) {\n let baseEndpoint = trimTrailingApiPath(endpoint);\n baseEndpoint = ensureTrailingSlash(baseEndpoint);\n defaults.endpoint = baseEndpoint;\n } else {\n logger.debug('Using default Gitea endpoint: ' + defaults.endpoint);\n }\n setBaseUrl(defaults.endpoint);\n\n let gitAuthor: string;\n try {\n const user = await helper.getCurrentUser({ token });\n gitAuthor = `${user.full_name ?? user.username} <${user.email}>`;\n botUserID = user.id;\n botUserName = user.username;\n const env = getEnv();\n /* v8 ignore start: experimental feature */\n if (semver.valid(env.RENOVATE_X_PLATFORM_VERSION)) {\n defaults.version = env.RENOVATE_X_PLATFORM_VERSION!;\n } /* v8 ignore stop */ else {\n defaults.version = await helper.getVersion({ token });\n }\n if (defaults.version?.includes('gitea-')) {\n defaults.isForgejo = true;\n }\n logger.debug(\n `${defaults.isForgejo ? 'Forgejo' : 'Gitea'} version: ${defaults.version}`,\n );\n } catch (err) {\n logger.debug(\n { err },\n 'Error authenticating with Gitea. Check your token',\n );\n throw new Error('Init: Authentication failure');\n }\n\n return {\n endpoint: defaults.endpoint,\n gitAuthor,\n };\n },\n\n async getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n ): Promise<string | null> {\n const repo = repoName ?? config.repository;\n const contents = await helper.getRepoContents(repo, fileName, branchOrTag);\n return contents.contentString ?? null;\n },\n\n async getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n ): Promise<any> {\n // TODO #22198\n const raw = await platform.getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n },\n\n async initRepo({\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n gitUrl,\n ignorePrAuthor,\n }: RepoParams): Promise<RepoResult> {\n let repo: Repo;\n\n config = {} as any;\n config.repository = repository;\n config.cloneSubmodules = !!cloneSubmodules;\n config.cloneSubmodulesFilter = cloneSubmodulesFilter;\n config.ignorePrAuthor = !!ignorePrAuthor;\n\n // Try to fetch information about repository\n try {\n repo = await helper.getRepo(repository);\n } catch (err) {\n logger.debug({ err }, 'Unknown Gitea initRepo error');\n throw err;\n }\n\n // Ensure appropriate repository state and permissions\n if (repo.archived) {\n logger.debug('Repository is archived - aborting renovation');\n throw new Error(REPOSITORY_ARCHIVED);\n }\n if (repo.mirror) {\n logger.debug('Repository is a mirror - aborting renovation');\n throw new Error(REPOSITORY_MIRRORED);\n }\n if (repo.permissions.pull === false || repo.permissions.push === false) {\n logger.debug(\n 'Repository does not permit pull or push - aborting renovation',\n );\n throw new Error(REPOSITORY_ACCESS_FORBIDDEN);\n }\n if (repo.empty) {\n logger.debug('Repository is empty - aborting renovation');\n throw new Error(REPOSITORY_EMPTY);\n }\n\n if (repo.has_pull_requests === false) {\n logger.debug('Repo has disabled pull requests - aborting renovation');\n throw new Error(REPOSITORY_BLOCKED);\n }\n\n if (repo.allow_rebase) {\n config.mergeMethod = 'rebase';\n } else if (repo.allow_rebase_explicit) {\n config.mergeMethod = 'rebase-merge';\n } else if (repo.allow_squash_merge) {\n config.mergeMethod = 'squash';\n } else if (repo.allow_merge_commits) {\n config.mergeMethod = 'merge';\n } else if (repo.allow_fast_forward_only_merge) {\n config.mergeMethod = 'fast-forward';\n } else {\n logger.debug(\n 'Repository has no allowed merge methods - aborting renovation',\n );\n throw new Error(REPOSITORY_BLOCKED);\n }\n\n // Determine author email and branches\n config.defaultBranch = repo.default_branch;\n logger.debug(`${repository} default branch = ${config.defaultBranch}`);\n\n const url = getRepoUrl(repo, gitUrl, defaults.endpoint);\n\n // Initialize Git storage\n await git.initRepo({\n ...config,\n url,\n });\n\n // Reset cached resources\n config.issueList = null;\n config.labelList = null;\n config.hasIssuesEnabled = !repo.external_tracker && repo.has_issues;\n\n return {\n defaultBranch: config.defaultBranch,\n isFork: !!repo.fork,\n repoFingerprint: repoFingerprint(repo.id, defaults.endpoint),\n };\n },\n\n async getRepos(config?: AutodiscoverConfig): Promise<string[]> {\n logger.debug('Auto-discovering Gitea repositories');\n try {\n if (config?.topics) {\n logger.debug({ topics: config.topics }, 'Auto-discovering by topics');\n const fetchRepoArgs: FetchRepositoriesArgs[] = config.topics.map(\n (topic) => {\n return {\n topic,\n sort: config.sort,\n order: config.order,\n };\n },\n );\n const repos = await map(fetchRepoArgs, fetchRepositories);\n return deduplicateArray(repos.flat());\n } else if (config?.namespaces) {\n logger.debug(\n { namespaces: config.namespaces },\n 'Auto-discovering by organization',\n );\n const repos = await map(\n config.namespaces,\n async (organization: string) => {\n const orgRepos = await helper.orgListRepos(organization);\n return orgRepos\n .filter((r) => !r.mirror && !r.archived)\n .map((r) => r.full_name);\n },\n );\n return deduplicateArray(repos.flat());\n } else {\n return await fetchRepositories({\n sort: config?.sort,\n order: config?.order,\n });\n }\n } catch (err) {\n logger.error({ err }, 'Gitea getRepos() error');\n throw err;\n }\n },\n\n async setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: target_url,\n }: BranchStatusConfig): Promise<void> {\n try {\n // Create new status for branch commit\n const branchCommit = git.getBranchCommit(branchName);\n // TODO: check branchCommit\n\n await helper.createCommitStatus(config.repository, branchCommit!, {\n state: helper.renovateToGiteaStatusMapping[state] || 'pending',\n context,\n description,\n ...(target_url && { target_url }),\n });\n\n // Refresh caches by re-fetching commit status for branch\n await helper.getCombinedCommitStatus(config.repository, branchName, {\n memCache: false,\n });\n } catch (err) {\n logger.warn({ err }, 'Failed to set branch status');\n }\n },\n\n async getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n ): Promise<BranchStatus> {\n let ccs: CombinedCommitStatus;\n try {\n ccs = await helper.getCombinedCommitStatus(config.repository, branchName);\n } catch (err) {\n if (err.statusCode === 404) {\n logger.debug(\n 'Received 404 when checking branch status, assuming branch deletion',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n\n logger.debug('Unknown error when checking branch status');\n throw err;\n }\n\n logger.debug({ ccs }, 'Branch status check result');\n if (\n !internalChecksAsSuccess &&\n ccs.worstStatus === 'success' &&\n ccs.statuses.every((status) => status.context?.startsWith('renovate/'))\n ) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n return 'yellow';\n }\n\n /* v8 ignore next */\n return helper.giteaToRenovateStatusMapping[ccs.worstStatus] ?? 'yellow';\n },\n\n async getBranchStatusCheck(\n branchName: string,\n context: string,\n ): Promise<BranchStatus | null> {\n const ccs = await helper.getCombinedCommitStatus(\n config.repository,\n branchName,\n );\n const cs = ccs.statuses.find((s) => s.context === context);\n if (!cs) {\n return null;\n } // no status check exists\n const status = helper.giteaToRenovateStatusMapping[cs.status];\n if (status) {\n return status;\n }\n logger.warn(\n { check: cs },\n 'Could not map Gitea status value to Renovate status',\n );\n return 'yellow';\n },\n\n getPrList(): Promise<Pr[]> {\n return GiteaPrCache.getPrs(\n giteaHttp,\n config.repository,\n config.ignorePrAuthor,\n botUserName,\n );\n },\n\n async getPr(number: number): Promise<Pr | null> {\n // Search for pull request in cached list or attempt to query directly\n const prList = await platform.getPrList();\n let pr = prList.find((p) => p.number === number) ?? null;\n if (pr) {\n logger.debug('Returning from cached PRs');\n } else {\n logger.debug('PR not found in cached PRs - trying to fetch directly');\n const gpr = await helper.getPR(config.repository, number);\n pr = toRenovatePR(gpr, botUserName);\n\n // Add pull request to cache for further lookups / queries\n if (pr) {\n await GiteaPrCache.setPr(\n giteaHttp,\n config.repository,\n config.ignorePrAuthor,\n botUserName,\n pr,\n );\n }\n }\n\n // Abort and return null if no match was found\n if (!pr) {\n return null;\n }\n\n return pr;\n },\n\n async findPr({\n branchName,\n prTitle: title,\n state = 'all',\n includeOtherAuthors,\n targetBranch,\n }: FindPRConfig): Promise<Pr | null> {\n logger.debug(`findPr(${branchName}, ${title!}, ${state})`);\n if (includeOtherAuthors && is.string(targetBranch)) {\n // do not use pr cache as it only fetches prs created by the bot account\n const pr = await helper.getPRByBranch(\n config.repository,\n targetBranch,\n branchName,\n );\n if (!pr) {\n return null;\n }\n\n return toRenovatePR(pr, null);\n }\n const prList = await platform.getPrList();\n const pr = prList.find(\n (p) =>\n p.sourceRepo === config.repository &&\n p.sourceBranch === branchName &&\n matchesState(p.state, state) &&\n (!title || p.title === title),\n );\n\n if (pr) {\n logger.debug(`Found PR #${pr.number}`);\n }\n return pr ?? null;\n },\n\n async createPr({\n sourceBranch,\n targetBranch,\n prTitle,\n prBody: rawBody,\n labels: labelNames,\n platformPrOptions,\n draftPR,\n }: CreatePRConfig): Promise<Pr> {\n let title = prTitle;\n const base = targetBranch;\n const head = sourceBranch;\n const body = sanitize(rawBody);\n if (draftPR) {\n title = DRAFT_PREFIX + title;\n }\n\n logger.debug(`Creating pull request: ${title} (${head} => ${base})`);\n try {\n const labels = Array.isArray(labelNames)\n ? await map(labelNames, lookupLabelByName)\n : [];\n const gpr = await helper.createPR(config.repository, {\n base,\n head,\n title,\n body,\n labels: labels.filter(is.number),\n });\n\n if (platformPrOptions?.usePlatformAutomerge) {\n // Only Gitea v1.24.0+ and Forgejo v10.0.0+ support delete_branch_after_merge.\n // This is required to not have undesired behavior when renovate finds existing branches on next run.\n if (\n semver.gte(defaults.version, defaults.isForgejo ? '10.0.0' : '1.24.0')\n ) {\n try {\n await helper.mergePR(config.repository, gpr.number, {\n Do:\n getMergeMethod(platformPrOptions?.automergeStrategy) ??\n config.mergeMethod,\n merge_when_checks_succeed: true,\n delete_branch_after_merge: true,\n });\n\n logger.debug(\n { prNumber: gpr.number },\n 'Gitea-native automerge: success',\n );\n } catch (err) {\n logger.warn(\n { err, prNumber: gpr.number },\n 'Gitea-native automerge: fail',\n );\n }\n } else {\n logger.debug(\n { prNumber: gpr.number },\n `Gitea-native automerge: not supported on this version of ${defaults.isForgejo ? 'Forgejo' : 'Gitea'}. Use ${defaults.isForgejo ? '10.0.0' : '1.24.0'} or newer.`,\n );\n }\n }\n\n const pr = toRenovatePR(gpr, botUserName);\n if (!pr) {\n throw new Error('Can not parse newly created Pull Request');\n }\n\n await GiteaPrCache.setPr(\n giteaHttp,\n config.repository,\n config.ignorePrAuthor,\n botUserName,\n pr,\n );\n return pr;\n } catch (err) {\n // When the user manually deletes a branch from Renovate, the PR remains but is no longer linked to any branch. In\n // the most recent versions of Gitea, the PR gets automatically closed when that happens, but older versions do\n // not handle this properly and keep the PR open. As pushing a branch with the same name resurrects the PR, this\n // would cause a HTTP 409 conflict error, which we hereby gracefully handle.\n if (err.statusCode === 409) {\n logger.warn(\n { prTitle: title, sourceBranch },\n 'Attempting to gracefully recover from 409 Conflict response in createPr()',\n );\n\n // Refresh cached PR list and search for pull request with matching information\n GiteaPrCache.forceSync();\n const pr = await platform.findPr({\n branchName: sourceBranch,\n state: 'open',\n });\n\n // If a valid PR was found, return and gracefully recover from the error. Otherwise, abort and throw error.\n if (pr?.bodyStruct) {\n if (pr.title !== title || pr.bodyStruct.hash !== hashBody(body)) {\n logger.debug(\n `Recovered from 409 Conflict, but PR for ${sourceBranch} is outdated. Updating...`,\n );\n await platform.updatePr({\n number: pr.number,\n prTitle: title,\n prBody: body,\n });\n pr.title = title;\n pr.bodyStruct = getPrBodyStruct(body);\n } else {\n logger.debug(\n `Recovered from 409 Conflict and PR for ${sourceBranch} is up-to-date`,\n );\n }\n\n return pr;\n }\n }\n\n throw err;\n }\n },\n\n async updatePr({\n number,\n prTitle,\n prBody: body,\n labels,\n state,\n targetBranch,\n }: UpdatePrConfig): Promise<void> {\n let title = prTitle;\n if ((await getPrList()).find((pr) => pr.number === number)?.isDraft) {\n title = DRAFT_PREFIX + title;\n }\n\n const prUpdateParams: PRUpdateParams = {\n title,\n ...(body && { body }),\n ...(state && { state }),\n };\n if (targetBranch) {\n prUpdateParams.base = targetBranch;\n }\n\n /**\n * Update PR labels.\n * In the Gitea API, labels are replaced on each update if the field is present.\n * If the field is not present (i.e., undefined), labels aren't updated.\n * However, the labels array must contain label IDs instead of names,\n * so a lookup is performed to fetch the details (including the ID) of each label.\n */\n if (Array.isArray(labels)) {\n prUpdateParams.labels = (await map(labels, lookupLabelByName)).filter(\n is.number,\n );\n if (labels.length !== prUpdateParams.labels.length) {\n logger.warn(\n 'Some labels could not be looked up. Renovate may halt label updates assuming changes by others.',\n );\n }\n }\n\n const gpr = await helper.updatePR(\n config.repository,\n number,\n prUpdateParams,\n );\n const pr = toRenovatePR(gpr, botUserName);\n if (pr) {\n await GiteaPrCache.setPr(\n giteaHttp,\n config.repository,\n config.ignorePrAuthor,\n botUserName,\n pr,\n );\n }\n },\n\n async mergePr({ id, strategy }: MergePRConfig): Promise<boolean> {\n try {\n await helper.mergePR(config.repository, id, {\n Do: getMergeMethod(strategy) ?? config.mergeMethod,\n });\n return true;\n } catch (err) {\n logger.warn({ err, id }, 'Merging of PR failed');\n return false;\n }\n },\n\n getIssueList(): Promise<Issue[]> {\n if (config.hasIssuesEnabled === false) {\n return Promise.resolve([]);\n }\n config.issueList ??= helper\n .searchIssues(config.repository, { state: 'all' }, { memCache: false })\n .then((issues) => {\n const issueList = issues.map(toRenovateIssue);\n logger.debug(`Retrieved ${issueList.length} Issues`);\n return issueList;\n });\n\n return config.issueList;\n },\n\n async getIssue(number: number, memCache = true): Promise<Issue | null> {\n if (config.hasIssuesEnabled === false) {\n return null;\n }\n try {\n const body = (\n await helper.getIssue(config.repository, number, { memCache })\n ).body;\n return {\n number,\n body,\n };\n } catch (err) /* v8 ignore start */ {\n logger.debug({ err, number }, 'Error getting issue');\n return null;\n } /* v8 ignore stop */\n },\n\n async findIssue(title: string): Promise<Issue | null> {\n const issueList = await platform.getIssueList();\n const issue = issueList.find(\n (i) => i.state === 'open' && i.title === title,\n );\n\n if (!issue) {\n return null;\n }\n // TODO: types (#22198)\n logger.debug(`Found Issue #${issue.number!}`);\n // TODO #22198\n return getIssue!(issue.number!);\n },\n\n async ensureIssue({\n title,\n reuseTitle,\n body: content,\n labels: labelNames,\n shouldReOpen,\n once,\n }: EnsureIssueConfig): Promise<'updated' | 'created' | null> {\n logger.debug(`ensureIssue(${title})`);\n if (config.hasIssuesEnabled === false) {\n logger.info(\n 'Cannot ensure issue because issues are disabled in this repository',\n );\n return null;\n }\n try {\n const body = smartLinks(content);\n\n const issueList = await platform.getIssueList();\n let issues = issueList.filter((i) => i.title === title);\n if (!issues.length) {\n issues = issueList.filter((i) => i.title === reuseTitle);\n }\n\n const labels = Array.isArray(labelNames)\n ? (await Promise.all(labelNames.map(lookupLabelByName))).filter(\n is.number,\n )\n : undefined;\n\n // Update any matching issues which currently exist\n if (issues.length) {\n let activeIssue = issues.find((i) => i.state === 'open');\n\n // If no active issue was found, decide if it shall be skipped, re-opened or updated without state change\n if (!activeIssue) {\n if (once) {\n logger.debug('Issue already closed - skipping update');\n return null;\n }\n if (shouldReOpen) {\n logger.debug('Reopening previously closed Issue');\n }\n\n // Pick the last issue in the list as the active one\n activeIssue = issues[issues.length - 1];\n }\n\n // Close any duplicate issues\n for (const issue of issues) {\n if (issue.state === 'open' && issue.number !== activeIssue.number) {\n // TODO: types (#22198)\n logger.warn({ issueNo: issue.number! }, 'Closing duplicate issue');\n // TODO #22198\n await helper.closeIssue(config.repository, issue.number!);\n }\n }\n\n // Check if issue has already correct state\n if (\n activeIssue.title === title &&\n activeIssue.body === body &&\n activeIssue.state === 'open'\n ) {\n logger.debug(\n // TODO: types (#22198)\n `Issue #${activeIssue.number!} is open and up to date - nothing to do`,\n );\n return null;\n }\n\n // Update issue body and re-open if enabled\n // TODO: types (#22198)\n logger.debug(`Updating Issue #${activeIssue.number!}`);\n const existingIssue = await helper.updateIssue(\n config.repository,\n // TODO #22198\n activeIssue.number!,\n {\n body,\n title,\n state: shouldReOpen ? 'open' : (activeIssue.state as IssueState),\n },\n );\n\n // Test whether the issues need to be updated\n const existingLabelIds = (existingIssue.labels ?? []).map(\n (label) => label.id,\n );\n if (\n labels &&\n (labels.length !== existingLabelIds.length ||\n labels.filter((labelId) => !existingLabelIds.includes(labelId))\n .length !== 0)\n ) {\n await helper.updateIssueLabels(\n config.repository,\n // TODO #22198\n activeIssue.number!,\n {\n labels,\n },\n );\n }\n\n return 'updated';\n }\n\n // Create new issue and reset cache\n const issue = await helper.createIssue(config.repository, {\n body,\n title,\n labels,\n });\n logger.debug(`Created new Issue #${issue.number}`);\n config.issueList = null;\n\n return 'created';\n } catch (err) {\n logger.warn({ err }, 'Could not ensure issue');\n }\n\n return null;\n },\n\n async ensureIssueClosing(title: string): Promise<void> {\n logger.debug(`ensureIssueClosing(${title})`);\n if (config.hasIssuesEnabled === false) {\n return;\n }\n const issueList = await platform.getIssueList();\n for (const issue of issueList) {\n if (issue.state === 'open' && issue.title === title) {\n logger.debug(`Closing issue...issueNo: ${issue.number!}`);\n // TODO #22198\n await helper.closeIssue(config.repository, issue.number!);\n }\n }\n },\n\n async deleteLabel(issue: number, labelName: string): Promise<void> {\n logger.debug(`Deleting label ${labelName} from Issue #${issue}`);\n const label = await lookupLabelByName(labelName);\n if (label) {\n await helper.unassignLabel(config.repository, issue, label);\n } else {\n logger.warn({ issue, labelName }, 'Failed to lookup label for deletion');\n }\n },\n\n async ensureComment({\n number: issue,\n topic,\n content,\n }: EnsureCommentConfig): Promise<boolean> {\n try {\n let body = sanitize(content);\n const commentList = await helper.getComments(config.repository, issue);\n\n // Search comment by either topic or exact body\n let comment: Comment | null = null;\n if (topic) {\n comment = findCommentByTopic(commentList, topic);\n body = `### ${topic}\\n\\n${body}`;\n } else {\n comment = findCommentByContent(commentList, body);\n }\n\n // Create a new comment if no match has been found, otherwise update if necessary\n if (!comment) {\n comment = await helper.createComment(config.repository, issue, body);\n logger.info(\n { repository: config.repository, issue, comment: comment.id },\n 'Comment added',\n );\n } else if (comment.body === body) {\n logger.debug(`Comment #${comment.id} is already up-to-date`);\n } else {\n await helper.updateComment(config.repository, comment.id, body);\n logger.debug(\n { repository: config.repository, issue, comment: comment.id },\n 'Comment updated',\n );\n }\n\n return true;\n } catch (err) {\n logger.warn({ err, issue, subject: topic }, 'Error ensuring comment');\n return false;\n }\n },\n\n async ensureCommentRemoval(\n deleteConfig: EnsureCommentRemovalConfig,\n ): Promise<void> {\n const { number: issue } = deleteConfig;\n const key =\n deleteConfig.type === 'by-topic'\n ? deleteConfig.topic\n : deleteConfig.content;\n logger.debug(`Ensuring comment \"${key}\" in #${issue} is removed`);\n const commentList = await helper.getComments(config.repository, issue);\n\n let comment: Comment | null = null;\n if (deleteConfig.type === 'by-topic') {\n comment = findCommentByTopic(commentList, deleteConfig.topic);\n } else if (deleteConfig.type === 'by-content') {\n const body = sanitize(deleteConfig.content);\n comment = findCommentByContent(commentList, body);\n }\n\n // Abort and do nothing if no matching comment was found\n if (!comment) {\n return;\n }\n\n // Try to delete comment\n try {\n await helper.deleteComment(config.repository, comment.id);\n } catch (err) {\n logger.warn(\n { err, issue, config: deleteConfig },\n 'Error deleting comment',\n );\n }\n },\n\n async getBranchPr(branchName: string): Promise<Pr | null> {\n logger.debug(`getBranchPr(${branchName})`);\n const pr = await platform.findPr({ branchName, state: 'open' });\n return pr ? platform.getPr(pr.number) : null;\n },\n\n async addAssignees(number: number, assignees: string[]): Promise<void> {\n logger.debug(\n `Updating assignees '${assignees?.join(', ')}' on Issue #${number}`,\n );\n await helper.updateIssue(config.repository, number, {\n assignees,\n });\n },\n\n async addReviewers(number: number, reviewers: string[]): Promise<void> {\n logger.debug(`Adding reviewers '${reviewers?.join(', ')}' to #${number}`);\n if (semver.lt(defaults.version, '1.14.0')) {\n logger.debug(\n { version: defaults.version },\n 'Adding reviewer not yet supported.',\n );\n return;\n }\n try {\n await helper.requestPrReviewers(config.repository, number, { reviewers });\n } catch (err) {\n logger.warn({ err, number, reviewers }, 'Failed to assign reviewer');\n }\n },\n\n massageMarkdown(prBody: string): string {\n return smartTruncate(smartLinks(prBody), maxBodyLength());\n },\n\n maxBodyLength,\n};\n\nexport function maxBodyLength(): number {\n return 1000000;\n}\n\n/* eslint-disable @typescript-eslint/unbound-method */\nexport const {\n addAssignees,\n addReviewers,\n createPr,\n deleteLabel,\n ensureComment,\n ensureCommentRemoval,\n ensureIssue,\n ensureIssueClosing,\n findIssue,\n findPr,\n getBranchPr,\n getBranchStatus,\n getBranchStatusCheck,\n getIssue,\n getRawFile,\n getJsonFile,\n getIssueList,\n getPr,\n massageMarkdown,\n getPrList,\n getRepos,\n initPlatform,\n initRepo,\n mergePr,\n setBranchStatus,\n updatePr,\n} = platform;\n"]}
|
@@ -7,7 +7,7 @@ export interface PrReviewersParams {
|
|
7
7
|
export type PRState = 'open' | 'closed' | 'all';
|
8
8
|
export type IssueState = 'open' | 'closed' | 'all';
|
9
9
|
export type CommitStatusType = 'pending' | 'success' | 'error' | 'failure' | 'warning' | 'unknown';
|
10
|
-
export type PRMergeMethod = 'merge' | 'rebase' | 'rebase-merge' | 'squash';
|
10
|
+
export type PRMergeMethod = 'fast-forward' | 'merge' | 'rebase' | 'rebase-merge' | 'squash';
|
11
11
|
export interface GiteaLabel {
|
12
12
|
id: number;
|
13
13
|
name: string;
|
@@ -56,6 +56,7 @@ export interface User {
|
|
56
56
|
}
|
57
57
|
export interface Repo {
|
58
58
|
id: number;
|
59
|
+
allow_fast_forward_only_merge: boolean;
|
59
60
|
allow_merge_commits: boolean;
|
60
61
|
allow_rebase: boolean;
|
61
62
|
allow_rebase_explicit: boolean;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gitea/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { LongCommitSha } from '../../../util/git/types';\nimport type { Pr, RepoSortMethod, SortMethod } from '../types';\n\nexport interface PrReviewersParams {\n reviewers?: string[];\n team_reviewers?: string[];\n}\n\nexport type PRState = 'open' | 'closed' | 'all';\nexport type IssueState = 'open' | 'closed' | 'all';\nexport type CommitStatusType =\n | 'pending'\n | 'success'\n | 'error'\n | 'failure'\n | 'warning'\n | 'unknown';\nexport type PRMergeMethod
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/modules/platform/gitea/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { LongCommitSha } from '../../../util/git/types';\nimport type { Pr, RepoSortMethod, SortMethod } from '../types';\n\nexport interface PrReviewersParams {\n reviewers?: string[];\n team_reviewers?: string[];\n}\n\nexport type PRState = 'open' | 'closed' | 'all';\nexport type IssueState = 'open' | 'closed' | 'all';\nexport type CommitStatusType =\n | 'pending'\n | 'success'\n | 'error'\n | 'failure'\n | 'warning'\n | 'unknown';\nexport type PRMergeMethod =\n | 'fast-forward'\n | 'merge'\n | 'rebase'\n | 'rebase-merge'\n | 'squash';\n\nexport interface GiteaLabel {\n id: number;\n name: string;\n}\nexport interface PR {\n number: number;\n state: PRState;\n title: string;\n body: string;\n mergeable: boolean;\n merged?: boolean;\n created_at: string;\n updated_at: string;\n closed_at: string | null;\n diff_url: string;\n base?: {\n ref: string;\n };\n head?: {\n label: string;\n sha: LongCommitSha;\n repo?: Repo;\n };\n assignee?: {\n login?: string;\n };\n assignees?: any[];\n user?: { username?: string };\n\n // labels returned from the Gitea API are represented as an array of objects\n // ref: https://docs.gitea.com/api/1.20/#tag/repository/operation/repoGetPullRequest\n labels?: GiteaLabel[];\n}\n\nexport interface Issue {\n number: number;\n state: IssueState;\n title: string;\n body: string;\n assignees: User[];\n labels: Label[];\n}\n\nexport interface User {\n id: number;\n email: string;\n full_name?: string;\n username: string;\n}\n\nexport interface Repo {\n id: number;\n allow_fast_forward_only_merge: boolean;\n allow_merge_commits: boolean;\n allow_rebase: boolean;\n allow_rebase_explicit: boolean;\n allow_squash_merge: boolean;\n archived: boolean;\n clone_url?: string;\n default_merge_style: string;\n external_tracker?: unknown;\n has_issues: boolean;\n has_pull_requests: boolean;\n ssh_url?: string;\n default_branch: string;\n empty: boolean;\n fork: boolean;\n full_name: string;\n mirror: boolean;\n owner: User;\n permissions: RepoPermission;\n}\n\nexport interface RepoPermission {\n admin: boolean;\n pull: boolean;\n push: boolean;\n}\n\nexport interface RepoSearchResults {\n ok: boolean;\n data: Repo[];\n}\n\nexport interface RepoContents {\n path: string;\n content?: string;\n contentString?: string;\n}\n\nexport interface Comment {\n id: number;\n body: string;\n}\n\nexport interface Label {\n id: number;\n name: string;\n description: string;\n color: string;\n}\n\nexport interface Branch {\n name: string;\n commit: Commit;\n}\n\nexport interface Commit {\n id: string;\n author: CommitUser;\n}\n\nexport interface CommitUser {\n name: string;\n email: string;\n username: string;\n}\n\nexport interface CommitStatus {\n id: number;\n status: CommitStatusType;\n context: string;\n description?: string;\n target_url?: string;\n created_at: string;\n}\n\nexport interface CombinedCommitStatus {\n worstStatus: CommitStatusType;\n statuses: CommitStatus[];\n}\n\nexport interface RepoSearchParams {\n uid?: number;\n archived?: boolean;\n topic?: boolean;\n q?: string;\n\n /**\n * Repo sort type, defaults to `alpha`.\n */\n sort?: RepoSortMethod;\n\n /**\n * Repo sort order, defaults to `asc`\n */\n order?: SortMethod;\n}\n\nexport type IssueCreateParams = Partial<IssueUpdateLabelsParams> &\n IssueUpdateParams;\n\nexport interface IssueUpdateParams {\n title?: string;\n body?: string;\n state?: IssueState;\n assignees?: string[];\n}\n\nexport interface IssueUpdateLabelsParams {\n labels?: number[];\n}\n\nexport interface IssueSearchParams {\n state?: IssueState;\n}\n\nexport interface PRCreateParams extends PRUpdateParams {\n head?: string;\n}\n\nexport interface PRUpdateParams {\n title?: string;\n body?: string;\n assignees?: string[];\n labels?: number[];\n state?: PRState;\n base?: string;\n}\n\nexport interface PRMergeParams {\n Do: PRMergeMethod;\n merge_when_checks_succeed?: boolean;\n delete_branch_after_merge?: boolean;\n}\n\nexport type CommentCreateParams = CommentUpdateParams;\n\nexport interface CommentUpdateParams {\n body: string;\n}\n\nexport interface CommitStatusCreateParams {\n context?: string;\n description?: string;\n state?: CommitStatusType;\n target_url?: string;\n}\n\nexport interface GiteaPrCacheData {\n items: Record<number, Pr>;\n updated_at: string | null;\n author: string | null;\n}\n"]}
|
@@ -51,6 +51,7 @@ const external_host_error_1 = require("../../../types/errors/external-host-error
|
|
51
51
|
const check_token_1 = require("../../../util/check-token");
|
52
52
|
const coerce_1 = require("../../../util/coerce");
|
53
53
|
const common_1 = require("../../../util/common");
|
54
|
+
const env_1 = require("../../../util/env");
|
54
55
|
const git = tslib_1.__importStar(require("../../../util/git"));
|
55
56
|
const git_1 = require("../../../util/git");
|
56
57
|
const hostRules = tslib_1.__importStar(require("../../../util/host-rules"));
|
@@ -165,7 +166,7 @@ async function initPlatform({ endpoint, token: originalToken, username, gitAutho
|
|
165
166
|
renovateUsername,
|
166
167
|
token,
|
167
168
|
};
|
168
|
-
if (
|
169
|
+
if ((0, env_1.getEnv)().RENOVATE_X_GITHUB_HOST_RULES &&
|
169
170
|
platformResult.endpoint === 'https://api.github.com/') {
|
170
171
|
logger_1.logger.debug('Adding GitHub token as GHCR password');
|
171
172
|
platformResult.hostRules = [
|
@@ -524,27 +525,6 @@ async function initRepo({ endpoint, repository, forkCreation, forkOrg, forkToken
|
|
524
525
|
logger_1.logger.warn({ err }, 'Could not set default branch');
|
525
526
|
} /* v8 ignore stop */
|
526
527
|
}
|
527
|
-
// This is a lovely "hack" by GitHub that lets us force update our fork's default branch
|
528
|
-
// with the base commit from the parent repository
|
529
|
-
const url = `repos/${config.repository}/git/refs/heads/${config.defaultBranch}`;
|
530
|
-
const sha = repo.defaultBranchRef.target.oid;
|
531
|
-
try {
|
532
|
-
logger_1.logger.debug(`Updating forked repository default sha ${sha} to match upstream`);
|
533
|
-
await common_2.githubApi.patchJson(url, {
|
534
|
-
body: {
|
535
|
-
sha,
|
536
|
-
force: true,
|
537
|
-
},
|
538
|
-
token: (0, string_1.coerceString)(forkToken, opts.token),
|
539
|
-
});
|
540
|
-
}
|
541
|
-
catch (err) /* v8 ignore start */ {
|
542
|
-
logger_1.logger.warn({ url, sha, err: err.err ?? err }, 'Error updating fork from upstream - cannot continue');
|
543
|
-
if (err instanceof external_host_error_1.ExternalHostError) {
|
544
|
-
throw err;
|
545
|
-
}
|
546
|
-
throw new external_host_error_1.ExternalHostError(err);
|
547
|
-
} /* v8 ignore stop */
|
548
528
|
}
|
549
529
|
else if (forkCreation) {
|
550
530
|
logger_1.logger.debug('Forked repo is not found - attempting to create it');
|
@@ -572,9 +552,15 @@ async function initRepo({ endpoint, repository, forkCreation, forkOrg, forkToken
|
|
572
552
|
parsedEndpoint.host = parsedEndpoint.host.replace('api.github.com', 'github.com');
|
573
553
|
parsedEndpoint.pathname = `${config.repository}.git`;
|
574
554
|
const url = node_url_1.default.format(parsedEndpoint);
|
555
|
+
let upstreamUrl = undefined;
|
556
|
+
if (forkCreation && config.parentRepo) {
|
557
|
+
parsedEndpoint.pathname = config.parentRepo + '.git';
|
558
|
+
upstreamUrl = node_url_1.default.format(parsedEndpoint);
|
559
|
+
}
|
575
560
|
await git.initRepo({
|
576
561
|
...config,
|
577
562
|
url,
|
563
|
+
upstreamUrl,
|
578
564
|
});
|
579
565
|
const repoConfig = {
|
580
566
|
defaultBranch: config.defaultBranch,
|
@@ -1485,10 +1471,10 @@ function massageMarkdown(input) {
|
|
1485
1471
|
.replace((0, regex_1.regEx)(/href="https?:\/\/github.com\//g), 'href="https://redirect.github.com/')
|
1486
1472
|
.replace((0, regex_1.regEx)(/]\(https:\/\/github\.com\//g), '](https://redirect.github.com/')
|
1487
1473
|
.replace((0, regex_1.regEx)(/]: https:\/\/github\.com\//g), ']: https://redirect.github.com/')
|
1488
|
-
.
|
1489
|
-
.
|
1490
|
-
.
|
1491
|
-
.
|
1474
|
+
.replaceAll('> ℹ **Note**\n> \n', '> [!NOTE]\n')
|
1475
|
+
.replaceAll('> ⚠ **Warning**\n> \n', '> [!WARNING]\n')
|
1476
|
+
.replaceAll('> ⚠️ **Warning**\n> \n', '> [!WARNING]\n')
|
1477
|
+
.replaceAll('> ❗ **Important**\n> \n', '> [!IMPORTANT]\n');
|
1492
1478
|
return (0, pr_body_1.smartTruncate)(massagedInput, maxBodyLength());
|
1493
1479
|
}
|
1494
1480
|
function maxBodyLength() {
|