renovate 44.17.1 → 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","names":[],"sources":["../../../../../lib/workers/global/config/parse/util.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { pathToFileURL } from 'node:url';\nimport { isFunction } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport upath from 'upath';\nimport { massageConfig } from '../../../../config/massage.ts';\nimport { migrateConfig } from '../../../../config/migration.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { validateConfig } from '../../../../config/validation.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { parseJson } from '../../../../util/common.ts';\nimport { readSystemFile } from '../../../../util/fs/index.ts';\nimport { parseSingleYaml } from '../../../../util/yaml.ts';\n\nexport async function migrateAndValidateConfig(\n config: RenovateConfig,\n configType: string,\n): Promise<RenovateConfig> {\n const { isMigrated, migratedConfig } = migrateConfig(config);\n if (isMigrated) {\n logger.warn(\n { configType, originalConfig: config, migratedConfig },\n 'Config needs migrating',\n );\n }\n const massagedConfig = massageConfig(migratedConfig);\n // log only if it's changed\n if (!dequal(migratedConfig, massagedConfig)) {\n logger.trace({ config: massagedConfig }, 'Post-massage config');\n }\n\n const { warnings, errors } = await validateConfig('global', massagedConfig);\n\n if (warnings.length) {\n logger.warn({ configType, warnings }, 'Config validation warnings found');\n }\n if (errors.length) {\n logger.warn({ configType, errors }, 'Config validation errors found');\n }\n\n return massagedConfig;\n}\n\nexport async function getParsedContent(file: string): Promise<RenovateConfig> {\n if (upath.basename(file) === '.renovaterc') {\n return parseJson(\n await readSystemFile(file, 'utf8'),\n file,\n ) as RenovateConfig;\n }\n switch (upath.extname(file)) {\n case '.yaml':\n case '.yml':\n return parseSingleYaml(await readSystemFile(file, 'utf8'));\n case '.json5':\n case '.json':\n case '.jsonc':\n return parseJson(\n await readSystemFile(file, 'utf8'),\n file,\n ) as RenovateConfig;\n case '.cts':\n case '.mts':\n case '.ts':\n case '.cjs':\n case '.mjs':\n case '.js': {\n const absoluteFilePath = upath.isAbsolute(file)\n ? file\n : `${process.cwd()}/${file}`;\n const fileUrl = pathToFileURL(absoluteFilePath).href;\n\n let tmpConfig: unknown;\n try {\n // Try ESM import first (default for \"type\": \"module\")\n tmpConfig = await import(fileUrl);\n } catch (err) {\n /* v8 ignore start -- CJS fallback not testable in vitest */\n\n // If the file is .js or .ts, it might be a legacy CJS config (using module.exports)\n // This usually throws ReferenceError (module is not defined) or SyntaxError\n if (['.js', '.ts'].includes(upath.extname(file))) {\n const require = createRequire(import.meta.url);\n try {\n tmpConfig = require(absoluteFilePath);\n } catch {\n // If require also fails (e.g. strict ESM package), throw the original import error\n // to encourage the user to fix their config format.\n throw err;\n }\n } else {\n throw err;\n }\n /* v8 ignore stop */\n }\n\n /* v8 ignore next -- not testable */\n let config =\n (tmpConfig as { default?: RenovateConfig }).default ?? tmpConfig;\n // Allow the config to be a function\n if (isFunction(config)) {\n config = config();\n }\n return config as RenovateConfig;\n }\n default:\n throw new Error('Unsupported file type');\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,eAAsB,yBACpB,QACA,YACyB;CACzB,MAAM,EAAE,YAAY,mBAAmB,cAAc,MAAM;CAC3D,IAAI,YACF,OAAO,KACL;EAAE;EAAY,gBAAgB;EAAQ;CAAe,GACrD,wBACF;CAEF,MAAM,iBAAiB,cAAc,cAAc;CAEnD,IAAI,CAAC,OAAO,gBAAgB,cAAc,GACxC,OAAO,MAAM,EAAE,QAAQ,eAAe,GAAG,qBAAqB;CAGhE,MAAM,EAAE,UAAU,WAAW,MAAM,eAAe,UAAU,cAAc;CAE1E,IAAI,SAAS,QACX,OAAO,KAAK;EAAE;EAAY;CAAS,GAAG,kCAAkC;CAE1E,IAAI,OAAO,QACT,OAAO,KAAK;EAAE;EAAY;CAAO,GAAG,gCAAgC;CAGtE,OAAO;AACT;AAEA,eAAsB,iBAAiB,MAAuC;CAC5E,IAAI,MAAM,SAAS,IAAI,MAAM,eAC3B,OAAO,UACL,MAAM,eAAe,MAAM,MAAM,GACjC,IACF;CAEF,QAAQ,MAAM,QAAQ,IAAI,GAA1B;EACE,KAAK;EACL,KAAK,QACH,OAAO,gBAAgB,MAAM,eAAe,MAAM,MAAM,CAAC;EAC3D,KAAK;EACL,KAAK;EACL,KAAK,UACH,OAAO,UACL,MAAM,eAAe,MAAM,MAAM,GACjC,IACF;EACF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,OAAO;GACV,MAAM,mBAAmB,MAAM,WAAW,IAAI,IAC1C,OACA,GAAG,QAAQ,IAAI,EAAE,GAAG;GACxB,MAAM,UAAU,cAAc,gBAAgB,CAAC,CAAC;GAEhD,IAAI;GACJ,IAAI;IAEF,YAAY,MAAM,OAAO;GAC3B,SAAS,KAAK;;IAKZ,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,MAAM,QAAQ,IAAI,CAAC,GAAG;KAChD,MAAM,UAAU,cAAc,
|
|
1
|
+
{"version":3,"file":"util.js","names":[],"sources":["../../../../../lib/workers/global/config/parse/util.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { pathToFileURL } from 'node:url';\nimport { isFunction } from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport upath from 'upath';\nimport { massageConfig } from '../../../../config/massage.ts';\nimport { migrateConfig } from '../../../../config/migration.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { validateConfig } from '../../../../config/validation.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { parseJson } from '../../../../util/common.ts';\nimport { readSystemFile } from '../../../../util/fs/index.ts';\nimport { parseSingleYaml } from '../../../../util/yaml.ts';\n\nexport async function migrateAndValidateConfig(\n config: RenovateConfig,\n configType: string,\n): Promise<RenovateConfig> {\n const { isMigrated, migratedConfig } = migrateConfig(config);\n if (isMigrated) {\n logger.warn(\n { configType, originalConfig: config, migratedConfig },\n 'Config needs migrating',\n );\n }\n const massagedConfig = massageConfig(migratedConfig);\n // log only if it's changed\n if (!dequal(migratedConfig, massagedConfig)) {\n logger.trace({ config: massagedConfig }, 'Post-massage config');\n }\n\n const { warnings, errors } = await validateConfig('global', massagedConfig);\n\n if (warnings.length) {\n logger.warn({ configType, warnings }, 'Config validation warnings found');\n }\n if (errors.length) {\n logger.warn({ configType, errors }, 'Config validation errors found');\n }\n\n return massagedConfig;\n}\n\nexport async function getParsedContent(file: string): Promise<RenovateConfig> {\n if (upath.basename(file) === '.renovaterc') {\n return parseJson(\n await readSystemFile(file, 'utf8'),\n file,\n ) as RenovateConfig;\n }\n switch (upath.extname(file)) {\n case '.yaml':\n case '.yml':\n return parseSingleYaml(await readSystemFile(file, 'utf8'));\n case '.json5':\n case '.json':\n case '.jsonc':\n return parseJson(\n await readSystemFile(file, 'utf8'),\n file,\n ) as RenovateConfig;\n case '.cts':\n case '.mts':\n case '.ts':\n case '.cjs':\n case '.mjs':\n case '.js': {\n const absoluteFilePath = upath.isAbsolute(file)\n ? file\n : `${process.cwd()}/${file}`;\n const fileUrl = pathToFileURL(absoluteFilePath).href;\n\n let tmpConfig: unknown;\n try {\n // Try ESM import first (default for \"type\": \"module\")\n tmpConfig = await import(fileUrl);\n } catch (err) {\n /* v8 ignore start -- CJS fallback not testable in vitest */\n\n // If the file is .js or .ts, it might be a legacy CJS config (using module.exports)\n // This usually throws ReferenceError (module is not defined) or SyntaxError\n if (['.js', '.ts'].includes(upath.extname(file))) {\n const require = createRequire(import.meta.url);\n try {\n tmpConfig = require(absoluteFilePath);\n } catch {\n // If require also fails (e.g. strict ESM package), throw the original import error\n // to encourage the user to fix their config format.\n throw err;\n }\n } else {\n throw err;\n }\n /* v8 ignore stop */\n }\n\n /* v8 ignore next -- not testable */\n let config =\n (tmpConfig as { default?: RenovateConfig }).default ?? tmpConfig;\n // Allow the config to be a function\n if (isFunction(config)) {\n config = config();\n }\n return config as RenovateConfig;\n }\n default:\n throw new Error('Unsupported file type');\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,eAAsB,yBACpB,QACA,YACyB;CACzB,MAAM,EAAE,YAAY,mBAAmB,cAAc,MAAM;CAC3D,IAAI,YACF,OAAO,KACL;EAAE;EAAY,gBAAgB;EAAQ;CAAe,GACrD,wBACF;CAEF,MAAM,iBAAiB,cAAc,cAAc;CAEnD,IAAI,CAAC,OAAO,gBAAgB,cAAc,GACxC,OAAO,MAAM,EAAE,QAAQ,eAAe,GAAG,qBAAqB;CAGhE,MAAM,EAAE,UAAU,WAAW,MAAM,eAAe,UAAU,cAAc;CAE1E,IAAI,SAAS,QACX,OAAO,KAAK;EAAE;EAAY;CAAS,GAAG,kCAAkC;CAE1E,IAAI,OAAO,QACT,OAAO,KAAK;EAAE;EAAY;CAAO,GAAG,gCAAgC;CAGtE,OAAO;AACT;AAEA,eAAsB,iBAAiB,MAAuC;CAC5E,IAAI,MAAM,SAAS,IAAI,MAAM,eAC3B,OAAO,UACL,MAAM,eAAe,MAAM,MAAM,GACjC,IACF;CAEF,QAAQ,MAAM,QAAQ,IAAI,GAA1B;EACE,KAAK;EACL,KAAK,QACH,OAAO,gBAAgB,MAAM,eAAe,MAAM,MAAM,CAAC;EAC3D,KAAK;EACL,KAAK;EACL,KAAK,UACH,OAAO,UACL,MAAM,eAAe,MAAM,MAAM,GACjC,IACF;EACF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,OAAO;GACV,MAAM,mBAAmB,MAAM,WAAW,IAAI,IAC1C,OACA,GAAG,QAAQ,IAAI,EAAE,GAAG;GACxB,MAAM,UAAU,cAAc,gBAAgB,CAAC,CAAC;GAEhD,IAAI;GACJ,IAAI;IAEF,YAAY,MAAM,OAAO;GAC3B,SAAS,KAAK;;IAKZ,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,MAAM,QAAQ,IAAI,CAAC,GAAG;KAChD,MAAM,UAAU,cAAc,YAAY,GAAG;KAC7C,IAAI;MACF,YAAY,QAAQ,gBAAgB;KACtC,QAAQ;MAGN,MAAM;KACR;IACF,OACE,MAAM;GAGV;;GAGA,IAAI,SACD,UAA2C,WAAW;GAEzD,IAAI,WAAW,MAAM,GACnB,SAAS,OAAO;GAElB,OAAO;EACT;EACA,SACE,MAAM,IAAI,MAAM,uBAAuB;CAC3C;AACF"}
|
|
@@ -79,7 +79,7 @@ async function validatePresets(config) {
|
|
|
79
79
|
logger.debug("validatePresets()");
|
|
80
80
|
try {
|
|
81
81
|
await resolveConfigPresets(config);
|
|
82
|
-
} catch (err)
|
|
82
|
+
} catch (err) /* istanbul ignore next */ {
|
|
83
83
|
logger.error({ err }, CONFIG_PRESETS_INVALID);
|
|
84
84
|
throw new Error(CONFIG_PRESETS_INVALID);
|
|
85
85
|
}
|
|
@@ -147,7 +147,7 @@ async function start() {
|
|
|
147
147
|
}
|
|
148
148
|
finalizeReport();
|
|
149
149
|
await exportStats(config);
|
|
150
|
-
} catch (err)
|
|
150
|
+
} catch (err) /* istanbul ignore next */ {
|
|
151
151
|
if (err.message.startsWith("Init: ")) logger.fatal({ errorMessage: err.message.substring(6) }, "Initialization error");
|
|
152
152
|
else logger.fatal({ err }, "Unknown error");
|
|
153
153
|
if (!config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["configParser.filterConfig","hostRules.add","repositoryWorker.renovateRepository"],"sources":["../../../lib/workers/global/index.ts"],"sourcesContent":["import {\n ATTR_VCS_OWNER_NAME,\n ATTR_VCS_PROVIDER_NAME,\n ATTR_VCS_REPOSITORY_NAME,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport {\n isNonEmptyObject,\n isNonEmptyString,\n isNonEmptyStringAndNotWhitespace,\n isString,\n} from '@sindresorhus/is';\nimport { ERROR } from 'bunyan';\nimport fs from 'fs-extra';\nimport semver from 'semver';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../config/global.ts';\nimport * as configParser from '../../config/index.ts';\nimport { resolveConfigPresets } from '../../config/presets/index.ts';\nimport { validateConfigSecretsAndVariables } from '../../config/secrets.ts';\nimport type {\n AllConfig,\n InternalGlobalConfigOptions,\n RenovateConfig,\n RenovateRepository,\n RepoGlobalConfig,\n} from '../../config/types.ts';\nimport { CONFIG_PRESETS_INVALID } from '../../constants/error-messages.ts';\nimport { pkg } from '../../expose.ts';\nimport { instrument } from '../../instrumentation/index.ts';\nimport {\n exportStats,\n finalizeReport,\n} from '../../instrumentation/reporting.ts';\nimport { getProblems, logLevel, logger, setMeta } from '../../logger/index.ts';\nimport { setGlobalLogLevelRemaps } from '../../logger/remap.ts';\nimport { getEnv } from '../../util/env.ts';\nimport * as hostRules from '../../util/host-rules.ts';\nimport * as queue from '../../util/http/queue.ts';\nimport * as throttle from '../../util/http/throttle.ts';\nimport { regexEngineStatus } from '../../util/regex.ts';\nimport { addSecretForSanitizing } from '../../util/sanitize.ts';\nimport { coerceString } from '../../util/string.ts';\nimport * as repositoryWorker from '../repository/index.ts';\nimport type { RepositoryWorkerConfig } from '../repository/init/types.ts';\nimport { autodiscoverRepositories } from './autodiscover.ts';\nimport { parseConfigs } from './config/parse/index.ts';\nimport { globalFinalize, globalInitialize } from './initialize.ts';\nimport { isLimitReached } from './limits.ts';\n\nfunction applyGlobalOption<\n K extends keyof RepoGlobalConfig | keyof InternalGlobalConfigOptions,\n>(\n target: RepoGlobalConfig & InternalGlobalConfigOptions,\n source: RepoGlobalConfig & InternalGlobalConfigOptions,\n key: K,\n): void {\n target[key] = source[key];\n delete source[key];\n}\n\nexport async function getRepositoryConfig(\n globalConfig: RenovateConfig,\n repository: RenovateRepository,\n): Promise<RepositoryWorkerConfig> {\n const repoIsString = isString(repository);\n const repoName = repoIsString ? repository : repository.repository;\n\n const repoConfig: RepositoryWorkerConfig = {\n ...globalConfig,\n repository: repoName,\n };\n\n if (!repoIsString) {\n const { repository: _repository, ...repositoryEntryConfig } = repository;\n\n // Promote GlobalConfig.OPTIONS keys into repoConfig directly so that\n // GlobalConfig.set(repoConfig) in the repository worker picks them up\n // with per-repo overrides before onboarding checks run.\n for (const option of GlobalConfig.OPTIONS) {\n if (option in repositoryEntryConfig) {\n applyGlobalOption(repoConfig, repositoryEntryConfig, option);\n }\n }\n\n if (isNonEmptyObject(repositoryEntryConfig)) {\n // mergeRenovateConfig later resolves this repositories[] object-entry\n // config in the correct order\n repoConfig.repositoryEntryConfig = repositoryEntryConfig;\n }\n }\n\n const repoParts = repoName.split('/');\n repoParts.pop();\n repoConfig.parentOrg = repoParts.join('/');\n repoConfig.topLevelOrg = repoParts.shift();\n const platform = GlobalConfig.get('platform');\n repoConfig.localDir =\n platform === 'local'\n ? process.cwd()\n : // TODO: types (#22198)\n upath.join(repoConfig.baseDir!, `./repos/${platform}/${repoName}`);\n await fs.ensureDir(repoConfig.localDir);\n delete repoConfig.baseDir;\n return configParser.filterConfig(repoConfig, 'repository');\n}\n\nfunction getGlobalConfig(): Promise<RenovateConfig> {\n return parseConfigs(getEnv(), process.argv);\n}\n\nfunction haveReachedLimits(): boolean {\n if (isLimitReached('Commits')) {\n logger.info('Max commits created for this run.');\n return true;\n }\n return false;\n}\n\n/* istanbul ignore next */\nfunction checkEnv(): void {\n const range = pkg.engines.node;\n if (process.release?.name !== 'node' || !process.versions?.node) {\n logger.warn(\n { release: process.release, versions: process.versions },\n 'Unknown node environment detected.',\n );\n } else if (!semver.satisfies(process.versions?.node, range)) {\n logger.error(\n { versions: process.versions, range },\n 'Unsupported node environment detected. Please update your node version.',\n );\n }\n}\n\nexport async function validatePresets(config: AllConfig): Promise<void> {\n logger.debug('validatePresets()');\n try {\n await resolveConfigPresets(config);\n } catch (err) /* istanbul ignore next */ {\n logger.error({ err }, CONFIG_PRESETS_INVALID);\n throw new Error(CONFIG_PRESETS_INVALID);\n }\n}\n\nexport async function start(): Promise<number> {\n logger.info({ renovateVersion: pkg.version }, 'Renovate started');\n // istanbul ignore next\n if (regexEngineStatus.type === 'available') {\n logger.debug('Using RE2 regex engine');\n } else if (regexEngineStatus.type === 'unavailable') {\n logger.warn(\n { err: regexEngineStatus.err },\n 'RE2 not usable, falling back to RegExp',\n );\n } else if (regexEngineStatus.type === 'ignored') {\n logger.debug('RE2 regex engine is ignored via RENOVATE_X_IGNORE_RE2');\n }\n\n let config: AllConfig;\n const env = getEnv();\n try {\n if (isNonEmptyStringAndNotWhitespace(env.AWS_SECRET_ACCESS_KEY)) {\n addSecretForSanitizing(env.AWS_SECRET_ACCESS_KEY, 'global');\n }\n if (isNonEmptyStringAndNotWhitespace(env.AWS_SESSION_TOKEN)) {\n addSecretForSanitizing(env.AWS_SESSION_TOKEN, 'global');\n }\n if (isNonEmptyStringAndNotWhitespace(env.COREPACK_NPM_TOKEN)) {\n addSecretForSanitizing(env.COREPACK_NPM_TOKEN, 'global');\n }\n if (isNonEmptyStringAndNotWhitespace(env.COREPACK_NPM_PASSWORD)) {\n addSecretForSanitizing(env.COREPACK_NPM_PASSWORD, 'global');\n }\n\n await instrument('config', async () => {\n // read global config from file, env and cli args\n config = await getGlobalConfig();\n\n // Set allowedHeaders and userAgent in case hostRules headers are configured in file config\n GlobalConfig.set({\n allowedHeaders: config.allowedHeaders,\n userAgent: config.userAgent,\n });\n // initialize all submodules\n config = await globalInitialize(config);\n\n // Set platform, endpoint, allowedHeaders and userAgent in case local presets are used\n GlobalConfig.set({\n allowedHeaders: config.allowedHeaders,\n platform: config.platform,\n endpoint: config.endpoint,\n userAgent: config.userAgent,\n });\n\n await validatePresets(config);\n\n setGlobalLogLevelRemaps(config.logLevelRemap);\n\n checkEnv();\n\n // validate secrets and variables. Will throw and abort if invalid\n validateConfigSecretsAndVariables(config);\n });\n\n // autodiscover repositories (needs to come after platform initialization)\n config = await instrument('discover', () =>\n autodiscoverRepositories(config),\n );\n\n if (isNonEmptyString(config.writeDiscoveredRepos)) {\n const content = JSON.stringify(config.repositories);\n await fs.writeFile(config.writeDiscoveredRepos, content);\n logger.info(\n `Written discovered repositories to ${config.writeDiscoveredRepos}`,\n );\n return 0;\n }\n\n // Iterate through repositories sequentially\n for (const repository of config.repositories!) {\n if (haveReachedLimits()) {\n break;\n }\n\n const { owner, repo } = repositoryToOwnerAndRepo(\n typeof repository === 'string' ? repository : repository.repository,\n );\n\n await instrument(\n 'repository',\n async () => {\n const repoConfig = await getRepositoryConfig(config, repository);\n if (repoConfig.hostRules) {\n logger.debug('Reinitializing hostRules for repo');\n hostRules.clear();\n repoConfig.hostRules.forEach((rule) => hostRules.add(rule));\n repoConfig.hostRules = [];\n }\n\n // host rules can change concurrency\n queue.clear();\n throttle.clear();\n\n await repositoryWorker.renovateRepository(repoConfig);\n setMeta({});\n },\n {\n attributes: {\n [ATTR_VCS_PROVIDER_NAME]: config.platform,\n [ATTR_VCS_OWNER_NAME]: owner,\n [ATTR_VCS_REPOSITORY_NAME]: repo,\n /** @deprecated TODO remove */\n repository:\n typeof repository === 'string'\n ? repository\n : repository.repository,\n },\n },\n );\n }\n\n finalizeReport();\n await exportStats(config);\n } catch (err) /* istanbul ignore next */ {\n if (err.message.startsWith('Init: ')) {\n logger.fatal(\n { errorMessage: err.message.substring(6) },\n 'Initialization error',\n );\n } else {\n logger.fatal({ err }, 'Unknown error');\n }\n if (!config!) {\n // return early if we can't parse config options\n logger.debug(`Missing config`);\n return 2;\n }\n } finally {\n await globalFinalize(config!);\n if (logLevel() === 'info') {\n logger.info(\n `Renovate was run at log level \"${logLevel()}\". Set LOG_LEVEL=debug in environment variables to see extended debug logs.`,\n );\n }\n }\n const loggerErrors = getProblems().filter((p) => p.level >= ERROR);\n if (loggerErrors.length) {\n logger.info(\n { loggerErrors },\n 'Renovate is exiting with a non-zero code due to the following logged errors',\n );\n return 1;\n }\n return 0;\n}\n\nfunction repositoryToOwnerAndRepo(fullName: string): {\n owner: string;\n repo: string;\n} {\n const parts = fullName.split('/');\n const repo = coerceString(parts.pop());\n const owner = parts.join('/');\n return { owner, repo };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["configParser.filterConfig","hostRules.add","repositoryWorker.renovateRepository"],"sources":["../../../lib/workers/global/index.ts"],"sourcesContent":["import {\n ATTR_VCS_OWNER_NAME,\n ATTR_VCS_PROVIDER_NAME,\n ATTR_VCS_REPOSITORY_NAME,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport {\n isNonEmptyObject,\n isNonEmptyString,\n isNonEmptyStringAndNotWhitespace,\n isString,\n} from '@sindresorhus/is';\nimport { ERROR } from 'bunyan';\nimport fs from 'fs-extra';\nimport semver from 'semver';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../config/global.ts';\nimport * as configParser from '../../config/index.ts';\nimport { resolveConfigPresets } from '../../config/presets/index.ts';\nimport { validateConfigSecretsAndVariables } from '../../config/secrets.ts';\nimport type {\n AllConfig,\n InternalGlobalConfigOptions,\n RenovateConfig,\n RenovateRepository,\n RepoGlobalConfig,\n} from '../../config/types.ts';\nimport { CONFIG_PRESETS_INVALID } from '../../constants/error-messages.ts';\nimport { pkg } from '../../expose.ts';\nimport { instrument } from '../../instrumentation/index.ts';\nimport {\n exportStats,\n finalizeReport,\n} from '../../instrumentation/reporting.ts';\nimport { getProblems, logLevel, logger, setMeta } from '../../logger/index.ts';\nimport { setGlobalLogLevelRemaps } from '../../logger/remap.ts';\nimport { getEnv } from '../../util/env.ts';\nimport * as hostRules from '../../util/host-rules.ts';\nimport * as queue from '../../util/http/queue.ts';\nimport * as throttle from '../../util/http/throttle.ts';\nimport { regexEngineStatus } from '../../util/regex.ts';\nimport { addSecretForSanitizing } from '../../util/sanitize.ts';\nimport { coerceString } from '../../util/string.ts';\nimport * as repositoryWorker from '../repository/index.ts';\nimport type { RepositoryWorkerConfig } from '../repository/init/types.ts';\nimport { autodiscoverRepositories } from './autodiscover.ts';\nimport { parseConfigs } from './config/parse/index.ts';\nimport { globalFinalize, globalInitialize } from './initialize.ts';\nimport { isLimitReached } from './limits.ts';\n\nfunction applyGlobalOption<\n K extends keyof RepoGlobalConfig | keyof InternalGlobalConfigOptions,\n>(\n target: RepoGlobalConfig & InternalGlobalConfigOptions,\n source: RepoGlobalConfig & InternalGlobalConfigOptions,\n key: K,\n): void {\n target[key] = source[key];\n delete source[key];\n}\n\nexport async function getRepositoryConfig(\n globalConfig: RenovateConfig,\n repository: RenovateRepository,\n): Promise<RepositoryWorkerConfig> {\n const repoIsString = isString(repository);\n const repoName = repoIsString ? repository : repository.repository;\n\n const repoConfig: RepositoryWorkerConfig = {\n ...globalConfig,\n repository: repoName,\n };\n\n if (!repoIsString) {\n const { repository: _repository, ...repositoryEntryConfig } = repository;\n\n // Promote GlobalConfig.OPTIONS keys into repoConfig directly so that\n // GlobalConfig.set(repoConfig) in the repository worker picks them up\n // with per-repo overrides before onboarding checks run.\n for (const option of GlobalConfig.OPTIONS) {\n if (option in repositoryEntryConfig) {\n applyGlobalOption(repoConfig, repositoryEntryConfig, option);\n }\n }\n\n if (isNonEmptyObject(repositoryEntryConfig)) {\n // mergeRenovateConfig later resolves this repositories[] object-entry\n // config in the correct order\n repoConfig.repositoryEntryConfig = repositoryEntryConfig;\n }\n }\n\n const repoParts = repoName.split('/');\n repoParts.pop();\n repoConfig.parentOrg = repoParts.join('/');\n repoConfig.topLevelOrg = repoParts.shift();\n const platform = GlobalConfig.get('platform');\n repoConfig.localDir =\n platform === 'local'\n ? process.cwd()\n : // TODO: types (#22198)\n upath.join(repoConfig.baseDir!, `./repos/${platform}/${repoName}`);\n await fs.ensureDir(repoConfig.localDir);\n delete repoConfig.baseDir;\n return configParser.filterConfig(repoConfig, 'repository');\n}\n\nfunction getGlobalConfig(): Promise<RenovateConfig> {\n return parseConfigs(getEnv(), process.argv);\n}\n\nfunction haveReachedLimits(): boolean {\n if (isLimitReached('Commits')) {\n logger.info('Max commits created for this run.');\n return true;\n }\n return false;\n}\n\n/* istanbul ignore next */\nfunction checkEnv(): void {\n const range = pkg.engines.node;\n if (process.release?.name !== 'node' || !process.versions?.node) {\n logger.warn(\n { release: process.release, versions: process.versions },\n 'Unknown node environment detected.',\n );\n } else if (!semver.satisfies(process.versions?.node, range)) {\n logger.error(\n { versions: process.versions, range },\n 'Unsupported node environment detected. Please update your node version.',\n );\n }\n}\n\nexport async function validatePresets(config: AllConfig): Promise<void> {\n logger.debug('validatePresets()');\n try {\n await resolveConfigPresets(config);\n } catch (err) /* istanbul ignore next */ {\n logger.error({ err }, CONFIG_PRESETS_INVALID);\n throw new Error(CONFIG_PRESETS_INVALID);\n }\n}\n\nexport async function start(): Promise<number> {\n logger.info({ renovateVersion: pkg.version }, 'Renovate started');\n // istanbul ignore next\n if (regexEngineStatus.type === 'available') {\n logger.debug('Using RE2 regex engine');\n } else if (regexEngineStatus.type === 'unavailable') {\n logger.warn(\n { err: regexEngineStatus.err },\n 'RE2 not usable, falling back to RegExp',\n );\n } else if (regexEngineStatus.type === 'ignored') {\n logger.debug('RE2 regex engine is ignored via RENOVATE_X_IGNORE_RE2');\n }\n\n let config: AllConfig;\n const env = getEnv();\n try {\n if (isNonEmptyStringAndNotWhitespace(env.AWS_SECRET_ACCESS_KEY)) {\n addSecretForSanitizing(env.AWS_SECRET_ACCESS_KEY, 'global');\n }\n if (isNonEmptyStringAndNotWhitespace(env.AWS_SESSION_TOKEN)) {\n addSecretForSanitizing(env.AWS_SESSION_TOKEN, 'global');\n }\n if (isNonEmptyStringAndNotWhitespace(env.COREPACK_NPM_TOKEN)) {\n addSecretForSanitizing(env.COREPACK_NPM_TOKEN, 'global');\n }\n if (isNonEmptyStringAndNotWhitespace(env.COREPACK_NPM_PASSWORD)) {\n addSecretForSanitizing(env.COREPACK_NPM_PASSWORD, 'global');\n }\n\n await instrument('config', async () => {\n // read global config from file, env and cli args\n config = await getGlobalConfig();\n\n // Set allowedHeaders and userAgent in case hostRules headers are configured in file config\n GlobalConfig.set({\n allowedHeaders: config.allowedHeaders,\n userAgent: config.userAgent,\n });\n // initialize all submodules\n config = await globalInitialize(config);\n\n // Set platform, endpoint, allowedHeaders and userAgent in case local presets are used\n GlobalConfig.set({\n allowedHeaders: config.allowedHeaders,\n platform: config.platform,\n endpoint: config.endpoint,\n userAgent: config.userAgent,\n });\n\n await validatePresets(config);\n\n setGlobalLogLevelRemaps(config.logLevelRemap);\n\n checkEnv();\n\n // validate secrets and variables. Will throw and abort if invalid\n validateConfigSecretsAndVariables(config);\n });\n\n // autodiscover repositories (needs to come after platform initialization)\n config = await instrument('discover', () =>\n autodiscoverRepositories(config),\n );\n\n if (isNonEmptyString(config.writeDiscoveredRepos)) {\n const content = JSON.stringify(config.repositories);\n await fs.writeFile(config.writeDiscoveredRepos, content);\n logger.info(\n `Written discovered repositories to ${config.writeDiscoveredRepos}`,\n );\n return 0;\n }\n\n // Iterate through repositories sequentially\n for (const repository of config.repositories!) {\n if (haveReachedLimits()) {\n break;\n }\n\n const { owner, repo } = repositoryToOwnerAndRepo(\n typeof repository === 'string' ? repository : repository.repository,\n );\n\n await instrument(\n 'repository',\n async () => {\n const repoConfig = await getRepositoryConfig(config, repository);\n if (repoConfig.hostRules) {\n logger.debug('Reinitializing hostRules for repo');\n hostRules.clear();\n repoConfig.hostRules.forEach((rule) => hostRules.add(rule));\n repoConfig.hostRules = [];\n }\n\n // host rules can change concurrency\n queue.clear();\n throttle.clear();\n\n await repositoryWorker.renovateRepository(repoConfig);\n setMeta({});\n },\n {\n attributes: {\n [ATTR_VCS_PROVIDER_NAME]: config.platform,\n [ATTR_VCS_OWNER_NAME]: owner,\n [ATTR_VCS_REPOSITORY_NAME]: repo,\n /** @deprecated TODO remove */\n repository:\n typeof repository === 'string'\n ? repository\n : repository.repository,\n },\n },\n );\n }\n\n finalizeReport();\n await exportStats(config);\n } catch (err) /* istanbul ignore next */ {\n if (err.message.startsWith('Init: ')) {\n logger.fatal(\n { errorMessage: err.message.substring(6) },\n 'Initialization error',\n );\n } else {\n logger.fatal({ err }, 'Unknown error');\n }\n if (!config!) {\n // return early if we can't parse config options\n logger.debug(`Missing config`);\n return 2;\n }\n } finally {\n await globalFinalize(config!);\n if (logLevel() === 'info') {\n logger.info(\n `Renovate was run at log level \"${logLevel()}\". Set LOG_LEVEL=debug in environment variables to see extended debug logs.`,\n );\n }\n }\n const loggerErrors = getProblems().filter((p) => p.level >= ERROR);\n if (loggerErrors.length) {\n logger.info(\n { loggerErrors },\n 'Renovate is exiting with a non-zero code due to the following logged errors',\n );\n return 1;\n }\n return 0;\n}\n\nfunction repositoryToOwnerAndRepo(fullName: string): {\n owner: string;\n repo: string;\n} {\n const parts = fullName.split('/');\n const repo = coerceString(parts.pop());\n const owner = parts.join('/');\n return { owner, repo };\n}\n"],"mappings":"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"}
|
|
@@ -31,7 +31,8 @@ async function embedChangelog(upgrade) {
|
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
async function embedChangelogs({ upgrades, stage }) {
|
|
34
|
-
|
|
34
|
+
const filteredUpgrades = upgrades.filter((upgrade) => upgrade.fetchChangeLogs === stage);
|
|
35
|
+
await map(filteredUpgrades, embedChangelog, { concurrency: 10 });
|
|
35
36
|
}
|
|
36
37
|
//#endregion
|
|
37
38
|
export { embedChangelog, embedChangelogs };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["p.map"],"sources":["../../../../lib/workers/repository/changelog/index.ts"],"sourcesContent":["import * as p from '../../../util/promises.ts';\nimport type { BranchUpgradeConfig } from '../../types.ts';\nimport { getChangeLogJSON } from '../update/pr/changelog/index.ts';\nimport type { EmbedChangelogsOptions } from './types.ts';\n\nexport async function embedChangelog(\n upgrade: BranchUpgradeConfig,\n): Promise<void> {\n // getChangeLogJSON returns null on error, so don't try again\n if (upgrade.logJSON !== undefined) {\n return;\n }\n\n if (upgrade.changelogContent === undefined) {\n upgrade.logJSON = await getChangeLogJSON(upgrade);\n } else {\n upgrade.logJSON = {\n hasReleaseNotes: true,\n project: {\n packageName: upgrade.packageName,\n depName: upgrade.depName,\n type: undefined!,\n apiBaseUrl: undefined!,\n baseUrl: undefined!,\n repository: upgrade.repository!,\n sourceUrl: upgrade.sourceUrl!,\n sourceDirectory: upgrade.sourceDirectory,\n },\n versions: [\n {\n changes: undefined!,\n compare: undefined!,\n date: undefined!,\n releaseNotes: {\n body: upgrade.changelogContent,\n notesSourceUrl: undefined!,\n url: upgrade.changelogUrl!,\n },\n gitRef: undefined!,\n version: upgrade.newVersion!,\n },\n ],\n };\n }\n}\n\nexport async function embedChangelogs({\n upgrades,\n stage,\n}: EmbedChangelogsOptions): Promise<void> {\n // Only process upgrades whose fetchChangeLogs value match the stage.\n const filteredUpgrades = upgrades.filter(\n (upgrade) => upgrade.fetchChangeLogs === stage,\n );\n await p.map(filteredUpgrades, embedChangelog, { concurrency: 10 });\n}\n"],"mappings":";;;AAKA,eAAsB,eACpB,SACe;CAEf,IAAI,QAAQ,YAAY,KAAA,GACtB;CAGF,IAAI,QAAQ,qBAAqB,KAAA,GAC/B,QAAQ,UAAU,MAAM,iBAAiB,OAAO;MAEhD,QAAQ,UAAU;EAChB,iBAAiB;EACjB,SAAS;GACP,aAAa,QAAQ;GACrB,SAAS,QAAQ;GACjB,MAAM,KAAA;GACN,YAAY,KAAA;GACZ,SAAS,KAAA;GACT,YAAY,QAAQ;GACpB,WAAW,QAAQ;GACnB,iBAAiB,QAAQ;EAC3B;EACA,UAAU,CACR;GACE,SAAS,KAAA;GACT,SAAS,KAAA;GACT,MAAM,KAAA;GACN,cAAc;IACZ,MAAM,QAAQ;IACd,gBAAgB,KAAA;IAChB,KAAK,QAAQ;GACf;GACA,QAAQ,KAAA;GACR,SAAS,QAAQ;EACnB,CACF;CACF;AAEJ;AAEA,eAAsB,gBAAgB,EACpC,UACA,SACwC;
|
|
1
|
+
{"version":3,"file":"index.js","names":["p.map"],"sources":["../../../../lib/workers/repository/changelog/index.ts"],"sourcesContent":["import * as p from '../../../util/promises.ts';\nimport type { BranchUpgradeConfig } from '../../types.ts';\nimport { getChangeLogJSON } from '../update/pr/changelog/index.ts';\nimport type { EmbedChangelogsOptions } from './types.ts';\n\nexport async function embedChangelog(\n upgrade: BranchUpgradeConfig,\n): Promise<void> {\n // getChangeLogJSON returns null on error, so don't try again\n if (upgrade.logJSON !== undefined) {\n return;\n }\n\n if (upgrade.changelogContent === undefined) {\n upgrade.logJSON = await getChangeLogJSON(upgrade);\n } else {\n upgrade.logJSON = {\n hasReleaseNotes: true,\n project: {\n packageName: upgrade.packageName,\n depName: upgrade.depName,\n type: undefined!,\n apiBaseUrl: undefined!,\n baseUrl: undefined!,\n repository: upgrade.repository!,\n sourceUrl: upgrade.sourceUrl!,\n sourceDirectory: upgrade.sourceDirectory,\n },\n versions: [\n {\n changes: undefined!,\n compare: undefined!,\n date: undefined!,\n releaseNotes: {\n body: upgrade.changelogContent,\n notesSourceUrl: undefined!,\n url: upgrade.changelogUrl!,\n },\n gitRef: undefined!,\n version: upgrade.newVersion!,\n },\n ],\n };\n }\n}\n\nexport async function embedChangelogs({\n upgrades,\n stage,\n}: EmbedChangelogsOptions): Promise<void> {\n // Only process upgrades whose fetchChangeLogs value match the stage.\n const filteredUpgrades = upgrades.filter(\n (upgrade) => upgrade.fetchChangeLogs === stage,\n );\n await p.map(filteredUpgrades, embedChangelog, { concurrency: 10 });\n}\n"],"mappings":";;;AAKA,eAAsB,eACpB,SACe;CAEf,IAAI,QAAQ,YAAY,KAAA,GACtB;CAGF,IAAI,QAAQ,qBAAqB,KAAA,GAC/B,QAAQ,UAAU,MAAM,iBAAiB,OAAO;MAEhD,QAAQ,UAAU;EAChB,iBAAiB;EACjB,SAAS;GACP,aAAa,QAAQ;GACrB,SAAS,QAAQ;GACjB,MAAM,KAAA;GACN,YAAY,KAAA;GACZ,SAAS,KAAA;GACT,YAAY,QAAQ;GACpB,WAAW,QAAQ;GACnB,iBAAiB,QAAQ;EAC3B;EACA,UAAU,CACR;GACE,SAAS,KAAA;GACT,SAAS,KAAA;GACT,MAAM,KAAA;GACN,cAAc;IACZ,MAAM,QAAQ;IACd,gBAAgB,KAAA;IAChB,KAAK,QAAQ;GACf;GACA,QAAQ,KAAA;GACR,SAAS,QAAQ;EACnB,CACF;CACF;AAEJ;AAEA,eAAsB,gBAAgB,EACpC,UACA,SACwC;CAExC,MAAM,mBAAmB,SAAS,QAC/B,YAAY,QAAQ,oBAAoB,KAC3C;CACA,MAAMA,IAAM,kBAAkB,gBAAgB,EAAE,aAAa,GAAG,CAAC;AACnE"}
|
|
@@ -54,7 +54,8 @@ function jsonStripWhitespaces(json) {
|
|
|
54
54
|
*
|
|
55
55
|
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#parameters
|
|
56
56
|
*/
|
|
57
|
-
return quickStringify(JSON5.parse(json)) ??
|
|
57
|
+
return quickStringify(JSON5.parse(json)) ??
|
|
58
|
+
/* istanbul ignore next: should never happen */ null;
|
|
58
59
|
}
|
|
59
60
|
//#endregion
|
|
60
61
|
export { jsonStripWhitespaces, rebaseMigrationBranch };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebase.js","names":[],"sources":["../../../../../lib/workers/repository/config-migration/branch/rebase.ts"],"sourcesContent":["import JSON5 from 'json5';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport { quickStringify } from '../../../../util/stringify.ts';\nimport { getMigrationBranchName } from '../common.ts';\nimport { ConfigMigrationCommitMessageFactory } from './commit-message.ts';\nimport type { MigratedData } from './migrated-data.ts';\nimport { MigratedDataFactory } from './migrated-data.ts';\n\nexport async function rebaseMigrationBranch(\n config: RenovateConfig,\n migratedConfigData: MigratedData,\n): Promise<string | null> {\n logger.debug('Checking if migration branch needs rebasing');\n const baseBranch = config.defaultBranch!;\n const branchName = getMigrationBranchName(config);\n const configFileName = migratedConfigData.filename;\n let contents = migratedConfigData.content;\n const existingContents = await getFile(configFileName, branchName);\n if (\n jsonStripWhitespaces(contents) === jsonStripWhitespaces(existingContents)\n ) {\n logger.debug('Migration branch is up to date');\n return null;\n }\n logger.debug('Rebasing migration branch');\n\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would rebase files in migration branch');\n return null;\n }\n\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n configFileName,\n );\n const commitMessage = commitMessageFactory.getCommitMessage();\n\n await scm.checkoutBranch(baseBranch);\n contents =\n await MigratedDataFactory.applyPrettierFormatting(migratedConfigData);\n return scm.commitAndPush({\n baseBranch: config.baseBranch,\n branchName,\n files: [\n {\n type: 'addition',\n path: configFileName,\n contents,\n },\n ],\n message: commitMessage.toString(),\n platformCommit: config.platformCommit,\n // Only needed by Gerrit platform\n prTitle: commitMessageFactory.getPrTitle(),\n });\n}\n\n/**\n * @param json a JSON string\n * @return a minimal json string. i.e. does not contain any formatting/whitespaces\n */\nexport function jsonStripWhitespaces(json: string | null): string | null {\n if (!json) {\n return null;\n }\n /**\n * JSON.stringify(value, replacer, space):\n * If \"space\" is anything other than a string or number —\n * for example, is null or not provided — no white space is used.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#parameters\n */\n return (\n quickStringify(JSON5.parse(json)) ??\n /* istanbul ignore next: should never happen */ null\n );\n}\n"],"mappings":";;;;;;;;;;AAYA,eAAsB,sBACpB,QACA,oBACwB;CACxB,OAAO,MAAM,6CAA6C;CAC1D,MAAM,aAAa,OAAO;CAC1B,MAAM,aAAa,uBAAuB,MAAM;CAChD,MAAM,iBAAiB,mBAAmB;CAC1C,IAAI,WAAW,mBAAmB;CAClC,MAAM,mBAAmB,MAAM,QAAQ,gBAAgB,UAAU;CACjE,IACE,qBAAqB,QAAQ,MAAM,qBAAqB,gBAAgB,GACxE;EACA,OAAO,MAAM,gCAAgC;EAC7C,OAAO;CACT;CACA,OAAO,MAAM,2BAA2B;CAExC,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KAAK,iDAAiD;EAC7D,OAAO;CACT;CAEA,MAAM,uBAAuB,IAAI,oCAC/B,QACA,cACF;CACA,MAAM,gBAAgB,qBAAqB,iBAAiB;CAE5D,MAAM,IAAI,eAAe,UAAU;CACnC,WACE,MAAM,oBAAoB,wBAAwB,kBAAkB;CACtE,OAAO,IAAI,cAAc;EACvB,YAAY,OAAO;EACnB;EACA,OAAO,CACL;GACE,MAAM;GACN,MAAM;GACN;EACF,CACF;EACA,SAAS,cAAc,SAAS;EAChC,gBAAgB,OAAO;EAEvB,SAAS,qBAAqB,WAAW;CAC3C,CAAC;AACH;;;;;AAMA,SAAgB,qBAAqB,MAAoC;CACvE,IAAI,CAAC,MACH,OAAO;;;;;;;;CAST,OACE,eAAe,MAAM,MAAM,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"rebase.js","names":[],"sources":["../../../../../lib/workers/repository/config-migration/branch/rebase.ts"],"sourcesContent":["import JSON5 from 'json5';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport { quickStringify } from '../../../../util/stringify.ts';\nimport { getMigrationBranchName } from '../common.ts';\nimport { ConfigMigrationCommitMessageFactory } from './commit-message.ts';\nimport type { MigratedData } from './migrated-data.ts';\nimport { MigratedDataFactory } from './migrated-data.ts';\n\nexport async function rebaseMigrationBranch(\n config: RenovateConfig,\n migratedConfigData: MigratedData,\n): Promise<string | null> {\n logger.debug('Checking if migration branch needs rebasing');\n const baseBranch = config.defaultBranch!;\n const branchName = getMigrationBranchName(config);\n const configFileName = migratedConfigData.filename;\n let contents = migratedConfigData.content;\n const existingContents = await getFile(configFileName, branchName);\n if (\n jsonStripWhitespaces(contents) === jsonStripWhitespaces(existingContents)\n ) {\n logger.debug('Migration branch is up to date');\n return null;\n }\n logger.debug('Rebasing migration branch');\n\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would rebase files in migration branch');\n return null;\n }\n\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n configFileName,\n );\n const commitMessage = commitMessageFactory.getCommitMessage();\n\n await scm.checkoutBranch(baseBranch);\n contents =\n await MigratedDataFactory.applyPrettierFormatting(migratedConfigData);\n return scm.commitAndPush({\n baseBranch: config.baseBranch,\n branchName,\n files: [\n {\n type: 'addition',\n path: configFileName,\n contents,\n },\n ],\n message: commitMessage.toString(),\n platformCommit: config.platformCommit,\n // Only needed by Gerrit platform\n prTitle: commitMessageFactory.getPrTitle(),\n });\n}\n\n/**\n * @param json a JSON string\n * @return a minimal json string. i.e. does not contain any formatting/whitespaces\n */\nexport function jsonStripWhitespaces(json: string | null): string | null {\n if (!json) {\n return null;\n }\n /**\n * JSON.stringify(value, replacer, space):\n * If \"space\" is anything other than a string or number —\n * for example, is null or not provided — no white space is used.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#parameters\n */\n return (\n quickStringify(JSON5.parse(json)) ??\n /* istanbul ignore next: should never happen */ null\n );\n}\n"],"mappings":";;;;;;;;;;AAYA,eAAsB,sBACpB,QACA,oBACwB;CACxB,OAAO,MAAM,6CAA6C;CAC1D,MAAM,aAAa,OAAO;CAC1B,MAAM,aAAa,uBAAuB,MAAM;CAChD,MAAM,iBAAiB,mBAAmB;CAC1C,IAAI,WAAW,mBAAmB;CAClC,MAAM,mBAAmB,MAAM,QAAQ,gBAAgB,UAAU;CACjE,IACE,qBAAqB,QAAQ,MAAM,qBAAqB,gBAAgB,GACxE;EACA,OAAO,MAAM,gCAAgC;EAC7C,OAAO;CACT;CACA,OAAO,MAAM,2BAA2B;CAExC,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KAAK,iDAAiD;EAC7D,OAAO;CACT;CAEA,MAAM,uBAAuB,IAAI,oCAC/B,QACA,cACF;CACA,MAAM,gBAAgB,qBAAqB,iBAAiB;CAE5D,MAAM,IAAI,eAAe,UAAU;CACnC,WACE,MAAM,oBAAoB,wBAAwB,kBAAkB;CACtE,OAAO,IAAI,cAAc;EACvB,YAAY,OAAO;EACnB;EACA,OAAO,CACL;GACE,MAAM;GACN,MAAM;GACN;EACF,CACF;EACA,SAAS,cAAc,SAAS;EAChC,gBAAgB,OAAO;EAEvB,SAAS,qBAAqB,WAAW;CAC3C,CAAC;AACH;;;;;AAMA,SAAgB,qBAAqB,MAAoC;CACvE,IAAI,CAAC,MACH,OAAO;;;;;;;;CAST,OACE,eAAe,MAAM,MAAM,IAAI,CAAC;iDACgB;AAEpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-config.js","names":[],"sources":["../../../lib/workers/repository/error-config.ts"],"sourcesContent":["// TODO #22198\nimport { GlobalConfig } from '../../config/global.ts';\nimport type { RenovateConfig } from '../../config/types.ts';\nimport { logger } from '../../logger/index.ts';\nimport type { Pr } from '../../modules/platform/index.ts';\nimport { platform } from '../../modules/platform/index.ts';\nimport { getInheritedOrGlobal } from '../../util/common.ts';\n\nexport function raiseConfigWarningIssue(\n config: RenovateConfig,\n error: Error,\n): Promise<void> {\n logger.debug('raiseConfigWarningIssue()');\n const title = `Action Required: Fix Renovate Configuration`;\n const body = `There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.\\n\\n`;\n const notificationName = 'configErrorIssue';\n return raiseWarningIssue(config, notificationName, title, body, error);\n}\n\nexport function raiseCredentialsWarningIssue(\n config: RenovateConfig,\n error: Error,\n): Promise<void> {\n logger.debug('raiseCredentialsWarningIssue()');\n const title = `Action Required: Add missing credentials`;\n const body = `There are missing credentials for the authentication-required feature. As a precaution, Renovate will pause PRs until it is resolved.\\n\\n`;\n const notificationName = 'missingCredentialsError';\n return raiseWarningIssue(config, notificationName, title, body, error);\n}\n\nasync function raiseWarningIssue(\n config: RenovateConfig,\n notificationName: string,\n title: string,\n initialBody: string,\n error: Error,\n): Promise<void> {\n if (config.mode === 'silent') {\n logger.debug(\n `Config warning issues are not created, updated or closed when mode=silent`,\n );\n return;\n }\n let body = initialBody;\n if (error.validationSource) {\n body += `Location: \\`${error.validationSource}\\`\\n`;\n }\n if (error.validationError) {\n body += `Error type: ${error.validationError}\\n`;\n }\n if (error.validationMessage) {\n body += `Message: ${error.validationMessage}\\n`;\n }\n\n const pr = await platform.getBranchPr(\n getInheritedOrGlobal('onboardingBranch')!,\n config.baseBranch,\n );\n if (pr?.state === 'open') {\n await handleOnboardingPr(pr, body);\n return;\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { configError: error },\n 'DRY-RUN: Would ensure configuration error issue',\n );\n return;\n }\n\n if (config.suppressNotifications?.includes(notificationName)) {\n logger.info(\n { notificationName },\n 'Configuration failure, issues will be suppressed',\n );\n return;\n }\n\n const res = await platform.ensureIssue({\n title,\n body,\n once: false,\n shouldReOpen: config.configWarningReuseIssue,\n confidential: config.confidential,\n });\n if (res === 'updated' || res === 'created') {\n logger.warn({ configError: error, res }, 'Configuration Warning');\n }\n}\n\nasync function handleOnboardingPr(pr: Pr, issueMessage: string): Promise<void> {\n logger.debug('Updating onboarding PR with config error notice');\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR #${pr.number}`);\n return;\n }\n\n let prBody = `## Action Required: Fix Renovate Configuration\\n\\n${issueMessage}`;\n prBody += `\\n\\nOnce you have resolved this problem (in this onboarding branch), Renovate will return to providing you with a preview of your repository's configuration.`;\n\n try {\n await platform.updatePr({\n number: pr.number,\n prTitle: pr.title,\n prBody,\n });\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err }, 'Error updating onboarding PR');\n }\n}\n"],"mappings":";;;;;AAQA,SAAgB,wBACd,QACA,OACe;CACf,OAAO,MAAM,2BAA2B;CAIxC,OAAO,kBAAkB,QAAQ,oBAAkB,+CAAO,6JAAM,KAAK;AACvE;AAEA,SAAgB,6BACd,QACA,OACe;CACf,OAAO,MAAM,gCAAgC;CAI7C,OAAO,kBAAkB,QAAQ,2BAAkB,4CAAO,6IAAM,KAAK;AACvE;AAEA,eAAe,kBACb,QACA,kBACA,OACA,aACA,OACe;CACf,IAAI,OAAO,SAAS,UAAU;EAC5B,OAAO,MACL,2EACF;EACA;CACF;CACA,IAAI,OAAO;CACX,IAAI,MAAM,kBACR,QAAQ,eAAe,MAAM,iBAAiB;CAEhD,IAAI,MAAM,iBACR,QAAQ,eAAe,MAAM,gBAAgB;CAE/C,IAAI,MAAM,mBACR,QAAQ,YAAY,MAAM,kBAAkB;CAG9C,MAAM,KAAK,MAAM,SAAS,YACxB,qBAAqB,kBAAkB,GACvC,OAAO,UACT;CACA,IAAI,IAAI,UAAU,QAAQ;EACxB,MAAM,mBAAmB,IAAI,IAAI;EACjC;CACF;CAEA,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KACL,EAAE,aAAa,MAAM,GACrB,iDACF;EACA;CACF;CAEA,IAAI,OAAO,uBAAuB,SAAS,gBAAgB,GAAG;EAC5D,OAAO,KACL,EAAE,iBAAiB,GACnB,kDACF;EACA;CACF;CAEA,MAAM,MAAM,MAAM,SAAS,YAAY;EACrC;EACA;EACA,MAAM;EACN,cAAc,OAAO;EACrB,cAAc,OAAO;CACvB,CAAC;CACD,IAAI,QAAQ,aAAa,QAAQ,WAC/B,OAAO,KAAK;EAAE,aAAa;EAAO;CAAI,GAAG,uBAAuB;AAEpE;AAEA,eAAe,mBAAmB,IAAQ,cAAqC;CAC7E,OAAO,MAAM,iDAAiD;CAC9D,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KAAK,6BAA6B,GAAG,QAAQ;EACpD;CACF;CAEA,IAAI,SAAS,qDAAqD;CAClE,UAAU;CAEV,IAAI;EACF,MAAM,SAAS,SAAS;GACtB,QAAQ,GAAG;GACX,SAAS,GAAG;GACZ;EACF,CAAC;CACH,SAAS,
|
|
1
|
+
{"version":3,"file":"error-config.js","names":[],"sources":["../../../lib/workers/repository/error-config.ts"],"sourcesContent":["// TODO #22198\nimport { GlobalConfig } from '../../config/global.ts';\nimport type { RenovateConfig } from '../../config/types.ts';\nimport { logger } from '../../logger/index.ts';\nimport type { Pr } from '../../modules/platform/index.ts';\nimport { platform } from '../../modules/platform/index.ts';\nimport { getInheritedOrGlobal } from '../../util/common.ts';\n\nexport function raiseConfigWarningIssue(\n config: RenovateConfig,\n error: Error,\n): Promise<void> {\n logger.debug('raiseConfigWarningIssue()');\n const title = `Action Required: Fix Renovate Configuration`;\n const body = `There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.\\n\\n`;\n const notificationName = 'configErrorIssue';\n return raiseWarningIssue(config, notificationName, title, body, error);\n}\n\nexport function raiseCredentialsWarningIssue(\n config: RenovateConfig,\n error: Error,\n): Promise<void> {\n logger.debug('raiseCredentialsWarningIssue()');\n const title = `Action Required: Add missing credentials`;\n const body = `There are missing credentials for the authentication-required feature. As a precaution, Renovate will pause PRs until it is resolved.\\n\\n`;\n const notificationName = 'missingCredentialsError';\n return raiseWarningIssue(config, notificationName, title, body, error);\n}\n\nasync function raiseWarningIssue(\n config: RenovateConfig,\n notificationName: string,\n title: string,\n initialBody: string,\n error: Error,\n): Promise<void> {\n if (config.mode === 'silent') {\n logger.debug(\n `Config warning issues are not created, updated or closed when mode=silent`,\n );\n return;\n }\n let body = initialBody;\n if (error.validationSource) {\n body += `Location: \\`${error.validationSource}\\`\\n`;\n }\n if (error.validationError) {\n body += `Error type: ${error.validationError}\\n`;\n }\n if (error.validationMessage) {\n body += `Message: ${error.validationMessage}\\n`;\n }\n\n const pr = await platform.getBranchPr(\n getInheritedOrGlobal('onboardingBranch')!,\n config.baseBranch,\n );\n if (pr?.state === 'open') {\n await handleOnboardingPr(pr, body);\n return;\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { configError: error },\n 'DRY-RUN: Would ensure configuration error issue',\n );\n return;\n }\n\n if (config.suppressNotifications?.includes(notificationName)) {\n logger.info(\n { notificationName },\n 'Configuration failure, issues will be suppressed',\n );\n return;\n }\n\n const res = await platform.ensureIssue({\n title,\n body,\n once: false,\n shouldReOpen: config.configWarningReuseIssue,\n confidential: config.confidential,\n });\n if (res === 'updated' || res === 'created') {\n logger.warn({ configError: error, res }, 'Configuration Warning');\n }\n}\n\nasync function handleOnboardingPr(pr: Pr, issueMessage: string): Promise<void> {\n logger.debug('Updating onboarding PR with config error notice');\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR #${pr.number}`);\n return;\n }\n\n let prBody = `## Action Required: Fix Renovate Configuration\\n\\n${issueMessage}`;\n prBody += `\\n\\nOnce you have resolved this problem (in this onboarding branch), Renovate will return to providing you with a preview of your repository's configuration.`;\n\n try {\n await platform.updatePr({\n number: pr.number,\n prTitle: pr.title,\n prBody,\n });\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err }, 'Error updating onboarding PR');\n }\n}\n"],"mappings":";;;;;AAQA,SAAgB,wBACd,QACA,OACe;CACf,OAAO,MAAM,2BAA2B;CAIxC,OAAO,kBAAkB,QAAQ,oBAAkB,+CAAO,6JAAM,KAAK;AACvE;AAEA,SAAgB,6BACd,QACA,OACe;CACf,OAAO,MAAM,gCAAgC;CAI7C,OAAO,kBAAkB,QAAQ,2BAAkB,4CAAO,6IAAM,KAAK;AACvE;AAEA,eAAe,kBACb,QACA,kBACA,OACA,aACA,OACe;CACf,IAAI,OAAO,SAAS,UAAU;EAC5B,OAAO,MACL,2EACF;EACA;CACF;CACA,IAAI,OAAO;CACX,IAAI,MAAM,kBACR,QAAQ,eAAe,MAAM,iBAAiB;CAEhD,IAAI,MAAM,iBACR,QAAQ,eAAe,MAAM,gBAAgB;CAE/C,IAAI,MAAM,mBACR,QAAQ,YAAY,MAAM,kBAAkB;CAG9C,MAAM,KAAK,MAAM,SAAS,YACxB,qBAAqB,kBAAkB,GACvC,OAAO,UACT;CACA,IAAI,IAAI,UAAU,QAAQ;EACxB,MAAM,mBAAmB,IAAI,IAAI;EACjC;CACF;CAEA,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KACL,EAAE,aAAa,MAAM,GACrB,iDACF;EACA;CACF;CAEA,IAAI,OAAO,uBAAuB,SAAS,gBAAgB,GAAG;EAC5D,OAAO,KACL,EAAE,iBAAiB,GACnB,kDACF;EACA;CACF;CAEA,MAAM,MAAM,MAAM,SAAS,YAAY;EACrC;EACA;EACA,MAAM;EACN,cAAc,OAAO;EACrB,cAAc,OAAO;CACvB,CAAC;CACD,IAAI,QAAQ,aAAa,QAAQ,WAC/B,OAAO,KAAK;EAAE,aAAa;EAAO;CAAI,GAAG,uBAAuB;AAEpE;AAEA,eAAe,mBAAmB,IAAQ,cAAqC;CAC7E,OAAO,MAAM,iDAAiD;CAC9D,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KAAK,6BAA6B,GAAG,QAAQ;EACpD;CACF;CAEA,IAAI,SAAS,qDAAqD;CAClE,UAAU;CAEV,IAAI;EACF,MAAM,SAAS,SAAS;GACtB,QAAQ,GAAG;GACX,SAAS,GAAG;GACZ;EACF,CAAC;CACH,SAAS,gCAAgC;EACvC,OAAO,KAAK,EAAE,IAAI,GAAG,8BAA8B;CACrD;AACF"}
|
|
@@ -75,7 +75,7 @@ async function cleanUpBranches(config, remainingBranches) {
|
|
|
75
75
|
logger.info({ branch: branchName }, `Deleting orphan branch`);
|
|
76
76
|
await scm.deleteBranch(branchName);
|
|
77
77
|
}
|
|
78
|
-
} catch (err)
|
|
78
|
+
} catch (err) /* istanbul ignore next */ {
|
|
79
79
|
if (err.message === "config-validation") logger.debug("Cannot prune branch due to collision between tags and branch names");
|
|
80
80
|
else if (err.message?.includes("bad revision 'origin/")) logger.debug({ branchName }, "Branch not found on origin when attempting to prune");
|
|
81
81
|
else if (err.message !== "repository-changed") logger.warn({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prune.js","names":[],"sources":["../../../../lib/workers/repository/finalize/prune.ts"],"sourcesContent":["import { isNonEmptyStringAndNotWhitespace } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { REPOSITORY_CHANGED } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { ensureComment } from '../../../modules/platform/comment.ts';\nimport { platform } from '../../../modules/platform/index.ts';\nimport { scm } from '../../../modules/platform/scm.ts';\nimport { getBranchList, setUserRepoConfig } from '../../../util/git/index.ts';\nimport { escapeRegExp, regEx } from '../../../util/regex.ts';\nimport { uniqueStrings } from '../../../util/string.ts';\nimport { isMultiBaseBranch } from '../process/index.ts';\nimport { getReconfigureBranchName } from '../reconfigure/utils.ts';\n\nasync function cleanUpBranches(\n config: RenovateConfig,\n remainingBranches: string[],\n): Promise<void> {\n if (!config.pruneStaleBranches) {\n logger.debug('Branch/PR pruning is disabled - skipping');\n return;\n }\n // set Git author in case the repository is not initialized yet\n setUserRepoConfig(config);\n\n // in multi-base mode the base branch is encoded in the branch name\n const multiBase = isMultiBaseBranch(config);\n const baseBranchRe = multiBase ? calculateBaseBranchRegex(config) : null;\n\n for (const branchName of remainingBranches) {\n try {\n let baseBranch: string;\n if (multiBase) {\n baseBranch =\n baseBranchRe?.exec(branchName)?.[1] ?? config.defaultBranch!;\n } else {\n // single base branch: branch name doesn't encode it, use the configured one\n baseBranch = config.baseBranches?.[0] ?? config.defaultBranch!;\n }\n const pr = await platform.findPr({\n branchName,\n state: 'open',\n targetBranch: baseBranch,\n });\n const branchIsModified = await scm.isBranchModified(\n branchName,\n baseBranch,\n );\n if (pr) {\n if (branchIsModified) {\n logger.debug(\n { prNo: pr.number, prTitle: pr.title },\n 'Branch is modified - skipping PR autoclosing',\n );\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR title and ensure comment.`);\n } else {\n if (!pr.title.endsWith('- abandoned')) {\n const newPrTitle = `${pr.title} - abandoned`;\n await platform.updatePr({\n number: pr.number,\n prTitle: newPrTitle,\n state: 'open',\n });\n }\n\n await ensureComment({\n number: pr.number,\n topic: 'Autoclosing Skipped',\n content:\n 'This PR has been flagged for autoclosing. However, it is being skipped due to the branch being already modified. Please close/delete it manually or report a bug if you think this is in error.',\n });\n }\n } else if (GlobalConfig.get('dryRun')) {\n logger.info(\n { prNo: pr.number, prTitle: pr.title },\n `DRY-RUN: Would autoclose PR`,\n );\n } else {\n logger.info(\n { branchName, prNo: pr.number, prTitle: pr.title },\n 'Autoclosing PR',\n );\n let newPrTitle = pr.title;\n if (!pr.title.endsWith('- autoclosed')) {\n newPrTitle += ' - autoclosed';\n }\n await platform.updatePr({\n number: pr.number,\n prTitle: newPrTitle,\n state: 'closed',\n });\n await scm.deleteBranch(branchName);\n }\n } else if (branchIsModified) {\n logger.debug(\n { branch: branchName },\n 'Orphan Branch is modified - skipping branch deletion',\n );\n } else if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would delete orphan branch ${branchName}`);\n } else {\n logger.info({ branch: branchName }, `Deleting orphan branch`);\n await scm.deleteBranch(branchName);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.message === 'config-validation') {\n logger.debug(\n 'Cannot prune branch due to collision between tags and branch names',\n );\n } else if (err.message?.includes(\"bad revision 'origin/\")) {\n logger.debug(\n { branchName },\n 'Branch not found on origin when attempting to prune',\n );\n } else if (err.message !== REPOSITORY_CHANGED) {\n logger.warn({ err, branch: branchName }, 'Error pruning branch');\n }\n }\n }\n}\n\n/**\n * Calculates a {RegExp} to extract the base branch from a branch name if base branch patterns is configured.\n * @param config Renovate configuration\n */\nfunction calculateBaseBranchRegex(config: RenovateConfig): RegExp | null {\n if (!config.baseBranchPatterns?.length || !config.baseBranches?.length) {\n return null;\n }\n\n // calculate possible branch prefixes and escape for regex\n const branchPrefixes = [config.branchPrefix, config.branchPrefixOld]\n .filter(isNonEmptyStringAndNotWhitespace)\n .filter(uniqueStrings)\n .map(escapeRegExp);\n\n const baseBranches = config.baseBranches.map(escapeRegExp);\n\n // create regex to extract base branche from branch name\n const baseBranchRe = regEx(\n `^(?:${branchPrefixes.join('|')})(${baseBranches.join('|')})-`,\n );\n\n return baseBranchRe;\n}\n\nexport async function pruneStaleBranches(\n config: RenovateConfig,\n branchList: string[] | null | undefined,\n): Promise<void> {\n logger.debug('Removing any stale branches');\n logger.trace({ config }, `pruneStaleBranches`);\n // TODO: types (#22198)\n logger.debug(`config.repoIsOnboarded=${config.repoIsOnboarded!}`);\n if (!branchList) {\n logger.debug('No branchList');\n return;\n }\n if (!config.defaultBranch) {\n logger.debug('No defaultBranch set - skipping branch pruning');\n return;\n }\n // TODO: types (#22198)\n let renovateBranches = getBranchList().filter(\n (branchName) =>\n branchName.startsWith(config.branchPrefix!) &&\n branchName !== getReconfigureBranchName(config.branchPrefix!),\n );\n if (!renovateBranches?.length) {\n logger.debug('No renovate branches found');\n return;\n }\n logger.debug(\n {\n branchList: branchList?.sort(),\n renovateBranches: renovateBranches?.sort(),\n },\n 'Branch lists',\n );\n // TODO: types (#22198)\n const lockFileBranch = `${config.branchPrefix!}lock-file-maintenance`;\n renovateBranches = renovateBranches.filter(\n (branch) => branch !== lockFileBranch,\n );\n const remainingBranches = renovateBranches.filter(\n (branch) => !branchList.includes(branch),\n );\n logger.debug(`remainingBranches=${String(remainingBranches)}`);\n if (remainingBranches.length === 0) {\n logger.debug('No branches to clean up');\n return;\n }\n\n await cleanUpBranches(config, remainingBranches);\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,eAAe,gBACb,QACA,mBACe;CACf,IAAI,CAAC,OAAO,oBAAoB;EAC9B,OAAO,MAAM,0CAA0C;EACvD;CACF;CAEA,kBAAkB,MAAM;CAGxB,MAAM,YAAY,kBAAkB,MAAM;CAC1C,MAAM,eAAe,YAAY,yBAAyB,MAAM,IAAI;CAEpE,KAAK,MAAM,cAAc,mBACvB,IAAI;EACF,IAAI;EACJ,IAAI,WACF,aACE,cAAc,KAAK,UAAU,CAAC,GAAG,MAAM,OAAO;OAGhD,aAAa,OAAO,eAAe,MAAM,OAAO;EAElD,MAAM,KAAK,MAAM,SAAS,OAAO;GAC/B;GACA,OAAO;GACP,cAAc;EAChB,CAAC;EACD,MAAM,mBAAmB,MAAM,IAAI,iBACjC,YACA,UACF;EACA,IAAI,IACF,IAAI,kBAAkB;GACpB,OAAO,MACL;IAAE,MAAM,GAAG;IAAQ,SAAS,GAAG;GAAM,GACrC,8CACF;GACA,IAAI,aAAa,IAAI,QAAQ,GAC3B,OAAO,KAAK,oDAAoD;QAC3D;IACL,IAAI,CAAC,GAAG,MAAM,SAAS,aAAa,GAAG;KACrC,MAAM,aAAa,GAAG,GAAG,MAAM;KAC/B,MAAM,SAAS,SAAS;MACtB,QAAQ,GAAG;MACX,SAAS;MACT,OAAO;KACT,CAAC;IACH;IAEA,MAAM,cAAc;KAClB,QAAQ,GAAG;KACX,OAAO;KACP,SACE;IACJ,CAAC;GACH;EACF,OAAO,IAAI,aAAa,IAAI,QAAQ,GAClC,OAAO,KACL;GAAE,MAAM,GAAG;GAAQ,SAAS,GAAG;EAAM,GACrC,6BACF;OACK;GACL,OAAO,KACL;IAAE;IAAY,MAAM,GAAG;IAAQ,SAAS,GAAG;GAAM,GACjD,gBACF;GACA,IAAI,aAAa,GAAG;GACpB,IAAI,CAAC,GAAG,MAAM,SAAS,cAAc,GACnC,cAAc;GAEhB,MAAM,SAAS,SAAS;IACtB,QAAQ,GAAG;IACX,SAAS;IACT,OAAO;GACT,CAAC;GACD,MAAM,IAAI,aAAa,UAAU;EACnC;OACK,IAAI,kBACT,OAAO,MACL,EAAE,QAAQ,WAAW,GACrB,sDACF;OACK,IAAI,aAAa,IAAI,QAAQ,GAClC,OAAO,KAAK,uCAAuC,YAAY;OAC1D;GACL,OAAO,KAAK,EAAE,QAAQ,WAAW,GAAG,wBAAwB;GAC5D,MAAM,IAAI,aAAa,UAAU;EACnC;CACF,SAAS,
|
|
1
|
+
{"version":3,"file":"prune.js","names":[],"sources":["../../../../lib/workers/repository/finalize/prune.ts"],"sourcesContent":["import { isNonEmptyStringAndNotWhitespace } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { REPOSITORY_CHANGED } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { ensureComment } from '../../../modules/platform/comment.ts';\nimport { platform } from '../../../modules/platform/index.ts';\nimport { scm } from '../../../modules/platform/scm.ts';\nimport { getBranchList, setUserRepoConfig } from '../../../util/git/index.ts';\nimport { escapeRegExp, regEx } from '../../../util/regex.ts';\nimport { uniqueStrings } from '../../../util/string.ts';\nimport { isMultiBaseBranch } from '../process/index.ts';\nimport { getReconfigureBranchName } from '../reconfigure/utils.ts';\n\nasync function cleanUpBranches(\n config: RenovateConfig,\n remainingBranches: string[],\n): Promise<void> {\n if (!config.pruneStaleBranches) {\n logger.debug('Branch/PR pruning is disabled - skipping');\n return;\n }\n // set Git author in case the repository is not initialized yet\n setUserRepoConfig(config);\n\n // in multi-base mode the base branch is encoded in the branch name\n const multiBase = isMultiBaseBranch(config);\n const baseBranchRe = multiBase ? calculateBaseBranchRegex(config) : null;\n\n for (const branchName of remainingBranches) {\n try {\n let baseBranch: string;\n if (multiBase) {\n baseBranch =\n baseBranchRe?.exec(branchName)?.[1] ?? config.defaultBranch!;\n } else {\n // single base branch: branch name doesn't encode it, use the configured one\n baseBranch = config.baseBranches?.[0] ?? config.defaultBranch!;\n }\n const pr = await platform.findPr({\n branchName,\n state: 'open',\n targetBranch: baseBranch,\n });\n const branchIsModified = await scm.isBranchModified(\n branchName,\n baseBranch,\n );\n if (pr) {\n if (branchIsModified) {\n logger.debug(\n { prNo: pr.number, prTitle: pr.title },\n 'Branch is modified - skipping PR autoclosing',\n );\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR title and ensure comment.`);\n } else {\n if (!pr.title.endsWith('- abandoned')) {\n const newPrTitle = `${pr.title} - abandoned`;\n await platform.updatePr({\n number: pr.number,\n prTitle: newPrTitle,\n state: 'open',\n });\n }\n\n await ensureComment({\n number: pr.number,\n topic: 'Autoclosing Skipped',\n content:\n 'This PR has been flagged for autoclosing. However, it is being skipped due to the branch being already modified. Please close/delete it manually or report a bug if you think this is in error.',\n });\n }\n } else if (GlobalConfig.get('dryRun')) {\n logger.info(\n { prNo: pr.number, prTitle: pr.title },\n `DRY-RUN: Would autoclose PR`,\n );\n } else {\n logger.info(\n { branchName, prNo: pr.number, prTitle: pr.title },\n 'Autoclosing PR',\n );\n let newPrTitle = pr.title;\n if (!pr.title.endsWith('- autoclosed')) {\n newPrTitle += ' - autoclosed';\n }\n await platform.updatePr({\n number: pr.number,\n prTitle: newPrTitle,\n state: 'closed',\n });\n await scm.deleteBranch(branchName);\n }\n } else if (branchIsModified) {\n logger.debug(\n { branch: branchName },\n 'Orphan Branch is modified - skipping branch deletion',\n );\n } else if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would delete orphan branch ${branchName}`);\n } else {\n logger.info({ branch: branchName }, `Deleting orphan branch`);\n await scm.deleteBranch(branchName);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.message === 'config-validation') {\n logger.debug(\n 'Cannot prune branch due to collision between tags and branch names',\n );\n } else if (err.message?.includes(\"bad revision 'origin/\")) {\n logger.debug(\n { branchName },\n 'Branch not found on origin when attempting to prune',\n );\n } else if (err.message !== REPOSITORY_CHANGED) {\n logger.warn({ err, branch: branchName }, 'Error pruning branch');\n }\n }\n }\n}\n\n/**\n * Calculates a {RegExp} to extract the base branch from a branch name if base branch patterns is configured.\n * @param config Renovate configuration\n */\nfunction calculateBaseBranchRegex(config: RenovateConfig): RegExp | null {\n if (!config.baseBranchPatterns?.length || !config.baseBranches?.length) {\n return null;\n }\n\n // calculate possible branch prefixes and escape for regex\n const branchPrefixes = [config.branchPrefix, config.branchPrefixOld]\n .filter(isNonEmptyStringAndNotWhitespace)\n .filter(uniqueStrings)\n .map(escapeRegExp);\n\n const baseBranches = config.baseBranches.map(escapeRegExp);\n\n // create regex to extract base branche from branch name\n const baseBranchRe = regEx(\n `^(?:${branchPrefixes.join('|')})(${baseBranches.join('|')})-`,\n );\n\n return baseBranchRe;\n}\n\nexport async function pruneStaleBranches(\n config: RenovateConfig,\n branchList: string[] | null | undefined,\n): Promise<void> {\n logger.debug('Removing any stale branches');\n logger.trace({ config }, `pruneStaleBranches`);\n // TODO: types (#22198)\n logger.debug(`config.repoIsOnboarded=${config.repoIsOnboarded!}`);\n if (!branchList) {\n logger.debug('No branchList');\n return;\n }\n if (!config.defaultBranch) {\n logger.debug('No defaultBranch set - skipping branch pruning');\n return;\n }\n // TODO: types (#22198)\n let renovateBranches = getBranchList().filter(\n (branchName) =>\n branchName.startsWith(config.branchPrefix!) &&\n branchName !== getReconfigureBranchName(config.branchPrefix!),\n );\n if (!renovateBranches?.length) {\n logger.debug('No renovate branches found');\n return;\n }\n logger.debug(\n {\n branchList: branchList?.sort(),\n renovateBranches: renovateBranches?.sort(),\n },\n 'Branch lists',\n );\n // TODO: types (#22198)\n const lockFileBranch = `${config.branchPrefix!}lock-file-maintenance`;\n renovateBranches = renovateBranches.filter(\n (branch) => branch !== lockFileBranch,\n );\n const remainingBranches = renovateBranches.filter(\n (branch) => !branchList.includes(branch),\n );\n logger.debug(`remainingBranches=${String(remainingBranches)}`);\n if (remainingBranches.length === 0) {\n logger.debug('No branches to clean up');\n return;\n }\n\n await cleanUpBranches(config, remainingBranches);\n}\n"],"mappings":"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"}
|
|
@@ -20,10 +20,7 @@ function runRenovateRepoStats(config, prList) {
|
|
|
20
20
|
case "closed":
|
|
21
21
|
prStats.closed += 1;
|
|
22
22
|
break;
|
|
23
|
-
case "open":
|
|
24
|
-
prStats.open += 1;
|
|
25
|
-
break;
|
|
26
|
-
default: break;
|
|
23
|
+
case "open": prStats.open += 1;
|
|
27
24
|
}
|
|
28
25
|
}
|
|
29
26
|
logger.debug({ stats: prStats }, `Renovate repository PR statistics`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-statistics.js","names":[],"sources":["../../../../lib/workers/repository/finalize/repository-statistics.ts"],"sourcesContent":["import type { RenovateConfig } from '../../../config/types.ts';\nimport { addBranchStats } from '../../../instrumentation/reporting.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { Pr } from '../../../modules/platform/index.ts';\nimport {\n getCache,\n isCacheModified,\n} from '../../../util/cache/repository/index.ts';\nimport type {\n BranchCache,\n BranchUpgradeCache,\n} from '../../../util/cache/repository/types.ts';\nimport { getInheritedOrGlobal } from '../../../util/common.ts';\nimport type {\n BaseBranchMetadata,\n BaseBranchUpdateSummary,\n BranchMetadata,\n BranchSummary,\n ManagerUpdateSummary,\n UpdateSummary,\n} from '../../types.ts';\n\nexport function runRenovateRepoStats(\n config: RenovateConfig,\n prList: Pr[],\n): void {\n const prStats = { total: 0, open: 0, closed: 0, merged: 0 };\n\n for (const pr of prList) {\n if (\n pr.title === 'Configure Renovate' ||\n pr.title === getInheritedOrGlobal('onboardingPrTitle')\n ) {\n continue;\n }\n prStats.total += 1;\n switch (pr.state) {\n case 'merged':\n prStats.merged += 1;\n break;\n case 'closed':\n prStats.closed += 1;\n break;\n case 'open':\n prStats.open += 1;\n break;\n default:\n break;\n }\n }\n logger.debug({ stats: prStats }, `Renovate repository PR statistics`);\n}\n\nfunction branchCacheToMetadata({\n automerge,\n baseBranch,\n baseBranchSha,\n branchName,\n isModified,\n pristine: isPristine,\n sha: branchSha,\n}: BranchCache): BranchMetadata {\n return {\n automerge,\n baseBranch,\n baseBranchSha,\n branchName,\n branchSha,\n isModified,\n isPristine,\n };\n}\n\nfunction filterDependencyDashboardData(\n branches: BranchCache[],\n): Partial<BranchCache>[] {\n const branchesFiltered: Partial<BranchCache>[] = [];\n for (const branch of branches) {\n const upgradesFiltered: Partial<BranchUpgradeCache>[] = [];\n const { branchName, prNo, prTitle, result, upgrades, prBlockedBy } = branch;\n\n for (const upgrade of upgrades ?? []) {\n const {\n datasource,\n depName,\n displayPending,\n fixedVersion,\n currentVersion,\n currentValue,\n currentDigest,\n newValue,\n newVersion,\n newDigest,\n packageFile,\n updateType,\n packageName,\n } = upgrade;\n\n const filteredUpgrade: Partial<BranchUpgradeCache> = {\n datasource,\n depName,\n displayPending,\n fixedVersion,\n currentVersion,\n currentValue,\n currentDigest,\n newValue,\n newVersion,\n newDigest,\n packageFile,\n updateType,\n packageName,\n };\n upgradesFiltered.push(filteredUpgrade);\n }\n\n const filteredBranch: Partial<BranchCache> = {\n branchName,\n prNo,\n prTitle,\n result,\n prBlockedBy,\n upgrades: upgradesFiltered,\n };\n branchesFiltered.push(filteredBranch);\n }\n\n return branchesFiltered;\n}\n\nexport function runBranchSummary(config: RenovateConfig): void {\n const defaultBranch = config.defaultBranch;\n const { scan, branches } = getCache();\n\n const baseMetadata: BaseBranchMetadata[] = [];\n for (const [branchName, cached] of Object.entries(scan ?? {})) {\n baseMetadata.push({ branchName, sha: cached.sha });\n }\n\n const branchMetadata: BranchMetadata[] = [];\n const inactiveBranches: string[] = [];\n\n for (const branch of branches ?? []) {\n if (branch.sha) {\n branchMetadata.push(branchCacheToMetadata(branch));\n } else {\n inactiveBranches.push(branch.branchName);\n }\n }\n\n const res: BranchSummary = {\n cacheModified: isCacheModified(),\n baseBranches: baseMetadata,\n branches: branchMetadata,\n defaultBranch,\n inactiveBranches,\n };\n\n logger.debug(res, 'Branch summary');\n\n if (branches?.length) {\n const branchesInformation = filterDependencyDashboardData(branches);\n addBranchStats(config, branchesInformation);\n logger.debug({ branchesInformation }, 'branches info extended');\n\n const updateSummary = getUpdateSummary(branches);\n logger.debug({ updateSummary }, 'Updates summary');\n }\n}\n\nexport function getUpdateSummary(branches: BranchCache[]): UpdateSummary {\n const summaryByBase = new Map<string, BaseBranchUpdateSummary>();\n\n for (const branch of branches) {\n const baseBranch = branch.baseBranch ?? '';\n let entry = summaryByBase.get(baseBranch);\n if (!entry) {\n entry = {\n baseBranch,\n total: 0,\n vulnerabilityAlert: 0,\n updates: {},\n managers: {},\n };\n summaryByBase.set(baseBranch, entry);\n }\n for (const upgrade of branch.upgrades ?? []) {\n const { updateType } = upgrade;\n if (updateType) {\n entry.total += 1;\n if (upgrade.isVulnerabilityAlert) {\n entry.vulnerabilityAlert += 1;\n }\n\n entry.updates[updateType] = (entry.updates[updateType] ?? 0) + 1;\n\n const manager = upgrade.manager ?? '';\n let managerEntry: ManagerUpdateSummary | undefined =\n entry.managers[manager];\n if (!managerEntry) {\n managerEntry = { total: 0, vulnerabilityAlert: 0, updates: {} };\n entry.managers[manager] = managerEntry;\n }\n managerEntry.total += 1;\n if (upgrade.isVulnerabilityAlert) {\n managerEntry.vulnerabilityAlert += 1;\n }\n managerEntry.updates[updateType] =\n (managerEntry.updates[updateType] ?? 0) + 1;\n } else {\n logger.debug(\n { upgrade },\n 'Found an upgrade without an updateType, which should not be possible',\n );\n }\n }\n }\n\n return Array.from(summaryByBase.values());\n}\n"],"mappings":";;;;;AAsBA,SAAgB,qBACd,QACA,QACM;CACN,MAAM,UAAU;EAAE,OAAO;EAAG,MAAM;EAAG,QAAQ;EAAG,QAAQ;CAAE;CAE1D,KAAK,MAAM,MAAM,QAAQ;EACvB,IACE,GAAG,UAAU,wBACb,GAAG,UAAU,qBAAqB,mBAAmB,GAErD;EAEF,QAAQ,SAAS;EACjB,QAAQ,GAAG,OAAX;GACE,KAAK;IACH,QAAQ,UAAU;IAClB;GACF,KAAK;IACH,QAAQ,UAAU;IAClB;GACF,KAAK
|
|
1
|
+
{"version":3,"file":"repository-statistics.js","names":[],"sources":["../../../../lib/workers/repository/finalize/repository-statistics.ts"],"sourcesContent":["import type { RenovateConfig } from '../../../config/types.ts';\nimport { addBranchStats } from '../../../instrumentation/reporting.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { Pr } from '../../../modules/platform/index.ts';\nimport {\n getCache,\n isCacheModified,\n} from '../../../util/cache/repository/index.ts';\nimport type {\n BranchCache,\n BranchUpgradeCache,\n} from '../../../util/cache/repository/types.ts';\nimport { getInheritedOrGlobal } from '../../../util/common.ts';\nimport type {\n BaseBranchMetadata,\n BaseBranchUpdateSummary,\n BranchMetadata,\n BranchSummary,\n ManagerUpdateSummary,\n UpdateSummary,\n} from '../../types.ts';\n\nexport function runRenovateRepoStats(\n config: RenovateConfig,\n prList: Pr[],\n): void {\n const prStats = { total: 0, open: 0, closed: 0, merged: 0 };\n\n for (const pr of prList) {\n if (\n pr.title === 'Configure Renovate' ||\n pr.title === getInheritedOrGlobal('onboardingPrTitle')\n ) {\n continue;\n }\n prStats.total += 1;\n switch (pr.state) {\n case 'merged':\n prStats.merged += 1;\n break;\n case 'closed':\n prStats.closed += 1;\n break;\n case 'open':\n prStats.open += 1;\n break;\n default:\n break;\n }\n }\n logger.debug({ stats: prStats }, `Renovate repository PR statistics`);\n}\n\nfunction branchCacheToMetadata({\n automerge,\n baseBranch,\n baseBranchSha,\n branchName,\n isModified,\n pristine: isPristine,\n sha: branchSha,\n}: BranchCache): BranchMetadata {\n return {\n automerge,\n baseBranch,\n baseBranchSha,\n branchName,\n branchSha,\n isModified,\n isPristine,\n };\n}\n\nfunction filterDependencyDashboardData(\n branches: BranchCache[],\n): Partial<BranchCache>[] {\n const branchesFiltered: Partial<BranchCache>[] = [];\n for (const branch of branches) {\n const upgradesFiltered: Partial<BranchUpgradeCache>[] = [];\n const { branchName, prNo, prTitle, result, upgrades, prBlockedBy } = branch;\n\n for (const upgrade of upgrades ?? []) {\n const {\n datasource,\n depName,\n displayPending,\n fixedVersion,\n currentVersion,\n currentValue,\n currentDigest,\n newValue,\n newVersion,\n newDigest,\n packageFile,\n updateType,\n packageName,\n } = upgrade;\n\n const filteredUpgrade: Partial<BranchUpgradeCache> = {\n datasource,\n depName,\n displayPending,\n fixedVersion,\n currentVersion,\n currentValue,\n currentDigest,\n newValue,\n newVersion,\n newDigest,\n packageFile,\n updateType,\n packageName,\n };\n upgradesFiltered.push(filteredUpgrade);\n }\n\n const filteredBranch: Partial<BranchCache> = {\n branchName,\n prNo,\n prTitle,\n result,\n prBlockedBy,\n upgrades: upgradesFiltered,\n };\n branchesFiltered.push(filteredBranch);\n }\n\n return branchesFiltered;\n}\n\nexport function runBranchSummary(config: RenovateConfig): void {\n const defaultBranch = config.defaultBranch;\n const { scan, branches } = getCache();\n\n const baseMetadata: BaseBranchMetadata[] = [];\n for (const [branchName, cached] of Object.entries(scan ?? {})) {\n baseMetadata.push({ branchName, sha: cached.sha });\n }\n\n const branchMetadata: BranchMetadata[] = [];\n const inactiveBranches: string[] = [];\n\n for (const branch of branches ?? []) {\n if (branch.sha) {\n branchMetadata.push(branchCacheToMetadata(branch));\n } else {\n inactiveBranches.push(branch.branchName);\n }\n }\n\n const res: BranchSummary = {\n cacheModified: isCacheModified(),\n baseBranches: baseMetadata,\n branches: branchMetadata,\n defaultBranch,\n inactiveBranches,\n };\n\n logger.debug(res, 'Branch summary');\n\n if (branches?.length) {\n const branchesInformation = filterDependencyDashboardData(branches);\n addBranchStats(config, branchesInformation);\n logger.debug({ branchesInformation }, 'branches info extended');\n\n const updateSummary = getUpdateSummary(branches);\n logger.debug({ updateSummary }, 'Updates summary');\n }\n}\n\nexport function getUpdateSummary(branches: BranchCache[]): UpdateSummary {\n const summaryByBase = new Map<string, BaseBranchUpdateSummary>();\n\n for (const branch of branches) {\n const baseBranch = branch.baseBranch ?? '';\n let entry = summaryByBase.get(baseBranch);\n if (!entry) {\n entry = {\n baseBranch,\n total: 0,\n vulnerabilityAlert: 0,\n updates: {},\n managers: {},\n };\n summaryByBase.set(baseBranch, entry);\n }\n for (const upgrade of branch.upgrades ?? []) {\n const { updateType } = upgrade;\n if (updateType) {\n entry.total += 1;\n if (upgrade.isVulnerabilityAlert) {\n entry.vulnerabilityAlert += 1;\n }\n\n entry.updates[updateType] = (entry.updates[updateType] ?? 0) + 1;\n\n const manager = upgrade.manager ?? '';\n let managerEntry: ManagerUpdateSummary | undefined =\n entry.managers[manager];\n if (!managerEntry) {\n managerEntry = { total: 0, vulnerabilityAlert: 0, updates: {} };\n entry.managers[manager] = managerEntry;\n }\n managerEntry.total += 1;\n if (upgrade.isVulnerabilityAlert) {\n managerEntry.vulnerabilityAlert += 1;\n }\n managerEntry.updates[updateType] =\n (managerEntry.updates[updateType] ?? 0) + 1;\n } else {\n logger.debug(\n { upgrade },\n 'Found an upgrade without an updateType, which should not be possible',\n );\n }\n }\n }\n\n return Array.from(summaryByBase.values());\n}\n"],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ async function renovateRepository(repoConfig, canRetry = true) {
|
|
|
51
51
|
logger.debug(`Using localDir: ${localDir}`);
|
|
52
52
|
config = await initRepo(config);
|
|
53
53
|
addSplit("init");
|
|
54
|
-
} catch (err)
|
|
54
|
+
} catch (err) /* istanbul ignore next */ {
|
|
55
55
|
setMeta({ repository: config.repository });
|
|
56
56
|
const errorRes = await handleError(config, err);
|
|
57
57
|
if ([
|
|
@@ -90,12 +90,15 @@ async function renovateRepository(repoConfig, canRetry = true) {
|
|
|
90
90
|
return await renovateRepository(repoConfig, false);
|
|
91
91
|
}
|
|
92
92
|
logger.debug(`Automerged but already retried once`);
|
|
93
|
-
} else
|
|
93
|
+
} else {
|
|
94
|
+
const configMigrationRes = await configMigration(config, branchList);
|
|
95
|
+
await ensureDependencyDashboard(config, branches, packageFiles, configMigrationRes);
|
|
96
|
+
}
|
|
94
97
|
await finalizeRepo(config, branchList, repoConfig);
|
|
95
98
|
repoResult = processResult(config, res);
|
|
96
99
|
}
|
|
97
100
|
printRepositoryProblems(config.repository);
|
|
98
|
-
} catch (err)
|
|
101
|
+
} catch (err) /* istanbul ignore next */ {
|
|
99
102
|
setMeta({ repository: config.repository });
|
|
100
103
|
const errorRes = await handleError(config, err);
|
|
101
104
|
if ([
|
|
@@ -108,12 +111,12 @@ async function renovateRepository(repoConfig, canRetry = true) {
|
|
|
108
111
|
else logger.debug({ error }, "Skipping the rest to the Renovate run due to error in `init` phase");
|
|
109
112
|
if (localDir && !repoConfig.persistRepoData) try {
|
|
110
113
|
await deleteLocalFile(".");
|
|
111
|
-
} catch (err)
|
|
114
|
+
} catch (err) /* istanbul ignore if */ {
|
|
112
115
|
logger.warn({ err }, "localDir deletion error");
|
|
113
116
|
}
|
|
114
117
|
try {
|
|
115
118
|
await rmCache(privateCacheDir());
|
|
116
|
-
} catch (err)
|
|
119
|
+
} catch (err) /* istanbul ignore if */ {
|
|
117
120
|
logger.warn({ err }, "privateCacheDir deletion error");
|
|
118
121
|
}
|
|
119
122
|
const splits = getSplits();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/workers/repository/index.ts"],"sourcesContent":["import { GlobalConfig } from '../../config/global.ts';\nimport { applySecretsAndVariablesToConfig } from '../../config/secrets.ts';\nimport type { RenovateConfig } from '../../config/types.ts';\nimport {\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_FORKED,\n REPOSITORY_NO_CONFIG,\n} from '../../constants/error-messages.ts';\nimport { pkg } from '../../expose.ts';\nimport { instrument } from '../../instrumentation/index.ts';\nimport { addExtractionStats } from '../../instrumentation/reporting.ts';\nimport { ATTR_RENOVATE_SPLIT } from '../../instrumentation/types.ts';\nimport { logger, setMeta } from '../../logger/index.ts';\nimport { resetRepositoryLogLevelRemaps } from '../../logger/remap.ts';\nimport { getInheritedOrGlobal } from '../../util/common.ts';\nimport { removeDanglingContainers } from '../../util/exec/docker/index.ts';\nimport {\n deleteLocalFile,\n ensureDir,\n privateCacheDir,\n rmCache,\n} from '../../util/fs/index.ts';\nimport { isCloned } from '../../util/git/index.ts';\nimport { detectSemanticCommits } from '../../util/git/semantic.ts';\nimport * as queue from '../../util/http/queue.ts';\nimport * as throttle from '../../util/http/throttle.ts';\nimport { addSplit, getSplits, splitInit } from '../../util/split.ts';\nimport {\n AbandonedPackageStats,\n DatasourceCacheStats,\n GetDatasourceReleasesStats,\n GitOperationStats,\n HttpCacheStats,\n HttpStats,\n LookupStats,\n ObsoleteCacheHitLogger,\n PackageCacheStats,\n} from '../../util/stats.ts';\nimport { setBranchCache } from './cache.ts';\nimport { extractRepoProblems } from './common.ts';\nimport { configMigration } from './config-migration/index.ts';\nimport { ensureDependencyDashboard } from './dependency-dashboard.ts';\nimport handleError from './error.ts';\nimport { finalizeRepo } from './finalize/index.ts';\nimport { pruneStaleBranches } from './finalize/prune.ts';\nimport { initRepo } from './init/index.ts';\nimport { OnboardingState } from './onboarding/common.ts';\nimport { ensureOnboardingPr } from './onboarding/pr/index.ts';\nimport type { ExtractResult } from './process/extract-update.ts';\nimport { extractDependencies, updateRepo } from './process/index.ts';\nimport type { ProcessResult } from './result.ts';\nimport { processResult } from './result.ts';\n\n// istanbul ignore next\nexport async function renovateRepository(\n repoConfig: RenovateConfig,\n canRetry = true,\n): Promise<ProcessResult | undefined> {\n splitInit();\n\n let repoResult: ProcessResult | undefined;\n const { config, localDir, error } = await instrument(\n 'init',\n async (): Promise<{\n config: RenovateConfig;\n localDir: string;\n error?: Error;\n }> => {\n let config = GlobalConfig.set(\n applySecretsAndVariablesToConfig({\n config: repoConfig,\n deleteVariables: false,\n deleteSecrets: false,\n }),\n );\n await removeDanglingContainers();\n setMeta({ repository: config.repository });\n logger.info({ renovateVersion: pkg.version }, 'Repository started');\n logger.trace({ config });\n queue.clear();\n throttle.clear();\n const localDir = GlobalConfig.get('localDir');\n\n try {\n await ensureDir(localDir);\n logger.debug(`Using localDir: ${localDir}`);\n config = await initRepo(config);\n addSplit('init');\n } catch (err) /* istanbul ignore next */ {\n setMeta({ repository: config.repository });\n const errorRes = await handleError(config, err);\n const pruneWhenErrors = [\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_FORKED,\n REPOSITORY_NO_CONFIG,\n ];\n if (pruneWhenErrors.includes(errorRes)) {\n await pruneStaleBranches(config, []);\n }\n repoResult = processResult(config, errorRes);\n\n return { config, localDir, error: err };\n }\n\n return { config, localDir };\n },\n {\n attributes: {\n [ATTR_RENOVATE_SPLIT]: 'init',\n },\n },\n );\n\n // only continue if init stage was successful\n if (error === undefined) {\n try {\n const performExtract =\n config.repoIsOnboarded! ||\n !OnboardingState.onboardingCacheValid ||\n OnboardingState.prUpdateRequested;\n const extractResult = performExtract\n ? await extractDependencies(config)\n : emptyExtract();\n addExtractionStats(config, extractResult);\n\n const { branches, branchList, packageFiles } = extractResult;\n\n if (config.semanticCommits === 'auto') {\n config.semanticCommits = await detectSemanticCommits();\n }\n\n if (\n GlobalConfig.get('dryRun') !== 'lookup' &&\n GlobalConfig.get('dryRun') !== 'extract'\n ) {\n await instrument(\n 'onboarding',\n () => ensureOnboardingPr(config, packageFiles, branches),\n {\n attributes: {\n [ATTR_RENOVATE_SPLIT]: 'onboarding',\n },\n },\n );\n addSplit('onboarding');\n const res = await instrument(\n 'update',\n () => updateRepo(config, branches),\n {\n attributes: {\n [ATTR_RENOVATE_SPLIT]: 'update',\n },\n },\n );\n setMeta({ repository: config.repository });\n addSplit('update');\n if (performExtract) {\n await setBranchCache(branches); // update branch cache if performed extraction\n }\n if (res === 'automerged') {\n if (canRetry) {\n logger.info('Restarting repository job after automerge result');\n const recursiveRes = await renovateRepository(repoConfig, false);\n return recursiveRes;\n }\n logger.debug(`Automerged but already retried once`);\n } else {\n const configMigrationRes = await configMigration(config, branchList);\n await ensureDependencyDashboard(\n config,\n branches,\n packageFiles,\n configMigrationRes,\n );\n }\n await finalizeRepo(config, branchList, repoConfig);\n // TODO #22198\n repoResult = processResult(config, res!);\n }\n printRepositoryProblems(config.repository);\n } catch (err) /* istanbul ignore next */ {\n setMeta({ repository: config.repository });\n const errorRes = await handleError(config, err);\n const pruneWhenErrors = [\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_FORKED,\n REPOSITORY_NO_CONFIG,\n ];\n if (pruneWhenErrors.includes(errorRes)) {\n await pruneStaleBranches(config, []);\n }\n repoResult = processResult(config, errorRes);\n }\n } else {\n logger.debug(\n { error },\n 'Skipping the rest to the Renovate run due to error in `init` phase',\n );\n }\n\n if (localDir && !repoConfig.persistRepoData) {\n try {\n await deleteLocalFile('.');\n } catch (err) /* istanbul ignore if */ {\n logger.warn({ err }, 'localDir deletion error');\n }\n }\n try {\n await rmCache(privateCacheDir());\n } catch (err) /* istanbul ignore if */ {\n logger.warn({ err }, 'privateCacheDir deletion error');\n }\n const splits = getSplits();\n logger.debug(splits, 'Repository timing splits (milliseconds)');\n PackageCacheStats.report();\n DatasourceCacheStats.report();\n HttpStats.report();\n HttpCacheStats.report();\n LookupStats.report();\n GetDatasourceReleasesStats.report();\n ObsoleteCacheHitLogger.report();\n AbandonedPackageStats.report();\n GitOperationStats.report();\n const cloned = isCloned();\n /* v8 ignore next 11 -- coverage not required of these `undefined` checks, as we're happy receiving an `undefined` in the logs */\n logger.info(\n {\n cloned,\n durationMs: splits.total,\n result: repoResult?.res,\n status: repoResult?.status,\n enabled: repoResult?.enabled,\n onboarded: repoResult?.onboarded,\n },\n 'Repository finished',\n );\n resetRepositoryLogLevelRemaps();\n return repoResult;\n}\n\n// istanbul ignore next: renovateRepository is ignored\nfunction emptyExtract(): ExtractResult {\n return instrument(\n 'extract',\n () => {\n addSplit('extract');\n addSplit('lookup');\n return {\n branches: [],\n branchList: [getInheritedOrGlobal('onboardingBranch')!], // to prevent auto closing\n packageFiles: {},\n };\n },\n {\n attributes: {\n [ATTR_RENOVATE_SPLIT]: 'extract',\n },\n },\n );\n}\n\nexport function printRepositoryProblems(repository: string | undefined): void {\n const repoProblems = extractRepoProblems(repository);\n if (repoProblems.size) {\n logger.debug(\n { repoProblems: Array.from(repoProblems) },\n 'repository problems',\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/workers/repository/index.ts"],"sourcesContent":["import { GlobalConfig } from '../../config/global.ts';\nimport { applySecretsAndVariablesToConfig } from '../../config/secrets.ts';\nimport type { RenovateConfig } from '../../config/types.ts';\nimport {\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_FORKED,\n REPOSITORY_NO_CONFIG,\n} from '../../constants/error-messages.ts';\nimport { pkg } from '../../expose.ts';\nimport { instrument } from '../../instrumentation/index.ts';\nimport { addExtractionStats } from '../../instrumentation/reporting.ts';\nimport { ATTR_RENOVATE_SPLIT } from '../../instrumentation/types.ts';\nimport { logger, setMeta } from '../../logger/index.ts';\nimport { resetRepositoryLogLevelRemaps } from '../../logger/remap.ts';\nimport { getInheritedOrGlobal } from '../../util/common.ts';\nimport { removeDanglingContainers } from '../../util/exec/docker/index.ts';\nimport {\n deleteLocalFile,\n ensureDir,\n privateCacheDir,\n rmCache,\n} from '../../util/fs/index.ts';\nimport { isCloned } from '../../util/git/index.ts';\nimport { detectSemanticCommits } from '../../util/git/semantic.ts';\nimport * as queue from '../../util/http/queue.ts';\nimport * as throttle from '../../util/http/throttle.ts';\nimport { addSplit, getSplits, splitInit } from '../../util/split.ts';\nimport {\n AbandonedPackageStats,\n DatasourceCacheStats,\n GetDatasourceReleasesStats,\n GitOperationStats,\n HttpCacheStats,\n HttpStats,\n LookupStats,\n ObsoleteCacheHitLogger,\n PackageCacheStats,\n} from '../../util/stats.ts';\nimport { setBranchCache } from './cache.ts';\nimport { extractRepoProblems } from './common.ts';\nimport { configMigration } from './config-migration/index.ts';\nimport { ensureDependencyDashboard } from './dependency-dashboard.ts';\nimport handleError from './error.ts';\nimport { finalizeRepo } from './finalize/index.ts';\nimport { pruneStaleBranches } from './finalize/prune.ts';\nimport { initRepo } from './init/index.ts';\nimport { OnboardingState } from './onboarding/common.ts';\nimport { ensureOnboardingPr } from './onboarding/pr/index.ts';\nimport type { ExtractResult } from './process/extract-update.ts';\nimport { extractDependencies, updateRepo } from './process/index.ts';\nimport type { ProcessResult } from './result.ts';\nimport { processResult } from './result.ts';\n\n// istanbul ignore next\nexport async function renovateRepository(\n repoConfig: RenovateConfig,\n canRetry = true,\n): Promise<ProcessResult | undefined> {\n splitInit();\n\n let repoResult: ProcessResult | undefined;\n const { config, localDir, error } = await instrument(\n 'init',\n async (): Promise<{\n config: RenovateConfig;\n localDir: string;\n error?: Error;\n }> => {\n let config = GlobalConfig.set(\n applySecretsAndVariablesToConfig({\n config: repoConfig,\n deleteVariables: false,\n deleteSecrets: false,\n }),\n );\n await removeDanglingContainers();\n setMeta({ repository: config.repository });\n logger.info({ renovateVersion: pkg.version }, 'Repository started');\n logger.trace({ config });\n queue.clear();\n throttle.clear();\n const localDir = GlobalConfig.get('localDir');\n\n try {\n await ensureDir(localDir);\n logger.debug(`Using localDir: ${localDir}`);\n config = await initRepo(config);\n addSplit('init');\n } catch (err) /* istanbul ignore next */ {\n setMeta({ repository: config.repository });\n const errorRes = await handleError(config, err);\n const pruneWhenErrors = [\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_FORKED,\n REPOSITORY_NO_CONFIG,\n ];\n if (pruneWhenErrors.includes(errorRes)) {\n await pruneStaleBranches(config, []);\n }\n repoResult = processResult(config, errorRes);\n\n return { config, localDir, error: err };\n }\n\n return { config, localDir };\n },\n {\n attributes: {\n [ATTR_RENOVATE_SPLIT]: 'init',\n },\n },\n );\n\n // only continue if init stage was successful\n if (error === undefined) {\n try {\n const performExtract =\n config.repoIsOnboarded! ||\n !OnboardingState.onboardingCacheValid ||\n OnboardingState.prUpdateRequested;\n const extractResult = performExtract\n ? await extractDependencies(config)\n : emptyExtract();\n addExtractionStats(config, extractResult);\n\n const { branches, branchList, packageFiles } = extractResult;\n\n if (config.semanticCommits === 'auto') {\n config.semanticCommits = await detectSemanticCommits();\n }\n\n if (\n GlobalConfig.get('dryRun') !== 'lookup' &&\n GlobalConfig.get('dryRun') !== 'extract'\n ) {\n await instrument(\n 'onboarding',\n () => ensureOnboardingPr(config, packageFiles, branches),\n {\n attributes: {\n [ATTR_RENOVATE_SPLIT]: 'onboarding',\n },\n },\n );\n addSplit('onboarding');\n const res = await instrument(\n 'update',\n () => updateRepo(config, branches),\n {\n attributes: {\n [ATTR_RENOVATE_SPLIT]: 'update',\n },\n },\n );\n setMeta({ repository: config.repository });\n addSplit('update');\n if (performExtract) {\n await setBranchCache(branches); // update branch cache if performed extraction\n }\n if (res === 'automerged') {\n if (canRetry) {\n logger.info('Restarting repository job after automerge result');\n const recursiveRes = await renovateRepository(repoConfig, false);\n return recursiveRes;\n }\n logger.debug(`Automerged but already retried once`);\n } else {\n const configMigrationRes = await configMigration(config, branchList);\n await ensureDependencyDashboard(\n config,\n branches,\n packageFiles,\n configMigrationRes,\n );\n }\n await finalizeRepo(config, branchList, repoConfig);\n // TODO #22198\n repoResult = processResult(config, res!);\n }\n printRepositoryProblems(config.repository);\n } catch (err) /* istanbul ignore next */ {\n setMeta({ repository: config.repository });\n const errorRes = await handleError(config, err);\n const pruneWhenErrors = [\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_FORKED,\n REPOSITORY_NO_CONFIG,\n ];\n if (pruneWhenErrors.includes(errorRes)) {\n await pruneStaleBranches(config, []);\n }\n repoResult = processResult(config, errorRes);\n }\n } else {\n logger.debug(\n { error },\n 'Skipping the rest to the Renovate run due to error in `init` phase',\n );\n }\n\n if (localDir && !repoConfig.persistRepoData) {\n try {\n await deleteLocalFile('.');\n } catch (err) /* istanbul ignore if */ {\n logger.warn({ err }, 'localDir deletion error');\n }\n }\n try {\n await rmCache(privateCacheDir());\n } catch (err) /* istanbul ignore if */ {\n logger.warn({ err }, 'privateCacheDir deletion error');\n }\n const splits = getSplits();\n logger.debug(splits, 'Repository timing splits (milliseconds)');\n PackageCacheStats.report();\n DatasourceCacheStats.report();\n HttpStats.report();\n HttpCacheStats.report();\n LookupStats.report();\n GetDatasourceReleasesStats.report();\n ObsoleteCacheHitLogger.report();\n AbandonedPackageStats.report();\n GitOperationStats.report();\n const cloned = isCloned();\n /* v8 ignore next 11 -- coverage not required of these `undefined` checks, as we're happy receiving an `undefined` in the logs */\n logger.info(\n {\n cloned,\n durationMs: splits.total,\n result: repoResult?.res,\n status: repoResult?.status,\n enabled: repoResult?.enabled,\n onboarded: repoResult?.onboarded,\n },\n 'Repository finished',\n );\n resetRepositoryLogLevelRemaps();\n return repoResult;\n}\n\n// istanbul ignore next: renovateRepository is ignored\nfunction emptyExtract(): ExtractResult {\n return instrument(\n 'extract',\n () => {\n addSplit('extract');\n addSplit('lookup');\n return {\n branches: [],\n branchList: [getInheritedOrGlobal('onboardingBranch')!], // to prevent auto closing\n packageFiles: {},\n };\n },\n {\n attributes: {\n [ATTR_RENOVATE_SPLIT]: 'extract',\n },\n },\n );\n}\n\nexport function printRepositoryProblems(repository: string | undefined): void {\n const repoProblems = extractRepoProblems(repository);\n if (repoProblems.size) {\n logger.debug(\n { repoProblems: Array.from(repoProblems) },\n 'repository problems',\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -60,7 +60,7 @@ async function detectVulnerabilityAlerts(input) {
|
|
|
60
60
|
let prBodyNotes = [];
|
|
61
61
|
try {
|
|
62
62
|
prBodyNotes = val.advisories.flatMap((advisory) => generatePrBodyNotes(advisory));
|
|
63
|
-
} catch (err)
|
|
63
|
+
} catch (err) /* v8 ignore next -- defensive: note generation from already-parsed advisories does not throw in specs */ {
|
|
64
64
|
logger.warn({ err }, "Error generating vulnerability PR notes");
|
|
65
65
|
}
|
|
66
66
|
let matchRule = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vulnerability.js","names":["allVersioning.get"],"sources":["../../../../lib/workers/repository/init/vulnerability.ts"],"sourcesContent":["import is from '@sindresorhus/is';\nimport type { PackageRule, RenovateConfig } from '../../../config/types.ts';\nimport { NO_VULNERABILITY_ALERTS } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { getDefaultVersioning } from '../../../modules/datasource/common.ts';\nimport { GithubTagsDatasource } from '../../../modules/datasource/github-tags/index.ts';\nimport { MavenDatasource } from '../../../modules/datasource/maven/index.ts';\nimport { NugetDatasource } from '../../../modules/datasource/nuget/index.ts';\nimport type {\n Ecosystem,\n SecurityAdvisory,\n} from '../../../modules/platform/github/schema.ts';\nimport { platform } from '../../../modules/platform/index.ts';\nimport * as allVersioning from '../../../modules/versioning/index.ts';\nimport { sanitizeMarkdown } from '../../../util/markdown.ts';\nimport { escapeRegExp, regEx } from '../../../util/regex.ts';\nimport { titleCase } from '../../../util/string.ts';\nimport { githubEcosystemToDatasource } from '../../../util/vulnerability/ecosystem.ts';\nimport {\n getFixedVersionConstraint,\n getHighestVulnerabilitySeverity,\n} from '../../../util/vulnerability/utils.ts';\n\ntype DependencyName = string;\n\ntype CombinedAlert = Partial<\n Record<\n Ecosystem,\n Record<\n DependencyName,\n {\n advisories: SecurityAdvisory[];\n firstPatchedVersion?: string;\n severity?: string;\n }\n >\n >\n>;\n\nexport function getFixedVersionByDatasource(\n fixedVersion: string,\n datasource: string,\n): string {\n return getFixedVersionConstraint(fixedVersion, datasource);\n}\n\n// TODO can return `null` and `undefined` (#22198)\nexport async function detectVulnerabilityAlerts(\n input: RenovateConfig,\n): Promise<RenovateConfig> {\n if (!input?.vulnerabilityAlerts) {\n return input;\n }\n if (input.vulnerabilityAlerts.enabled === false) {\n logger.debug('Vulnerability alerts are disabled');\n return input;\n }\n const alerts = await platform.getVulnerabilityAlerts?.();\n if (!alerts?.length) {\n logger.debug('No vulnerability alerts found');\n if (input.vulnerabilityAlertsOnly) {\n throw new Error(NO_VULNERABILITY_ALERTS);\n }\n return input;\n }\n const config = { ...input };\n const combinedAlerts: CombinedAlert = {};\n for (const alert of alerts) {\n try {\n if (alert.dismissed_reason) {\n continue;\n }\n if (!alert.security_vulnerability?.first_patched_version) {\n logger.debug(\n { alert },\n 'Vulnerability alert has no firstPatchedVersion - skipping',\n );\n continue;\n }\n const ecosystem = alert.security_vulnerability.package.ecosystem;\n const datasources = githubEcosystemToDatasource[ecosystem];\n const depName = alert.security_vulnerability.package.name;\n const firstPatchedVersion =\n alert.security_vulnerability.first_patched_version.identifier;\n const advisory = alert.security_advisory;\n\n // Keying off of ecosystem instead of datasource because now a single ecosystem (such as maven) could have\n // multiple datasources.\n combinedAlerts[ecosystem] ??= {};\n combinedAlerts[ecosystem][depName] ??= {\n advisories: [],\n };\n const alertDetails = combinedAlerts[ecosystem][depName];\n alertDetails.advisories.push(advisory);\n alertDetails.severity = getHighestVulnerabilitySeverity(\n { vulnerabilitySeverity: alertDetails.severity },\n { vulnerabilitySeverity: alert.security_vulnerability.severity },\n );\n const versioningApi = allVersioning.get(\n getDefaultVersioning(datasources[0]),\n );\n if (versioningApi.isVersion(firstPatchedVersion)) {\n if (\n !alertDetails.firstPatchedVersion ||\n versioningApi.isGreaterThan(\n firstPatchedVersion,\n alertDetails.firstPatchedVersion,\n )\n ) {\n alertDetails.firstPatchedVersion = firstPatchedVersion;\n }\n } else {\n logger.debug(`Invalid firstPatchedVersion: ${firstPatchedVersion}`);\n }\n } catch (err) {\n logger.warn({ err }, 'Error parsing vulnerability alert');\n }\n }\n const alertPackageRules: PackageRule[] = [];\n config.remediations = {};\n for (const [ecosystem, dependencies] of Object.entries(combinedAlerts)) {\n const matchDatasources =\n githubEcosystemToDatasource[ecosystem as Ecosystem];\n const primaryDatasource = matchDatasources[0];\n for (const [depName, val] of Object.entries(dependencies)) {\n if (!val.firstPatchedVersion) {\n continue;\n }\n\n let prBodyNotes: string[] = [];\n try {\n prBodyNotes = val.advisories.flatMap((advisory) =>\n generatePrBodyNotes(advisory),\n );\n } catch (err) /* v8 ignore next -- defensive: note generation from already-parsed advisories does not throw in specs */ {\n logger.warn({ err }, 'Error generating vulnerability PR notes');\n }\n\n let matchRule: PackageRule = {\n matchDatasources,\n matchPackageNames: [depName],\n };\n\n let matchCurrentVersion = `< ${val.firstPatchedVersion}`;\n if (\n primaryDatasource === MavenDatasource.id ||\n primaryDatasource === NugetDatasource.id\n ) {\n matchCurrentVersion = `(,${val.firstPatchedVersion})`;\n } else if (primaryDatasource === GithubTagsDatasource.id) {\n matchCurrentVersion = `!/^${escapeRegExp(val.firstPatchedVersion)}$/`;\n }\n\n matchRule = {\n ...matchRule,\n matchCurrentVersion,\n vulnerabilityFixVersion: val.firstPatchedVersion,\n vulnerabilitySeverity: val.severity,\n prBodyNotes,\n isVulnerabilityAlert: true,\n force: {\n ...config.vulnerabilityAlerts,\n },\n };\n alertPackageRules.push(matchRule);\n }\n }\n logger.debug({ alertPackageRules }, 'alert package rules');\n config.packageRules = (config.packageRules ?? []).concat(alertPackageRules);\n return config;\n}\n\nfunction generatePrBodyNotes(advisory: SecurityAdvisory): string[] {\n const aliases = advisory.identifiers\n .map((id) => id.value)\n .sort()\n .map((id) => {\n if (id.startsWith('CVE-')) {\n return `[${id}](https://nvd.nist.gov/vuln/detail/${id})`;\n }\n if (id.startsWith('GHSA-')) {\n return `[${id}](https://github.com/advisories/${id})`;\n }\n return id;\n });\n\n let content = '\\n\\n---\\n\\n### ';\n content += `${advisory.summary}\\n`;\n content += `${aliases.join(' / ')}\\n`;\n content += `\\n<details>\\n<summary>More information</summary>\\n`;\n\n const details = advisory.description.replace(regEx(/^#{1,4} /gm), '##### ');\n content += `#### Details\\n${details}\\n`;\n\n content += '#### Severity\\n';\n const { cvss_v4, cvss_v3 } = advisory.cvss_severities ?? {};\n const cvss = cvss_v4?.vector_string ? cvss_v4 : cvss_v3;\n if (is.number(cvss?.score) && cvss?.vector_string) {\n content += `- CVSS Score: ${cvss.score.toFixed(1)} / 10 (${titleCase(advisory.severity)})\\n`;\n content += `- Vector String: \\`${cvss.vector_string}\\`\\n`;\n } else {\n content += `${titleCase(advisory.severity)}\\n`;\n }\n\n content += `\\n#### References\\n${\n advisory.references\n ?.map((ref) => `- [${ref.url}](${ref.url})`)\n .join('\\n') ?? 'No references.'\n }`;\n\n content += `\\n\\nThis data is provided by the [GitHub Advisory Database](https://github.com/advisories/${advisory.ghsa_id}) ([CC-BY 4.0](https://github.com/github/advisory-database/blob/main/LICENSE.md)).\\n`;\n content += `</details>`;\n\n return [sanitizeMarkdown(content)];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vulnerability.js","names":["allVersioning.get"],"sources":["../../../../lib/workers/repository/init/vulnerability.ts"],"sourcesContent":["import is from '@sindresorhus/is';\nimport type { PackageRule, RenovateConfig } from '../../../config/types.ts';\nimport { NO_VULNERABILITY_ALERTS } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { getDefaultVersioning } from '../../../modules/datasource/common.ts';\nimport { GithubTagsDatasource } from '../../../modules/datasource/github-tags/index.ts';\nimport { MavenDatasource } from '../../../modules/datasource/maven/index.ts';\nimport { NugetDatasource } from '../../../modules/datasource/nuget/index.ts';\nimport type {\n Ecosystem,\n SecurityAdvisory,\n} from '../../../modules/platform/github/schema.ts';\nimport { platform } from '../../../modules/platform/index.ts';\nimport * as allVersioning from '../../../modules/versioning/index.ts';\nimport { sanitizeMarkdown } from '../../../util/markdown.ts';\nimport { escapeRegExp, regEx } from '../../../util/regex.ts';\nimport { titleCase } from '../../../util/string.ts';\nimport { githubEcosystemToDatasource } from '../../../util/vulnerability/ecosystem.ts';\nimport {\n getFixedVersionConstraint,\n getHighestVulnerabilitySeverity,\n} from '../../../util/vulnerability/utils.ts';\n\ntype DependencyName = string;\n\ntype CombinedAlert = Partial<\n Record<\n Ecosystem,\n Record<\n DependencyName,\n {\n advisories: SecurityAdvisory[];\n firstPatchedVersion?: string;\n severity?: string;\n }\n >\n >\n>;\n\nexport function getFixedVersionByDatasource(\n fixedVersion: string,\n datasource: string,\n): string {\n return getFixedVersionConstraint(fixedVersion, datasource);\n}\n\n// TODO can return `null` and `undefined` (#22198)\nexport async function detectVulnerabilityAlerts(\n input: RenovateConfig,\n): Promise<RenovateConfig> {\n if (!input?.vulnerabilityAlerts) {\n return input;\n }\n if (input.vulnerabilityAlerts.enabled === false) {\n logger.debug('Vulnerability alerts are disabled');\n return input;\n }\n const alerts = await platform.getVulnerabilityAlerts?.();\n if (!alerts?.length) {\n logger.debug('No vulnerability alerts found');\n if (input.vulnerabilityAlertsOnly) {\n throw new Error(NO_VULNERABILITY_ALERTS);\n }\n return input;\n }\n const config = { ...input };\n const combinedAlerts: CombinedAlert = {};\n for (const alert of alerts) {\n try {\n if (alert.dismissed_reason) {\n continue;\n }\n if (!alert.security_vulnerability?.first_patched_version) {\n logger.debug(\n { alert },\n 'Vulnerability alert has no firstPatchedVersion - skipping',\n );\n continue;\n }\n const ecosystem = alert.security_vulnerability.package.ecosystem;\n const datasources = githubEcosystemToDatasource[ecosystem];\n const depName = alert.security_vulnerability.package.name;\n const firstPatchedVersion =\n alert.security_vulnerability.first_patched_version.identifier;\n const advisory = alert.security_advisory;\n\n // Keying off of ecosystem instead of datasource because now a single ecosystem (such as maven) could have\n // multiple datasources.\n combinedAlerts[ecosystem] ??= {};\n combinedAlerts[ecosystem][depName] ??= {\n advisories: [],\n };\n const alertDetails = combinedAlerts[ecosystem][depName];\n alertDetails.advisories.push(advisory);\n alertDetails.severity = getHighestVulnerabilitySeverity(\n { vulnerabilitySeverity: alertDetails.severity },\n { vulnerabilitySeverity: alert.security_vulnerability.severity },\n );\n const versioningApi = allVersioning.get(\n getDefaultVersioning(datasources[0]),\n );\n if (versioningApi.isVersion(firstPatchedVersion)) {\n if (\n !alertDetails.firstPatchedVersion ||\n versioningApi.isGreaterThan(\n firstPatchedVersion,\n alertDetails.firstPatchedVersion,\n )\n ) {\n alertDetails.firstPatchedVersion = firstPatchedVersion;\n }\n } else {\n logger.debug(`Invalid firstPatchedVersion: ${firstPatchedVersion}`);\n }\n } catch (err) {\n logger.warn({ err }, 'Error parsing vulnerability alert');\n }\n }\n const alertPackageRules: PackageRule[] = [];\n config.remediations = {};\n for (const [ecosystem, dependencies] of Object.entries(combinedAlerts)) {\n const matchDatasources =\n githubEcosystemToDatasource[ecosystem as Ecosystem];\n const primaryDatasource = matchDatasources[0];\n for (const [depName, val] of Object.entries(dependencies)) {\n if (!val.firstPatchedVersion) {\n continue;\n }\n\n let prBodyNotes: string[] = [];\n try {\n prBodyNotes = val.advisories.flatMap((advisory) =>\n generatePrBodyNotes(advisory),\n );\n } catch (err) /* v8 ignore next -- defensive: note generation from already-parsed advisories does not throw in specs */ {\n logger.warn({ err }, 'Error generating vulnerability PR notes');\n }\n\n let matchRule: PackageRule = {\n matchDatasources,\n matchPackageNames: [depName],\n };\n\n let matchCurrentVersion = `< ${val.firstPatchedVersion}`;\n if (\n primaryDatasource === MavenDatasource.id ||\n primaryDatasource === NugetDatasource.id\n ) {\n matchCurrentVersion = `(,${val.firstPatchedVersion})`;\n } else if (primaryDatasource === GithubTagsDatasource.id) {\n matchCurrentVersion = `!/^${escapeRegExp(val.firstPatchedVersion)}$/`;\n }\n\n matchRule = {\n ...matchRule,\n matchCurrentVersion,\n vulnerabilityFixVersion: val.firstPatchedVersion,\n vulnerabilitySeverity: val.severity,\n prBodyNotes,\n isVulnerabilityAlert: true,\n force: {\n ...config.vulnerabilityAlerts,\n },\n };\n alertPackageRules.push(matchRule);\n }\n }\n logger.debug({ alertPackageRules }, 'alert package rules');\n config.packageRules = (config.packageRules ?? []).concat(alertPackageRules);\n return config;\n}\n\nfunction generatePrBodyNotes(advisory: SecurityAdvisory): string[] {\n const aliases = advisory.identifiers\n .map((id) => id.value)\n .sort()\n .map((id) => {\n if (id.startsWith('CVE-')) {\n return `[${id}](https://nvd.nist.gov/vuln/detail/${id})`;\n }\n if (id.startsWith('GHSA-')) {\n return `[${id}](https://github.com/advisories/${id})`;\n }\n return id;\n });\n\n let content = '\\n\\n---\\n\\n### ';\n content += `${advisory.summary}\\n`;\n content += `${aliases.join(' / ')}\\n`;\n content += `\\n<details>\\n<summary>More information</summary>\\n`;\n\n const details = advisory.description.replace(regEx(/^#{1,4} /gm), '##### ');\n content += `#### Details\\n${details}\\n`;\n\n content += '#### Severity\\n';\n const { cvss_v4, cvss_v3 } = advisory.cvss_severities ?? {};\n const cvss = cvss_v4?.vector_string ? cvss_v4 : cvss_v3;\n if (is.number(cvss?.score) && cvss?.vector_string) {\n content += `- CVSS Score: ${cvss.score.toFixed(1)} / 10 (${titleCase(advisory.severity)})\\n`;\n content += `- Vector String: \\`${cvss.vector_string}\\`\\n`;\n } else {\n content += `${titleCase(advisory.severity)}\\n`;\n }\n\n content += `\\n#### References\\n${\n advisory.references\n ?.map((ref) => `- [${ref.url}](${ref.url})`)\n .join('\\n') ?? 'No references.'\n }`;\n\n content += `\\n\\nThis data is provided by the [GitHub Advisory Database](https://github.com/advisories/${advisory.ghsa_id}) ([CC-BY 4.0](https://github.com/github/advisory-database/blob/main/LICENSE.md)).\\n`;\n content += `</details>`;\n\n return [sanitizeMarkdown(content)];\n}\n"],"mappings":"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"}
|
|
@@ -55,7 +55,8 @@ async function searchDefaultOnboardingPreset(repository) {
|
|
|
55
55
|
return foundPreset;
|
|
56
56
|
}
|
|
57
57
|
async function getOnboardingConfigContents(config, fileName) {
|
|
58
|
-
const
|
|
58
|
+
const codeFormat = await EditorConfig.getCodeFormat(fileName);
|
|
59
|
+
const jsonWriter = new JSONWriter(codeFormat);
|
|
59
60
|
const onboardingConfig = await getOnboardingConfig(config);
|
|
60
61
|
return jsonWriter.write(onboardingConfig);
|
|
61
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/config.ts"],"sourcesContent":["import { GlobalConfig } from '../../../../config/global.ts';\nimport { getPreset } from '../../../../config/presets/local/index.ts';\nimport { PRESET_DEP_NOT_FOUND } from '../../../../config/presets/util.ts';\nimport type {\n RenovateConfig,\n RenovateSharedConfig,\n} from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { clone } from '../../../../util/clone.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport {\n EditorConfig,\n JSONWriter,\n} from '../../../../util/json-writer/index.ts';\n\nasync function getOnboardingConfig(\n config: RenovateConfig,\n): Promise<RenovateSharedConfig | undefined> {\n let onboardingConfig = clone(getInheritedOrGlobal('onboardingConfig'));\n\n // TODO #22198 fix types\n const foundPreset = await searchDefaultOnboardingPreset(config.repository!);\n\n if (foundPreset) {\n logger.debug(`Found preset ${foundPreset} - using it in onboarding config`);\n onboardingConfig = {\n // oxlint-disable-next-line renovate/no-hardcoded-docs-url -- JSON schema reference URL, not a documentation link\n $schema: 'https://docs.renovatebot.com/renovate-schema.json',\n extends: [foundPreset],\n };\n } else {\n // Organization preset did not exist\n logger.debug(\n 'No default org/owner preset found, so the default onboarding config will be used instead.',\n );\n }\n\n logger.debug({ config: onboardingConfig }, 'onboarding config');\n return onboardingConfig;\n}\n\nasync function searchDefaultOnboardingPreset(\n repository: string,\n): Promise<string | undefined> {\n let foundPreset: string | undefined;\n logger.debug('Checking for a default Renovate preset which can be used.');\n\n const repoPathParts = repository.split('/');\n\n for (\n let index = repoPathParts.length - 1;\n index >= 1 && !foundPreset;\n index--\n ) {\n const groupName = repoPathParts.slice(0, index).join('/');\n\n // Check for group/renovate-config\n try {\n const repo = `${groupName}/renovate-config`;\n const preset = `local>${repo}`;\n logger.debug(`Checking for preset: ${preset}`);\n if (await getPreset({ repo })) {\n foundPreset = preset;\n }\n } catch (err) {\n if (\n err.message !== PRESET_DEP_NOT_FOUND &&\n !err.message.startsWith('Unsupported platform')\n ) {\n logger.warn({ err }, 'Unknown error fetching default owner preset');\n }\n }\n }\n\n if (!foundPreset) {\n // Check for org/.{{platform}}\n\n const orgName = repoPathParts[0];\n\n const platform = GlobalConfig.get('platform');\n try {\n const repo = `${orgName}/.${platform}`;\n const presetName = 'renovate-config';\n const orgPresetName = `local>${repo}:${presetName}`;\n logger.debug(`Checking for preset: ${orgPresetName}`);\n\n if (\n await getPreset({\n repo,\n presetName,\n })\n ) {\n foundPreset = orgPresetName;\n }\n } catch (err) {\n if (\n err.message !== PRESET_DEP_NOT_FOUND &&\n !err.message.startsWith('Unsupported platform')\n ) {\n logger.warn({ err }, 'Unknown error fetching default owner preset');\n }\n }\n }\n\n return foundPreset;\n}\n\nasync function getOnboardingConfigContents(\n config: RenovateConfig,\n fileName: string,\n): Promise<string> {\n const codeFormat = await EditorConfig.getCodeFormat(fileName);\n const jsonWriter = new JSONWriter(codeFormat);\n const onboardingConfig = await getOnboardingConfig(config);\n return jsonWriter.write(onboardingConfig);\n}\n\nexport { getOnboardingConfig, getOnboardingConfigContents };\n"],"mappings":";;;;;;;;;;AAeA,eAAe,oBACb,QAC2C;CAC3C,IAAI,mBAAmB,MAAM,qBAAqB,kBAAkB,CAAC;CAGrE,MAAM,cAAc,MAAM,8BAA8B,OAAO,UAAW;CAE1E,IAAI,aAAa;EACf,OAAO,MAAM,gBAAgB,YAAY,iCAAiC;EAC1E,mBAAmB;GAEjB,SAAS;GACT,SAAS,CAAC,WAAW;EACvB;CACF,OAEE,OAAO,MACL,2FACF;CAGF,OAAO,MAAM,EAAE,QAAQ,iBAAiB,GAAG,mBAAmB;CAC9D,OAAO;AACT;AAEA,eAAe,8BACb,YAC6B;CAC7B,IAAI;CACJ,OAAO,MAAM,2DAA2D;CAExE,MAAM,gBAAgB,WAAW,MAAM,GAAG;CAE1C,KACE,IAAI,QAAQ,cAAc,SAAS,GACnC,SAAS,KAAK,CAAC,aACf,SACA;EACA,MAAM,YAAY,cAAc,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG;EAGxD,IAAI;GACF,MAAM,OAAO,GAAG,UAAU;GAC1B,MAAM,SAAS,SAAS;GACxB,OAAO,MAAM,wBAAwB,QAAQ;GAC7C,IAAI,MAAM,UAAU,EAAE,KAAK,CAAC,GAC1B,cAAc;EAElB,SAAS,KAAK;GACZ,IACE,IAAI,YAAA,mBACJ,CAAC,IAAI,QAAQ,WAAW,sBAAsB,GAE9C,OAAO,KAAK,EAAE,IAAI,GAAG,6CAA6C;EAEtE;CACF;CAEA,IAAI,CAAC,aAAa;EAGhB,MAAM,UAAU,cAAc;EAE9B,MAAM,WAAW,aAAa,IAAI,UAAU;EAC5C,IAAI;GACF,MAAM,OAAO,GAAG,QAAQ,IAAI;GAC5B,MAAM,aAAa;GACnB,MAAM,gBAAgB,SAAS,KAAK,GAAG;GACvC,OAAO,MAAM,wBAAwB,eAAe;GAEpD,IACE,MAAM,UAAU;IACd;IACA;GACF,CAAC,GAED,cAAc;EAElB,SAAS,KAAK;GACZ,IACE,IAAI,YAAA,mBACJ,CAAC,IAAI,QAAQ,WAAW,sBAAsB,GAE9C,OAAO,KAAK,EAAE,IAAI,GAAG,6CAA6C;EAEtE;CACF;CAEA,OAAO;AACT;AAEA,eAAe,4BACb,QACA,UACiB;
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/config.ts"],"sourcesContent":["import { GlobalConfig } from '../../../../config/global.ts';\nimport { getPreset } from '../../../../config/presets/local/index.ts';\nimport { PRESET_DEP_NOT_FOUND } from '../../../../config/presets/util.ts';\nimport type {\n RenovateConfig,\n RenovateSharedConfig,\n} from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { clone } from '../../../../util/clone.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport {\n EditorConfig,\n JSONWriter,\n} from '../../../../util/json-writer/index.ts';\n\nasync function getOnboardingConfig(\n config: RenovateConfig,\n): Promise<RenovateSharedConfig | undefined> {\n let onboardingConfig = clone(getInheritedOrGlobal('onboardingConfig'));\n\n // TODO #22198 fix types\n const foundPreset = await searchDefaultOnboardingPreset(config.repository!);\n\n if (foundPreset) {\n logger.debug(`Found preset ${foundPreset} - using it in onboarding config`);\n onboardingConfig = {\n // oxlint-disable-next-line renovate/no-hardcoded-docs-url -- JSON schema reference URL, not a documentation link\n $schema: 'https://docs.renovatebot.com/renovate-schema.json',\n extends: [foundPreset],\n };\n } else {\n // Organization preset did not exist\n logger.debug(\n 'No default org/owner preset found, so the default onboarding config will be used instead.',\n );\n }\n\n logger.debug({ config: onboardingConfig }, 'onboarding config');\n return onboardingConfig;\n}\n\nasync function searchDefaultOnboardingPreset(\n repository: string,\n): Promise<string | undefined> {\n let foundPreset: string | undefined;\n logger.debug('Checking for a default Renovate preset which can be used.');\n\n const repoPathParts = repository.split('/');\n\n for (\n let index = repoPathParts.length - 1;\n index >= 1 && !foundPreset;\n index--\n ) {\n const groupName = repoPathParts.slice(0, index).join('/');\n\n // Check for group/renovate-config\n try {\n const repo = `${groupName}/renovate-config`;\n const preset = `local>${repo}`;\n logger.debug(`Checking for preset: ${preset}`);\n if (await getPreset({ repo })) {\n foundPreset = preset;\n }\n } catch (err) {\n if (\n err.message !== PRESET_DEP_NOT_FOUND &&\n !err.message.startsWith('Unsupported platform')\n ) {\n logger.warn({ err }, 'Unknown error fetching default owner preset');\n }\n }\n }\n\n if (!foundPreset) {\n // Check for org/.{{platform}}\n\n const orgName = repoPathParts[0];\n\n const platform = GlobalConfig.get('platform');\n try {\n const repo = `${orgName}/.${platform}`;\n const presetName = 'renovate-config';\n const orgPresetName = `local>${repo}:${presetName}`;\n logger.debug(`Checking for preset: ${orgPresetName}`);\n\n if (\n await getPreset({\n repo,\n presetName,\n })\n ) {\n foundPreset = orgPresetName;\n }\n } catch (err) {\n if (\n err.message !== PRESET_DEP_NOT_FOUND &&\n !err.message.startsWith('Unsupported platform')\n ) {\n logger.warn({ err }, 'Unknown error fetching default owner preset');\n }\n }\n }\n\n return foundPreset;\n}\n\nasync function getOnboardingConfigContents(\n config: RenovateConfig,\n fileName: string,\n): Promise<string> {\n const codeFormat = await EditorConfig.getCodeFormat(fileName);\n const jsonWriter = new JSONWriter(codeFormat);\n const onboardingConfig = await getOnboardingConfig(config);\n return jsonWriter.write(onboardingConfig);\n}\n\nexport { getOnboardingConfig, getOnboardingConfigContents };\n"],"mappings":";;;;;;;;;;AAeA,eAAe,oBACb,QAC2C;CAC3C,IAAI,mBAAmB,MAAM,qBAAqB,kBAAkB,CAAC;CAGrE,MAAM,cAAc,MAAM,8BAA8B,OAAO,UAAW;CAE1E,IAAI,aAAa;EACf,OAAO,MAAM,gBAAgB,YAAY,iCAAiC;EAC1E,mBAAmB;GAEjB,SAAS;GACT,SAAS,CAAC,WAAW;EACvB;CACF,OAEE,OAAO,MACL,2FACF;CAGF,OAAO,MAAM,EAAE,QAAQ,iBAAiB,GAAG,mBAAmB;CAC9D,OAAO;AACT;AAEA,eAAe,8BACb,YAC6B;CAC7B,IAAI;CACJ,OAAO,MAAM,2DAA2D;CAExE,MAAM,gBAAgB,WAAW,MAAM,GAAG;CAE1C,KACE,IAAI,QAAQ,cAAc,SAAS,GACnC,SAAS,KAAK,CAAC,aACf,SACA;EACA,MAAM,YAAY,cAAc,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG;EAGxD,IAAI;GACF,MAAM,OAAO,GAAG,UAAU;GAC1B,MAAM,SAAS,SAAS;GACxB,OAAO,MAAM,wBAAwB,QAAQ;GAC7C,IAAI,MAAM,UAAU,EAAE,KAAK,CAAC,GAC1B,cAAc;EAElB,SAAS,KAAK;GACZ,IACE,IAAI,YAAA,mBACJ,CAAC,IAAI,QAAQ,WAAW,sBAAsB,GAE9C,OAAO,KAAK,EAAE,IAAI,GAAG,6CAA6C;EAEtE;CACF;CAEA,IAAI,CAAC,aAAa;EAGhB,MAAM,UAAU,cAAc;EAE9B,MAAM,WAAW,aAAa,IAAI,UAAU;EAC5C,IAAI;GACF,MAAM,OAAO,GAAG,QAAQ,IAAI;GAC5B,MAAM,aAAa;GACnB,MAAM,gBAAgB,SAAS,KAAK,GAAG;GACvC,OAAO,MAAM,wBAAwB,eAAe;GAEpD,IACE,MAAM,UAAU;IACd;IACA;GACF,CAAC,GAED,cAAc;EAElB,SAAS,KAAK;GACZ,IACE,IAAI,YAAA,mBACJ,CAAC,IAAI,QAAQ,WAAW,sBAAsB,GAE9C,OAAO,KAAK,EAAE,IAAI,GAAG,6CAA6C;EAEtE;CACF;CAEA,OAAO;AACT;AAEA,eAAe,4BACb,QACA,UACiB;CACjB,MAAM,aAAa,MAAM,aAAa,cAAc,QAAQ;CAC5D,MAAM,aAAa,IAAI,WAAW,UAAU;CAC5C,MAAM,mBAAmB,MAAM,oBAAoB,MAAM;CACzD,OAAO,WAAW,MAAM,gBAAgB;AAC1C"}
|
|
@@ -19,7 +19,8 @@ async function createOnboardingBranch(config) {
|
|
|
19
19
|
commitMessage = `${commitMessage}\n\n${compile(config.commitBody, { gitAuthor: config.gitAuthor })}`;
|
|
20
20
|
logger.trace(`commitMessage: ${commitMessage}`);
|
|
21
21
|
}
|
|
22
|
-
const
|
|
22
|
+
const compiledTrailers = coerceArray(config.commitTrailers).map((trailer) => compile(trailer, { gitAuthor: config.gitAuthor }));
|
|
23
|
+
const trailers = filterValidCommitTrailers(compiledTrailers);
|
|
23
24
|
// istanbul ignore if
|
|
24
25
|
if (GlobalConfig.get("dryRun")) {
|
|
25
26
|
logger.info("DRY-RUN: Would commit files to onboarding branch");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/create.ts"],"sourcesContent":["import { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { filterValidCommitTrailers } from '../../../../util/git/commit-trailers.ts';\nimport { compile } from '../../../../util/template/index.ts';\nimport {\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common.ts';\nimport { OnboardingCommitMessageFactory } from './commit-message.ts';\nimport { getOnboardingConfigContents } from './config.ts';\n\nexport async function createOnboardingBranch(\n config: Partial<RenovateConfig>,\n): Promise<string | null> {\n logger.debug('createOnboardingBranch()');\n const configFile = getDefaultConfigFileName();\n // TODO #22198\n const contents = await getOnboardingConfigContents(config, configFile);\n logger.debug('Creating onboarding branch');\n\n const commitMessageFactory = new OnboardingCommitMessageFactory(\n config,\n configFile,\n );\n let commitMessage = commitMessageFactory.create().toString();\n\n if (config.commitBody) {\n commitMessage = `${commitMessage}\\n\\n${compile(\n config.commitBody,\n // only allow gitAuthor template value in the commitBody\n { gitAuthor: config.gitAuthor },\n )}`;\n\n logger.trace(`commitMessage: ${commitMessage}`);\n }\n\n // only allow gitAuthor template value in the commitTrailers\n const compiledTrailers = coerceArray(config.commitTrailers).map((trailer) =>\n compile(trailer, { gitAuthor: config.gitAuthor }),\n );\n const trailers = filterValidCommitTrailers(compiledTrailers);\n\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would commit files to onboarding branch');\n return null;\n }\n\n const prTitle =\n config.semanticCommits === 'enabled'\n ? getSemanticCommitPrTitle(config)\n : getInheritedOrGlobal('onboardingPrTitle')!;\n\n return scm.commitAndPush({\n baseBranch: config.baseBranch,\n branchName: getInheritedOrGlobal('onboardingBranch')!,\n files: [\n {\n type: 'addition',\n // TODO #22198\n path: configFile,\n contents,\n },\n ],\n message: commitMessage,\n trailers,\n platformCommit: config.platformCommit,\n force: true,\n // Only needed by Gerrit platform\n prTitle,\n });\n}\n"],"mappings":";;;;;;;;;;;AAeA,eAAsB,uBACpB,QACwB;CACxB,OAAO,MAAM,0BAA0B;CACvC,MAAM,aAAa,yBAAyB;CAE5C,MAAM,WAAW,MAAM,4BAA4B,QAAQ,UAAU;CACrE,OAAO,MAAM,4BAA4B;CAMzC,IAAI,gBAAgB,IAJa,+BAC/B,QACA,UAEqC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS;CAE3D,IAAI,OAAO,YAAY;EACrB,gBAAgB,GAAG,cAAc,MAAM,QACrC,OAAO,YAEP,EAAE,WAAW,OAAO,UAAU,CAChC;EAEA,OAAO,MAAM,kBAAkB,eAAe;CAChD;
|
|
1
|
+
{"version":3,"file":"create.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/create.ts"],"sourcesContent":["import { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { filterValidCommitTrailers } from '../../../../util/git/commit-trailers.ts';\nimport { compile } from '../../../../util/template/index.ts';\nimport {\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common.ts';\nimport { OnboardingCommitMessageFactory } from './commit-message.ts';\nimport { getOnboardingConfigContents } from './config.ts';\n\nexport async function createOnboardingBranch(\n config: Partial<RenovateConfig>,\n): Promise<string | null> {\n logger.debug('createOnboardingBranch()');\n const configFile = getDefaultConfigFileName();\n // TODO #22198\n const contents = await getOnboardingConfigContents(config, configFile);\n logger.debug('Creating onboarding branch');\n\n const commitMessageFactory = new OnboardingCommitMessageFactory(\n config,\n configFile,\n );\n let commitMessage = commitMessageFactory.create().toString();\n\n if (config.commitBody) {\n commitMessage = `${commitMessage}\\n\\n${compile(\n config.commitBody,\n // only allow gitAuthor template value in the commitBody\n { gitAuthor: config.gitAuthor },\n )}`;\n\n logger.trace(`commitMessage: ${commitMessage}`);\n }\n\n // only allow gitAuthor template value in the commitTrailers\n const compiledTrailers = coerceArray(config.commitTrailers).map((trailer) =>\n compile(trailer, { gitAuthor: config.gitAuthor }),\n );\n const trailers = filterValidCommitTrailers(compiledTrailers);\n\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would commit files to onboarding branch');\n return null;\n }\n\n const prTitle =\n config.semanticCommits === 'enabled'\n ? getSemanticCommitPrTitle(config)\n : getInheritedOrGlobal('onboardingPrTitle')!;\n\n return scm.commitAndPush({\n baseBranch: config.baseBranch,\n branchName: getInheritedOrGlobal('onboardingBranch')!,\n files: [\n {\n type: 'addition',\n // TODO #22198\n path: configFile,\n contents,\n },\n ],\n message: commitMessage,\n trailers,\n platformCommit: config.platformCommit,\n force: true,\n // Only needed by Gerrit platform\n prTitle,\n });\n}\n"],"mappings":";;;;;;;;;;;AAeA,eAAsB,uBACpB,QACwB;CACxB,OAAO,MAAM,0BAA0B;CACvC,MAAM,aAAa,yBAAyB;CAE5C,MAAM,WAAW,MAAM,4BAA4B,QAAQ,UAAU;CACrE,OAAO,MAAM,4BAA4B;CAMzC,IAAI,gBAAgB,IAJa,+BAC/B,QACA,UAEqC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS;CAE3D,IAAI,OAAO,YAAY;EACrB,gBAAgB,GAAG,cAAc,MAAM,QACrC,OAAO,YAEP,EAAE,WAAW,OAAO,UAAU,CAChC;EAEA,OAAO,MAAM,kBAAkB,eAAe;CAChD;CAGA,MAAM,mBAAmB,YAAY,OAAO,cAAc,CAAC,CAAC,KAAK,YAC/D,QAAQ,SAAS,EAAE,WAAW,OAAO,UAAU,CAAC,CAClD;CACA,MAAM,WAAW,0BAA0B,gBAAgB;;CAG3D,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KAAK,kDAAkD;EAC9D,OAAO;CACT;CAEA,MAAM,UACJ,OAAO,oBAAoB,YACvB,yBAAyB,MAAM,IAC/B,qBAAqB,mBAAmB;CAE9C,OAAO,IAAI,cAAc;EACvB,YAAY,OAAO;EACnB,YAAY,qBAAqB,kBAAkB;EACnD,OAAO,CACL;GACE,MAAM;GAEN,MAAM;GACN;EACF,CACF;EACA,SAAS;EACT;EACA,gBAAgB,OAAO;EACvB,OAAO;EAEP;CACF,CAAC;AACH"}
|