renovate 44.17.0 → 44.17.2
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/migrations/custom/ignore-npmrc-file-migration.js +2 -1
- package/dist/config/migrations/custom/ignore-npmrc-file-migration.js.map +1 -1
- package/dist/config/migrations/custom/stability-days-migration.js +1 -3
- package/dist/config/migrations/custom/stability-days-migration.js.map +1 -1
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/config/secrets.js +2 -1
- package/dist/config/secrets.js.map +1 -1
- package/dist/config/validation.js +1 -3
- package/dist/config/validation.js.map +1 -1
- package/dist/config-validator.js +2 -1
- package/dist/config-validator.js.map +1 -1
- package/dist/expose.js.map +1 -1
- package/dist/global-config-option-defaults.generated.js +1 -1
- package/dist/global-config-option-defaults.generated.js.map +1 -1
- package/dist/modules/datasource/artifactory/index.js +2 -1
- package/dist/modules/datasource/artifactory/index.js.map +1 -1
- package/dist/modules/datasource/aws-eks-addon/index.js +2 -1
- package/dist/modules/datasource/aws-eks-addon/index.js.map +1 -1
- package/dist/modules/datasource/aws-machine-image/index.js +3 -2
- package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
- package/dist/modules/datasource/bazel/index.js +2 -1
- package/dist/modules/datasource/bazel/index.js.map +1 -1
- package/dist/modules/datasource/bitbucket-server-tags/index.js +4 -2
- package/dist/modules/datasource/bitbucket-server-tags/index.js.map +1 -1
- package/dist/modules/datasource/bitbucket-tags/index.js +2 -1
- package/dist/modules/datasource/bitbucket-tags/index.js.map +1 -1
- package/dist/modules/datasource/bitrise/index.js +2 -1
- package/dist/modules/datasource/bitrise/index.js.map +1 -1
- package/dist/modules/datasource/common.js +4 -2
- package/dist/modules/datasource/common.js.map +1 -1
- package/dist/modules/datasource/crate/index.js +12 -5
- package/dist/modules/datasource/crate/index.js.map +1 -1
- package/dist/modules/datasource/custom/formats/toml.js +2 -1
- package/dist/modules/datasource/custom/formats/toml.js.map +1 -1
- package/dist/modules/datasource/custom/formats/yaml.js +4 -2
- package/dist/modules/datasource/custom/formats/yaml.js.map +1 -1
- package/dist/modules/datasource/deb/checksum.js +2 -1
- package/dist/modules/datasource/deb/checksum.js.map +1 -1
- package/dist/modules/datasource/deb/packages.js +3 -1
- package/dist/modules/datasource/deb/packages.js.map +1 -1
- package/dist/modules/datasource/deno/index.js +2 -1
- package/dist/modules/datasource/deno/index.js.map +1 -1
- package/dist/modules/datasource/docker/common.js +3 -2
- package/dist/modules/datasource/docker/common.js.map +1 -1
- package/dist/modules/datasource/docker/dockerhub-cache.js +1 -1
- package/dist/modules/datasource/docker/dockerhub-cache.js.map +1 -1
- package/dist/modules/datasource/docker/index.js +11 -10
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/forgejo-tags/index.js +4 -2
- package/dist/modules/datasource/forgejo-tags/index.js.map +1 -1
- package/dist/modules/datasource/galaxy-collection/index.js +5 -3
- package/dist/modules/datasource/galaxy-collection/index.js.map +1 -1
- package/dist/modules/datasource/git-refs/base.js +2 -1
- package/dist/modules/datasource/git-refs/base.js.map +1 -1
- package/dist/modules/datasource/git-refs/index.js +1 -1
- package/dist/modules/datasource/git-refs/index.js.map +1 -1
- package/dist/modules/datasource/gitea-tags/index.js +4 -2
- package/dist/modules/datasource/gitea-tags/index.js.map +1 -1
- package/dist/modules/datasource/github-release-attachments/index.js +3 -2
- package/dist/modules/datasource/github-release-attachments/index.js.map +1 -1
- package/dist/modules/datasource/github-tags/index.js +1 -1
- package/dist/modules/datasource/github-tags/index.js.map +1 -1
- package/dist/modules/datasource/gitlab-tags/index.js +2 -1
- package/dist/modules/datasource/gitlab-tags/index.js.map +1 -1
- package/dist/modules/datasource/gitlab-tags/util.js +2 -1
- package/dist/modules/datasource/gitlab-tags/util.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +8 -5
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/jenkins-plugins/index.js +1 -1
- package/dist/modules/datasource/jenkins-plugins/index.js.map +1 -1
- package/dist/modules/datasource/jsr/index.js +2 -1
- package/dist/modules/datasource/jsr/index.js.map +1 -1
- package/dist/modules/datasource/maven/index.js +3 -2
- package/dist/modules/datasource/maven/index.js.map +1 -1
- package/dist/modules/datasource/maven/util.js +1 -1
- package/dist/modules/datasource/maven/util.js.map +1 -1
- package/dist/modules/datasource/nuget/v2.js +3 -2
- package/dist/modules/datasource/nuget/v2.js.map +1 -1
- package/dist/modules/datasource/nuget/v3.js +9 -5
- package/dist/modules/datasource/nuget/v3.js.map +1 -1
- package/dist/modules/datasource/packagist/index.js +7 -4
- package/dist/modules/datasource/packagist/index.js.map +1 -1
- package/dist/modules/datasource/rpm/providers/common.js +3 -1
- package/dist/modules/datasource/rpm/providers/common.js.map +1 -1
- package/dist/modules/datasource/rpm/repomd.js +2 -1
- package/dist/modules/datasource/rpm/repomd.js.map +1 -1
- package/dist/modules/datasource/ruby-version/index.js +2 -1
- package/dist/modules/datasource/ruby-version/index.js.map +1 -1
- package/dist/modules/datasource/rubygems/metadata-cache.js +1 -1
- package/dist/modules/datasource/rubygems/metadata-cache.js.map +1 -1
- package/dist/modules/datasource/sbt-package/index.js +8 -5
- package/dist/modules/datasource/sbt-package/index.js.map +1 -1
- package/dist/modules/datasource/sbt-package/util.js +2 -1
- package/dist/modules/datasource/sbt-package/util.js.map +1 -1
- package/dist/modules/datasource/terraform-module/index.js +4 -2
- package/dist/modules/datasource/terraform-module/index.js.map +1 -1
- package/dist/modules/datasource/terraform-module/utils.js +2 -1
- package/dist/modules/datasource/terraform-module/utils.js.map +1 -1
- package/dist/modules/datasource/terraform-provider/index.js +2 -1
- package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
- package/dist/modules/datasource/typst/schema.js +4 -2
- package/dist/modules/datasource/typst/schema.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/collections.js +2 -2
- package/dist/modules/manager/ansible-galaxy/collections.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/extract.js +5 -3
- package/dist/modules/manager/ansible-galaxy/extract.js.map +1 -1
- package/dist/modules/manager/bazel/artifacts.js +1 -1
- package/dist/modules/manager/bazel/artifacts.js.map +1 -1
- package/dist/modules/manager/bazel/parser.js +1 -1
- package/dist/modules/manager/bazel/parser.js.map +1 -1
- package/dist/modules/manager/bazel/rules/index.js +7 -2
- package/dist/modules/manager/bazel/rules/index.js.map +1 -1
- package/dist/modules/manager/bazel-module/extract.js +2 -1
- package/dist/modules/manager/bazel-module/extract.js.map +1 -1
- package/dist/modules/manager/bazel-module/parser/extension-tags.js +3 -2
- package/dist/modules/manager/bazel-module/parser/extension-tags.js.map +1 -1
- package/dist/modules/manager/bazel-module/rules.js +1 -3
- package/dist/modules/manager/bazel-module/rules.js.map +1 -1
- package/dist/modules/manager/bitbucket-pipelines/extract.js +5 -3
- package/dist/modules/manager/bitbucket-pipelines/extract.js.map +1 -1
- package/dist/modules/manager/buildkite/extract.js +1 -1
- package/dist/modules/manager/buildkite/extract.js.map +1 -1
- package/dist/modules/manager/bun/extract.js +2 -1
- package/dist/modules/manager/bun/extract.js.map +1 -1
- package/dist/modules/manager/bundler/artifacts.js +3 -2
- package/dist/modules/manager/bundler/artifacts.js.map +1 -1
- package/dist/modules/manager/cargo/artifacts.js +3 -2
- package/dist/modules/manager/cargo/artifacts.js.map +1 -1
- package/dist/modules/manager/cocoapods/artifacts.js +2 -1
- package/dist/modules/manager/cocoapods/artifacts.js.map +1 -1
- package/dist/modules/manager/composer/update-locked.js +1 -1
- package/dist/modules/manager/composer/update-locked.js.map +1 -1
- package/dist/modules/manager/conan/artifacts.js +4 -2
- package/dist/modules/manager/conan/artifacts.js.map +1 -1
- package/dist/modules/manager/custom/jsonata/index.js +1 -3
- package/dist/modules/manager/custom/jsonata/index.js.map +1 -1
- package/dist/modules/manager/custom/jsonata/utils.js +1 -3
- package/dist/modules/manager/custom/jsonata/utils.js.map +1 -1
- package/dist/modules/manager/custom/regex/index.js +1 -3
- package/dist/modules/manager/custom/regex/index.js.map +1 -1
- package/dist/modules/manager/custom/regex/strategies.js +7 -6
- package/dist/modules/manager/custom/regex/strategies.js.map +1 -1
- package/dist/modules/manager/custom/regex/utils.js +1 -3
- package/dist/modules/manager/custom/regex/utils.js.map +1 -1
- package/dist/modules/manager/docker-compose/extract.js +2 -2
- package/dist/modules/manager/docker-compose/extract.js.map +1 -1
- package/dist/modules/manager/droneci/extract.js +1 -1
- package/dist/modules/manager/droneci/extract.js.map +1 -1
- package/dist/modules/manager/flux/artifacts.js +5 -3
- package/dist/modules/manager/flux/artifacts.js.map +1 -1
- package/dist/modules/manager/flux/extract.js +2 -6
- package/dist/modules/manager/flux/extract.js.map +1 -1
- package/dist/modules/manager/git-submodules/extract.js +5 -4
- package/dist/modules/manager/git-submodules/extract.js.map +1 -1
- package/dist/modules/manager/github-actions/extract.js +2 -1
- package/dist/modules/manager/github-actions/extract.js.map +1 -1
- package/dist/modules/manager/gitlabci/extract.js +1 -1
- package/dist/modules/manager/gitlabci/extract.js.map +1 -1
- package/dist/modules/manager/gitlabci/schema.js +2 -1
- package/dist/modules/manager/gitlabci/schema.js.map +1 -1
- package/dist/modules/manager/gitlabci-include/extract.js +1 -1
- package/dist/modules/manager/gitlabci-include/extract.js.map +1 -1
- package/dist/modules/manager/gleam/artifacts.js +2 -1
- package/dist/modules/manager/gleam/artifacts.js.map +1 -1
- package/dist/modules/manager/gomod/artifacts.js +2 -1
- package/dist/modules/manager/gomod/artifacts.js.map +1 -1
- package/dist/modules/manager/gradle/artifacts.js +3 -1
- package/dist/modules/manager/gradle/artifacts.js.map +1 -1
- package/dist/modules/manager/gradle/extract/catalog.js +3 -1
- package/dist/modules/manager/gradle/extract/catalog.js.map +1 -1
- package/dist/modules/manager/gradle/extract/consistent-versions-plugin.js +2 -1
- package/dist/modules/manager/gradle/extract/consistent-versions-plugin.js.map +1 -1
- package/dist/modules/manager/gradle/extract.js +4 -2
- package/dist/modules/manager/gradle/extract.js.map +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js +4 -2
- package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
- package/dist/modules/manager/gradle/parser/registry-urls.js +3 -2
- package/dist/modules/manager/gradle/parser/registry-urls.js.map +1 -1
- package/dist/modules/manager/gradle-wrapper/utils.js +2 -1
- package/dist/modules/manager/gradle-wrapper/utils.js.map +1 -1
- package/dist/modules/manager/helm-values/extract.js +1 -1
- package/dist/modules/manager/helm-values/extract.js.map +1 -1
- package/dist/modules/manager/helmfile/utils.js +3 -2
- package/dist/modules/manager/helmfile/utils.js.map +1 -1
- package/dist/modules/manager/helmsman/extract.js +1 -1
- package/dist/modules/manager/helmsman/extract.js.map +1 -1
- package/dist/modules/manager/helmv3/artifacts.js +3 -2
- package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
- package/dist/modules/manager/jenkins/extract.js +1 -1
- package/dist/modules/manager/jenkins/extract.js.map +1 -1
- package/dist/modules/manager/jsonnet-bundler/artifacts.js +1 -1
- package/dist/modules/manager/jsonnet-bundler/artifacts.js.map +1 -1
- package/dist/modules/manager/kustomize/artifacts.js +3 -4
- package/dist/modules/manager/kustomize/artifacts.js.map +1 -1
- package/dist/modules/manager/kustomize/extract.js +1 -1
- package/dist/modules/manager/kustomize/extract.js.map +1 -1
- package/dist/modules/manager/leiningen/extract.js +2 -1
- package/dist/modules/manager/leiningen/extract.js.map +1 -1
- package/dist/modules/manager/maven/extract.js +6 -6
- package/dist/modules/manager/maven/extract.js.map +1 -1
- package/dist/modules/manager/maven-wrapper/artifacts.js +4 -1
- package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
- package/dist/modules/manager/meteor/extract.js +1 -1
- package/dist/modules/manager/meteor/extract.js.map +1 -1
- package/dist/modules/manager/mix/artifacts.js +2 -1
- package/dist/modules/manager/mix/artifacts.js.map +1 -1
- package/dist/modules/manager/nix/extract.js +0 -1
- package/dist/modules/manager/nix/extract.js.map +1 -1
- package/dist/modules/manager/npm/artifacts.js +2 -1
- package/dist/modules/manager/npm/artifacts.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/package-file.js +1 -1
- package/dist/modules/manager/npm/extract/common/package-file.js.map +1 -1
- package/dist/modules/manager/npm/extract/pnpm.js +2 -1
- package/dist/modules/manager/npm/extract/pnpm.js.map +1 -1
- package/dist/modules/manager/npm/extract/yarn.js +3 -2
- package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
- package/dist/modules/manager/npm/post-update/index.js +9 -7
- package/dist/modules/manager/npm/post-update/index.js.map +1 -1
- package/dist/modules/manager/npm/post-update/npm.js +7 -4
- package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
- package/dist/modules/manager/npm/post-update/pnpm.js +1 -1
- package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
- package/dist/modules/manager/npm/update/dependency/index.js +2 -1
- package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
- package/dist/modules/manager/npm/update/index.js +5 -0
- package/dist/modules/manager/npm/update/index.js.map +1 -0
- package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/package-lock/index.js +21 -16
- package/dist/modules/manager/npm/update/locked-dependency/package-lock/index.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js +2 -2
- package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/index.js +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/index.js.map +1 -1
- package/dist/modules/manager/npm/utils.js +3 -3
- package/dist/modules/manager/npm/utils.js.map +1 -1
- package/dist/modules/manager/nuget/artifacts.js +2 -1
- package/dist/modules/manager/nuget/artifacts.js.map +1 -1
- package/dist/modules/manager/nuget/update.js +2 -1
- package/dist/modules/manager/nuget/update.js.map +1 -1
- package/dist/modules/manager/pep621/processors/pdm.js +2 -1
- package/dist/modules/manager/pep621/processors/pdm.js.map +1 -1
- package/dist/modules/manager/pep621/schema.js +2 -1
- package/dist/modules/manager/pep621/schema.js.map +1 -1
- package/dist/modules/manager/pip-compile/artifacts.js +2 -1
- package/dist/modules/manager/pip-compile/artifacts.js.map +1 -1
- package/dist/modules/manager/pip_requirements/artifacts.js +5 -3
- package/dist/modules/manager/pip_requirements/artifacts.js.map +1 -1
- package/dist/modules/manager/pipenv/extract.js +2 -1
- package/dist/modules/manager/pipenv/extract.js.map +1 -1
- package/dist/modules/manager/poetry/artifacts.js +3 -2
- package/dist/modules/manager/poetry/artifacts.js.map +1 -1
- package/dist/modules/manager/poetry/extract.js +2 -1
- package/dist/modules/manager/poetry/extract.js.map +1 -1
- package/dist/modules/manager/pre-commit/extract.js +5 -3
- package/dist/modules/manager/pre-commit/extract.js.map +1 -1
- package/dist/modules/manager/puppet/puppetfile-parser.js +2 -1
- package/dist/modules/manager/puppet/puppetfile-parser.js.map +1 -1
- package/dist/modules/manager/quadlet/extract.js +2 -1
- package/dist/modules/manager/quadlet/extract.js.map +1 -1
- package/dist/modules/manager/sbt/extract.js +1 -1
- package/dist/modules/manager/sbt/extract.js.map +1 -1
- package/dist/modules/manager/swift/extract.js +4 -6
- package/dist/modules/manager/swift/extract.js.map +1 -1
- package/dist/modules/manager/terraform/lockfile/index.js +4 -3
- package/dist/modules/manager/terraform/lockfile/index.js.map +1 -1
- package/dist/modules/manager/terraform/util.js +2 -1
- package/dist/modules/manager/terraform/util.js.map +1 -1
- package/dist/modules/manager/terragrunt/extract.js +3 -9
- package/dist/modules/manager/terragrunt/extract.js.map +1 -1
- package/dist/modules/manager/tflint-plugin/extract.js +1 -1
- package/dist/modules/manager/tflint-plugin/extract.js.map +1 -1
- package/dist/modules/manager/vendir/artifacts.js +3 -2
- package/dist/modules/manager/vendir/artifacts.js.map +1 -1
- package/dist/modules/platform/azure/index.js +8 -7
- package/dist/modules/platform/azure/index.js.map +1 -1
- package/dist/modules/platform/bitbucket/comments.js +2 -2
- package/dist/modules/platform/bitbucket/comments.js.map +1 -1
- package/dist/modules/platform/bitbucket/index.js +9 -8
- package/dist/modules/platform/bitbucket/index.js.map +1 -1
- package/dist/modules/platform/bitbucket-server/index.js +8 -9
- package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
- package/dist/modules/platform/codecommit/codecommit-client.js +8 -5
- package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
- package/dist/modules/platform/codecommit/index.js +5 -5
- package/dist/modules/platform/codecommit/index.js.map +1 -1
- package/dist/modules/platform/forgejo/forgejo-helper.js +5 -3
- package/dist/modules/platform/forgejo/forgejo-helper.js.map +1 -1
- package/dist/modules/platform/forgejo/index.js +15 -8
- package/dist/modules/platform/forgejo/index.js.map +1 -1
- package/dist/modules/platform/gerrit/client.js +2 -1
- package/dist/modules/platform/gerrit/client.js.map +1 -1
- package/dist/modules/platform/gerrit/index.js +4 -2
- package/dist/modules/platform/gerrit/index.js.map +1 -1
- package/dist/modules/platform/gerrit/utils.js +1 -1
- package/dist/modules/platform/gerrit/utils.js.map +1 -1
- package/dist/modules/platform/gitea/gitea-helper.js +5 -3
- package/dist/modules/platform/gitea/gitea-helper.js.map +1 -1
- package/dist/modules/platform/gitea/index.js +16 -9
- package/dist/modules/platform/gitea/index.js.map +1 -1
- package/dist/modules/platform/github/index.js +27 -24
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/modules/platform/github/massage-markdown-links.js +1 -1
- package/dist/modules/platform/github/massage-markdown-links.js.map +1 -1
- package/dist/modules/platform/github/pr.js +1 -1
- package/dist/modules/platform/github/pr.js.map +1 -1
- package/dist/modules/platform/github/schema.js +3 -2
- package/dist/modules/platform/github/schema.js.map +1 -1
- package/dist/modules/platform/gitlab/index.js +19 -14
- package/dist/modules/platform/gitlab/index.js.map +1 -1
- package/dist/modules/platform/local/scm.js +1 -1
- package/dist/modules/platform/local/scm.js.map +1 -1
- package/dist/modules/platform/util.js +2 -1
- package/dist/modules/platform/util.js.map +1 -1
- package/dist/modules/versioning/cargo/index.js +1 -1
- package/dist/modules/versioning/cargo/index.js.map +1 -1
- package/dist/modules/versioning/conan/index.js +4 -2
- package/dist/modules/versioning/conan/index.js.map +1 -1
- package/dist/modules/versioning/nixpkgs/index.js +2 -1
- package/dist/modules/versioning/nixpkgs/index.js.map +1 -1
- package/dist/modules/versioning/nuget/index.js +4 -2
- package/dist/modules/versioning/nuget/index.js.map +1 -1
- package/dist/modules/versioning/nuget/range.js +4 -2
- package/dist/modules/versioning/nuget/range.js.map +1 -1
- package/dist/modules/versioning/pep440/range.js +1 -1
- package/dist/modules/versioning/pep440/range.js.map +1 -1
- package/dist/modules/versioning/perl/index.js +1 -1
- package/dist/modules/versioning/perl/index.js.map +1 -1
- package/dist/modules/versioning/poetry/index.js +2 -2
- package/dist/modules/versioning/poetry/index.js.map +1 -1
- package/dist/modules/versioning/rez/index.js +5 -5
- package/dist/modules/versioning/rez/index.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/bump.js +3 -2
- package/dist/modules/versioning/ruby/strategies/bump.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/replace.js +3 -2
- package/dist/modules/versioning/ruby/strategies/replace.js.map +1 -1
- package/dist/modules/versioning/ruby/strategies/widen.js +3 -2
- package/dist/modules/versioning/ruby/strategies/widen.js.map +1 -1
- package/dist/util/cache/package/index.js +3 -1
- package/dist/util/cache/package/index.js.map +1 -1
- package/dist/util/cache/package/with-cache.js +7 -4
- package/dist/util/cache/package/with-cache.js.map +1 -1
- package/dist/util/cache/repository/impl/base.js +3 -2
- package/dist/util/cache/repository/impl/base.js.map +1 -1
- package/dist/util/cache/repository/impl/local.js +2 -1
- package/dist/util/cache/repository/impl/local.js.map +1 -1
- package/dist/util/cache/repository/impl/s3.js +4 -1
- package/dist/util/cache/repository/impl/s3.js.map +1 -1
- package/dist/util/date.js +1 -1
- package/dist/util/date.js.map +1 -1
- package/dist/util/emoji.js +6 -2
- package/dist/util/emoji.js.map +1 -1
- package/dist/util/exec/common.js +1 -1
- package/dist/util/exec/common.js.map +1 -1
- package/dist/util/exec/docker/index.js +2 -1
- package/dist/util/exec/docker/index.js.map +1 -1
- package/dist/util/exec/hermit.js +2 -1
- package/dist/util/exec/hermit.js.map +1 -1
- package/dist/util/exec/index.js +1 -1
- package/dist/util/exec/index.js.map +1 -1
- package/dist/util/fs/index.js +2 -1
- package/dist/util/fs/index.js.map +1 -1
- package/dist/util/git/index.js +32 -34
- package/dist/util/git/index.js.map +1 -1
- package/dist/util/git/url.js +2 -3
- package/dist/util/git/url.js.map +1 -1
- package/dist/util/github/graphql/cache-strategies/memory-cache-strategy.js +4 -2
- package/dist/util/github/graphql/cache-strategies/memory-cache-strategy.js.map +1 -1
- package/dist/util/github/graphql/datasource-fetcher.js +3 -1
- package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
- package/dist/util/http/cache/memory-http-cache-provider.js +2 -1
- package/dist/util/http/cache/memory-http-cache-provider.js.map +1 -1
- package/dist/util/http/github.js +3 -2
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/http/http.js +2 -1
- package/dist/util/http/http.js.map +1 -1
- package/dist/util/http/index.js +1 -0
- package/dist/util/http/index.js.map +1 -1
- package/dist/util/http/www-authenticate.js +1 -3
- package/dist/util/http/www-authenticate.js.map +1 -1
- package/dist/util/mutex.js +1 -1
- package/dist/util/mutex.js.map +1 -1
- package/dist/util/schema-utils/index.js +1 -1
- package/dist/util/schema-utils/index.js.map +1 -1
- package/dist/util/toml.js +2 -1
- package/dist/util/toml.js.map +1 -1
- package/dist/util/yaml.js +4 -2
- package/dist/util/yaml.js.map +1 -1
- package/dist/workers/global/config/parse/util.js.map +1 -1
- package/dist/workers/global/index.js +2 -2
- package/dist/workers/global/index.js.map +1 -1
- package/dist/workers/repository/changelog/index.js +2 -1
- package/dist/workers/repository/changelog/index.js.map +1 -1
- package/dist/workers/repository/config-migration/branch/rebase.js +2 -1
- package/dist/workers/repository/config-migration/branch/rebase.js.map +1 -1
- package/dist/workers/repository/error-config.js +1 -1
- package/dist/workers/repository/error-config.js.map +1 -1
- package/dist/workers/repository/finalize/prune.js +1 -1
- package/dist/workers/repository/finalize/prune.js.map +1 -1
- package/dist/workers/repository/finalize/repository-statistics.js +1 -4
- package/dist/workers/repository/finalize/repository-statistics.js.map +1 -1
- package/dist/workers/repository/index.js +8 -5
- package/dist/workers/repository/index.js.map +1 -1
- package/dist/workers/repository/init/vulnerability.js +1 -1
- package/dist/workers/repository/init/vulnerability.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/config.js +2 -1
- package/dist/workers/repository/onboarding/branch/config.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/create.js +2 -1
- package/dist/workers/repository/onboarding/branch/create.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/index.js +2 -1
- package/dist/workers/repository/onboarding/branch/index.js.map +1 -1
- package/dist/workers/repository/onboarding/pr/index.js +3 -1
- package/dist/workers/repository/onboarding/pr/index.js.map +1 -1
- package/dist/workers/repository/process/lookup/filter-checks.js +2 -1
- package/dist/workers/repository/process/lookup/filter-checks.js.map +1 -1
- package/dist/workers/repository/process/lookup/filter.js +1 -1
- package/dist/workers/repository/process/lookup/filter.js.map +1 -1
- package/dist/workers/repository/process/lookup/generate.js +1 -1
- package/dist/workers/repository/process/lookup/generate.js.map +1 -1
- package/dist/workers/repository/process/lookup/index.js +6 -3
- package/dist/workers/repository/process/lookup/index.js.map +1 -1
- package/dist/workers/repository/process/lookup/rollback.js +1 -1
- package/dist/workers/repository/process/lookup/rollback.js.map +1 -1
- package/dist/workers/repository/process/vulnerabilities.js +2 -1
- package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
- package/dist/workers/repository/process/write.js +8 -4
- package/dist/workers/repository/process/write.js.map +1 -1
- package/dist/workers/repository/reconfigure/validate.js +2 -1
- package/dist/workers/repository/reconfigure/validate.js.map +1 -1
- package/dist/workers/repository/update/branch/auto-replace.js +1 -1
- package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
- package/dist/workers/repository/update/branch/bump-versions.js +2 -1
- package/dist/workers/repository/update/branch/bump-versions.js.map +1 -1
- package/dist/workers/repository/update/branch/index.js +3 -1
- package/dist/workers/repository/update/branch/index.js.map +1 -1
- package/dist/workers/repository/update/pr/automerge.js +1 -1
- package/dist/workers/repository/update/pr/automerge.js.map +1 -1
- package/dist/workers/repository/update/pr/body/updates-table.js +1 -1
- package/dist/workers/repository/update/pr/body/updates-table.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/github/index.js +2 -1
- package/dist/workers/repository/update/pr/changelog/github/index.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/github/source.js +2 -1
- package/dist/workers/repository/update/pr/changelog/github/source.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/index.js +1 -1
- package/dist/workers/repository/update/pr/changelog/index.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/release-notes.js +5 -5
- package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/releases.js +1 -1
- package/dist/workers/repository/update/pr/changelog/releases.js.map +1 -1
- package/dist/workers/repository/update/pr/index.js +6 -3
- package/dist/workers/repository/update/pr/index.js.map +1 -1
- package/dist/workers/repository/update/pr/pr-reuse.js +1 -1
- package/dist/workers/repository/update/pr/pr-reuse.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
|
@@ -71,7 +71,8 @@ async function checkOnboardingBranch(config) {
|
|
|
71
71
|
}
|
|
72
72
|
} else {
|
|
73
73
|
logger.debug("Onboarding PR does not exist");
|
|
74
|
-
|
|
74
|
+
const onboardingConfig = await getOnboardingConfig(config);
|
|
75
|
+
let mergedConfig = mergeChildConfig(config, onboardingConfig);
|
|
75
76
|
mergedConfig = await mergeRenovateConfig(mergedConfig);
|
|
76
77
|
if (Object.entries((await extractAllDependencies(mergedConfig)).packageFiles).length === 0 && getInheritedOrGlobal("onboardingNoDeps") !== "enabled") throw new Error(REPOSITORY_NO_PACKAGE_FILES);
|
|
77
78
|
logger.debug("Need to create onboarding PR");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/index.ts"],"sourcesContent":["import { isNonEmptyObject, isNullOrUndefined } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport { mergeChildConfig } from '../../../../config/index.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { REPOSITORY_NO_PACKAGE_FILES } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { type Pr, platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getCache } from '../../../../util/cache/repository/index.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getBranchCommit, setGitAuthor } from '../../../../util/git/index.ts';\nimport { checkIfConfigured } from '../../configured.ts';\nimport { extractAllDependencies } from '../../extract/index.ts';\nimport { mergeRenovateConfig } from '../../init/merge.ts';\nimport { OnboardingState } from '../common.ts';\nimport { getOnboardingPr, isOnboarded } from './check.ts';\nimport { getOnboardingConfig } from './config.ts';\nimport { createOnboardingBranch } from './create.ts';\nimport {\n deleteOnboardingCache,\n hasOnboardingBranchChanged,\n isOnboardingBranchConflicted,\n isOnboardingBranchModified,\n setOnboardingCache,\n} from './onboarding-branch-cache.ts';\nimport { rebaseOnboardingBranch } from './rebase.ts';\n\nexport async function checkOnboardingBranch(\n config: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.debug('checkOnboarding()');\n logger.trace({ config });\n const onboardingBranch = getInheritedOrGlobal('onboardingBranch');\n const defaultBranch = config.defaultBranch!;\n let isConflicted = false;\n let isModified = false;\n const repoIsOnboarded = await isOnboarded(config);\n if (repoIsOnboarded) {\n logger.debug('Repo is onboarded');\n\n // delete onboarding cache\n deleteOnboardingCache();\n return { ...config, repoIsOnboarded };\n }\n checkIfConfigured(config);\n\n logger.debug('Repo is not onboarded');\n // global gitAuthor will need to be used\n setGitAuthor(config.gitAuthor);\n const onboardingPr = await getOnboardingPr(config);\n // TODO #22198\n const branchList = [onboardingBranch!];\n if (onboardingPr) {\n logger.debug('Onboarding PR already exists');\n\n isModified = await isOnboardingBranchModified(\n onboardingBranch!,\n defaultBranch,\n );\n // if onboarding branch is not modified, check if onboarding config has been changed and rebase if true\n if (!isModified) {\n const commit = await rebaseOnboardingBranch(\n config,\n onboardingPr.bodyStruct?.rawConfigHash,\n );\n if (commit) {\n logger.info(\n { branch: onboardingBranch, commit, onboarding: true },\n 'Branch updated',\n );\n }\n // istanbul ignore if\n if (platform.refreshPr) {\n await platform.refreshPr(onboardingPr.number);\n }\n }\n if (config.onboardingRebaseCheckbox) {\n handleOnboardingManualRebase(onboardingPr);\n }\n\n if (\n isConfigHashPresent(onboardingPr) && // needed so that existing onboarding PRs are updated with config hash comment\n isOnboardingCacheValid(defaultBranch, onboardingBranch!) &&\n !(config.onboardingRebaseCheckbox && OnboardingState.prUpdateRequested)\n ) {\n logger.debug(\n 'Skip processing since the onboarding branch is up to date and default branch has not changed',\n );\n OnboardingState.onboardingCacheValid = true;\n return { ...config, repoIsOnboarded, onboardingBranch, branchList };\n }\n OnboardingState.onboardingCacheValid = false;\n if (isModified) {\n if (hasOnboardingBranchChanged(onboardingBranch!)) {\n invalidateExtractCache(config.baseBranch!);\n }\n isConflicted = await isOnboardingBranchConflicted(\n config.baseBranch!,\n onboardingBranch!,\n );\n }\n } else {\n logger.debug('Onboarding PR does not exist');\n const onboardingConfig = await getOnboardingConfig(config);\n let mergedConfig = mergeChildConfig(config, onboardingConfig);\n mergedConfig = await mergeRenovateConfig(mergedConfig);\n\n if (\n Object.entries((await extractAllDependencies(mergedConfig)).packageFiles)\n .length === 0 &&\n getInheritedOrGlobal('onboardingNoDeps') !== 'enabled'\n ) {\n throw new Error(REPOSITORY_NO_PACKAGE_FILES);\n }\n logger.debug('Need to create onboarding PR');\n if (config.onboardingRebaseCheckbox) {\n OnboardingState.prUpdateRequested = true;\n }\n const commit = await createOnboardingBranch(mergedConfig);\n // istanbul ignore if\n if (commit) {\n logger.info(\n { branch: onboardingBranch, commit, onboarding: true },\n 'Branch created',\n );\n }\n }\n // TODO #22198\n if (!GlobalConfig.get('dryRun') && !isConflicted) {\n logger.debug('Merge onboarding branch in default branch');\n await scm.mergeToLocal(onboardingBranch!);\n }\n setOnboardingCache(\n getBranchCommit(config.defaultBranch!)!,\n getBranchCommit(onboardingBranch!)!,\n isConflicted,\n isModified,\n );\n\n return { ...config, repoIsOnboarded, onboardingBranch, branchList };\n}\n\nfunction handleOnboardingManualRebase(onboardingPr: Pr): void {\n const pl = GlobalConfig.get('platform');\n const { rebaseRequested } = onboardingPr.bodyStruct ?? {};\n if (!['github', 'gitlab', 'gitea'].includes(pl)) {\n logger.trace(`Platform '${pl}' does not support extended markdown`);\n OnboardingState.prUpdateRequested = true;\n } else if (isNullOrUndefined(rebaseRequested)) {\n logger.debug('No rebase checkbox was found in the onboarding PR');\n OnboardingState.prUpdateRequested = true;\n } else if (rebaseRequested) {\n logger.debug('Manual onboarding PR update requested');\n OnboardingState.prUpdateRequested = true;\n }\n}\n\nfunction invalidateExtractCache(baseBranch: string): void {\n const cache = getCache();\n cache.scan ??= {};\n\n if (cache.scan?.[baseBranch]) {\n delete cache.scan[baseBranch];\n }\n}\n\nfunction isOnboardingCacheValid(\n defaultBranch: string,\n onboardingBranch: string,\n): boolean {\n const cache = getCache();\n const onboardingBranchCache = cache?.onboardingBranchCache;\n return !!(\n isNonEmptyObject(onboardingBranchCache) &&\n onboardingBranchCache.defaultBranchSha === getBranchCommit(defaultBranch) &&\n onboardingBranchCache.onboardingBranchSha ===\n getBranchCommit(onboardingBranch) &&\n onboardingBranchCache.configFileName &&\n onboardingBranchCache.configFileParsed\n );\n}\n\nfunction isConfigHashPresent(pr: Pr): boolean {\n const platform = GlobalConfig.get('platform');\n // if platform does not support html comments return true\n if (!['github', 'gitlab', 'gitea'].includes(platform)) {\n return true;\n }\n\n return !!pr.bodyStruct?.rawConfigHash;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2BA,eAAsB,sBACpB,QACyB;CACzB,OAAO,MAAM,mBAAmB;CAChC,OAAO,MAAM,EAAE,OAAO,CAAC;CACvB,MAAM,mBAAmB,qBAAqB,kBAAkB;CAChE,MAAM,gBAAgB,OAAO;CAC7B,IAAI,eAAe;CACnB,IAAI,aAAa;CACjB,MAAM,kBAAkB,MAAM,YAAY,MAAM;CAChD,IAAI,iBAAiB;EACnB,OAAO,MAAM,mBAAmB;EAGhC,sBAAsB;EACtB,OAAO;GAAE,GAAG;GAAQ;EAAgB;CACtC;CACA,kBAAkB,MAAM;CAExB,OAAO,MAAM,uBAAuB;CAEpC,aAAa,OAAO,SAAS;CAC7B,MAAM,eAAe,MAAM,gBAAgB,MAAM;CAEjD,MAAM,aAAa,CAAC,gBAAiB;CACrC,IAAI,cAAc;EAChB,OAAO,MAAM,8BAA8B;EAE3C,aAAa,MAAM,2BACjB,kBACA,aACF;EAEA,IAAI,CAAC,YAAY;GACf,MAAM,SAAS,MAAM,uBACnB,QACA,aAAa,YAAY,aAC3B;GACA,IAAI,QACF,OAAO,KACL;IAAE,QAAQ;IAAkB;IAAQ,YAAY;GAAK,GACrD,gBACF;;GAGF,IAAI,SAAS,WACX,MAAM,SAAS,UAAU,aAAa,MAAM;EAEhD;EACA,IAAI,OAAO,0BACT,6BAA6B,YAAY;EAG3C,IACE,oBAAoB,YAAY,KAChC,uBAAuB,eAAe,gBAAiB,KACvD,EAAE,OAAO,4BAA4B,gBAAgB,oBACrD;GACA,OAAO,MACL,8FACF;GACA,gBAAgB,uBAAuB;GACvC,OAAO;IAAE,GAAG;IAAQ;IAAiB;IAAkB;GAAW;EACpE;EACA,gBAAgB,uBAAuB;EACvC,IAAI,YAAY;GACd,IAAI,2BAA2B,gBAAiB,GAC9C,uBAAuB,OAAO,UAAW;GAE3C,eAAe,MAAM,6BACnB,OAAO,YACP,gBACF;EACF;CACF,OAAO;EACL,OAAO,MAAM,8BAA8B;
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/index.ts"],"sourcesContent":["import { isNonEmptyObject, isNullOrUndefined } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport { mergeChildConfig } from '../../../../config/index.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { REPOSITORY_NO_PACKAGE_FILES } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { type Pr, platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getCache } from '../../../../util/cache/repository/index.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getBranchCommit, setGitAuthor } from '../../../../util/git/index.ts';\nimport { checkIfConfigured } from '../../configured.ts';\nimport { extractAllDependencies } from '../../extract/index.ts';\nimport { mergeRenovateConfig } from '../../init/merge.ts';\nimport { OnboardingState } from '../common.ts';\nimport { getOnboardingPr, isOnboarded } from './check.ts';\nimport { getOnboardingConfig } from './config.ts';\nimport { createOnboardingBranch } from './create.ts';\nimport {\n deleteOnboardingCache,\n hasOnboardingBranchChanged,\n isOnboardingBranchConflicted,\n isOnboardingBranchModified,\n setOnboardingCache,\n} from './onboarding-branch-cache.ts';\nimport { rebaseOnboardingBranch } from './rebase.ts';\n\nexport async function checkOnboardingBranch(\n config: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.debug('checkOnboarding()');\n logger.trace({ config });\n const onboardingBranch = getInheritedOrGlobal('onboardingBranch');\n const defaultBranch = config.defaultBranch!;\n let isConflicted = false;\n let isModified = false;\n const repoIsOnboarded = await isOnboarded(config);\n if (repoIsOnboarded) {\n logger.debug('Repo is onboarded');\n\n // delete onboarding cache\n deleteOnboardingCache();\n return { ...config, repoIsOnboarded };\n }\n checkIfConfigured(config);\n\n logger.debug('Repo is not onboarded');\n // global gitAuthor will need to be used\n setGitAuthor(config.gitAuthor);\n const onboardingPr = await getOnboardingPr(config);\n // TODO #22198\n const branchList = [onboardingBranch!];\n if (onboardingPr) {\n logger.debug('Onboarding PR already exists');\n\n isModified = await isOnboardingBranchModified(\n onboardingBranch!,\n defaultBranch,\n );\n // if onboarding branch is not modified, check if onboarding config has been changed and rebase if true\n if (!isModified) {\n const commit = await rebaseOnboardingBranch(\n config,\n onboardingPr.bodyStruct?.rawConfigHash,\n );\n if (commit) {\n logger.info(\n { branch: onboardingBranch, commit, onboarding: true },\n 'Branch updated',\n );\n }\n // istanbul ignore if\n if (platform.refreshPr) {\n await platform.refreshPr(onboardingPr.number);\n }\n }\n if (config.onboardingRebaseCheckbox) {\n handleOnboardingManualRebase(onboardingPr);\n }\n\n if (\n isConfigHashPresent(onboardingPr) && // needed so that existing onboarding PRs are updated with config hash comment\n isOnboardingCacheValid(defaultBranch, onboardingBranch!) &&\n !(config.onboardingRebaseCheckbox && OnboardingState.prUpdateRequested)\n ) {\n logger.debug(\n 'Skip processing since the onboarding branch is up to date and default branch has not changed',\n );\n OnboardingState.onboardingCacheValid = true;\n return { ...config, repoIsOnboarded, onboardingBranch, branchList };\n }\n OnboardingState.onboardingCacheValid = false;\n if (isModified) {\n if (hasOnboardingBranchChanged(onboardingBranch!)) {\n invalidateExtractCache(config.baseBranch!);\n }\n isConflicted = await isOnboardingBranchConflicted(\n config.baseBranch!,\n onboardingBranch!,\n );\n }\n } else {\n logger.debug('Onboarding PR does not exist');\n const onboardingConfig = await getOnboardingConfig(config);\n let mergedConfig = mergeChildConfig(config, onboardingConfig);\n mergedConfig = await mergeRenovateConfig(mergedConfig);\n\n if (\n Object.entries((await extractAllDependencies(mergedConfig)).packageFiles)\n .length === 0 &&\n getInheritedOrGlobal('onboardingNoDeps') !== 'enabled'\n ) {\n throw new Error(REPOSITORY_NO_PACKAGE_FILES);\n }\n logger.debug('Need to create onboarding PR');\n if (config.onboardingRebaseCheckbox) {\n OnboardingState.prUpdateRequested = true;\n }\n const commit = await createOnboardingBranch(mergedConfig);\n // istanbul ignore if\n if (commit) {\n logger.info(\n { branch: onboardingBranch, commit, onboarding: true },\n 'Branch created',\n );\n }\n }\n // TODO #22198\n if (!GlobalConfig.get('dryRun') && !isConflicted) {\n logger.debug('Merge onboarding branch in default branch');\n await scm.mergeToLocal(onboardingBranch!);\n }\n setOnboardingCache(\n getBranchCommit(config.defaultBranch!)!,\n getBranchCommit(onboardingBranch!)!,\n isConflicted,\n isModified,\n );\n\n return { ...config, repoIsOnboarded, onboardingBranch, branchList };\n}\n\nfunction handleOnboardingManualRebase(onboardingPr: Pr): void {\n const pl = GlobalConfig.get('platform');\n const { rebaseRequested } = onboardingPr.bodyStruct ?? {};\n if (!['github', 'gitlab', 'gitea'].includes(pl)) {\n logger.trace(`Platform '${pl}' does not support extended markdown`);\n OnboardingState.prUpdateRequested = true;\n } else if (isNullOrUndefined(rebaseRequested)) {\n logger.debug('No rebase checkbox was found in the onboarding PR');\n OnboardingState.prUpdateRequested = true;\n } else if (rebaseRequested) {\n logger.debug('Manual onboarding PR update requested');\n OnboardingState.prUpdateRequested = true;\n }\n}\n\nfunction invalidateExtractCache(baseBranch: string): void {\n const cache = getCache();\n cache.scan ??= {};\n\n if (cache.scan?.[baseBranch]) {\n delete cache.scan[baseBranch];\n }\n}\n\nfunction isOnboardingCacheValid(\n defaultBranch: string,\n onboardingBranch: string,\n): boolean {\n const cache = getCache();\n const onboardingBranchCache = cache?.onboardingBranchCache;\n return !!(\n isNonEmptyObject(onboardingBranchCache) &&\n onboardingBranchCache.defaultBranchSha === getBranchCommit(defaultBranch) &&\n onboardingBranchCache.onboardingBranchSha ===\n getBranchCommit(onboardingBranch) &&\n onboardingBranchCache.configFileName &&\n onboardingBranchCache.configFileParsed\n );\n}\n\nfunction isConfigHashPresent(pr: Pr): boolean {\n const platform = GlobalConfig.get('platform');\n // if platform does not support html comments return true\n if (!['github', 'gitlab', 'gitea'].includes(platform)) {\n return true;\n }\n\n return !!pr.bodyStruct?.rawConfigHash;\n}\n"],"mappings":"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"}
|
|
@@ -179,7 +179,9 @@ function getRebaseCheckbox(onboardingRebaseCheckbox) {
|
|
|
179
179
|
return rebaseCheckBox;
|
|
180
180
|
}
|
|
181
181
|
async function getOnboardingConfigHashComment() {
|
|
182
|
-
|
|
182
|
+
const configFile = getDefaultConfigFileName();
|
|
183
|
+
const existingContents = await getFile(configFile, getInheritedOrGlobal("onboardingBranch")) ?? "";
|
|
184
|
+
return `\n<!--renovate-config-hash:${toSha256(existingContents)}-->\n`;
|
|
183
185
|
}
|
|
184
186
|
//#endregion
|
|
185
187
|
export { ensureOnboardingPr };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["template.compile"],"sources":["../../../../../lib/workers/repository/onboarding/pr/index.ts"],"sourcesContent":["import { isNumber, isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { REPOSITORY_CLOSED_ONBOARDING } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { PackageFile } from '../../../../modules/manager/types.ts';\nimport { ensureComment } from '../../../../modules/platform/comment.ts';\nimport type { Pr } from '../../../../modules/platform/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { hashBody } from '../../../../modules/platform/pr-body.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getElapsedDays } from '../../../../util/date.ts';\nimport { emojify } from '../../../../util/emoji.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport { toSha256 } from '../../../../util/hash.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport type { BranchConfig } from '../../../types.ts';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../../errors-warnings.ts';\nimport { getPlatformPrOptions } from '../../update/pr/index.ts';\nimport { prepareLabels } from '../../update/pr/labels.ts';\nimport { addParticipants } from '../../update/pr/participants.ts';\nimport { isOnboardingBranchConflicted } from '../branch/onboarding-branch-cache.ts';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common.ts';\nimport { getBaseBranchDesc } from './base-branch.ts';\nimport { getConfigDesc } from './config-description.ts';\nimport {\n getPackageFilesDesc,\n getPackageFilesSummary,\n} from './package-files.ts';\nimport { getExpectedPrList, getExpectedPrListSummary } from './pr-list.ts';\n\n/**\n * Given an existing PR, if onboardingAutoCloseAge has passed, close the PR.\n *\n * Returns true if the PR was closed.\n */\nasync function ensureOnboardingAutoCloseAge(existingPr: Pr): Promise<boolean> {\n // check if the existing pr crosses the onboarding autoclose age\n const ageOfOnboardingPr = getElapsedDays(existingPr.createdAt!, false);\n const onboardingAutoCloseAge = getInheritedOrGlobal('onboardingAutoCloseAge');\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: existingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the onboarding PR created at \\`${existingPr.createdAt!}\\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`,\n );\n }\n if (\n isNumber(onboardingAutoCloseAge) &&\n ageOfOnboardingPr > onboardingAutoCloseAge\n ) {\n // close the pr\n await platform.updatePr({\n number: existingPr.number,\n state: 'closed',\n prTitle: existingPr.title,\n });\n // ensure comment\n await ensureComment({\n number: existingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n logger.debug(\n {\n ageOfOnboardingPr,\n onboardingAutoCloseAge,\n },\n `Renovate is being disabled for this repository as the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days`,\n );\n return true;\n }\n return false;\n}\n\nexport async function ensureOnboardingPr(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]> | null,\n branches: BranchConfig[],\n): Promise<void> {\n if (\n config.repoIsOnboarded === true ||\n (config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested)\n ) {\n return;\n }\n logger.debug('ensureOnboardingPr()');\n logger.trace({ config });\n // TODO #22198\n const onboardingBranch = getInheritedOrGlobal('onboardingBranch')!;\n const existingPr = await platform.getBranchPr(\n onboardingBranch,\n config.defaultBranch,\n );\n if (existingPr) {\n const wasClosed = await ensureOnboardingAutoCloseAge(existingPr);\n if (wasClosed) {\n throw new Error(REPOSITORY_CLOSED_ONBOARDING);\n }\n\n // skip pr-update if branch is conflicted\n if (\n await isOnboardingBranchConflicted(\n config.defaultBranch!,\n onboardingBranch,\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n 'DRY-RUN: Would comment that Onboarding PR is conflicted and needs manual resolving',\n );\n return;\n }\n await ensureComment({\n number: existingPr.number,\n topic: 'Branch Conflicted',\n content: emojify(\n `:warning: This PR has a merge conflict which Renovate is unable to automatically resolve, so updates to this PR description are now paused. Please resolve the merge conflict manually.\\n\\n`,\n ),\n });\n return;\n }\n }\n\n if (OnboardingState.onboardingCacheValid) {\n return;\n }\n\n const onboardingConfigHashComment = await getOnboardingConfigHashComment();\n const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);\n logger.debug('Filling in onboarding PR template');\n let prTemplate = `Welcome to [Renovate](${\n GlobalConfig.get('productLinks').homepage\n })! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\\n\\n`;\n prTemplate +=\n getInheritedOrGlobal('requireConfig') === 'required'\n ? emojify(\n `:vertical_traffic_light: To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.\\n\\n`,\n )\n : emojify(\n `:vertical_traffic_light: Renovate will begin keeping your dependencies up-to-date only once you merge or close this Pull Request.\\n\\n`,\n );\n\n prTemplate += emojify(\n `:books: See our [Reading List](${GlobalConfig.get('productLinks').documentation}reading-list/) for relevant documentation you may be interested in reading.\\n\\n`,\n );\n\n const configFile = getDefaultConfigFileName();\n prTemplate += emojify(\n `:abcd: Do you want to change how Renovate upgrades your dependencies?`,\n );\n prTemplate += ` Add your custom config to \\`${configFile}\\` in this branch${\n config.onboardingRebaseCheckbox\n ? ' and select the Retry/Rebase checkbox below'\n : ''\n }. Renovate will update the Pull Request description the next time it runs.`;\n prTemplate += '\\n\\n';\n // TODO #22198\n prTemplate += emojify(\n `\n\n---\n{{PACKAGE FILES}}\n{{CONFIG}}\n{{BASEBRANCH}}\n{{PRLIST}}\n{{WARNINGS}}\n{{ERRORS}}\n\n---\n\n:question: Got questions? Check out Renovate's [Docs](${\n GlobalConfig.get('productLinks').documentation\n }), particularly the Getting Started section.\nIf you need any further assistance then you can also [request help here](${\n GlobalConfig.get('productLinks').help\n }).\n`,\n );\n prTemplate += rebaseCheckBox;\n let prBody = prTemplate;\n const packageFilesDesc = getPackageFilesDesc(packageFiles);\n if (packageFilesDesc) {\n prBody = `${prBody.replace('{{PACKAGE FILES}}', packageFilesDesc)}\\n`;\n } else {\n prBody = prBody.replace('{{PACKAGE FILES}}\\n', '');\n }\n let configDesc = '';\n if (GlobalConfig.get('dryRun')) {\n // TODO: types (#22198)\n logger.info(`DRY-RUN: Would check branch ${onboardingBranch}`);\n } else {\n configDesc = getConfigDesc(config, packageFiles!);\n }\n prBody = prBody.replace('{{CONFIG}}\\n', configDesc);\n prBody = prBody.replace(\n '{{WARNINGS}}\\n',\n getWarnings(config) + getDepWarningsOnboardingPR(packageFiles!, config),\n );\n prBody = prBody.replace('{{ERRORS}}\\n', getErrors(config));\n prBody = prBody.replace('{{BASEBRANCH}}\\n', getBaseBranchDesc(config));\n const prList = getExpectedPrList(config, branches);\n prBody = prBody.replace('{{PRLIST}}\\n', prList);\n if (isString(config.prHeader)) {\n prBody = `${template.compile(config.prHeader, config)}\\n\\n${prBody}`;\n }\n if (isString(config.prFooter)) {\n prBody = `${prBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n\n prBody += onboardingConfigHashComment;\n\n if (prBody.length > platform.maxBodyLength()) {\n logger.debug(\n 'Onboarding PR body exceeds platform limit, switching to summary PR list and package files',\n );\n prBody = prBody.replace(prList, getExpectedPrListSummary(config, branches));\n if (packageFilesDesc) {\n prBody = prBody.replace(\n packageFilesDesc,\n `### Detected Package Files\\n\\n${getPackageFilesSummary(packageFiles)}`,\n );\n }\n }\n\n logger.trace(`prBody:\\n${prBody}`);\n\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (existingPr) {\n logger.debug('Found open onboarding PR');\n // Check if existing PR needs updating\n const prBodyHash = hashBody(prBody);\n if (existingPr.bodyStruct?.hash === prBodyHash) {\n logger.debug(`Pull Request #${existingPr.number} does not need updating`);\n return;\n }\n // PR must need updating\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would update onboarding PR');\n } else {\n await platform.updatePr({\n number: existingPr.number,\n prTitle: existingPr.title,\n prBody,\n });\n logger.info({ pr: existingPr.number }, 'Onboarding PR updated');\n }\n return;\n }\n logger.debug('Creating onboarding PR');\n const labels: string[] = prepareLabels(config);\n try {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create onboarding PR');\n } else {\n // TODO #22198\n const prTitle =\n config.semanticCommits === 'enabled'\n ? getSemanticCommitPrTitle(config)\n : getInheritedOrGlobal('onboardingPrTitle')!;\n const pr = await platform.createPr({\n sourceBranch: onboardingBranch,\n targetBranch: config.defaultBranch!,\n prTitle,\n prBody,\n labels,\n platformPrOptions: getPlatformPrOptions({\n ...config,\n automerge: false,\n }),\n });\n logger.info(\n { pr: `Pull Request #${pr!.number}` },\n 'Onboarding PR created',\n );\n await addParticipants(config, pr!);\n }\n } catch (err) {\n if (\n err.response?.statusCode === 422 &&\n err.response?.body?.errors?.[0]?.message?.startsWith(\n 'A pull request already exists',\n )\n ) {\n logger.warn(\n 'Onboarding PR already exists but cannot find it. It was probably created by a different user.',\n );\n await scm.deleteBranch(onboardingBranch);\n return;\n }\n throw err;\n }\n}\n\nfunction getRebaseCheckbox(onboardingRebaseCheckbox?: boolean): string {\n let rebaseCheckBox = '';\n if (onboardingRebaseCheckbox) {\n // Create markdown checkbox\n rebaseCheckBox = `\\n\\n---\\n\\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.\\n`;\n }\n\n return rebaseCheckBox;\n}\n\nasync function getOnboardingConfigHashComment(): Promise<string> {\n const configFile = getDefaultConfigFileName();\n const existingContents =\n (await getFile(configFile, getInheritedOrGlobal('onboardingBranch'))) ?? '';\n const hash = toSha256(existingContents);\n\n return `\\n<!--renovate-config-hash:${hash}-->\\n`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,eAAe,6BAA6B,YAAkC;CAE5E,MAAM,oBAAoB,eAAe,WAAW,WAAY,KAAK;CACrE,MAAM,yBAAyB,qBAAqB,wBAAwB;CAC5E,IAAI,wBACF,OAAO,MACL;EACE;EACA,WAAW,WAAW;EACtB;CACF,GACA,mDAAmD,WAAW,UAAW,iBAAiB,kBAAkB,QAAQ,CAAC,EAAE,UACzH;CAEF,IACE,SAAS,sBAAsB,KAC/B,oBAAoB,wBACpB;EAEA,MAAM,SAAS,SAAS;GACtB,QAAQ,WAAW;GACnB,OAAO;GACP,SAAS,WAAW;EACtB,CAAC;EAED,MAAM,cAAc;GAClB,QAAQ,WAAW;GACnB,OAAO;GACP,SAAS,kFAAkF,uBAAuB;EACpH,CAAC;EACD,OAAO,MACL;GACE;GACA;EACF,GACA,uGAAuG,uBAAuB,MAChI;EACA,OAAO;CACT;CACA,OAAO;AACT;AAEA,eAAsB,mBACpB,QACA,cACA,UACe;CACf,IACE,OAAO,oBAAoB,QAC1B,OAAO,4BAA4B,CAAC,gBAAgB,mBAErD;CAEF,OAAO,MAAM,sBAAsB;CACnC,OAAO,MAAM,EAAE,OAAO,CAAC;CAEvB,MAAM,mBAAmB,qBAAqB,kBAAkB;CAChE,MAAM,aAAa,MAAM,SAAS,YAChC,kBACA,OAAO,aACT;CACA,IAAI,YAAY;EAEd,IAAI,MADoB,6BAA6B,UAAU,GAE7D,MAAM,IAAI,MAAM,4BAA4B;EAI9C,IACE,MAAM,6BACJ,OAAO,eACP,gBACF,GACA;GACA,IAAI,aAAa,IAAI,QAAQ,GAAG;IAC9B,OAAO,KACL,oFACF;IACA;GACF;GACA,MAAM,cAAc;IAClB,QAAQ,WAAW;IACnB,OAAO;IACP,SAAS,QACP,6LACF;GACF,CAAC;GACD;EACF;CACF;CAEA,IAAI,gBAAgB,sBAClB;CAGF,MAAM,8BAA8B,MAAM,+BAA+B;CACzE,MAAM,iBAAiB,kBAAkB,OAAO,wBAAwB;CACxE,OAAO,MAAM,mCAAmC;CAChD,IAAI,aAAa,yBACf,aAAa,IAAI,cAAc,CAAC,CAAC,SAClC;CACD,cACE,qBAAqB,eAAe,MAAM,aACtC,QACE,2IACF,IACA,QACE,uIACF;CAEN,cAAc,QACZ,kCAAkC,aAAa,IAAI,cAAc,CAAC,CAAC,cAAc,gFACnF;CAEA,MAAM,aAAa,yBAAyB;CAC5C,cAAc,QACZ,uEACF;CACA,cAAc,gCAAgC,WAAW,mBACvD,OAAO,2BACH,gDACA,GACL;CACD,cAAc;CAEd,cAAc,QACZ;;;;;;;;;;;;wDAaE,aAAa,IAAI,cAAc,CAAC,CAAC,cAClC;2EAEC,aAAa,IAAI,cAAc,CAAC,CAAC,KAClC;CAEH;CACA,cAAc;CACd,IAAI,SAAS;CACb,MAAM,mBAAmB,oBAAoB,YAAY;CACzD,IAAI,kBACF,SAAS,GAAG,OAAO,QAAQ,qBAAqB,gBAAgB,EAAE;MAElE,SAAS,OAAO,QAAQ,uBAAuB,EAAE;CAEnD,IAAI,aAAa;CACjB,IAAI,aAAa,IAAI,QAAQ,GAE3B,OAAO,KAAK,+BAA+B,kBAAkB;MAE7D,aAAa,cAAc,QAAQ,YAAa;CAElD,SAAS,OAAO,QAAQ,gBAAgB,UAAU;CAClD,SAAS,OAAO,QACd,kBACA,YAAY,MAAM,IAAI,2BAA2B,cAAe,MAAM,CACxE;CACA,SAAS,OAAO,QAAQ,gBAAgB,UAAU,MAAM,CAAC;CACzD,SAAS,OAAO,QAAQ,oBAAoB,kBAAkB,MAAM,CAAC;CACrE,MAAM,SAAS,kBAAkB,QAAQ,QAAQ;CACjD,SAAS,OAAO,QAAQ,gBAAgB,MAAM;CAC9C,IAAI,SAAS,OAAO,QAAQ,GAC1B,SAAS,GAAGA,QAAiB,OAAO,UAAU,MAAM,EAAE,MAAM;CAE9D,IAAI,SAAS,OAAO,QAAQ,GAC1B,SAAS,GAAG,OAAO,WAAWA,QAAiB,OAAO,UAAU,MAAM,EAAE;CAG1E,UAAU;CAEV,IAAI,OAAO,SAAS,SAAS,cAAc,GAAG;EAC5C,OAAO,MACL,2FACF;EACA,SAAS,OAAO,QAAQ,QAAQ,yBAAyB,QAAQ,QAAQ,CAAC;EAC1E,IAAI,kBACF,SAAS,OAAO,QACd,kBACA,iCAAiC,uBAAuB,YAAY,GACtE;CAEJ;CAEA,OAAO,MAAM,YAAY,QAAQ;CAEjC,SAAS,SAAS,gBAAgB,QAAQ,OAAO,WAAW;CAE5D,IAAI,YAAY;EACd,OAAO,MAAM,0BAA0B;EAEvC,MAAM,aAAa,SAAS,MAAM;EAClC,IAAI,WAAW,YAAY,SAAS,YAAY;GAC9C,OAAO,MAAM,iBAAiB,WAAW,OAAO,wBAAwB;GACxE;EACF;EAEA,IAAI,aAAa,IAAI,QAAQ,GAC3B,OAAO,KAAK,qCAAqC;OAC5C;GACL,MAAM,SAAS,SAAS;IACtB,QAAQ,WAAW;IACnB,SAAS,WAAW;IACpB;GACF,CAAC;GACD,OAAO,KAAK,EAAE,IAAI,WAAW,OAAO,GAAG,uBAAuB;EAChE;EACA;CACF;CACA,OAAO,MAAM,wBAAwB;CACrC,MAAM,SAAmB,cAAc,MAAM;CAC7C,IAAI;EACF,IAAI,aAAa,IAAI,QAAQ,GAC3B,OAAO,KAAK,qCAAqC;OAC5C;GAEL,MAAM,UACJ,OAAO,oBAAoB,YACvB,yBAAyB,MAAM,IAC/B,qBAAqB,mBAAmB;GAC9C,MAAM,KAAK,MAAM,SAAS,SAAS;IACjC,cAAc;IACd,cAAc,OAAO;IACrB;IACA;IACA;IACA,mBAAmB,qBAAqB;KACtC,GAAG;KACH,WAAW;IACb,CAAC;GACH,CAAC;GACD,OAAO,KACL,EAAE,IAAI,iBAAiB,GAAI,SAAS,GACpC,uBACF;GACA,MAAM,gBAAgB,QAAQ,EAAG;EACnC;CACF,SAAS,KAAK;EACZ,IACE,IAAI,UAAU,eAAe,OAC7B,IAAI,UAAU,MAAM,SAAS,EAAE,EAAE,SAAS,WACxC,+BACF,GACA;GACA,OAAO,KACL,+FACF;GACA,MAAM,IAAI,aAAa,gBAAgB;GACvC;EACF;EACA,MAAM;CACR;AACF;AAEA,SAAS,kBAAkB,0BAA4C;CACrE,IAAI,iBAAiB;CACrB,IAAI,0BAEF,iBAAiB;CAGnB,OAAO;AACT;AAEA,eAAe,iCAAkD;CAM/D,OAAO,8BAFM,SADV,MAAM,QAFU,yBAEO,GAAG,qBAAqB,kBAAkB,CAAC,KAAM,EAGnC,EAAE;AAC5C"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["template.compile"],"sources":["../../../../../lib/workers/repository/onboarding/pr/index.ts"],"sourcesContent":["import { isNumber, isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { REPOSITORY_CLOSED_ONBOARDING } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { PackageFile } from '../../../../modules/manager/types.ts';\nimport { ensureComment } from '../../../../modules/platform/comment.ts';\nimport type { Pr } from '../../../../modules/platform/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { hashBody } from '../../../../modules/platform/pr-body.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getElapsedDays } from '../../../../util/date.ts';\nimport { emojify } from '../../../../util/emoji.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport { toSha256 } from '../../../../util/hash.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport type { BranchConfig } from '../../../types.ts';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../../errors-warnings.ts';\nimport { getPlatformPrOptions } from '../../update/pr/index.ts';\nimport { prepareLabels } from '../../update/pr/labels.ts';\nimport { addParticipants } from '../../update/pr/participants.ts';\nimport { isOnboardingBranchConflicted } from '../branch/onboarding-branch-cache.ts';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common.ts';\nimport { getBaseBranchDesc } from './base-branch.ts';\nimport { getConfigDesc } from './config-description.ts';\nimport {\n getPackageFilesDesc,\n getPackageFilesSummary,\n} from './package-files.ts';\nimport { getExpectedPrList, getExpectedPrListSummary } from './pr-list.ts';\n\n/**\n * Given an existing PR, if onboardingAutoCloseAge has passed, close the PR.\n *\n * Returns true if the PR was closed.\n */\nasync function ensureOnboardingAutoCloseAge(existingPr: Pr): Promise<boolean> {\n // check if the existing pr crosses the onboarding autoclose age\n const ageOfOnboardingPr = getElapsedDays(existingPr.createdAt!, false);\n const onboardingAutoCloseAge = getInheritedOrGlobal('onboardingAutoCloseAge');\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: existingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the onboarding PR created at \\`${existingPr.createdAt!}\\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`,\n );\n }\n if (\n isNumber(onboardingAutoCloseAge) &&\n ageOfOnboardingPr > onboardingAutoCloseAge\n ) {\n // close the pr\n await platform.updatePr({\n number: existingPr.number,\n state: 'closed',\n prTitle: existingPr.title,\n });\n // ensure comment\n await ensureComment({\n number: existingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n logger.debug(\n {\n ageOfOnboardingPr,\n onboardingAutoCloseAge,\n },\n `Renovate is being disabled for this repository as the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days`,\n );\n return true;\n }\n return false;\n}\n\nexport async function ensureOnboardingPr(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]> | null,\n branches: BranchConfig[],\n): Promise<void> {\n if (\n config.repoIsOnboarded === true ||\n (config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested)\n ) {\n return;\n }\n logger.debug('ensureOnboardingPr()');\n logger.trace({ config });\n // TODO #22198\n const onboardingBranch = getInheritedOrGlobal('onboardingBranch')!;\n const existingPr = await platform.getBranchPr(\n onboardingBranch,\n config.defaultBranch,\n );\n if (existingPr) {\n const wasClosed = await ensureOnboardingAutoCloseAge(existingPr);\n if (wasClosed) {\n throw new Error(REPOSITORY_CLOSED_ONBOARDING);\n }\n\n // skip pr-update if branch is conflicted\n if (\n await isOnboardingBranchConflicted(\n config.defaultBranch!,\n onboardingBranch,\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n 'DRY-RUN: Would comment that Onboarding PR is conflicted and needs manual resolving',\n );\n return;\n }\n await ensureComment({\n number: existingPr.number,\n topic: 'Branch Conflicted',\n content: emojify(\n `:warning: This PR has a merge conflict which Renovate is unable to automatically resolve, so updates to this PR description are now paused. Please resolve the merge conflict manually.\\n\\n`,\n ),\n });\n return;\n }\n }\n\n if (OnboardingState.onboardingCacheValid) {\n return;\n }\n\n const onboardingConfigHashComment = await getOnboardingConfigHashComment();\n const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);\n logger.debug('Filling in onboarding PR template');\n let prTemplate = `Welcome to [Renovate](${\n GlobalConfig.get('productLinks').homepage\n })! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\\n\\n`;\n prTemplate +=\n getInheritedOrGlobal('requireConfig') === 'required'\n ? emojify(\n `:vertical_traffic_light: To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.\\n\\n`,\n )\n : emojify(\n `:vertical_traffic_light: Renovate will begin keeping your dependencies up-to-date only once you merge or close this Pull Request.\\n\\n`,\n );\n\n prTemplate += emojify(\n `:books: See our [Reading List](${GlobalConfig.get('productLinks').documentation}reading-list/) for relevant documentation you may be interested in reading.\\n\\n`,\n );\n\n const configFile = getDefaultConfigFileName();\n prTemplate += emojify(\n `:abcd: Do you want to change how Renovate upgrades your dependencies?`,\n );\n prTemplate += ` Add your custom config to \\`${configFile}\\` in this branch${\n config.onboardingRebaseCheckbox\n ? ' and select the Retry/Rebase checkbox below'\n : ''\n }. Renovate will update the Pull Request description the next time it runs.`;\n prTemplate += '\\n\\n';\n // TODO #22198\n prTemplate += emojify(\n `\n\n---\n{{PACKAGE FILES}}\n{{CONFIG}}\n{{BASEBRANCH}}\n{{PRLIST}}\n{{WARNINGS}}\n{{ERRORS}}\n\n---\n\n:question: Got questions? Check out Renovate's [Docs](${\n GlobalConfig.get('productLinks').documentation\n }), particularly the Getting Started section.\nIf you need any further assistance then you can also [request help here](${\n GlobalConfig.get('productLinks').help\n }).\n`,\n );\n prTemplate += rebaseCheckBox;\n let prBody = prTemplate;\n const packageFilesDesc = getPackageFilesDesc(packageFiles);\n if (packageFilesDesc) {\n prBody = `${prBody.replace('{{PACKAGE FILES}}', packageFilesDesc)}\\n`;\n } else {\n prBody = prBody.replace('{{PACKAGE FILES}}\\n', '');\n }\n let configDesc = '';\n if (GlobalConfig.get('dryRun')) {\n // TODO: types (#22198)\n logger.info(`DRY-RUN: Would check branch ${onboardingBranch}`);\n } else {\n configDesc = getConfigDesc(config, packageFiles!);\n }\n prBody = prBody.replace('{{CONFIG}}\\n', configDesc);\n prBody = prBody.replace(\n '{{WARNINGS}}\\n',\n getWarnings(config) + getDepWarningsOnboardingPR(packageFiles!, config),\n );\n prBody = prBody.replace('{{ERRORS}}\\n', getErrors(config));\n prBody = prBody.replace('{{BASEBRANCH}}\\n', getBaseBranchDesc(config));\n const prList = getExpectedPrList(config, branches);\n prBody = prBody.replace('{{PRLIST}}\\n', prList);\n if (isString(config.prHeader)) {\n prBody = `${template.compile(config.prHeader, config)}\\n\\n${prBody}`;\n }\n if (isString(config.prFooter)) {\n prBody = `${prBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n\n prBody += onboardingConfigHashComment;\n\n if (prBody.length > platform.maxBodyLength()) {\n logger.debug(\n 'Onboarding PR body exceeds platform limit, switching to summary PR list and package files',\n );\n prBody = prBody.replace(prList, getExpectedPrListSummary(config, branches));\n if (packageFilesDesc) {\n prBody = prBody.replace(\n packageFilesDesc,\n `### Detected Package Files\\n\\n${getPackageFilesSummary(packageFiles)}`,\n );\n }\n }\n\n logger.trace(`prBody:\\n${prBody}`);\n\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (existingPr) {\n logger.debug('Found open onboarding PR');\n // Check if existing PR needs updating\n const prBodyHash = hashBody(prBody);\n if (existingPr.bodyStruct?.hash === prBodyHash) {\n logger.debug(`Pull Request #${existingPr.number} does not need updating`);\n return;\n }\n // PR must need updating\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would update onboarding PR');\n } else {\n await platform.updatePr({\n number: existingPr.number,\n prTitle: existingPr.title,\n prBody,\n });\n logger.info({ pr: existingPr.number }, 'Onboarding PR updated');\n }\n return;\n }\n logger.debug('Creating onboarding PR');\n const labels: string[] = prepareLabels(config);\n try {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create onboarding PR');\n } else {\n // TODO #22198\n const prTitle =\n config.semanticCommits === 'enabled'\n ? getSemanticCommitPrTitle(config)\n : getInheritedOrGlobal('onboardingPrTitle')!;\n const pr = await platform.createPr({\n sourceBranch: onboardingBranch,\n targetBranch: config.defaultBranch!,\n prTitle,\n prBody,\n labels,\n platformPrOptions: getPlatformPrOptions({\n ...config,\n automerge: false,\n }),\n });\n logger.info(\n { pr: `Pull Request #${pr!.number}` },\n 'Onboarding PR created',\n );\n await addParticipants(config, pr!);\n }\n } catch (err) {\n if (\n err.response?.statusCode === 422 &&\n err.response?.body?.errors?.[0]?.message?.startsWith(\n 'A pull request already exists',\n )\n ) {\n logger.warn(\n 'Onboarding PR already exists but cannot find it. It was probably created by a different user.',\n );\n await scm.deleteBranch(onboardingBranch);\n return;\n }\n throw err;\n }\n}\n\nfunction getRebaseCheckbox(onboardingRebaseCheckbox?: boolean): string {\n let rebaseCheckBox = '';\n if (onboardingRebaseCheckbox) {\n // Create markdown checkbox\n rebaseCheckBox = `\\n\\n---\\n\\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.\\n`;\n }\n\n return rebaseCheckBox;\n}\n\nasync function getOnboardingConfigHashComment(): Promise<string> {\n const configFile = getDefaultConfigFileName();\n const existingContents =\n (await getFile(configFile, getInheritedOrGlobal('onboardingBranch'))) ?? '';\n const hash = toSha256(existingContents);\n\n return `\\n<!--renovate-config-hash:${hash}-->\\n`;\n}\n"],"mappings":"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"}
|
|
@@ -15,7 +15,8 @@ import { getUpdateType } from "./update-type.js";
|
|
|
15
15
|
async function checkMinimumConfidence(config, currentVersion, candidateVersion, updateType) {
|
|
16
16
|
const { minimumConfidence, datasource, packageName } = config;
|
|
17
17
|
if (!isActiveConfidenceLevel(minimumConfidence)) return { isPending: false };
|
|
18
|
-
|
|
18
|
+
const confidenceLevel = await getMergeConfidenceLevel(datasource, packageName, currentVersion, candidateVersion, updateType) ?? "neutral";
|
|
19
|
+
return { isPending: !satisfiesConfidenceLevel(confidenceLevel, minimumConfidence) };
|
|
19
20
|
}
|
|
20
21
|
async function filterInternalChecks(config, versioningApi, bucket, sortedReleases) {
|
|
21
22
|
const { currentVersion, depName, internalChecksFilter } = config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-checks.js","names":[],"sources":["../../../../../lib/workers/repository/process/lookup/filter-checks.ts"],"sourcesContent":["import { mergeChildConfig } from '../../../../config/index.ts';\nimport type {\n MinimumReleaseAgeBehaviour,\n UpdateType,\n} from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { Release } from '../../../../modules/datasource/index.ts';\nimport { postprocessRelease } from '../../../../modules/datasource/postprocess-release.ts';\nimport type { VersioningApi } from '../../../../modules/versioning/index.ts';\nimport {\n getMergeConfidenceLevel,\n isActiveConfidenceLevel,\n satisfiesConfidenceLevel,\n} from '../../../../util/merge-confidence/index.ts';\nimport type { MergeConfidence } from '../../../../util/merge-confidence/types.ts';\nimport { checkMinimumReleaseAge } from '../../../../util/minimum-release-age.ts';\nimport { applyPackageRules } from '../../../../util/package-rules/index.ts';\nimport type { LookupUpdateConfig, UpdateResult } from './types.ts';\nimport { getUpdateType } from './update-type.ts';\n\nexport interface InternalChecksResult {\n release?: Release;\n pendingChecks: boolean;\n pendingReleases: Release[];\n}\n\n/** Given an UpdateType, should `minimumReleaseAge` apply to it? **/\nexport function isMinimumReleaseAgeApplicable(\n updateType: UpdateType | undefined,\n): boolean {\n return (\n // Possible, but not wanted, as this is intentionally rolling back to a previous (generally older) release to unblock the build\n updateType !== 'rollback' &&\n // Not yet supported: TODO #40288\n updateType !== 'pin' &&\n // Not yet supported: TODO #39400\n updateType !== 'replacement' &&\n // Not possible, as we delegate to the package manager to perform the required changes to update package(s).\n updateType !== 'lockFileMaintenance' &&\n // Not supported\n updateType !== 'bump' &&\n // Not supported\n updateType !== 'lockfileUpdate'\n );\n}\n\n/** Given an UpdateType, should `minimumConfidence` apply to it? **/\nexport function isMinimumConfidenceApplicable(\n updateType: UpdateType | undefined,\n): boolean {\n return (\n // data collection doesn't include digest updates\n updateType !== 'digest' &&\n // data collection doesn't include digest updates\n updateType !== 'pinDigest'\n );\n}\n\nexport interface MinimumConfidenceCheckResult {\n isPending: boolean;\n}\n\n/**\n * Checks whether a release satisfies `minimumConfidence`.\n *\n * Separate from `internalChecksFilter` to allow reuse.\n */\nexport async function checkMinimumConfidence(\n config: {\n minimumConfidence?: MergeConfidence;\n datasource?: string;\n packageName?: string;\n },\n currentVersion: string,\n candidateVersion: string,\n updateType: UpdateType,\n): Promise<MinimumConfidenceCheckResult> {\n const { minimumConfidence, datasource, packageName } = config;\n if (!isActiveConfidenceLevel(minimumConfidence!)) {\n return { isPending: false };\n }\n\n const confidenceLevel =\n (await getMergeConfidenceLevel(\n datasource!,\n packageName!,\n currentVersion,\n candidateVersion,\n updateType,\n )) ?? 'neutral';\n return {\n isPending: !satisfiesConfidenceLevel(confidenceLevel, minimumConfidence!),\n };\n}\n\n/*\n * NOTE that this should be kept in sync with `applyMinimumReleaseAgeToDigestUpdate`()\n */\nexport async function filterInternalChecks(\n config: Partial<LookupUpdateConfig & UpdateResult>,\n versioningApi: VersioningApi,\n bucket: string,\n sortedReleases: Release[],\n): Promise<InternalChecksResult> {\n const { currentVersion, depName, internalChecksFilter } = config;\n let release: Release | undefined = undefined;\n let pendingChecks = false;\n let pendingReleases: Release[] = [];\n if (internalChecksFilter === 'none') {\n // Don't care if minimumReleaseAge or minimumConfidence are unmet\n release = sortedReleases.pop();\n } else {\n const candidateVersionsWithoutReleaseTimestamp: Record<\n MinimumReleaseAgeBehaviour,\n string[]\n > = {\n 'timestamp-required': [],\n 'timestamp-optional': [],\n };\n\n // iterate through releases from highest to lowest, looking for the first which will pass checks if present\n for (let candidateRelease of sortedReleases.reverse()) {\n // merge the release data into dependency config\n let releaseConfig = mergeChildConfig(config, candidateRelease);\n // calculate updateType and then apply it\n releaseConfig.updateType = getUpdateType(\n releaseConfig,\n versioningApi,\n // TODO #22198\n currentVersion!,\n candidateRelease.version,\n );\n releaseConfig = mergeChildConfig(\n releaseConfig,\n releaseConfig[releaseConfig.updateType]!,\n );\n // Apply packageRules in case any apply to updateType\n releaseConfig = await applyPackageRules(releaseConfig, 'update-type');\n\n const updatedCandidateRelease = await postprocessRelease(\n releaseConfig,\n candidateRelease,\n );\n if (!updatedCandidateRelease) {\n continue;\n }\n candidateRelease = updatedCandidateRelease;\n\n // Now check for a minimumReleaseAge config\n const { updateType } = releaseConfig;\n\n const ageCheck = checkMinimumReleaseAge(\n releaseConfig,\n candidateRelease.releaseTimestamp,\n );\n if (ageCheck.minimumReleaseAgeMs) {\n if (!ageCheck.hasTimestamp) {\n const minimumReleaseAgeBehaviour =\n releaseConfig.minimumReleaseAgeBehaviour;\n // v8 ignore else -- TODO: add test #40625\n if (\n minimumReleaseAgeBehaviour === 'timestamp-required' ||\n minimumReleaseAgeBehaviour === 'timestamp-optional'\n ) {\n candidateVersionsWithoutReleaseTimestamp[\n minimumReleaseAgeBehaviour\n ].push(candidateRelease.version);\n }\n }\n\n if (ageCheck.isPending) {\n // v8 ignore else -- TODO: add test #40625\n if (ageCheck.hasTimestamp) {\n // Skip it if it doesn't pass checks\n logger.trace(\n { depName, check: 'minimumReleaseAge' },\n `Release ${candidateRelease.version} is pending status checks`,\n );\n } // or if there is no timestamp, and we're running in `minimumReleaseAgeBehaviour=timestamp-required`, skip it as we require a timestamp\n pendingReleases.unshift(candidateRelease);\n continue;\n }\n }\n\n const confidenceCheck = await checkMinimumConfidence(\n releaseConfig,\n currentVersion!,\n candidateRelease.version,\n updateType!,\n );\n if (confidenceCheck.isPending) {\n logger.trace(\n { depName, check: 'minimumConfidence' },\n `Release ${candidateRelease.version} is pending status checks`,\n );\n pendingReleases.unshift(candidateRelease);\n continue;\n }\n // If we get to here, then the release is OK and we can stop iterating\n release = candidateRelease;\n break;\n }\n\n if (candidateVersionsWithoutReleaseTimestamp['timestamp-required'].length) {\n logger.once.debug(\n {\n depName,\n versions:\n candidateVersionsWithoutReleaseTimestamp['timestamp-required'],\n check: 'minimumReleaseAge',\n },\n `Marking ${candidateVersionsWithoutReleaseTimestamp['timestamp-required'].length} release(s) as pending, as they do not have a releaseTimestamp and we're running with minimumReleaseAgeBehaviour=timestamp-required`,\n );\n }\n\n if (candidateVersionsWithoutReleaseTimestamp['timestamp-optional'].length) {\n logger.once.warn(\n \"Some release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding. See debug logs for more information\",\n );\n logger.once.debug(\n {\n depName,\n versions:\n candidateVersionsWithoutReleaseTimestamp['timestamp-optional'],\n check: 'minimumReleaseAge',\n },\n `${candidateVersionsWithoutReleaseTimestamp['timestamp-optional'].length} release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding`,\n );\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (!release && pendingReleases.length) {\n // If all releases were pending then just take the highest\n logger.trace(\n { depName, bucket },\n 'All releases are pending - using latest',\n );\n release = pendingReleases.pop();\n // None are pending anymore because we took the latest, so empty the array\n pendingReleases = [];\n if (internalChecksFilter === 'strict') {\n pendingChecks = true;\n }\n }\n }\n\n return { release, pendingChecks, pendingReleases };\n}\n"],"mappings":";;;;;;;;;;;;;;AAmEA,eAAsB,uBACpB,QAKA,gBACA,kBACA,YACuC;CACvC,MAAM,EAAE,mBAAmB,YAAY,gBAAgB;CACvD,IAAI,CAAC,wBAAwB,iBAAkB,GAC7C,OAAO,EAAE,WAAW,MAAM;CAW5B,OAAO,EACL,WAAW,CAAC,yBARX,MAAM,wBACL,YACA,aACA,gBACA,kBACA,UACF,KAAM,WAEgD,iBAAkB,EAC1E;AACF;AAKA,eAAsB,qBACpB,QACA,eACA,QACA,gBAC+B;CAC/B,MAAM,EAAE,gBAAgB,SAAS,yBAAyB;CAC1D,IAAI,UAA+B,KAAA;CACnC,IAAI,gBAAgB;CACpB,IAAI,kBAA6B,CAAC;CAClC,IAAI,yBAAyB,QAE3B,UAAU,eAAe,IAAI;MACxB;EACL,MAAM,2CAGF;GACF,sBAAsB,CAAC;GACvB,sBAAsB,CAAC;EACzB;EAGA,KAAK,IAAI,oBAAoB,eAAe,QAAQ,GAAG;GAErD,IAAI,gBAAgB,iBAAiB,QAAQ,gBAAgB;GAE7D,cAAc,aAAa,cACzB,eACA,eAEA,gBACA,iBAAiB,OACnB;GACA,gBAAgB,iBACd,eACA,cAAc,cAAc,WAC9B;GAEA,gBAAgB,MAAM,kBAAkB,eAAe,aAAa;GAEpE,MAAM,0BAA0B,MAAM,mBACpC,eACA,gBACF;GACA,IAAI,CAAC,yBACH;GAEF,mBAAmB;GAGnB,MAAM,EAAE,eAAe;GAEvB,MAAM,WAAW,uBACf,eACA,iBAAiB,gBACnB;GACA,IAAI,SAAS,qBAAqB;IAChC,IAAI,CAAC,SAAS,cAAc;KAC1B,MAAM,6BACJ,cAAc;;KAEhB,IACE,+BAA+B,wBAC/B,+BAA+B,sBAE/B,yCACE,2BACD,CAAC,KAAK,iBAAiB,OAAO;IAEnC;IAEA,IAAI,SAAS,WAAW;;KAEtB,IAAI,SAAS,cAEX,OAAO,MACL;MAAE;MAAS,OAAO;KAAoB,GACtC,WAAW,iBAAiB,QAAQ,0BACtC;KAEF,gBAAgB,QAAQ,gBAAgB;KACxC;IACF;GACF;GAQA,KAAI,MAN0B,uBAC5B,eACA,gBACA,iBAAiB,SACjB,UACF,EAAA,CACoB,WAAW;IAC7B,OAAO,MACL;KAAE;KAAS,OAAO;IAAoB,GACtC,WAAW,iBAAiB,QAAQ,0BACtC;IACA,gBAAgB,QAAQ,gBAAgB;IACxC;GACF;GAEA,UAAU;GACV;EACF;EAEA,IAAI,yCAAyC,qBAAqB,CAAC,QACjE,OAAO,KAAK,MACV;GACE;GACA,UACE,yCAAyC;GAC3C,OAAO;EACT,GACA,WAAW,yCAAyC,qBAAqB,CAAC,OAAO,oIACnF;EAGF,IAAI,yCAAyC,qBAAqB,CAAC,QAAQ;GACzE,OAAO,KAAK,KACV,2KACF;GACA,OAAO,KAAK,MACV;IACE;IACA,UACE,yCAAyC;IAC3C,OAAO;GACT,GACA,GAAG,yCAAyC,qBAAqB,CAAC,OAAO,iIAC3E;EACF;;EAGA,IAAI,CAAC,WAAW,gBAAgB,QAAQ;GAEtC,OAAO,MACL;IAAE;IAAS;GAAO,GAClB,yCACF;GACA,UAAU,gBAAgB,IAAI;GAE9B,kBAAkB,CAAC;GACnB,IAAI,yBAAyB,UAC3B,gBAAgB;EAEpB;CACF;CAEA,OAAO;EAAE;EAAS;EAAe;CAAgB;AACnD"}
|
|
1
|
+
{"version":3,"file":"filter-checks.js","names":[],"sources":["../../../../../lib/workers/repository/process/lookup/filter-checks.ts"],"sourcesContent":["import { mergeChildConfig } from '../../../../config/index.ts';\nimport type {\n MinimumReleaseAgeBehaviour,\n UpdateType,\n} from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { Release } from '../../../../modules/datasource/index.ts';\nimport { postprocessRelease } from '../../../../modules/datasource/postprocess-release.ts';\nimport type { VersioningApi } from '../../../../modules/versioning/index.ts';\nimport {\n getMergeConfidenceLevel,\n isActiveConfidenceLevel,\n satisfiesConfidenceLevel,\n} from '../../../../util/merge-confidence/index.ts';\nimport type { MergeConfidence } from '../../../../util/merge-confidence/types.ts';\nimport { checkMinimumReleaseAge } from '../../../../util/minimum-release-age.ts';\nimport { applyPackageRules } from '../../../../util/package-rules/index.ts';\nimport type { LookupUpdateConfig, UpdateResult } from './types.ts';\nimport { getUpdateType } from './update-type.ts';\n\nexport interface InternalChecksResult {\n release?: Release;\n pendingChecks: boolean;\n pendingReleases: Release[];\n}\n\n/** Given an UpdateType, should `minimumReleaseAge` apply to it? **/\nexport function isMinimumReleaseAgeApplicable(\n updateType: UpdateType | undefined,\n): boolean {\n return (\n // Possible, but not wanted, as this is intentionally rolling back to a previous (generally older) release to unblock the build\n updateType !== 'rollback' &&\n // Not yet supported: TODO #40288\n updateType !== 'pin' &&\n // Not yet supported: TODO #39400\n updateType !== 'replacement' &&\n // Not possible, as we delegate to the package manager to perform the required changes to update package(s).\n updateType !== 'lockFileMaintenance' &&\n // Not supported\n updateType !== 'bump' &&\n // Not supported\n updateType !== 'lockfileUpdate'\n );\n}\n\n/** Given an UpdateType, should `minimumConfidence` apply to it? **/\nexport function isMinimumConfidenceApplicable(\n updateType: UpdateType | undefined,\n): boolean {\n return (\n // data collection doesn't include digest updates\n updateType !== 'digest' &&\n // data collection doesn't include digest updates\n updateType !== 'pinDigest'\n );\n}\n\nexport interface MinimumConfidenceCheckResult {\n isPending: boolean;\n}\n\n/**\n * Checks whether a release satisfies `minimumConfidence`.\n *\n * Separate from `internalChecksFilter` to allow reuse.\n */\nexport async function checkMinimumConfidence(\n config: {\n minimumConfidence?: MergeConfidence;\n datasource?: string;\n packageName?: string;\n },\n currentVersion: string,\n candidateVersion: string,\n updateType: UpdateType,\n): Promise<MinimumConfidenceCheckResult> {\n const { minimumConfidence, datasource, packageName } = config;\n if (!isActiveConfidenceLevel(minimumConfidence!)) {\n return { isPending: false };\n }\n\n const confidenceLevel =\n (await getMergeConfidenceLevel(\n datasource!,\n packageName!,\n currentVersion,\n candidateVersion,\n updateType,\n )) ?? 'neutral';\n return {\n isPending: !satisfiesConfidenceLevel(confidenceLevel, minimumConfidence!),\n };\n}\n\n/*\n * NOTE that this should be kept in sync with `applyMinimumReleaseAgeToDigestUpdate`()\n */\nexport async function filterInternalChecks(\n config: Partial<LookupUpdateConfig & UpdateResult>,\n versioningApi: VersioningApi,\n bucket: string,\n sortedReleases: Release[],\n): Promise<InternalChecksResult> {\n const { currentVersion, depName, internalChecksFilter } = config;\n let release: Release | undefined = undefined;\n let pendingChecks = false;\n let pendingReleases: Release[] = [];\n if (internalChecksFilter === 'none') {\n // Don't care if minimumReleaseAge or minimumConfidence are unmet\n release = sortedReleases.pop();\n } else {\n const candidateVersionsWithoutReleaseTimestamp: Record<\n MinimumReleaseAgeBehaviour,\n string[]\n > = {\n 'timestamp-required': [],\n 'timestamp-optional': [],\n };\n\n // iterate through releases from highest to lowest, looking for the first which will pass checks if present\n for (let candidateRelease of sortedReleases.reverse()) {\n // merge the release data into dependency config\n let releaseConfig = mergeChildConfig(config, candidateRelease);\n // calculate updateType and then apply it\n releaseConfig.updateType = getUpdateType(\n releaseConfig,\n versioningApi,\n // TODO #22198\n currentVersion!,\n candidateRelease.version,\n );\n releaseConfig = mergeChildConfig(\n releaseConfig,\n releaseConfig[releaseConfig.updateType]!,\n );\n // Apply packageRules in case any apply to updateType\n releaseConfig = await applyPackageRules(releaseConfig, 'update-type');\n\n const updatedCandidateRelease = await postprocessRelease(\n releaseConfig,\n candidateRelease,\n );\n if (!updatedCandidateRelease) {\n continue;\n }\n candidateRelease = updatedCandidateRelease;\n\n // Now check for a minimumReleaseAge config\n const { updateType } = releaseConfig;\n\n const ageCheck = checkMinimumReleaseAge(\n releaseConfig,\n candidateRelease.releaseTimestamp,\n );\n if (ageCheck.minimumReleaseAgeMs) {\n if (!ageCheck.hasTimestamp) {\n const minimumReleaseAgeBehaviour =\n releaseConfig.minimumReleaseAgeBehaviour;\n // v8 ignore else -- TODO: add test #40625\n if (\n minimumReleaseAgeBehaviour === 'timestamp-required' ||\n minimumReleaseAgeBehaviour === 'timestamp-optional'\n ) {\n candidateVersionsWithoutReleaseTimestamp[\n minimumReleaseAgeBehaviour\n ].push(candidateRelease.version);\n }\n }\n\n if (ageCheck.isPending) {\n // v8 ignore else -- TODO: add test #40625\n if (ageCheck.hasTimestamp) {\n // Skip it if it doesn't pass checks\n logger.trace(\n { depName, check: 'minimumReleaseAge' },\n `Release ${candidateRelease.version} is pending status checks`,\n );\n } // or if there is no timestamp, and we're running in `minimumReleaseAgeBehaviour=timestamp-required`, skip it as we require a timestamp\n pendingReleases.unshift(candidateRelease);\n continue;\n }\n }\n\n const confidenceCheck = await checkMinimumConfidence(\n releaseConfig,\n currentVersion!,\n candidateRelease.version,\n updateType!,\n );\n if (confidenceCheck.isPending) {\n logger.trace(\n { depName, check: 'minimumConfidence' },\n `Release ${candidateRelease.version} is pending status checks`,\n );\n pendingReleases.unshift(candidateRelease);\n continue;\n }\n // If we get to here, then the release is OK and we can stop iterating\n release = candidateRelease;\n break;\n }\n\n if (candidateVersionsWithoutReleaseTimestamp['timestamp-required'].length) {\n logger.once.debug(\n {\n depName,\n versions:\n candidateVersionsWithoutReleaseTimestamp['timestamp-required'],\n check: 'minimumReleaseAge',\n },\n `Marking ${candidateVersionsWithoutReleaseTimestamp['timestamp-required'].length} release(s) as pending, as they do not have a releaseTimestamp and we're running with minimumReleaseAgeBehaviour=timestamp-required`,\n );\n }\n\n if (candidateVersionsWithoutReleaseTimestamp['timestamp-optional'].length) {\n logger.once.warn(\n \"Some release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding. See debug logs for more information\",\n );\n logger.once.debug(\n {\n depName,\n versions:\n candidateVersionsWithoutReleaseTimestamp['timestamp-optional'],\n check: 'minimumReleaseAge',\n },\n `${candidateVersionsWithoutReleaseTimestamp['timestamp-optional'].length} release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding`,\n );\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (!release && pendingReleases.length) {\n // If all releases were pending then just take the highest\n logger.trace(\n { depName, bucket },\n 'All releases are pending - using latest',\n );\n release = pendingReleases.pop();\n // None are pending anymore because we took the latest, so empty the array\n pendingReleases = [];\n if (internalChecksFilter === 'strict') {\n pendingChecks = true;\n }\n }\n }\n\n return { release, pendingChecks, pendingReleases };\n}\n"],"mappings":";;;;;;;;;;;;;;AAmEA,eAAsB,uBACpB,QAKA,gBACA,kBACA,YACuC;CACvC,MAAM,EAAE,mBAAmB,YAAY,gBAAgB;CACvD,IAAI,CAAC,wBAAwB,iBAAkB,GAC7C,OAAO,EAAE,WAAW,MAAM;CAG5B,MAAM,kBACH,MAAM,wBACL,YACA,aACA,gBACA,kBACA,UACF,KAAM;CACR,OAAO,EACL,WAAW,CAAC,yBAAyB,iBAAiB,iBAAkB,EAC1E;AACF;AAKA,eAAsB,qBACpB,QACA,eACA,QACA,gBAC+B;CAC/B,MAAM,EAAE,gBAAgB,SAAS,yBAAyB;CAC1D,IAAI,UAA+B,KAAA;CACnC,IAAI,gBAAgB;CACpB,IAAI,kBAA6B,CAAC;CAClC,IAAI,yBAAyB,QAE3B,UAAU,eAAe,IAAI;MACxB;EACL,MAAM,2CAGF;GACF,sBAAsB,CAAC;GACvB,sBAAsB,CAAC;EACzB;EAGA,KAAK,IAAI,oBAAoB,eAAe,QAAQ,GAAG;GAErD,IAAI,gBAAgB,iBAAiB,QAAQ,gBAAgB;GAE7D,cAAc,aAAa,cACzB,eACA,eAEA,gBACA,iBAAiB,OACnB;GACA,gBAAgB,iBACd,eACA,cAAc,cAAc,WAC9B;GAEA,gBAAgB,MAAM,kBAAkB,eAAe,aAAa;GAEpE,MAAM,0BAA0B,MAAM,mBACpC,eACA,gBACF;GACA,IAAI,CAAC,yBACH;GAEF,mBAAmB;GAGnB,MAAM,EAAE,eAAe;GAEvB,MAAM,WAAW,uBACf,eACA,iBAAiB,gBACnB;GACA,IAAI,SAAS,qBAAqB;IAChC,IAAI,CAAC,SAAS,cAAc;KAC1B,MAAM,6BACJ,cAAc;;KAEhB,IACE,+BAA+B,wBAC/B,+BAA+B,sBAE/B,yCACE,2BACD,CAAC,KAAK,iBAAiB,OAAO;IAEnC;IAEA,IAAI,SAAS,WAAW;;KAEtB,IAAI,SAAS,cAEX,OAAO,MACL;MAAE;MAAS,OAAO;KAAoB,GACtC,WAAW,iBAAiB,QAAQ,0BACtC;KAEF,gBAAgB,QAAQ,gBAAgB;KACxC;IACF;GACF;GAQA,KAAI,MAN0B,uBAC5B,eACA,gBACA,iBAAiB,SACjB,UACF,EAAA,CACoB,WAAW;IAC7B,OAAO,MACL;KAAE;KAAS,OAAO;IAAoB,GACtC,WAAW,iBAAiB,QAAQ,0BACtC;IACA,gBAAgB,QAAQ,gBAAgB;IACxC;GACF;GAEA,UAAU;GACV;EACF;EAEA,IAAI,yCAAyC,qBAAqB,CAAC,QACjE,OAAO,KAAK,MACV;GACE;GACA,UACE,yCAAyC;GAC3C,OAAO;EACT,GACA,WAAW,yCAAyC,qBAAqB,CAAC,OAAO,oIACnF;EAGF,IAAI,yCAAyC,qBAAqB,CAAC,QAAQ;GACzE,OAAO,KAAK,KACV,2KACF;GACA,OAAO,KAAK,MACV;IACE;IACA,UACE,yCAAyC;IAC3C,OAAO;GACT,GACA,GAAG,yCAAyC,qBAAqB,CAAC,OAAO,iIAC3E;EACF;;EAGA,IAAI,CAAC,WAAW,gBAAgB,QAAQ;GAEtC,OAAO,MACL;IAAE;IAAS;GAAO,GAClB,yCACF;GACA,UAAU,gBAAgB,IAAI;GAE9B,kBAAkB,CAAC;GACnB,IAAI,yBAAyB,UAC3B,gBAAgB;EAEpB;CACF;CAEA,OAAO;EAAE;EAAS;EAAe;CAAgB;AACnD"}
|
|
@@ -60,7 +60,7 @@ function filterVersions(config, currentVersion, latestVersion, releases, version
|
|
|
60
60
|
else if (config.versioning !== "npm" && semver.validRange(allowedVersions)) {
|
|
61
61
|
logger.debug({ depName: config.depName }, "Falling back to npm semver syntax for allowedVersions");
|
|
62
62
|
filteredReleases = filteredReleases.filter((r) => semver.satisfies(
|
|
63
|
-
semver.valid(r.version) ? r.version :
|
|
63
|
+
semver.valid(r.version) ? r.version : /* v8 ignore start: not reachable, but it's safer to preserve it */ semver.coerce(r.version),
|
|
64
64
|
/* v8 ignore stop */
|
|
65
65
|
allowedVersions
|
|
66
66
|
));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","names":["template.compile","pep440.isValid","pep440.matches"],"sources":["../../../../../lib/workers/repository/process/lookup/filter.ts"],"sourcesContent":["import semver from 'semver';\nimport { CONFIG_VALIDATION } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { Release } from '../../../../modules/datasource/types.ts';\nimport type { VersioningApi } from '../../../../modules/versioning/index.ts';\nimport * as npmVersioning from '../../../../modules/versioning/npm/index.ts';\nimport * as pep440 from '../../../../modules/versioning/pep440/index.ts';\nimport * as poetryVersioning from '../../../../modules/versioning/poetry/index.ts';\nimport { getRegexPredicate } from '../../../../util/string-match.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport type { FilterConfig } from './types.ts';\n\nfunction isReleaseStable(\n release: Release,\n versioningApi: VersioningApi,\n): boolean {\n if (!versioningApi.isStable(release.version)) {\n return false;\n }\n\n if (release.isStable === false) {\n return false;\n }\n\n return true;\n}\n\nfunction filterByMaxMajorIncrement(\n releases: Release[],\n currentVersion: string,\n maxMajorIncrement: number,\n versioningApi: VersioningApi,\n depName: string,\n): Release[] {\n const currentMajor = versioningApi.getMajor(currentVersion);\n /* v8 ignore next 3 -- shouldn't happen */\n if (currentMajor === null) {\n return releases;\n }\n return releases.filter((r) => {\n const releaseMajor = versioningApi.getMajor(r.version);\n /* v8 ignore next 3 -- shouldn't happen */\n if (releaseMajor === null) {\n return true;\n }\n const majorIncrement = releaseMajor - currentMajor;\n if (majorIncrement > maxMajorIncrement) {\n logger.once.debug(\n `Skipping ${depName}@${r.version} because major increment ${majorIncrement} exceeds maxMajorIncrement ${maxMajorIncrement}`,\n );\n return false;\n }\n return true;\n });\n}\n\nexport function filterVersions(\n config: FilterConfig,\n currentVersion: string,\n latestVersion: string,\n releases: Release[],\n versioningApi: VersioningApi,\n): Release[] {\n const { ignoreUnstable, ignoreDeprecated, respectLatest, maxMajorIncrement } =\n config;\n\n /* v8 ignore next 3 -- shouldn't happen */\n if (!currentVersion) {\n return [];\n }\n\n // Leave only versions greater than current\n const versionedReleases = releases.filter((r) =>\n versioningApi.isVersion(r.version),\n );\n let filteredReleases = versionedReleases.filter((r) =>\n versioningApi.isGreaterThan(r.version, currentVersion),\n );\n\n const currentRelease = versioningApi.isVersion(currentVersion)\n ? versionedReleases.find((r) =>\n versioningApi.equals(r.version, currentVersion),\n )\n : undefined;\n\n // Don't upgrade from non-deprecated to deprecated\n if (ignoreDeprecated && currentRelease && !currentRelease.isDeprecated) {\n filteredReleases = filteredReleases.filter((r) => {\n if (r.isDeprecated) {\n logger.trace(\n `Skipping ${config.depName!}@${r.version} because it is deprecated`,\n );\n return false;\n }\n return true;\n });\n }\n\n if (maxMajorIncrement && maxMajorIncrement > 0) {\n filteredReleases = filterByMaxMajorIncrement(\n filteredReleases,\n currentVersion,\n maxMajorIncrement,\n versioningApi,\n config.depName!,\n );\n }\n\n const currentMajor = versioningApi.getMajor(currentVersion);\n const currentMinor = versioningApi.getMinor(currentVersion);\n const currentPatch = versioningApi.getPatch(currentVersion);\n\n if (config.allowedVersions) {\n const input = {\n currentVersion,\n major: currentMajor,\n minor: currentMinor,\n patch: currentPatch,\n };\n const allowedVersions = template.compile(config.allowedVersions, input);\n const isAllowedPred = getRegexPredicate(allowedVersions);\n if (isAllowedPred) {\n filteredReleases = filteredReleases.filter(({ version }) =>\n isAllowedPred(version),\n );\n } else if (versioningApi.isValid(allowedVersions)) {\n filteredReleases = filteredReleases.filter((r) =>\n versioningApi.matches(r.version, allowedVersions),\n );\n } else if (\n config.versioning !== npmVersioning.id &&\n semver.validRange(allowedVersions)\n ) {\n logger.debug(\n { depName: config.depName },\n 'Falling back to npm semver syntax for allowedVersions',\n );\n filteredReleases = filteredReleases.filter((r) =>\n semver.satisfies(\n semver.valid(r.version)\n ? r.version\n : /* v8 ignore start: not reachable, but it's safer to preserve it */ semver.coerce(\n r.version,\n )!,\n /* v8 ignore stop */\n allowedVersions,\n ),\n );\n } else if (\n config.versioning === poetryVersioning.id &&\n pep440.isValid(allowedVersions)\n ) {\n logger.debug(\n { depName: config.depName },\n 'Falling back to pypi syntax for allowedVersions',\n );\n filteredReleases = filteredReleases.filter((r) =>\n pep440.matches(r.version, allowedVersions),\n );\n } else {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationError = 'Invalid `allowedVersions`';\n error.validationMessage = `The following allowedVersions does not parse as a valid version or range with versioning=${JSON.stringify(config.versioning)}: ${JSON.stringify(allowedVersions)}`;\n throw error;\n }\n }\n\n if (config.followTag) {\n return filteredReleases;\n }\n\n if (\n respectLatest &&\n latestVersion &&\n !versioningApi.isGreaterThan(currentVersion, latestVersion)\n ) {\n filteredReleases = filteredReleases.filter(\n (r) => !versioningApi.isGreaterThan(r.version, latestVersion),\n );\n }\n\n if (!ignoreUnstable) {\n return filteredReleases;\n }\n\n if (currentRelease && isReleaseStable(currentRelease, versioningApi)) {\n return filteredReleases.filter((r) => isReleaseStable(r, versioningApi));\n }\n\n return filteredReleases.filter((r) => {\n if (isReleaseStable(r, versioningApi)) {\n return true;\n }\n\n const major = versioningApi.getMajor(r.version);\n\n if (major !== currentMajor) {\n return false;\n }\n\n if (versioningApi.allowUnstableMajorUpgrades) {\n return true;\n }\n\n const minor = versioningApi.getMinor(r.version);\n const patch = versioningApi.getPatch(r.version);\n\n return minor === currentMinor && patch === currentPatch;\n });\n}\n"],"mappings":";;;;;;;;;AAYA,SAAS,gBACP,SACA,eACS;CACT,IAAI,CAAC,cAAc,SAAS,QAAQ,OAAO,GACzC,OAAO;CAGT,IAAI,QAAQ,aAAa,OACvB,OAAO;CAGT,OAAO;AACT;AAEA,SAAS,0BACP,UACA,gBACA,mBACA,eACA,SACW;CACX,MAAM,eAAe,cAAc,SAAS,cAAc;;CAE1D,IAAI,iBAAiB,MACnB,OAAO;CAET,OAAO,SAAS,QAAQ,MAAM;EAC5B,MAAM,eAAe,cAAc,SAAS,EAAE,OAAO;;EAErD,IAAI,iBAAiB,MACnB,OAAO;EAET,MAAM,iBAAiB,eAAe;EACtC,IAAI,iBAAiB,mBAAmB;GACtC,OAAO,KAAK,MACV,YAAY,QAAQ,GAAG,EAAE,QAAQ,2BAA2B,eAAe,6BAA6B,mBAC1G;GACA,OAAO;EACT;EACA,OAAO;CACT,CAAC;AACH;AAEA,SAAgB,eACd,QACA,gBACA,eACA,UACA,eACW;CACX,MAAM,EAAE,gBAAgB,kBAAkB,eAAe,sBACvD;;CAGF,IAAI,CAAC,gBACH,OAAO,CAAC;CAIV,MAAM,oBAAoB,SAAS,QAAQ,MACzC,cAAc,UAAU,EAAE,OAAO,CACnC;CACA,IAAI,mBAAmB,kBAAkB,QAAQ,MAC/C,cAAc,cAAc,EAAE,SAAS,cAAc,CACvD;CAEA,MAAM,iBAAiB,cAAc,UAAU,cAAc,IACzD,kBAAkB,MAAM,MACtB,cAAc,OAAO,EAAE,SAAS,cAAc,CAChD,IACA,KAAA;CAGJ,IAAI,oBAAoB,kBAAkB,CAAC,eAAe,cACxD,mBAAmB,iBAAiB,QAAQ,MAAM;EAChD,IAAI,EAAE,cAAc;GAClB,OAAO,MACL,YAAY,OAAO,QAAS,GAAG,EAAE,QAAQ,0BAC3C;GACA,OAAO;EACT;EACA,OAAO;CACT,CAAC;CAGH,IAAI,qBAAqB,oBAAoB,GAC3C,mBAAmB,0BACjB,kBACA,gBACA,mBACA,eACA,OAAO,OACT;CAGF,MAAM,eAAe,cAAc,SAAS,cAAc;CAC1D,MAAM,eAAe,cAAc,SAAS,cAAc;CAC1D,MAAM,eAAe,cAAc,SAAS,cAAc;CAE1D,IAAI,OAAO,iBAAiB;EAC1B,MAAM,QAAQ;GACZ;GACA,OAAO;GACP,OAAO;GACP,OAAO;EACT;EACA,MAAM,kBAAkBA,QAAiB,OAAO,iBAAiB,KAAK;EACtE,MAAM,gBAAgB,kBAAkB,eAAe;EACvD,IAAI,eACF,mBAAmB,iBAAiB,QAAQ,EAAE,cAC5C,cAAc,OAAO,CACvB;OACK,IAAI,cAAc,QAAQ,eAAe,GAC9C,mBAAmB,iBAAiB,QAAQ,MAC1C,cAAc,QAAQ,EAAE,SAAS,eAAe,CAClD;OACK,IACL,OAAO,eAAe,SACtB,OAAO,WAAW,eAAe,GACjC;GACA,OAAO,MACL,EAAE,SAAS,OAAO,QAAQ,GAC1B,uDACF;GACA,mBAAmB,iBAAiB,QAAQ,MAC1C,OAAO;IACL,OAAO,MAAM,EAAE,OAAO,IAClB,EAAE,
|
|
1
|
+
{"version":3,"file":"filter.js","names":["template.compile","pep440.isValid","pep440.matches"],"sources":["../../../../../lib/workers/repository/process/lookup/filter.ts"],"sourcesContent":["import semver from 'semver';\nimport { CONFIG_VALIDATION } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { Release } from '../../../../modules/datasource/types.ts';\nimport type { VersioningApi } from '../../../../modules/versioning/index.ts';\nimport * as npmVersioning from '../../../../modules/versioning/npm/index.ts';\nimport * as pep440 from '../../../../modules/versioning/pep440/index.ts';\nimport * as poetryVersioning from '../../../../modules/versioning/poetry/index.ts';\nimport { getRegexPredicate } from '../../../../util/string-match.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport type { FilterConfig } from './types.ts';\n\nfunction isReleaseStable(\n release: Release,\n versioningApi: VersioningApi,\n): boolean {\n if (!versioningApi.isStable(release.version)) {\n return false;\n }\n\n if (release.isStable === false) {\n return false;\n }\n\n return true;\n}\n\nfunction filterByMaxMajorIncrement(\n releases: Release[],\n currentVersion: string,\n maxMajorIncrement: number,\n versioningApi: VersioningApi,\n depName: string,\n): Release[] {\n const currentMajor = versioningApi.getMajor(currentVersion);\n /* v8 ignore next 3 -- shouldn't happen */\n if (currentMajor === null) {\n return releases;\n }\n return releases.filter((r) => {\n const releaseMajor = versioningApi.getMajor(r.version);\n /* v8 ignore next 3 -- shouldn't happen */\n if (releaseMajor === null) {\n return true;\n }\n const majorIncrement = releaseMajor - currentMajor;\n if (majorIncrement > maxMajorIncrement) {\n logger.once.debug(\n `Skipping ${depName}@${r.version} because major increment ${majorIncrement} exceeds maxMajorIncrement ${maxMajorIncrement}`,\n );\n return false;\n }\n return true;\n });\n}\n\nexport function filterVersions(\n config: FilterConfig,\n currentVersion: string,\n latestVersion: string,\n releases: Release[],\n versioningApi: VersioningApi,\n): Release[] {\n const { ignoreUnstable, ignoreDeprecated, respectLatest, maxMajorIncrement } =\n config;\n\n /* v8 ignore next 3 -- shouldn't happen */\n if (!currentVersion) {\n return [];\n }\n\n // Leave only versions greater than current\n const versionedReleases = releases.filter((r) =>\n versioningApi.isVersion(r.version),\n );\n let filteredReleases = versionedReleases.filter((r) =>\n versioningApi.isGreaterThan(r.version, currentVersion),\n );\n\n const currentRelease = versioningApi.isVersion(currentVersion)\n ? versionedReleases.find((r) =>\n versioningApi.equals(r.version, currentVersion),\n )\n : undefined;\n\n // Don't upgrade from non-deprecated to deprecated\n if (ignoreDeprecated && currentRelease && !currentRelease.isDeprecated) {\n filteredReleases = filteredReleases.filter((r) => {\n if (r.isDeprecated) {\n logger.trace(\n `Skipping ${config.depName!}@${r.version} because it is deprecated`,\n );\n return false;\n }\n return true;\n });\n }\n\n if (maxMajorIncrement && maxMajorIncrement > 0) {\n filteredReleases = filterByMaxMajorIncrement(\n filteredReleases,\n currentVersion,\n maxMajorIncrement,\n versioningApi,\n config.depName!,\n );\n }\n\n const currentMajor = versioningApi.getMajor(currentVersion);\n const currentMinor = versioningApi.getMinor(currentVersion);\n const currentPatch = versioningApi.getPatch(currentVersion);\n\n if (config.allowedVersions) {\n const input = {\n currentVersion,\n major: currentMajor,\n minor: currentMinor,\n patch: currentPatch,\n };\n const allowedVersions = template.compile(config.allowedVersions, input);\n const isAllowedPred = getRegexPredicate(allowedVersions);\n if (isAllowedPred) {\n filteredReleases = filteredReleases.filter(({ version }) =>\n isAllowedPred(version),\n );\n } else if (versioningApi.isValid(allowedVersions)) {\n filteredReleases = filteredReleases.filter((r) =>\n versioningApi.matches(r.version, allowedVersions),\n );\n } else if (\n config.versioning !== npmVersioning.id &&\n semver.validRange(allowedVersions)\n ) {\n logger.debug(\n { depName: config.depName },\n 'Falling back to npm semver syntax for allowedVersions',\n );\n filteredReleases = filteredReleases.filter((r) =>\n semver.satisfies(\n semver.valid(r.version)\n ? r.version\n : /* v8 ignore start: not reachable, but it's safer to preserve it */ semver.coerce(\n r.version,\n )!,\n /* v8 ignore stop */\n allowedVersions,\n ),\n );\n } else if (\n config.versioning === poetryVersioning.id &&\n pep440.isValid(allowedVersions)\n ) {\n logger.debug(\n { depName: config.depName },\n 'Falling back to pypi syntax for allowedVersions',\n );\n filteredReleases = filteredReleases.filter((r) =>\n pep440.matches(r.version, allowedVersions),\n );\n } else {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationError = 'Invalid `allowedVersions`';\n error.validationMessage = `The following allowedVersions does not parse as a valid version or range with versioning=${JSON.stringify(config.versioning)}: ${JSON.stringify(allowedVersions)}`;\n throw error;\n }\n }\n\n if (config.followTag) {\n return filteredReleases;\n }\n\n if (\n respectLatest &&\n latestVersion &&\n !versioningApi.isGreaterThan(currentVersion, latestVersion)\n ) {\n filteredReleases = filteredReleases.filter(\n (r) => !versioningApi.isGreaterThan(r.version, latestVersion),\n );\n }\n\n if (!ignoreUnstable) {\n return filteredReleases;\n }\n\n if (currentRelease && isReleaseStable(currentRelease, versioningApi)) {\n return filteredReleases.filter((r) => isReleaseStable(r, versioningApi));\n }\n\n return filteredReleases.filter((r) => {\n if (isReleaseStable(r, versioningApi)) {\n return true;\n }\n\n const major = versioningApi.getMajor(r.version);\n\n if (major !== currentMajor) {\n return false;\n }\n\n if (versioningApi.allowUnstableMajorUpgrades) {\n return true;\n }\n\n const minor = versioningApi.getMinor(r.version);\n const patch = versioningApi.getPatch(r.version);\n\n return minor === currentMinor && patch === currentPatch;\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","names":[],"sources":["../../../../../lib/workers/repository/process/lookup/generate.ts"],"sourcesContent":["import { isNonEmptyArray } from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport type { Release } from '../../../../modules/datasource/index.ts';\nimport type { LookupUpdate } from '../../../../modules/manager/types.ts';\nimport type { VersioningApi } from '../../../../modules/versioning/index.ts';\nimport type { RangeStrategy } from '../../../../types/index.ts';\nimport { getElapsedDays } from '../../../../util/date.ts';\nimport { getMergeConfidenceLevel } from '../../../../util/merge-confidence/index.ts';\nimport type { LookupUpdateConfig } from './types.ts';\nimport { getUpdateType } from './update-type.ts';\n\nexport async function generateUpdate(\n config: LookupUpdateConfig,\n currentValue: string | undefined,\n versioningApi: VersioningApi,\n rangeStrategy: RangeStrategy,\n currentVersion: string,\n bucket: string,\n release: Release,\n allVersions: Set<string>,\n): Promise<LookupUpdate> {\n const newVersion = release.version;\n const update: LookupUpdate = {\n bucket,\n newVersion,\n newValue: null!,\n hasAttestation: release.attestation,\n };\n\n // istanbul ignore if\n if (release.checksumUrl !== undefined) {\n update.checksumUrl = release.checksumUrl;\n }\n // istanbul ignore if\n if (release.downloadUrl !== undefined) {\n update.downloadUrl = release.downloadUrl;\n }\n // istanbul ignore if\n if (release.newDigest !== undefined) {\n update.newDigest = release.newDigest;\n }\n // istanbul ignore if\n if (release.releaseTimestamp) {\n update.releaseTimestamp = release.releaseTimestamp;\n update.newVersionAgeInDays = getElapsedDays(release.releaseTimestamp);\n }\n // istanbul ignore if\n if (release.registryUrl !== undefined) {\n /**\n * This means:\n * - registry strategy is set to merge\n * - releases were fetched from multiple registry urls\n */\n update.registryUrl = release.registryUrl;\n }\n\n if (currentValue) {\n try {\n update.newValue = versioningApi.getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n allVersions,\n })!;\n } catch (err) /* istanbul ignore next */ {\n logger.warn(\n { err, currentValue, rangeStrategy, currentVersion, newVersion },\n 'getNewValue error',\n );\n update.newValue = currentValue;\n }\n } else {\n update.newValue = currentValue;\n }\n update.newMajor = versioningApi.getMajor(newVersion)!;\n update.newMinor = versioningApi.getMinor(newVersion)!;\n update.newPatch = versioningApi.getPatch(newVersion)!;\n // istanbul ignore if\n if (!update.updateType && !currentVersion) {\n logger.debug({ update }, 'Update has no currentVersion');\n update.newValue = currentValue!;\n return update;\n }\n update.updateType =\n update.updateType ??\n getUpdateType(config, versioningApi, currentVersion, newVersion);\n if (versioningApi.isBreaking) {\n // This versioning scheme has breaking awareness\n update.isBreaking = versioningApi.isBreaking(currentVersion, newVersion);\n } else {\n // This versioning scheme does not have breaking awareness - assume only major updates are breaking\n // Updates from, or to, unstable releases should be treated as breaking too.\n // But we should not add that as default behavior until we stop treating non-LTS versions as unstable first\n update.isBreaking = update.updateType === 'major';\n }\n const { datasource, packageName, packageRules } = config;\n if (packageRules?.some((pr) => isNonEmptyArray(pr.matchConfidence))) {\n update.mergeConfidenceLevel = await getMergeConfidenceLevel(\n datasource,\n packageName,\n currentVersion,\n newVersion,\n update.updateType,\n );\n }\n if (!versioningApi.isVersion(update.newValue)) {\n update.isRange = true;\n }\n if (rangeStrategy === 'update-lockfile' && currentValue === update.newValue) {\n update.isLockfileUpdate = true;\n }\n if (\n rangeStrategy === 'bump' &&\n // TODO #22198\n versioningApi.matches(newVersion, currentValue!)\n ) {\n update.isBump = true;\n }\n return update;\n}\n"],"mappings":";;;;;;AAWA,eAAsB,eACpB,QACA,cACA,eACA,eACA,gBACA,QACA,SACA,aACuB;CACvB,MAAM,aAAa,QAAQ;CAC3B,MAAM,SAAuB;EAC3B;EACA;EACA,UAAU;EACV,gBAAgB,QAAQ;CAC1B;;CAGA,IAAI,QAAQ,gBAAgB,KAAA,GAC1B,OAAO,cAAc,QAAQ;;CAG/B,IAAI,QAAQ,gBAAgB,KAAA,GAC1B,OAAO,cAAc,QAAQ;;CAG/B,IAAI,QAAQ,cAAc,KAAA,GACxB,OAAO,YAAY,QAAQ;;CAG7B,IAAI,QAAQ,kBAAkB;EAC5B,OAAO,mBAAmB,QAAQ;EAClC,OAAO,sBAAsB,eAAe,QAAQ,gBAAgB;CACtE;;CAEA,IAAI,QAAQ,gBAAgB,KAAA;;;;;;CAM1B,OAAO,cAAc,QAAQ;CAG/B,IAAI,cACF,IAAI;EACF,OAAO,WAAW,cAAc,YAAY;GAC1C;GACA;GACA;GACA;GACA;EACF,CAAC;CACH,SAAS,
|
|
1
|
+
{"version":3,"file":"generate.js","names":[],"sources":["../../../../../lib/workers/repository/process/lookup/generate.ts"],"sourcesContent":["import { isNonEmptyArray } from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport type { Release } from '../../../../modules/datasource/index.ts';\nimport type { LookupUpdate } from '../../../../modules/manager/types.ts';\nimport type { VersioningApi } from '../../../../modules/versioning/index.ts';\nimport type { RangeStrategy } from '../../../../types/index.ts';\nimport { getElapsedDays } from '../../../../util/date.ts';\nimport { getMergeConfidenceLevel } from '../../../../util/merge-confidence/index.ts';\nimport type { LookupUpdateConfig } from './types.ts';\nimport { getUpdateType } from './update-type.ts';\n\nexport async function generateUpdate(\n config: LookupUpdateConfig,\n currentValue: string | undefined,\n versioningApi: VersioningApi,\n rangeStrategy: RangeStrategy,\n currentVersion: string,\n bucket: string,\n release: Release,\n allVersions: Set<string>,\n): Promise<LookupUpdate> {\n const newVersion = release.version;\n const update: LookupUpdate = {\n bucket,\n newVersion,\n newValue: null!,\n hasAttestation: release.attestation,\n };\n\n // istanbul ignore if\n if (release.checksumUrl !== undefined) {\n update.checksumUrl = release.checksumUrl;\n }\n // istanbul ignore if\n if (release.downloadUrl !== undefined) {\n update.downloadUrl = release.downloadUrl;\n }\n // istanbul ignore if\n if (release.newDigest !== undefined) {\n update.newDigest = release.newDigest;\n }\n // istanbul ignore if\n if (release.releaseTimestamp) {\n update.releaseTimestamp = release.releaseTimestamp;\n update.newVersionAgeInDays = getElapsedDays(release.releaseTimestamp);\n }\n // istanbul ignore if\n if (release.registryUrl !== undefined) {\n /**\n * This means:\n * - registry strategy is set to merge\n * - releases were fetched from multiple registry urls\n */\n update.registryUrl = release.registryUrl;\n }\n\n if (currentValue) {\n try {\n update.newValue = versioningApi.getNewValue({\n currentValue,\n rangeStrategy,\n currentVersion,\n newVersion,\n allVersions,\n })!;\n } catch (err) /* istanbul ignore next */ {\n logger.warn(\n { err, currentValue, rangeStrategy, currentVersion, newVersion },\n 'getNewValue error',\n );\n update.newValue = currentValue;\n }\n } else {\n update.newValue = currentValue;\n }\n update.newMajor = versioningApi.getMajor(newVersion)!;\n update.newMinor = versioningApi.getMinor(newVersion)!;\n update.newPatch = versioningApi.getPatch(newVersion)!;\n // istanbul ignore if\n if (!update.updateType && !currentVersion) {\n logger.debug({ update }, 'Update has no currentVersion');\n update.newValue = currentValue!;\n return update;\n }\n update.updateType =\n update.updateType ??\n getUpdateType(config, versioningApi, currentVersion, newVersion);\n if (versioningApi.isBreaking) {\n // This versioning scheme has breaking awareness\n update.isBreaking = versioningApi.isBreaking(currentVersion, newVersion);\n } else {\n // This versioning scheme does not have breaking awareness - assume only major updates are breaking\n // Updates from, or to, unstable releases should be treated as breaking too.\n // But we should not add that as default behavior until we stop treating non-LTS versions as unstable first\n update.isBreaking = update.updateType === 'major';\n }\n const { datasource, packageName, packageRules } = config;\n if (packageRules?.some((pr) => isNonEmptyArray(pr.matchConfidence))) {\n update.mergeConfidenceLevel = await getMergeConfidenceLevel(\n datasource,\n packageName,\n currentVersion,\n newVersion,\n update.updateType,\n );\n }\n if (!versioningApi.isVersion(update.newValue)) {\n update.isRange = true;\n }\n if (rangeStrategy === 'update-lockfile' && currentValue === update.newValue) {\n update.isLockfileUpdate = true;\n }\n if (\n rangeStrategy === 'bump' &&\n // TODO #22198\n versioningApi.matches(newVersion, currentValue!)\n ) {\n update.isBump = true;\n }\n return update;\n}\n"],"mappings":";;;;;;AAWA,eAAsB,eACpB,QACA,cACA,eACA,eACA,gBACA,QACA,SACA,aACuB;CACvB,MAAM,aAAa,QAAQ;CAC3B,MAAM,SAAuB;EAC3B;EACA;EACA,UAAU;EACV,gBAAgB,QAAQ;CAC1B;;CAGA,IAAI,QAAQ,gBAAgB,KAAA,GAC1B,OAAO,cAAc,QAAQ;;CAG/B,IAAI,QAAQ,gBAAgB,KAAA,GAC1B,OAAO,cAAc,QAAQ;;CAG/B,IAAI,QAAQ,cAAc,KAAA,GACxB,OAAO,YAAY,QAAQ;;CAG7B,IAAI,QAAQ,kBAAkB;EAC5B,OAAO,mBAAmB,QAAQ;EAClC,OAAO,sBAAsB,eAAe,QAAQ,gBAAgB;CACtE;;CAEA,IAAI,QAAQ,gBAAgB,KAAA;;;;;;CAM1B,OAAO,cAAc,QAAQ;CAG/B,IAAI,cACF,IAAI;EACF,OAAO,WAAW,cAAc,YAAY;GAC1C;GACA;GACA;GACA;GACA;EACF,CAAC;CACH,SAAS,gCAAgC;EACvC,OAAO,KACL;GAAE;GAAK;GAAc;GAAe;GAAgB;EAAW,GAC/D,mBACF;EACA,OAAO,WAAW;CACpB;MAEA,OAAO,WAAW;CAEpB,OAAO,WAAW,cAAc,SAAS,UAAU;CACnD,OAAO,WAAW,cAAc,SAAS,UAAU;CACnD,OAAO,WAAW,cAAc,SAAS,UAAU;;CAEnD,IAAI,CAAC,OAAO,cAAc,CAAC,gBAAgB;EACzC,OAAO,MAAM,EAAE,OAAO,GAAG,8BAA8B;EACvD,OAAO,WAAW;EAClB,OAAO;CACT;CACA,OAAO,aACL,OAAO,cACP,cAAc,QAAQ,eAAe,gBAAgB,UAAU;CACjE,IAAI,cAAc,YAEhB,OAAO,aAAa,cAAc,WAAW,gBAAgB,UAAU;MAKvE,OAAO,aAAa,OAAO,eAAe;CAE5C,MAAM,EAAE,YAAY,aAAa,iBAAiB;CAClD,IAAI,cAAc,MAAM,OAAO,gBAAgB,GAAG,eAAe,CAAC,GAChE,OAAO,uBAAuB,MAAM,wBAClC,YACA,aACA,gBACA,YACA,OAAO,UACT;CAEF,IAAI,CAAC,cAAc,UAAU,OAAO,QAAQ,GAC1C,OAAO,UAAU;CAEnB,IAAI,kBAAkB,qBAAqB,iBAAiB,OAAO,UACjE,OAAO,mBAAmB;CAE5B,IACE,kBAAkB,UAElB,cAAc,QAAQ,YAAY,YAAa,GAE/C,OAAO,SAAS;CAElB,OAAO;AACT"}
|
|
@@ -289,7 +289,8 @@ async function lookupUpdates(inconfig) {
|
|
|
289
289
|
}
|
|
290
290
|
const depResultConfig = mergeChildConfig(config, res);
|
|
291
291
|
for (const [bucket, releases] of Object.entries(buckets)) {
|
|
292
|
-
const
|
|
292
|
+
const sortedReleases = releases.sort((r1, r2) => versioningApi.sortVersions(r1.version, r2.version));
|
|
293
|
+
const { release, pendingChecks, pendingReleases } = await filterInternalChecks(depResultConfig, versioningApi, bucket, sortedReleases);
|
|
293
294
|
// istanbul ignore next
|
|
294
295
|
if (!release) return Result.ok(res);
|
|
295
296
|
const newVersion = release.version;
|
|
@@ -359,7 +360,9 @@ async function lookupUpdates(inconfig) {
|
|
|
359
360
|
};
|
|
360
361
|
res.updates.push(digestUpdate);
|
|
361
362
|
}
|
|
362
|
-
} else if (config.pinDigests &&
|
|
363
|
+
} else if (config.pinDigests &&
|
|
364
|
+
// v8 ignore else -- TODO: add test #40625
|
|
365
|
+
!res.updates.some((update) => update.updateType === "pin")) {
|
|
363
366
|
const pinDigestUpdate = {
|
|
364
367
|
isPinDigest: true,
|
|
365
368
|
updateType: "pinDigest",
|
|
@@ -418,7 +421,7 @@ async function lookupUpdates(inconfig) {
|
|
|
418
421
|
res.changelogContent = release.changelogContent;
|
|
419
422
|
res.changelogUrl = release.changelogUrl;
|
|
420
423
|
}
|
|
421
|
-
} catch (err)
|
|
424
|
+
} catch (err) /* istanbul ignore next */ {
|
|
422
425
|
if (err instanceof ExternalHostError) return Result.err(err);
|
|
423
426
|
if (err instanceof Error && err.message === "config-validation") return Result.err(err);
|
|
424
427
|
logger.error({
|