renovate 44.149.1 → 44.149.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/presets/index.js +2 -1
- package/dist/config/presets/index.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 +6 -5
- package/dist/modules/datasource/aws-eks-addon/index.js.map +1 -1
- package/dist/modules/datasource/aws-machine-image/index.js +4 -3
- package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
- package/dist/modules/datasource/aws-rds/index.js +2 -1
- package/dist/modules/datasource/aws-rds/index.js.map +1 -1
- package/dist/modules/datasource/azure-bicep-resource/index.js +2 -1
- package/dist/modules/datasource/azure-bicep-resource/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/bitrise/index.js +2 -1
- package/dist/modules/datasource/bitrise/index.js.map +1 -1
- package/dist/modules/datasource/buildpacks-registry/index.js +2 -1
- package/dist/modules/datasource/buildpacks-registry/index.js.map +1 -1
- package/dist/modules/datasource/cdnjs/index.js +3 -2
- package/dist/modules/datasource/cdnjs/index.js.map +1 -1
- package/dist/modules/datasource/conan/index.js +3 -2
- package/dist/modules/datasource/conan/index.js.map +1 -1
- package/dist/modules/datasource/conda/index.js +2 -1
- package/dist/modules/datasource/conda/index.js.map +1 -1
- package/dist/modules/datasource/cpan/index.js +1 -1
- package/dist/modules/datasource/cpan/index.js.map +1 -1
- package/dist/modules/datasource/crate/index.js +17 -9
- package/dist/modules/datasource/crate/index.js.map +1 -1
- package/dist/modules/datasource/deb/index.js +3 -2
- package/dist/modules/datasource/deb/index.js.map +1 -1
- package/dist/modules/datasource/deno/index.js +4 -3
- package/dist/modules/datasource/deno/index.js.map +1 -1
- package/dist/modules/datasource/docker/index.js +9 -9
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/dotnet-version/index.js +2 -1
- package/dist/modules/datasource/dotnet-version/index.js.map +1 -1
- package/dist/modules/datasource/elm-package/index.js +2 -1
- package/dist/modules/datasource/elm-package/index.js.map +1 -1
- package/dist/modules/datasource/endoflife-date/index.js +2 -1
- package/dist/modules/datasource/endoflife-date/index.js.map +1 -1
- package/dist/modules/datasource/galaxy-collection/index.js +3 -2
- package/dist/modules/datasource/galaxy-collection/index.js.map +1 -1
- package/dist/modules/datasource/git-host-tags.js +6 -5
- package/dist/modules/datasource/git-host-tags.js.map +1 -1
- package/dist/modules/datasource/gitea-tags/base.js +5 -4
- package/dist/modules/datasource/gitea-tags/base.js.map +1 -1
- package/dist/modules/datasource/gitea-tags/util.js +2 -5
- package/dist/modules/datasource/gitea-tags/util.js.map +1 -1
- package/dist/modules/datasource/github-digest/index.js +3 -5
- package/dist/modules/datasource/github-digest/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/gitlab-packages/index.js +2 -1
- package/dist/modules/datasource/gitlab-packages/index.js.map +1 -1
- package/dist/modules/datasource/gitlab-releases/index.js +2 -1
- package/dist/modules/datasource/gitlab-releases/index.js.map +1 -1
- package/dist/modules/datasource/gitlab-tags/index.js +3 -2
- package/dist/modules/datasource/gitlab-tags/index.js.map +1 -1
- package/dist/modules/datasource/glasskube-packages/index.js +2 -1
- package/dist/modules/datasource/glasskube-packages/index.js.map +1 -1
- package/dist/modules/datasource/go/goproxy-parser.js +3 -2
- package/dist/modules/datasource/go/goproxy-parser.js.map +1 -1
- package/dist/modules/datasource/go/index.js +4 -3
- package/dist/modules/datasource/go/index.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +6 -3
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/go/timestamp-cache.js +3 -1
- package/dist/modules/datasource/go/timestamp-cache.js.map +1 -1
- package/dist/modules/datasource/golang-version/index.js +1 -1
- package/dist/modules/datasource/golang-version/index.js.map +1 -1
- package/dist/modules/datasource/gradle-version/index.js +1 -1
- package/dist/modules/datasource/gradle-version/index.js.map +1 -1
- package/dist/modules/datasource/helm/index.js +2 -1
- package/dist/modules/datasource/helm/index.js.map +1 -1
- package/dist/modules/datasource/hermit/index.js +3 -2
- package/dist/modules/datasource/hermit/index.js.map +1 -1
- package/dist/modules/datasource/hex/index.js +3 -2
- package/dist/modules/datasource/hex/index.js.map +1 -1
- package/dist/modules/datasource/hexpm-bob/index.js +2 -1
- package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
- package/dist/modules/datasource/index.js +4 -3
- package/dist/modules/datasource/index.js.map +1 -1
- package/dist/modules/datasource/java-version/index.js +2 -1
- package/dist/modules/datasource/java-version/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 +2 -1
- package/dist/modules/datasource/maven/index.js.map +1 -1
- package/dist/modules/datasource/nextcloud/index.js +2 -1
- package/dist/modules/datasource/nextcloud/index.js.map +1 -1
- package/dist/modules/datasource/node-version/index.js +1 -1
- package/dist/modules/datasource/node-version/index.js.map +1 -1
- package/dist/modules/datasource/nuget/v3.js +3 -2
- package/dist/modules/datasource/nuget/v3.js.map +1 -1
- package/dist/modules/datasource/orb/index.js +2 -1
- package/dist/modules/datasource/orb/index.js.map +1 -1
- package/dist/modules/datasource/packagist/index.js +4 -3
- package/dist/modules/datasource/packagist/index.js.map +1 -1
- package/dist/modules/datasource/pod/index.js +2 -1
- package/dist/modules/datasource/pod/index.js.map +1 -1
- package/dist/modules/datasource/python-version/index.js +1 -1
- package/dist/modules/datasource/python-version/index.js.map +1 -1
- package/dist/modules/datasource/repology/index.js +2 -1
- package/dist/modules/datasource/repology/index.js.map +1 -1
- package/dist/modules/datasource/rpm/index.js +2 -1
- package/dist/modules/datasource/rpm/index.js.map +1 -1
- package/dist/modules/datasource/rubygems/index.js +2 -1
- package/dist/modules/datasource/rubygems/index.js.map +1 -1
- package/dist/modules/datasource/rubygems/metadata-cache.js +2 -1
- package/dist/modules/datasource/rubygems/metadata-cache.js.map +1 -1
- package/dist/modules/datasource/sbt-package/index.js +11 -10
- package/dist/modules/datasource/sbt-package/index.js.map +1 -1
- package/dist/modules/datasource/terraform-module/index.js +2 -1
- package/dist/modules/datasource/terraform-module/index.js.map +1 -1
- package/dist/modules/datasource/terraform-provider/index.js +6 -5
- package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
- package/dist/modules/datasource/unity3d/index.js +2 -1
- package/dist/modules/datasource/unity3d/index.js.map +1 -1
- package/dist/modules/datasource/unity3d-packages/index.js +2 -1
- package/dist/modules/datasource/unity3d-packages/index.js.map +1 -1
- package/dist/modules/manager/bazel/parser.js +3 -1
- package/dist/modules/manager/bazel/parser.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/terraform/lockfile/hash.js +2 -1
- package/dist/modules/manager/terraform/lockfile/hash.js.map +1 -1
- package/dist/modules/platform/bitbucket/pr-cache.js +3 -2
- package/dist/modules/platform/bitbucket/pr-cache.js.map +1 -1
- package/dist/modules/platform/bitbucket-server/pr-cache.js +3 -2
- package/dist/modules/platform/bitbucket-server/pr-cache.js.map +1 -1
- package/dist/modules/platform/gitea/pr-cache.js +7 -6
- package/dist/modules/platform/gitea/pr-cache.js.map +1 -1
- package/dist/modules/platform/gitlab/pr-cache.js +3 -2
- package/dist/modules/platform/gitlab/pr-cache.js.map +1 -1
- package/dist/util/cache/package/index.js +1 -1
- package/dist/util/cache/package/key.js +8 -1
- package/dist/util/cache/package/key.js.map +1 -1
- package/dist/util/cache/package/with-cache.js +2 -1
- package/dist/util/cache/package/with-cache.js.map +1 -1
- package/dist/util/exec/containerbase.js +2 -1
- package/dist/util/exec/containerbase.js.map +1 -1
- package/dist/util/github/graphql/cache-strategies/memory-cache-strategy.js +2 -1
- package/dist/util/github/graphql/cache-strategies/memory-cache-strategy.js.map +1 -1
- package/dist/util/github/graphql/datasource-fetcher.js +5 -8
- 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/cache/package-http-cache-provider.js +2 -1
- package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
- package/dist/util/jsonata.js +2 -1
- package/dist/util/jsonata.js.map +1 -1
- package/dist/util/merge-confidence/index.js +10 -7
- package/dist/util/merge-confidence/index.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/release-notes.js +4 -5
- package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/source.js +2 -1
- package/dist/workers/repository/update/pr/changelog/source.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
|
@@ -2,7 +2,7 @@ import { regEx } from "../../../util/regex.js";
|
|
|
2
2
|
import { ensureTrailingSlash } from "../../../util/url.js";
|
|
3
3
|
//#region lib/modules/datasource/gitea-tags/util.ts
|
|
4
4
|
/**
|
|
5
|
-
* URL
|
|
5
|
+
* URL helpers shared by the datasources which speak the Gitea
|
|
6
6
|
* API (`gitea-tags`, `gitea-releases`, `forgejo-tags`, `forgejo-releases`).
|
|
7
7
|
*
|
|
8
8
|
* All of them take an already resolved registry URL, so each datasource
|
|
@@ -15,10 +15,7 @@ function getApiUrl(registryUrl) {
|
|
|
15
15
|
function getSourceUrl(packageName, registryUrl) {
|
|
16
16
|
return `${ensureTrailingSlash(registryUrl)}${packageName}`;
|
|
17
17
|
}
|
|
18
|
-
function getCacheKey(registryUrl, repo, type) {
|
|
19
|
-
return `${registryUrl}:${repo}:${type}`;
|
|
20
|
-
}
|
|
21
18
|
//#endregion
|
|
22
|
-
export { getApiUrl,
|
|
19
|
+
export { getApiUrl, getSourceUrl };
|
|
23
20
|
|
|
24
21
|
//# sourceMappingURL=util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","names":[],"sources":["../../../../lib/modules/datasource/gitea-tags/util.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport { ensureTrailingSlash } from '../../../util/url.ts';\n\n/**\n * URL
|
|
1
|
+
{"version":3,"file":"util.js","names":[],"sources":["../../../../lib/modules/datasource/gitea-tags/util.ts"],"sourcesContent":["import { regEx } from '../../../util/regex.ts';\nimport { ensureTrailingSlash } from '../../../util/url.ts';\n\n/**\n * URL helpers shared by the datasources which speak the Gitea\n * API (`gitea-tags`, `gitea-releases`, `forgejo-tags`, `forgejo-releases`).\n *\n * All of them take an already resolved registry URL, so each datasource\n * applies its own default registry URL before calling them.\n */\n\nexport function getApiUrl(registryUrl: string): string {\n const res = registryUrl.replace(regEx(/\\/api\\/v1$/), '');\n return `${ensureTrailingSlash(res)}api/v1/`;\n}\n\nexport function getSourceUrl(packageName: string, registryUrl: string): string {\n return `${ensureTrailingSlash(registryUrl)}${packageName}`;\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,UAAU,aAA6B;CACrD,MAAM,MAAM,YAAY,QAAQ,MAAM,YAAY,GAAG,EAAE;CACvD,OAAO,GAAG,oBAAoB,GAAG,EAAE;AACrC;AAEA,SAAgB,aAAa,aAAqB,aAA6B;CAC7E,OAAO,GAAG,oBAAoB,WAAW,IAAI;AAC/C"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
1
2
|
import { id } from "../../versioning/exact/index.js";
|
|
2
3
|
import { Datasource } from "../datasource.js";
|
|
3
4
|
import { GithubHttp } from "../../../util/http/github.js";
|
|
@@ -18,13 +19,10 @@ var GithubDigestDatasource = class GithubDigestDatasource extends Datasource {
|
|
|
18
19
|
constructor() {
|
|
19
20
|
super(GithubDigestDatasource.id, new GithubHttp(GithubDigestDatasource.id));
|
|
20
21
|
}
|
|
21
|
-
static getCacheKey(registryUrl, packageName, suffix) {
|
|
22
|
-
return `${registryUrl}:${packageName}:${suffix}`;
|
|
23
|
-
}
|
|
24
22
|
getReleases(config) {
|
|
25
23
|
const { registryUrl, packageName: repo } = config;
|
|
26
24
|
const sourceUrl = getSourceUrl(repo, registryUrl);
|
|
27
|
-
return this.cached({ key:
|
|
25
|
+
return this.cached({ key: buildCacheKey(registryUrl, repo, "releases") }, async () => {
|
|
28
26
|
const [tagsSettled, branchesSettled] = await Promise.allSettled([queryTags(config, this.http), queryBranches(config, this.http)]);
|
|
29
27
|
if (tagsSettled.status === "rejected") throw tagsSettled.reason;
|
|
30
28
|
if (branchesSettled.status === "rejected") throw branchesSettled.reason;
|
|
@@ -51,7 +49,7 @@ var GithubDigestDatasource = class GithubDigestDatasource extends Datasource {
|
|
|
51
49
|
}
|
|
52
50
|
async getDigest({ packageName: repo, registryUrl }, newValue) {
|
|
53
51
|
if (!newValue) return null;
|
|
54
|
-
return await this.cached({ key:
|
|
52
|
+
return await this.cached({ key: buildCacheKey(registryUrl, repo, "digest", newValue) }, async () => {
|
|
55
53
|
const config = {
|
|
56
54
|
packageName: repo,
|
|
57
55
|
registryUrl
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["exactVersioning.id"],"sources":["../../../../lib/modules/datasource/github-digest/index.ts"],"sourcesContent":["import {\n queryBranches,\n queryTags,\n} from '../../../util/github/graphql/index.ts';\nimport { getSourceUrl } from '../../../util/github/url.ts';\nimport { GithubHttp } from '../../../util/http/github.ts';\nimport * as exactVersioning from '../../versioning/exact/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types.ts';\n\nexport class GithubDigestDatasource extends Datasource<GithubHttp> {\n static readonly id = 'github-digest';\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return ['https://github.com'];\n }\n\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the commit date.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined by using the `packageName` and `registryUrl`.';\n\n override readonly defaultVersioning = exactVersioning.id;\n\n constructor() {\n super(GithubDigestDatasource.id, new GithubHttp(GithubDigestDatasource.id));\n }\n\n
|
|
1
|
+
{"version":3,"file":"index.js","names":["exactVersioning.id"],"sources":["../../../../lib/modules/datasource/github-digest/index.ts"],"sourcesContent":["import { buildCacheKey } from '../../../util/cache/package/key.ts';\nimport {\n queryBranches,\n queryTags,\n} from '../../../util/github/graphql/index.ts';\nimport { getSourceUrl } from '../../../util/github/url.ts';\nimport { GithubHttp } from '../../../util/http/github.ts';\nimport * as exactVersioning from '../../versioning/exact/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n Release,\n ReleaseResult,\n} from '../types.ts';\n\nexport class GithubDigestDatasource extends Datasource<GithubHttp> {\n static readonly id = 'github-digest';\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return ['https://github.com'];\n }\n\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the commit date.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined by using the `packageName` and `registryUrl`.';\n\n override readonly defaultVersioning = exactVersioning.id;\n\n constructor() {\n super(GithubDigestDatasource.id, new GithubHttp(GithubDigestDatasource.id));\n }\n\n override getReleases(config: GetReleasesConfig): Promise<ReleaseResult> {\n const { registryUrl, packageName: repo } = config;\n const sourceUrl = getSourceUrl(repo, registryUrl);\n\n return this.cached(\n {\n key: buildCacheKey(registryUrl, repo, 'releases'),\n },\n async () => {\n const [tagsSettled, branchesSettled] = await Promise.allSettled([\n queryTags(config, this.http),\n queryBranches(config, this.http),\n ]);\n\n if (tagsSettled.status === 'rejected') {\n throw tagsSettled.reason;\n }\n if (branchesSettled.status === 'rejected') {\n throw branchesSettled.reason;\n }\n\n const tagsResult = tagsSettled.value;\n const branchesResult = branchesSettled.value;\n\n // Tags take priority over branches when names conflict\n const releases: Release[] = tagsResult.map(\n ({ version, releaseTimestamp, gitRef, hash }) => ({\n version,\n releaseTimestamp,\n gitRef,\n newDigest: hash,\n }),\n );\n const tagVersions = new Set(tagsResult.map((t) => t.version));\n for (const {\n version,\n releaseTimestamp,\n gitRef,\n hash,\n } of branchesResult) {\n if (!tagVersions.has(version)) {\n releases.push({\n version,\n releaseTimestamp,\n gitRef,\n newDigest: hash,\n });\n }\n }\n\n return {\n sourceUrl,\n releases,\n };\n },\n );\n }\n\n override async getDigest(\n { packageName: repo, registryUrl }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n if (!newValue) {\n return null;\n }\n\n return await this.cached(\n {\n key: buildCacheKey(registryUrl, repo, 'digest', newValue),\n },\n async () => {\n const config = { packageName: repo, registryUrl };\n\n // Tags take priority over branches\n const tags = await queryTags(config, this.http);\n const tagItem = tags.find(({ version }) => version === newValue);\n if (tagItem?.hash) {\n return tagItem.hash;\n }\n\n const branches = await queryBranches(config, this.http);\n const branchItem = branches.find(({ version }) => version === newValue);\n if (branchItem?.hash) {\n return branchItem.hash;\n }\n\n return null;\n },\n );\n }\n}\n"],"mappings":";;;;;;;AAgBA,IAAa,yBAAb,MAAa,+BAA+B,WAAuB;CACjE,OAAgB,KAAK;CAErB,uBAAgC,cAAgC;EAC9D,OAAO,CAAC,oBAAoB;CAC9B;CAEA,mBAAqC;CAErC,0BAA4C;CAC5C,uBACE;CACF,mBAAqC;CACrC,gBACE;CAEF,oBAAsCA;CAEtC,cAAc;EACZ,MAAM,uBAAuB,IAAI,IAAI,WAAW,uBAAuB,EAAE,CAAC;CAC5E;CAEA,YAAqB,QAAmD;EACtE,MAAM,EAAE,aAAa,aAAa,SAAS;EAC3C,MAAM,YAAY,aAAa,MAAM,WAAW;EAEhD,OAAO,KAAK,OACV,EACE,KAAK,cAAc,aAAa,MAAM,UAAU,EAClD,GACA,YAAY;GACV,MAAM,CAAC,aAAa,mBAAmB,MAAM,QAAQ,WAAW,CAC9D,UAAU,QAAQ,KAAK,IAAI,GAC3B,cAAc,QAAQ,KAAK,IAAI,CACjC,CAAC;GAED,IAAI,YAAY,WAAW,YACzB,MAAM,YAAY;GAEpB,IAAI,gBAAgB,WAAW,YAC7B,MAAM,gBAAgB;GAGxB,MAAM,aAAa,YAAY;GAC/B,MAAM,iBAAiB,gBAAgB;GAGvC,MAAM,WAAsB,WAAW,KACpC,EAAE,SAAS,kBAAkB,QAAQ,YAAY;IAChD;IACA;IACA;IACA,WAAW;GACb,EACF;GACA,MAAM,cAAc,IAAI,IAAI,WAAW,KAAK,MAAM,EAAE,OAAO,CAAC;GAC5D,KAAK,MAAM,EACT,SACA,kBACA,QACA,UACG,gBACH,IAAI,CAAC,YAAY,IAAI,OAAO,GAC1B,SAAS,KAAK;IACZ;IACA;IACA;IACA,WAAW;GACb,CAAC;GAIL,OAAO;IACL;IACA;GACF;EACF,CACF;CACF;CAEA,MAAe,UACb,EAAE,aAAa,MAAM,eACrB,UACwB;EACxB,IAAI,CAAC,UACH,OAAO;EAGT,OAAO,MAAM,KAAK,OAChB,EACE,KAAK,cAAc,aAAa,MAAM,UAAU,QAAQ,EAC1D,GACA,YAAY;GACV,MAAM,SAAS;IAAE,aAAa;IAAM;GAAY;GAIhD,MAAM,WAAU,MADG,UAAU,QAAQ,KAAK,IAAI,EAAA,CACzB,MAAM,EAAE,cAAc,YAAY,QAAQ;GAC/D,IAAI,SAAS,MACX,OAAO,QAAQ;GAIjB,MAAM,cAAa,MADI,cAAc,QAAQ,KAAK,IAAI,EAAA,CAC1B,MAAM,EAAE,cAAc,YAAY,QAAQ;GACtE,IAAI,YAAY,MACd,OAAO,WAAW;GAGpB,OAAO;EACT,CACF;CACF;AACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { newlineRegex, regEx } from "../../../util/regex.js";
|
|
2
2
|
import { logger } from "../../../logger/index.js";
|
|
3
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
3
4
|
import { hashStream } from "../../../util/hash.js";
|
|
4
5
|
import { withCache } from "../../../util/cache/package/with-cache.js";
|
|
5
6
|
import { getApiBaseUrl } from "../../../util/github/url.js";
|
|
@@ -37,7 +38,7 @@ var GithubReleaseAttachmentsDatasource = class GithubReleaseAttachmentsDatasourc
|
|
|
37
38
|
return withCache({
|
|
38
39
|
ttlMinutes: 1440,
|
|
39
40
|
namespace: `datasource-${GithubReleaseAttachmentsDatasource.id}`,
|
|
40
|
-
key:
|
|
41
|
+
key: buildCacheKey("findDigestFile", release.html_url, digest)
|
|
41
42
|
}, () => this._findDigestFile(release, digest));
|
|
42
43
|
}
|
|
43
44
|
async _downloadAndDigest(asset, algorithm) {
|
|
@@ -48,7 +49,7 @@ var GithubReleaseAttachmentsDatasource = class GithubReleaseAttachmentsDatasourc
|
|
|
48
49
|
return withCache({
|
|
49
50
|
ttlMinutes: 1440,
|
|
50
51
|
namespace: `datasource-${GithubReleaseAttachmentsDatasource.id}`,
|
|
51
|
-
key:
|
|
52
|
+
key: buildCacheKey("downloadAndDigest", asset.browser_download_url, algorithm)
|
|
52
53
|
}, () => this._downloadAndDigest(asset, algorithm));
|
|
53
54
|
}
|
|
54
55
|
async findAssetWithDigest(release, digest) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/github-release-attachments/index.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport type {\n GithubDigestFile,\n GithubRestAsset,\n GithubRestRelease,\n} from '../../../util/github/types.ts';\nimport { getApiBaseUrl } from '../../../util/github/url.ts';\nimport { hashStream } from '../../../util/hash.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { GithubReleasesDatasource } from '../github-releases/index.ts';\nimport type { DigestConfig } from '../types.ts';\n\nfunction inferHashAlg(digest: string): string {\n switch (digest.length) {\n case 64:\n return 'sha256';\n default:\n case 96:\n return 'sha512';\n }\n}\n\nexport class GithubReleaseAttachmentsDatasource extends GithubReleasesDatasource {\n static override readonly id = 'github-release-attachments';\n\n constructor() {\n super(GithubReleaseAttachmentsDatasource.id);\n }\n\n private async _findDigestFile(\n release: GithubRestRelease,\n digest: string,\n ): Promise<GithubDigestFile | null> {\n const smallAssets = release.assets.filter(\n (a: GithubRestAsset) => a.size < 5 * 1024,\n );\n for (const asset of smallAssets) {\n const res = await this.http.getText(asset.browser_download_url);\n for (const line of res.body.split(newlineRegex)) {\n const [lineDigest, lineFilename] = line.split(regEx(/\\s+/), 2);\n if (lineDigest === digest) {\n return {\n assetName: asset.name,\n digestedFileName: lineFilename,\n currentVersion: release.tag_name,\n currentDigest: lineDigest,\n };\n }\n }\n }\n return null;\n }\n\n findDigestFile(\n release: GithubRestRelease,\n digest: string,\n ): Promise<GithubDigestFile | null> {\n return withCache(\n {\n ttlMinutes: 1440,\n namespace: `datasource-${GithubReleaseAttachmentsDatasource.id}`,\n key: `findDigestFile:${release.html_url}:${digest}`,\n },\n () => this._findDigestFile(release, digest),\n );\n }\n\n private async _downloadAndDigest(\n asset: GithubRestAsset,\n algorithm: string,\n ): Promise<string> {\n const res = this.http.stream(asset.browser_download_url);\n const digest = await hashStream(res, algorithm);\n return digest;\n }\n\n downloadAndDigest(\n asset: GithubRestAsset,\n algorithm: string,\n ): Promise<string> {\n return withCache(\n {\n ttlMinutes: 1440,\n namespace: `datasource-${GithubReleaseAttachmentsDatasource.id}`,\n key: `downloadAndDigest:${asset.browser_download_url}:${algorithm}`,\n },\n () => this._downloadAndDigest(asset, algorithm),\n );\n }\n\n async findAssetWithDigest(\n release: GithubRestRelease,\n digest: string,\n ): Promise<GithubDigestFile | null> {\n const algorithm = inferHashAlg(digest);\n const assetsBySize = release.assets.sort(\n (a: GithubRestAsset, b: GithubRestAsset) => {\n if (a.size < b.size) {\n return -1;\n }\n if (a.size > b.size) {\n return 1;\n }\n return 0;\n },\n );\n\n for (const asset of assetsBySize) {\n const assetDigest = await this.downloadAndDigest(asset, algorithm);\n if (assetDigest === digest) {\n return {\n assetName: asset.name,\n currentVersion: release.tag_name,\n currentDigest: assetDigest,\n };\n }\n }\n return null;\n }\n\n /** Identify the asset associated with a known digest. */\n async findDigestAsset(\n release: GithubRestRelease,\n digest: string,\n ): Promise<GithubDigestFile | null> {\n const digestFile = await this.findDigestFile(release, digest);\n if (digestFile) {\n return digestFile;\n }\n\n const asset = await this.findAssetWithDigest(release, digest);\n return asset;\n }\n\n /** Given a digest asset, find the equivalent digest in a different release. */\n async mapDigestAssetToRelease(\n digestAsset: GithubDigestFile,\n release: GithubRestRelease,\n ): Promise<string | null> {\n const current = digestAsset.currentVersion.replace(regEx(/^v/), '');\n const next = release.tag_name.replace(regEx(/^v/), '');\n\n if (digestAsset.digestedFileName) {\n const checksumAssetName = digestAsset.assetName.replace(current, next);\n const checksumAsset = release.assets.find(\n (a: GithubRestAsset) => a.name === checksumAssetName,\n );\n\n // If the checksum asset is not found in the new release, fall back to the download method\n if (checksumAsset) {\n const releaseFilename = digestAsset.digestedFileName.replace(\n current,\n next,\n );\n const res = await this.http.getText(checksumAsset.browser_download_url);\n for (const line of res.body.split(newlineRegex)) {\n const [lineDigest, lineFn] = line.split(regEx(/\\s+/), 2);\n if (lineFn === releaseFilename) {\n return lineDigest;\n }\n }\n return null;\n }\n }\n\n const oldFileName = digestAsset.digestedFileName ?? digestAsset.assetName;\n const fileName = oldFileName.replace(current, next);\n\n const asset = release.assets.find(\n (a: GithubRestAsset) => a.name === fileName,\n );\n\n if (!asset) {\n return null;\n }\n\n const algorithm = inferHashAlg(digestAsset.currentDigest);\n const newDigest = await this.downloadAndDigest(asset, algorithm);\n return newDigest;\n }\n\n /**\n * Attempts to resolve the digest for the specified package.\n *\n * The `newValue` supplied here should be a valid tag for the GitHub release.\n * Requires `currentValue` and `currentDigest`.\n *\n * There may be many assets attached to the release. This function will:\n * - Identify the asset pinned by `currentDigest` in the `currentValue` release\n * - Download small release assets, parse as checksum manifests (e.g. `SHASUMS.txt`).\n * - Download individual assets until `currentDigest` is encountered. This is limited to sha256 and sha512.\n * - Map the hashed asset to `newValue` and return the updated digest as a string\n */\n override async getDigest(\n {\n packageName: repo,\n currentValue,\n currentDigest,\n registryUrl,\n }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n logger.debug(\n { repo, currentValue, currentDigest, registryUrl, newValue },\n 'getDigest',\n );\n if (!currentDigest) {\n return null;\n }\n if (!currentValue) {\n return currentDigest;\n }\n if (!newValue) {\n return null;\n }\n\n const apiBaseUrl = getApiBaseUrl(registryUrl);\n const { body: currentRelease } =\n await this.http.getJsonUnchecked<GithubRestRelease>(\n `${apiBaseUrl}repos/${repo}/releases/tags/${currentValue}`,\n );\n const digestAsset = await this.findDigestAsset(\n currentRelease,\n currentDigest,\n );\n let newDigest: string | null;\n if (!digestAsset || newValue === currentValue) {\n newDigest = currentDigest;\n } else {\n const { body: newRelease } =\n await this.http.getJsonUnchecked<GithubRestRelease>(\n `${apiBaseUrl}repos/${repo}/releases/tags/${newValue}`,\n );\n newDigest = await this.mapDigestAssetToRelease(digestAsset, newRelease);\n }\n return newDigest;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/github-release-attachments/index.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { buildCacheKey } from '../../../util/cache/package/key.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport type {\n GithubDigestFile,\n GithubRestAsset,\n GithubRestRelease,\n} from '../../../util/github/types.ts';\nimport { getApiBaseUrl } from '../../../util/github/url.ts';\nimport { hashStream } from '../../../util/hash.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { GithubReleasesDatasource } from '../github-releases/index.ts';\nimport type { DigestConfig } from '../types.ts';\n\nfunction inferHashAlg(digest: string): string {\n switch (digest.length) {\n case 64:\n return 'sha256';\n default:\n case 96:\n return 'sha512';\n }\n}\n\nexport class GithubReleaseAttachmentsDatasource extends GithubReleasesDatasource {\n static override readonly id = 'github-release-attachments';\n\n constructor() {\n super(GithubReleaseAttachmentsDatasource.id);\n }\n\n private async _findDigestFile(\n release: GithubRestRelease,\n digest: string,\n ): Promise<GithubDigestFile | null> {\n const smallAssets = release.assets.filter(\n (a: GithubRestAsset) => a.size < 5 * 1024,\n );\n for (const asset of smallAssets) {\n const res = await this.http.getText(asset.browser_download_url);\n for (const line of res.body.split(newlineRegex)) {\n const [lineDigest, lineFilename] = line.split(regEx(/\\s+/), 2);\n if (lineDigest === digest) {\n return {\n assetName: asset.name,\n digestedFileName: lineFilename,\n currentVersion: release.tag_name,\n currentDigest: lineDigest,\n };\n }\n }\n }\n return null;\n }\n\n findDigestFile(\n release: GithubRestRelease,\n digest: string,\n ): Promise<GithubDigestFile | null> {\n return withCache(\n {\n ttlMinutes: 1440,\n namespace: `datasource-${GithubReleaseAttachmentsDatasource.id}`,\n key: buildCacheKey('findDigestFile', release.html_url, digest),\n },\n () => this._findDigestFile(release, digest),\n );\n }\n\n private async _downloadAndDigest(\n asset: GithubRestAsset,\n algorithm: string,\n ): Promise<string> {\n const res = this.http.stream(asset.browser_download_url);\n const digest = await hashStream(res, algorithm);\n return digest;\n }\n\n downloadAndDigest(\n asset: GithubRestAsset,\n algorithm: string,\n ): Promise<string> {\n return withCache(\n {\n ttlMinutes: 1440,\n namespace: `datasource-${GithubReleaseAttachmentsDatasource.id}`,\n key: buildCacheKey(\n 'downloadAndDigest',\n asset.browser_download_url,\n algorithm,\n ),\n },\n () => this._downloadAndDigest(asset, algorithm),\n );\n }\n\n async findAssetWithDigest(\n release: GithubRestRelease,\n digest: string,\n ): Promise<GithubDigestFile | null> {\n const algorithm = inferHashAlg(digest);\n const assetsBySize = release.assets.sort(\n (a: GithubRestAsset, b: GithubRestAsset) => {\n if (a.size < b.size) {\n return -1;\n }\n if (a.size > b.size) {\n return 1;\n }\n return 0;\n },\n );\n\n for (const asset of assetsBySize) {\n const assetDigest = await this.downloadAndDigest(asset, algorithm);\n if (assetDigest === digest) {\n return {\n assetName: asset.name,\n currentVersion: release.tag_name,\n currentDigest: assetDigest,\n };\n }\n }\n return null;\n }\n\n /** Identify the asset associated with a known digest. */\n async findDigestAsset(\n release: GithubRestRelease,\n digest: string,\n ): Promise<GithubDigestFile | null> {\n const digestFile = await this.findDigestFile(release, digest);\n if (digestFile) {\n return digestFile;\n }\n\n const asset = await this.findAssetWithDigest(release, digest);\n return asset;\n }\n\n /** Given a digest asset, find the equivalent digest in a different release. */\n async mapDigestAssetToRelease(\n digestAsset: GithubDigestFile,\n release: GithubRestRelease,\n ): Promise<string | null> {\n const current = digestAsset.currentVersion.replace(regEx(/^v/), '');\n const next = release.tag_name.replace(regEx(/^v/), '');\n\n if (digestAsset.digestedFileName) {\n const checksumAssetName = digestAsset.assetName.replace(current, next);\n const checksumAsset = release.assets.find(\n (a: GithubRestAsset) => a.name === checksumAssetName,\n );\n\n // If the checksum asset is not found in the new release, fall back to the download method\n if (checksumAsset) {\n const releaseFilename = digestAsset.digestedFileName.replace(\n current,\n next,\n );\n const res = await this.http.getText(checksumAsset.browser_download_url);\n for (const line of res.body.split(newlineRegex)) {\n const [lineDigest, lineFn] = line.split(regEx(/\\s+/), 2);\n if (lineFn === releaseFilename) {\n return lineDigest;\n }\n }\n return null;\n }\n }\n\n const oldFileName = digestAsset.digestedFileName ?? digestAsset.assetName;\n const fileName = oldFileName.replace(current, next);\n\n const asset = release.assets.find(\n (a: GithubRestAsset) => a.name === fileName,\n );\n\n if (!asset) {\n return null;\n }\n\n const algorithm = inferHashAlg(digestAsset.currentDigest);\n const newDigest = await this.downloadAndDigest(asset, algorithm);\n return newDigest;\n }\n\n /**\n * Attempts to resolve the digest for the specified package.\n *\n * The `newValue` supplied here should be a valid tag for the GitHub release.\n * Requires `currentValue` and `currentDigest`.\n *\n * There may be many assets attached to the release. This function will:\n * - Identify the asset pinned by `currentDigest` in the `currentValue` release\n * - Download small release assets, parse as checksum manifests (e.g. `SHASUMS.txt`).\n * - Download individual assets until `currentDigest` is encountered. This is limited to sha256 and sha512.\n * - Map the hashed asset to `newValue` and return the updated digest as a string\n */\n override async getDigest(\n {\n packageName: repo,\n currentValue,\n currentDigest,\n registryUrl,\n }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n logger.debug(\n { repo, currentValue, currentDigest, registryUrl, newValue },\n 'getDigest',\n );\n if (!currentDigest) {\n return null;\n }\n if (!currentValue) {\n return currentDigest;\n }\n if (!newValue) {\n return null;\n }\n\n const apiBaseUrl = getApiBaseUrl(registryUrl);\n const { body: currentRelease } =\n await this.http.getJsonUnchecked<GithubRestRelease>(\n `${apiBaseUrl}repos/${repo}/releases/tags/${currentValue}`,\n );\n const digestAsset = await this.findDigestAsset(\n currentRelease,\n currentDigest,\n );\n let newDigest: string | null;\n if (!digestAsset || newValue === currentValue) {\n newDigest = currentDigest;\n } else {\n const { body: newRelease } =\n await this.http.getJsonUnchecked<GithubRestRelease>(\n `${apiBaseUrl}repos/${repo}/releases/tags/${newValue}`,\n );\n newDigest = await this.mapDigestAssetToRelease(digestAsset, newRelease);\n }\n return newDigest;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { joinUrlParts } from "../../../util/url.js";
|
|
2
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
2
3
|
import { Datasource } from "../datasource.js";
|
|
3
4
|
import { defaultRegistryUrl, getApiBaseUrl } from "../../../util/gitlab/url.js";
|
|
4
5
|
import { GitlabHttp } from "../../../util/http/gitlab.js";
|
|
@@ -33,7 +34,7 @@ var GitlabPackagesDatasource = class GitlabPackagesDatasource extends Datasource
|
|
|
33
34
|
}
|
|
34
35
|
getReleases(config) {
|
|
35
36
|
return this.cached({
|
|
36
|
-
key:
|
|
37
|
+
key: buildCacheKey(config.registryUrl, config.packageName),
|
|
37
38
|
fallback: true
|
|
38
39
|
}, () => this.fetchReleases(config));
|
|
39
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/gitlab-packages/index.ts"],"sourcesContent":["import { defaultRegistryUrl, getApiBaseUrl } from '../../../util/gitlab/url.ts';\nimport { GitlabHttp } from '../../../util/http/gitlab.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport { datasource } from './common.ts';\nimport { GitlabPackages } from './schema.ts';\n\n// Gitlab Packages API: https://docs.gitlab.com/ee/api/packages.html\n\nexport class GitlabPackagesDatasource extends Datasource<GitlabHttp> {\n static readonly id = datasource;\n\n override supportsCustomRegistry(_packageName: string): boolean {\n return true;\n }\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return [defaultRegistryUrl];\n }\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `created_at` field in the results.';\n\n constructor() {\n super(datasource, new GitlabHttp(datasource));\n }\n\n static getGitlabPackageApiUrl(\n registryUrl: string,\n projectName: string,\n packageName: string,\n ): string {\n const projectNameEncoded = encodeURIComponent(projectName);\n const packageNameEncoded = encodeURIComponent(packageName);\n\n return joinUrlParts(\n getApiBaseUrl(registryUrl),\n 'projects',\n projectNameEncoded,\n `packages?package_name=${packageNameEncoded}&per_page=100`,\n );\n }\n\n private async fetchReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const [projectPart, packagePart] = packageName.split(':', 2);\n\n const apiUrl = GitlabPackagesDatasource.getGitlabPackageApiUrl(\n registryUrl,\n projectPart,\n packagePart,\n );\n\n const response = await this.fetchJson(apiUrl, GitlabPackages, {\n paginate: true,\n });\n\n const releases = response\n // Setting the package_name option when calling the GitLab API isn't enough to filter information about other packages\n // because this option is only implemented on GitLab > 12.9 and it only does a fuzzy search.\n .filter((pkg) => pkg.packageName === packagePart)\n .map((pkg) => pkg.release);\n\n return releases.length ? { releases } : null;\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n return this.cached(\n {\n
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/gitlab-packages/index.ts"],"sourcesContent":["import { buildCacheKey } from '../../../util/cache/package/key.ts';\nimport { defaultRegistryUrl, getApiBaseUrl } from '../../../util/gitlab/url.ts';\nimport { GitlabHttp } from '../../../util/http/gitlab.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport { datasource } from './common.ts';\nimport { GitlabPackages } from './schema.ts';\n\n// Gitlab Packages API: https://docs.gitlab.com/ee/api/packages.html\n\nexport class GitlabPackagesDatasource extends Datasource<GitlabHttp> {\n static readonly id = datasource;\n\n override supportsCustomRegistry(_packageName: string): boolean {\n return true;\n }\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return [defaultRegistryUrl];\n }\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `created_at` field in the results.';\n\n constructor() {\n super(datasource, new GitlabHttp(datasource));\n }\n\n static getGitlabPackageApiUrl(\n registryUrl: string,\n projectName: string,\n packageName: string,\n ): string {\n const projectNameEncoded = encodeURIComponent(projectName);\n const packageNameEncoded = encodeURIComponent(packageName);\n\n return joinUrlParts(\n getApiBaseUrl(registryUrl),\n 'projects',\n projectNameEncoded,\n `packages?package_name=${packageNameEncoded}&per_page=100`,\n );\n }\n\n private async fetchReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const [projectPart, packagePart] = packageName.split(':', 2);\n\n const apiUrl = GitlabPackagesDatasource.getGitlabPackageApiUrl(\n registryUrl,\n projectPart,\n packagePart,\n );\n\n const response = await this.fetchJson(apiUrl, GitlabPackages, {\n paginate: true,\n });\n\n const releases = response\n // Setting the package_name option when calling the GitLab API isn't enough to filter information about other packages\n // because this option is only implemented on GitLab > 12.9 and it only does a fuzzy search.\n .filter((pkg) => pkg.packageName === packagePart)\n .map((pkg) => pkg.release);\n\n return releases.length ? { releases } : null;\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n return this.cached(\n {\n key: buildCacheKey(config.registryUrl, config.packageName),\n fallback: true,\n },\n () => this.fetchReleases(config),\n );\n }\n}\n"],"mappings":";;;;;;;;AAWA,IAAa,2BAAb,MAAa,iCAAiC,WAAuB;CACnE,OAAgB,KAAK;CAErB,uBAAgC,cAA+B;EAC7D,OAAO;CACT;CAEA,uBAAgC,cAAgC;EAC9D,OAAO,CAAC,kBAAkB;CAC5B;CAEA,0BAA4C;CAC5C,uBACE;CAEF,cAAc;EACZ,MAAM,YAAY,IAAI,WAAW,UAAU,CAAC;CAC9C;CAEA,OAAO,uBACL,aACA,aACA,aACQ;EACR,MAAM,qBAAqB,mBAAmB,WAAW;EACzD,MAAM,qBAAqB,mBAAmB,WAAW;EAEzD,OAAO,aACL,cAAc,WAAW,GACzB,YACA,oBACA,yBAAyB,mBAAmB,cAC9C;CACF;CAEA,MAAc,cAAc,EAC1B,aACA,eACmD;;EAEnD,IAAI,CAAC,aACH,OAAO;EAGT,MAAM,CAAC,aAAa,eAAe,YAAY,MAAM,KAAK,CAAC;EAE3D,MAAM,SAAS,yBAAyB,uBACtC,aACA,aACA,WACF;EAMA,MAAM,YAAW,MAJM,KAAK,UAAU,QAAQ,gBAAgB,EAC5D,UAAU,KACZ,CAAC,EAAA,CAKE,QAAQ,QAAQ,IAAI,gBAAgB,WAAW,CAAC,CAChD,KAAK,QAAQ,IAAI,OAAO;EAE3B,OAAO,SAAS,SAAS,EAAE,SAAS,IAAI;CAC1C;CAEA,YAAY,QAA0D;EACpE,OAAO,KAAK,OACV;GACE,KAAK,cAAc,OAAO,aAAa,OAAO,WAAW;GACzD,UAAU;EACZ,SACM,KAAK,cAAc,MAAM,CACjC;CACF;AACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { joinUrlParts } from "../../../util/url.js";
|
|
2
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
2
3
|
import { withCache } from "../../../util/cache/package/with-cache.js";
|
|
3
4
|
import { asTimestamp } from "../../../util/timestamp.js";
|
|
4
5
|
import { Datasource } from "../datasource.js";
|
|
@@ -39,7 +40,7 @@ var GitlabReleasesDatasource = class GitlabReleasesDatasource extends Datasource
|
|
|
39
40
|
getReleases(config) {
|
|
40
41
|
return withCache({
|
|
41
42
|
namespace: `datasource-${GitlabReleasesDatasource.id}`,
|
|
42
|
-
key:
|
|
43
|
+
key: buildCacheKey(config.registryUrl, config.packageName),
|
|
43
44
|
fallback: true
|
|
44
45
|
}, () => this._getReleases(config));
|
|
45
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/gitlab-releases/index.ts"],"sourcesContent":["import { withCache } from '../../../util/cache/package/with-cache.ts';\nimport {\n defaultRegistryUrl,\n getApiBaseUrl,\n getSourceUrl,\n} from '../../../util/gitlab/url.ts';\nimport { GitlabHttp } from '../../../util/http/gitlab.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, Release, ReleaseResult } from '../types.ts';\nimport { GitlabReleases } from './schema.ts';\n\nexport class GitlabReleasesDatasource extends Datasource<GitlabHttp> {\n static readonly id = 'gitlab-releases';\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return [defaultRegistryUrl];\n }\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `released_at` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined by using the `packageName` and `registryUrl`.';\n\n constructor() {\n super(\n GitlabReleasesDatasource.id,\n new GitlabHttp(GitlabReleasesDatasource.id),\n );\n }\n\n private async _getReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const urlEncodedRepo = encodeURIComponent(packageName);\n const apiUrl = joinUrlParts(\n getApiBaseUrl(registryUrl),\n 'projects',\n urlEncodedRepo,\n 'releases',\n );\n\n const gitlabReleasesResponse = await this.fetchJson(apiUrl, GitlabReleases);\n\n return {\n sourceUrl: getSourceUrl(packageName, registryUrl),\n releases: gitlabReleasesResponse.map(({ tag_name, released_at }) => {\n const release: Release = {\n registryUrl,\n gitRef: tag_name,\n version: tag_name,\n releaseTimestamp: asTimestamp(released_at),\n };\n return release;\n }),\n };\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n return withCache(\n {\n namespace: `datasource-${GitlabReleasesDatasource.id}`,\n
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/gitlab-releases/index.ts"],"sourcesContent":["import { buildCacheKey } from '../../../util/cache/package/key.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport {\n defaultRegistryUrl,\n getApiBaseUrl,\n getSourceUrl,\n} from '../../../util/gitlab/url.ts';\nimport { GitlabHttp } from '../../../util/http/gitlab.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, Release, ReleaseResult } from '../types.ts';\nimport { GitlabReleases } from './schema.ts';\n\nexport class GitlabReleasesDatasource extends Datasource<GitlabHttp> {\n static readonly id = 'gitlab-releases';\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return [defaultRegistryUrl];\n }\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `released_at` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined by using the `packageName` and `registryUrl`.';\n\n constructor() {\n super(\n GitlabReleasesDatasource.id,\n new GitlabHttp(GitlabReleasesDatasource.id),\n );\n }\n\n private async _getReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const urlEncodedRepo = encodeURIComponent(packageName);\n const apiUrl = joinUrlParts(\n getApiBaseUrl(registryUrl),\n 'projects',\n urlEncodedRepo,\n 'releases',\n );\n\n const gitlabReleasesResponse = await this.fetchJson(apiUrl, GitlabReleases);\n\n return {\n sourceUrl: getSourceUrl(packageName, registryUrl),\n releases: gitlabReleasesResponse.map(({ tag_name, released_at }) => {\n const release: Release = {\n registryUrl,\n gitRef: tag_name,\n version: tag_name,\n releaseTimestamp: asTimestamp(released_at),\n };\n return release;\n }),\n };\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n return withCache(\n {\n namespace: `datasource-${GitlabReleasesDatasource.id}`,\n key: buildCacheKey(config.registryUrl, config.packageName),\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n}\n"],"mappings":";;;;;;;;;AAcA,IAAa,2BAAb,MAAa,iCAAiC,WAAuB;CACnE,OAAgB,KAAK;CAErB,uBAAgC,cAAgC;EAC9D,OAAO,CAAC,kBAAkB;CAC5B;CAEA,0BAA4C;CAC5C,uBACE;CACF,mBAAqC;CACrC,gBACE;CAEF,cAAc;EACZ,MACE,yBAAyB,IACzB,IAAI,WAAW,yBAAyB,EAAE,CAC5C;CACF;CAEA,MAAc,aAAa,EACzB,aACA,eACmD;;EAEnD,IAAI,CAAC,aACH,OAAO;EAGT,MAAM,iBAAiB,mBAAmB,WAAW;EACrD,MAAM,SAAS,aACb,cAAc,WAAW,GACzB,YACA,gBACA,UACF;EAEA,MAAM,yBAAyB,MAAM,KAAK,UAAU,QAAQ,cAAc;EAE1E,OAAO;GACL,WAAW,aAAa,aAAa,WAAW;GAChD,UAAU,uBAAuB,KAAK,EAAE,UAAU,kBAAkB;IAOlE,OAAO;KALL;KACA,QAAQ;KACR,SAAS;KACT,kBAAkB,YAAY,WAAW;IAE9B;GACf,CAAC;EACH;CACF;CAEA,YAAY,QAA0D;EACpE,OAAO,UACL;GACE,WAAW,cAAc,yBAAyB;GAClD,KAAK,cAAc,OAAO,aAAa,OAAO,WAAW;GACzD,UAAU;EACZ,SACM,KAAK,aAAa,MAAM,CAChC;CACF;AACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { logger } from "../../../logger/index.js";
|
|
2
2
|
import { joinUrlParts } from "../../../util/url.js";
|
|
3
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
3
4
|
import { asTimestamp } from "../../../util/timestamp.js";
|
|
4
5
|
import { Datasource } from "../datasource.js";
|
|
5
6
|
import { defaultRegistryUrl, getApiBaseUrl, getDepHost, getSourceUrl } from "../../../util/gitlab/url.js";
|
|
@@ -35,7 +36,7 @@ var GitlabTagsDatasource = class GitlabTagsDatasource extends Datasource {
|
|
|
35
36
|
}
|
|
36
37
|
getReleases(config) {
|
|
37
38
|
return this.cached({
|
|
38
|
-
key:
|
|
39
|
+
key: buildCacheKey("getReleases", getDepHost(config.registryUrl), config.packageName),
|
|
39
40
|
fallback: true
|
|
40
41
|
}, () => this.fetchReleases(config));
|
|
41
42
|
}
|
|
@@ -67,7 +68,7 @@ var GitlabTagsDatasource = class GitlabTagsDatasource extends Datasource {
|
|
|
67
68
|
}
|
|
68
69
|
getDigest(config, newValue) {
|
|
69
70
|
return this.cached({
|
|
70
|
-
key:
|
|
71
|
+
key: buildCacheKey("getDigest", getDepHost(config.registryUrl), config.packageName, newValue),
|
|
71
72
|
fallback: true
|
|
72
73
|
}, () => this.fetchDigest(config, newValue));
|
|
73
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/gitlab-tags/index.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport {\n defaultRegistryUrl,\n getApiBaseUrl,\n getDepHost,\n getSourceUrl,\n} from '../../../util/gitlab/url.ts';\nimport { GitlabHttp } from '../../../util/http/gitlab.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { Datasource } from '../datasource.ts';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n ReleaseResult,\n} from '../types.ts';\nimport { GitlabCommit, GitlabCommits, GitlabTags } from './schema.ts';\n\nexport class GitlabTagsDatasource extends Datasource<GitlabHttp> {\n static readonly id = 'gitlab-tags';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'To get release timestamp we use the `created_at` field from the response.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined by using the `packageName` and `registryUrl`.';\n\n constructor() {\n super(GitlabTagsDatasource.id, new GitlabHttp(GitlabTagsDatasource.id));\n }\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return [defaultRegistryUrl];\n }\n\n private async fetchReleases({\n registryUrl,\n packageName: repo,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const apiBaseUrl = getApiBaseUrl(registryUrl);\n\n const urlEncodedRepo = encodeURIComponent(repo);\n\n // tag\n const url = joinUrlParts(\n apiBaseUrl,\n `projects`,\n urlEncodedRepo,\n `repository/tags?per_page=100`,\n );\n\n const gitlabTags = (\n await this.http.getJson(url, { paginate: true }, GitlabTags)\n ).body;\n\n const dependency: ReleaseResult = {\n sourceUrl: getSourceUrl(repo, registryUrl),\n releases: [],\n };\n dependency.releases = gitlabTags.map(({ name, commit }) => ({\n version: name,\n gitRef: name,\n releaseTimestamp: asTimestamp(commit.created_at),\n }));\n\n return dependency;\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n return this.cached(\n {\n key:
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/gitlab-tags/index.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { buildCacheKey } from '../../../util/cache/package/key.ts';\nimport {\n defaultRegistryUrl,\n getApiBaseUrl,\n getDepHost,\n getSourceUrl,\n} from '../../../util/gitlab/url.ts';\nimport { GitlabHttp } from '../../../util/http/gitlab.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { Datasource } from '../datasource.ts';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n ReleaseResult,\n} from '../types.ts';\nimport { GitlabCommit, GitlabCommits, GitlabTags } from './schema.ts';\n\nexport class GitlabTagsDatasource extends Datasource<GitlabHttp> {\n static readonly id = 'gitlab-tags';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'To get release timestamp we use the `created_at` field from the response.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined by using the `packageName` and `registryUrl`.';\n\n constructor() {\n super(GitlabTagsDatasource.id, new GitlabHttp(GitlabTagsDatasource.id));\n }\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return [defaultRegistryUrl];\n }\n\n private async fetchReleases({\n registryUrl,\n packageName: repo,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const apiBaseUrl = getApiBaseUrl(registryUrl);\n\n const urlEncodedRepo = encodeURIComponent(repo);\n\n // tag\n const url = joinUrlParts(\n apiBaseUrl,\n `projects`,\n urlEncodedRepo,\n `repository/tags?per_page=100`,\n );\n\n const gitlabTags = (\n await this.http.getJson(url, { paginate: true }, GitlabTags)\n ).body;\n\n const dependency: ReleaseResult = {\n sourceUrl: getSourceUrl(repo, registryUrl),\n releases: [],\n };\n dependency.releases = gitlabTags.map(({ name, commit }) => ({\n version: name,\n gitRef: name,\n releaseTimestamp: asTimestamp(commit.created_at),\n }));\n\n return dependency;\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n return this.cached(\n {\n key: buildCacheKey(\n 'getReleases',\n getDepHost(config.registryUrl),\n config.packageName,\n ),\n fallback: true,\n },\n () => this.fetchReleases(config),\n );\n }\n\n /**\n * gitlab.getDigest\n *\n * Returs the latest commit hash of the repository.\n */\n private async fetchDigest(\n { packageName: repo, registryUrl }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n const apiBaseUrl = getApiBaseUrl(registryUrl);\n\n const urlEncodedRepo = encodeURIComponent(repo);\n let digest: string | null = null;\n\n try {\n if (newValue) {\n const url = joinUrlParts(\n apiBaseUrl,\n `projects`,\n urlEncodedRepo,\n `repository/commits/`,\n newValue,\n );\n const gitlabCommit = await this.http.getJson(url, GitlabCommit);\n digest = gitlabCommit.body.id;\n } else {\n const url = joinUrlParts(\n apiBaseUrl,\n `projects`,\n urlEncodedRepo,\n `repository/commits?per_page=1`,\n );\n const gitlabCommits = await this.http.getJson(url, GitlabCommits);\n digest = gitlabCommits.body[0].id;\n }\n } catch (err) {\n logger.debug(\n { gitlabRepo: repo, err, registryUrl },\n 'Error getting latest commit from Gitlab repo',\n );\n }\n\n return digest;\n }\n\n override getDigest(\n config: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n return this.cached(\n {\n key: buildCacheKey(\n 'getDigest',\n getDepHost(config.registryUrl),\n config.packageName,\n newValue,\n ),\n fallback: true,\n },\n () => this.fetchDigest(config, newValue),\n );\n }\n}\n"],"mappings":";;;;;;;;;AAmBA,IAAa,uBAAb,MAAa,6BAA6B,WAAuB;CAC/D,OAAgB,KAAK;CAErB,0BAA4C;CAC5C,uBACE;CACF,mBAAqC;CACrC,gBACE;CAEF,cAAc;EACZ,MAAM,qBAAqB,IAAI,IAAI,WAAW,qBAAqB,EAAE,CAAC;CACxE;CAEA,uBAAgC,cAAgC;EAC9D,OAAO,CAAC,kBAAkB;CAC5B;CAEA,MAAc,cAAc,EAC1B,aACA,aAAa,QACsC;EACnD,MAAM,aAAa,cAAc,WAAW;EAK5C,MAAM,MAAM,aACV,YACA,YALqB,mBAAmB,IAM3B,GACb,8BACF;EAEA,MAAM,cACJ,MAAM,KAAK,KAAK,QAAQ,KAAK,EAAE,UAAU,KAAK,GAAG,UAAU,EAAA,CAC3D;EAEF,MAAM,aAA4B;GAChC,WAAW,aAAa,MAAM,WAAW;GACzC,UAAU,CAAC;EACb;EACA,WAAW,WAAW,WAAW,KAAK,EAAE,MAAM,cAAc;GAC1D,SAAS;GACT,QAAQ;GACR,kBAAkB,YAAY,OAAO,UAAU;EACjD,EAAE;EAEF,OAAO;CACT;CAEA,YAAY,QAA0D;EACpE,OAAO,KAAK,OACV;GACE,KAAK,cACH,eACA,WAAW,OAAO,WAAW,GAC7B,OAAO,WACT;GACA,UAAU;EACZ,SACM,KAAK,cAAc,MAAM,CACjC;CACF;;;;;;CAOA,MAAc,YACZ,EAAE,aAAa,MAAM,eACrB,UACwB;EACxB,MAAM,aAAa,cAAc,WAAW;EAE5C,MAAM,iBAAiB,mBAAmB,IAAI;EAC9C,IAAI,SAAwB;EAE5B,IAAI;GACF,IAAI,UAAU;IACZ,MAAM,MAAM,aACV,YACA,YACA,gBACA,uBACA,QACF;IAEA,UAAS,MADkB,KAAK,KAAK,QAAQ,KAAK,YAAY,EAAA,CACxC,KAAK;GAC7B,OAAO;IACL,MAAM,MAAM,aACV,YACA,YACA,gBACA,+BACF;IAEA,UAAS,MADmB,KAAK,KAAK,QAAQ,KAAK,aAAa,EAAA,CACzC,KAAK,EAAE,CAAC;GACjC;EACF,SAAS,KAAK;GACZ,OAAO,MACL;IAAE,YAAY;IAAM;IAAK;GAAY,GACrC,8CACF;EACF;EAEA,OAAO;CACT;CAEA,UACE,QACA,UACwB;EACxB,OAAO,KAAK,OACV;GACE,KAAK,cACH,aACA,WAAW,OAAO,WAAW,GAC7B,OAAO,aACP,QACF;GACA,UAAU;EACZ,SACM,KAAK,YAAY,QAAQ,QAAQ,CACzC;CACF;AACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { coerceArray } from "../../../util/array.js";
|
|
2
2
|
import { joinUrlParts } from "../../../util/url.js";
|
|
3
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
3
4
|
import { id } from "../../versioning/glasskube/index.js";
|
|
4
5
|
import { withCache } from "../../../util/cache/package/with-cache.js";
|
|
5
6
|
import { Datasource } from "../datasource.js";
|
|
@@ -33,7 +34,7 @@ var GlasskubePackagesDatasource = class GlasskubePackagesDatasource extends Data
|
|
|
33
34
|
getReleases(config) {
|
|
34
35
|
return withCache({
|
|
35
36
|
namespace: `datasource-${GlasskubePackagesDatasource.id}`,
|
|
36
|
-
key:
|
|
37
|
+
key: buildCacheKey(config.registryUrl, config.packageName),
|
|
37
38
|
fallback: true
|
|
38
39
|
}, () => this._getReleases(config));
|
|
39
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["glasskubeVersioning.id"],"sources":["../../../../lib/modules/datasource/glasskube-packages/index.ts"],"sourcesContent":["import { coerceArray } from '../../../util/array.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport * as glasskubeVersioning from '../../versioning/glasskube/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport {\n GlasskubePackageManifest,\n GlasskubePackageVersions,\n} from './schema.ts';\n\nexport class GlasskubePackagesDatasource extends Datasource {\n static readonly id = 'glasskube-packages';\n static readonly defaultRegistryUrl =\n 'https://packages.dl.glasskube.dev/packages';\n override supportsCustomRegistry(_packageName: string): boolean {\n return true;\n }\n override defaultVersioning = glasskubeVersioning.id;\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return [GlasskubePackagesDatasource.defaultRegistryUrl];\n }\n\n constructor() {\n super(GlasskubePackagesDatasource.id);\n }\n\n private async _getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const result: ReleaseResult = { releases: [] };\n\n const { val: versions, err: versionsErr } = await this.http\n .getYamlSafe(\n joinUrlParts(registryUrl!, packageName, 'versions.yaml'),\n GlasskubePackageVersions,\n )\n .unwrap();\n\n if (versionsErr) {\n this.handleGenericErrors(versionsErr);\n }\n\n result.releases = versions.versions.map((it) => ({\n version: it.version,\n }));\n result.tags = { latest: versions.latestVersion };\n\n const { val: latestManifest, err: latestManifestErr } = await this.http\n .getYamlSafe(\n joinUrlParts(\n registryUrl!,\n packageName,\n versions.latestVersion,\n 'package.yaml',\n ),\n GlasskubePackageManifest,\n )\n .unwrap();\n\n if (latestManifestErr) {\n this.handleGenericErrors(latestManifestErr);\n }\n\n for (const ref of coerceArray(latestManifest?.references)) {\n if (ref.label.toLowerCase() === 'github') {\n result.sourceUrl = ref.url;\n } else if (ref.label.toLowerCase() === 'website') {\n result.homepage = ref.url;\n }\n }\n\n return result;\n }\n\n override getReleases(\n config: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n return withCache(\n {\n namespace: `datasource-${GlasskubePackagesDatasource.id}`,\n key:
|
|
1
|
+
{"version":3,"file":"index.js","names":["glasskubeVersioning.id"],"sources":["../../../../lib/modules/datasource/glasskube-packages/index.ts"],"sourcesContent":["import { coerceArray } from '../../../util/array.ts';\nimport { buildCacheKey } from '../../../util/cache/package/key.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport * as glasskubeVersioning from '../../versioning/glasskube/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport {\n GlasskubePackageManifest,\n GlasskubePackageVersions,\n} from './schema.ts';\n\nexport class GlasskubePackagesDatasource extends Datasource {\n static readonly id = 'glasskube-packages';\n static readonly defaultRegistryUrl =\n 'https://packages.dl.glasskube.dev/packages';\n override supportsCustomRegistry(_packageName: string): boolean {\n return true;\n }\n override defaultVersioning = glasskubeVersioning.id;\n\n override getDefaultRegistryUrls(_packageName: string): string[] {\n return [GlasskubePackagesDatasource.defaultRegistryUrl];\n }\n\n constructor() {\n super(GlasskubePackagesDatasource.id);\n }\n\n private async _getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const result: ReleaseResult = { releases: [] };\n\n const { val: versions, err: versionsErr } = await this.http\n .getYamlSafe(\n joinUrlParts(registryUrl!, packageName, 'versions.yaml'),\n GlasskubePackageVersions,\n )\n .unwrap();\n\n if (versionsErr) {\n this.handleGenericErrors(versionsErr);\n }\n\n result.releases = versions.versions.map((it) => ({\n version: it.version,\n }));\n result.tags = { latest: versions.latestVersion };\n\n const { val: latestManifest, err: latestManifestErr } = await this.http\n .getYamlSafe(\n joinUrlParts(\n registryUrl!,\n packageName,\n versions.latestVersion,\n 'package.yaml',\n ),\n GlasskubePackageManifest,\n )\n .unwrap();\n\n if (latestManifestErr) {\n this.handleGenericErrors(latestManifestErr);\n }\n\n for (const ref of coerceArray(latestManifest?.references)) {\n if (ref.label.toLowerCase() === 'github') {\n result.sourceUrl = ref.url;\n } else if (ref.label.toLowerCase() === 'website') {\n result.homepage = ref.url;\n }\n }\n\n return result;\n }\n\n override getReleases(\n config: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n return withCache(\n {\n namespace: `datasource-${GlasskubePackagesDatasource.id}`,\n key: buildCacheKey(config.registryUrl, config.packageName),\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n}\n"],"mappings":";;;;;;;;AAYA,IAAa,8BAAb,MAAa,oCAAoC,WAAW;CAC1D,OAAgB,KAAK;CACrB,OAAgB,qBACd;CACF,uBAAgC,cAA+B;EAC7D,OAAO;CACT;CACA,oBAA6BA;CAE7B,uBAAgC,cAAgC;EAC9D,OAAO,CAAC,4BAA4B,kBAAkB;CACxD;CAEA,cAAc;EACZ,MAAM,4BAA4B,EAAE;CACtC;CAEA,MAAc,aAAa,EACzB,aACA,eACmD;EACnD,MAAM,SAAwB,EAAE,UAAU,CAAC,EAAE;EAE7C,MAAM,EAAE,KAAK,UAAU,KAAK,gBAAgB,MAAM,KAAK,KACpD,YACC,aAAa,aAAc,aAAa,eAAe,GACvD,wBACF,CAAC,CACA,OAAO;EAEV,IAAI,aACF,KAAK,oBAAoB,WAAW;EAGtC,OAAO,WAAW,SAAS,SAAS,KAAK,QAAQ,EAC/C,SAAS,GAAG,QACd,EAAE;EACF,OAAO,OAAO,EAAE,QAAQ,SAAS,cAAc;EAE/C,MAAM,EAAE,KAAK,gBAAgB,KAAK,sBAAsB,MAAM,KAAK,KAChE,YACC,aACE,aACA,aACA,SAAS,eACT,cACF,GACA,wBACF,CAAC,CACA,OAAO;EAEV,IAAI,mBACF,KAAK,oBAAoB,iBAAiB;EAG5C,KAAK,MAAM,OAAO,YAAY,gBAAgB,UAAU,GACtD,IAAI,IAAI,MAAM,YAAY,MAAM,UAC9B,OAAO,YAAY,IAAI;OAClB,IAAI,IAAI,MAAM,YAAY,MAAM,WACrC,OAAO,WAAW,IAAI;EAI1B,OAAO;CACT;CAEA,YACE,QAC+B;EAC/B,OAAO,UACL;GACE,WAAW,cAAc,4BAA4B;GACrD,KAAK,cAAc,OAAO,aAAa,OAAO,WAAW;GACzD,UAAU;EACZ,SACM,KAAK,aAAa,MAAM,CAChC;CACF;AACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { get, set } from "../../../util/cache/memory/index.js";
|
|
2
2
|
import { getEnv } from "../../../util/env.js";
|
|
3
3
|
import { regEx } from "../../../util/regex.js";
|
|
4
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
4
5
|
import { isString, isTruthy } from "@sindresorhus/is";
|
|
5
6
|
import moo from "moo";
|
|
6
7
|
//#region lib/modules/datasource/go/goproxy-parser.ts
|
|
@@ -19,7 +20,7 @@ import moo from "moo";
|
|
|
19
20
|
*/
|
|
20
21
|
function parseGoproxy(input = getEnv().GOPROXY) {
|
|
21
22
|
if (!isString(input)) return [];
|
|
22
|
-
const cacheKey =
|
|
23
|
+
const cacheKey = buildCacheKey("goproxy", input);
|
|
23
24
|
const cachedResult = get(cacheKey);
|
|
24
25
|
if (cachedResult) return cachedResult;
|
|
25
26
|
const result = input.split(regEx(/(?<segment>[^,|]*(?:,|\|))/)).filter(isTruthy).map((s) => s.split(regEx(/(?<separator>,|\|)/))).filter(([url]) => isTruthy(url)).map(([url, separator]) => ({
|
|
@@ -78,7 +79,7 @@ function parseNoproxy(input = (() => {
|
|
|
78
79
|
return env.GONOPROXY ?? env.GOPRIVATE;
|
|
79
80
|
})()) {
|
|
80
81
|
if (!isString(input)) return null;
|
|
81
|
-
const cacheKey =
|
|
82
|
+
const cacheKey = buildCacheKey("noproxy", input);
|
|
82
83
|
const cachedResult = get(cacheKey);
|
|
83
84
|
if (cachedResult !== void 0) return cachedResult;
|
|
84
85
|
const noproxyPattern = [...noproxyLexer.reset(input)].map(({ value }) => value).join("");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goproxy-parser.js","names":["memCache.get"],"sources":["../../../../lib/modules/datasource/go/goproxy-parser.ts"],"sourcesContent":["import { isString, isTruthy } from '@sindresorhus/is';\nimport moo from 'moo';\nimport * as memCache from '../../../util/cache/memory/index.ts';\nimport { getEnv } from '../../../util/env.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { GoproxyItem } from './types.ts';\n\n/**\n * Parse `GOPROXY` to the sequence of url + fallback strategy tags.\n *\n * @example\n * parseGoproxy('foo.example.com|bar.example.com,baz.example.com')\n * // [\n * // { url: 'foo.example.com', fallback: '|' },\n * // { url: 'bar.example.com', fallback: ',' },\n * // { url: 'baz.example.com', fallback: '|' },\n * // ]\n *\n * @see https://golang.org/ref/mod#goproxy-protocol\n */\nexport function parseGoproxy(\n input: string | undefined = getEnv().GOPROXY,\n): GoproxyItem[] {\n if (!isString(input)) {\n return [];\n }\n\n const cacheKey =
|
|
1
|
+
{"version":3,"file":"goproxy-parser.js","names":["memCache.get"],"sources":["../../../../lib/modules/datasource/go/goproxy-parser.ts"],"sourcesContent":["import { isString, isTruthy } from '@sindresorhus/is';\nimport moo from 'moo';\nimport * as memCache from '../../../util/cache/memory/index.ts';\nimport { buildCacheKey } from '../../../util/cache/package/key.ts';\nimport { getEnv } from '../../../util/env.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { GoproxyItem } from './types.ts';\n\n/**\n * Parse `GOPROXY` to the sequence of url + fallback strategy tags.\n *\n * @example\n * parseGoproxy('foo.example.com|bar.example.com,baz.example.com')\n * // [\n * // { url: 'foo.example.com', fallback: '|' },\n * // { url: 'bar.example.com', fallback: ',' },\n * // { url: 'baz.example.com', fallback: '|' },\n * // ]\n *\n * @see https://golang.org/ref/mod#goproxy-protocol\n */\nexport function parseGoproxy(\n input: string | undefined = getEnv().GOPROXY,\n): GoproxyItem[] {\n if (!isString(input)) {\n return [];\n }\n\n const cacheKey = buildCacheKey('goproxy', input);\n const cachedResult = memCache.get<GoproxyItem[]>(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n\n const result: GoproxyItem[] = input\n .split(regEx(/(?<segment>[^,|]*(?:,|\\|))/))\n .filter(isTruthy)\n .map((s) => s.split(regEx(/(?<separator>,|\\|)/)))\n // Empty segments (`a||b`, `,a`) carry no url to query, and keeping them\n // would apply their separator as the fallback strategy for a bogus request\n .filter(([url]) => isTruthy(url))\n .map(([url, separator]) => ({\n url,\n fallback: separator === ',' ? ',' : '|',\n }));\n\n memCache.set(cacheKey, result);\n return result;\n}\n\n// https://golang.org/pkg/path/#Match\n/* oxlint-disable renovate/require-regex-util -- moo lexer patterns must be native RegExp: moo recompiles their source with the native engine and rejects RE2 instances (TODO #12870) */\nconst noproxyLexer = moo.states({\n main: {\n separator: {\n match: /\\s*?,\\s*?/, // TODO #12870\n value: (_: string) => '|',\n },\n asterisk: {\n match: '*',\n value: (_: string) => '[^/]*',\n },\n qmark: {\n match: '?',\n value: (_: string) => '[^/]',\n },\n characterRangeOpen: {\n match: '[',\n push: 'characterRange',\n value: (_: string) => '[',\n },\n trailingSlash: {\n match: /\\/$/,\n value: (_: string) => '',\n },\n char: {\n match: /[^*?\\\\[\\n]/,\n value: (s: string) => s.replace(regEx('\\\\.', 'g'), '\\\\.'),\n },\n escapedChar: {\n match: /\\\\./, // TODO #12870\n value: (s: string) => s.slice(1),\n },\n },\n characterRange: {\n char: /[^\\\\\\]\\n]/, // TODO #12870\n escapedChar: {\n match: /\\\\./, // TODO #12870\n value: (s: string) => s.slice(1),\n },\n characterRangeEnd: {\n match: ']',\n pop: 1,\n },\n },\n});\n/* oxlint-enable renovate/require-regex-util */\n\nexport function parseNoproxy(\n input: unknown = (() => {\n const env = getEnv();\n return env.GONOPROXY ?? env.GOPRIVATE;\n })(),\n): RegExp | null {\n if (!isString(input)) {\n return null;\n }\n\n const cacheKey = buildCacheKey('noproxy', input);\n const cachedResult = memCache.get<RegExp | null>(cacheKey);\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n\n const noproxyPattern = [...noproxyLexer.reset(input)]\n .map(({ value }) => value)\n .join('');\n\n const result = noproxyPattern\n ? regEx(`^(?:${noproxyPattern})(?:/.*)?$`)\n : null;\n\n memCache.set(cacheKey, result);\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,aACd,QAA4B,OAAO,CAAC,CAAC,SACtB;CACf,IAAI,CAAC,SAAS,KAAK,GACjB,OAAO,CAAC;CAGV,MAAM,WAAW,cAAc,WAAW,KAAK;CAC/C,MAAM,eAAeA,IAA4B,QAAQ;CACzD,IAAI,cACF,OAAO;CAGT,MAAM,SAAwB,MAC3B,MAAM,MAAM,4BAA4B,CAAC,CAAC,CAC1C,OAAO,QAAQ,CAAC,CAChB,KAAK,MAAM,EAAE,MAAM,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAGhD,QAAQ,CAAC,SAAS,SAAS,GAAG,CAAC,CAAC,CAChC,KAAK,CAAC,KAAK,gBAAgB;EAC1B;EACA,UAAU,cAAc,MAAM,MAAM;CACtC,EAAE;CAEJ,IAAa,UAAU,MAAM;CAC7B,OAAO;AACT;AAIA,MAAM,eAAe,IAAI,OAAO;CAC9B,MAAM;EACJ,WAAW;GACT,OAAO;GACP,QAAQ,MAAc;EACxB;EACA,UAAU;GACR,OAAO;GACP,QAAQ,MAAc;EACxB;EACA,OAAO;GACL,OAAO;GACP,QAAQ,MAAc;EACxB;EACA,oBAAoB;GAClB,OAAO;GACP,MAAM;GACN,QAAQ,MAAc;EACxB;EACA,eAAe;GACb,OAAO;GACP,QAAQ,MAAc;EACxB;EACA,MAAM;GACJ,OAAO;GACP,QAAQ,MAAc,EAAE,QAAQ,MAAM,OAAO,GAAG,GAAG,KAAK;EAC1D;EACA,aAAa;GACX,OAAO;GACP,QAAQ,MAAc,EAAE,MAAM,CAAC;EACjC;CACF;CACA,gBAAgB;EACd,MAAM;EACN,aAAa;GACX,OAAO;GACP,QAAQ,MAAc,EAAE,MAAM,CAAC;EACjC;EACA,mBAAmB;GACjB,OAAO;GACP,KAAK;EACP;CACF;AACF,CAAC;AAGD,SAAgB,aACd,eAAwB;CACtB,MAAM,MAAM,OAAO;CACnB,OAAO,IAAI,aAAa,IAAI;AAC9B,EAAA,CAAG,GACY;CACf,IAAI,CAAC,SAAS,KAAK,GACjB,OAAO;CAGT,MAAM,WAAW,cAAc,WAAW,KAAK;CAC/C,MAAM,eAAeA,IAA4B,QAAQ;CACzD,IAAI,iBAAiB,KAAA,GACnB,OAAO;CAGT,MAAM,iBAAiB,CAAC,GAAG,aAAa,MAAM,KAAK,CAAC,CAAC,CAClD,KAAK,EAAE,YAAY,KAAK,CAAC,CACzB,KAAK,EAAE;CAEV,MAAM,SAAS,iBACX,MAAM,OAAO,eAAe,WAAW,IACvC;CAEJ,IAAa,UAAU,MAAM;CAC7B,OAAO;AACT"}
|
|
@@ -3,6 +3,7 @@ import { regEx } from "../../../util/regex.js";
|
|
|
3
3
|
import { addSecretForSanitizing } from "../../../util/sanitize.js";
|
|
4
4
|
import { logger } from "../../../logger/index.js";
|
|
5
5
|
import { parseUrl } from "../../../util/url.js";
|
|
6
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
6
7
|
import { id } from "../../versioning/semver/index.js";
|
|
7
8
|
import { withCache } from "../../../util/cache/package/with-cache.js";
|
|
8
9
|
import { Datasource } from "../datasource.js";
|
|
@@ -40,10 +41,10 @@ var GoDatasource = class GoDatasource extends Datasource {
|
|
|
40
41
|
return this.goproxy.getReleases(config);
|
|
41
42
|
}
|
|
42
43
|
getReleases(config) {
|
|
43
|
-
const constraintsFilteringKey = config.constraintsFiltering
|
|
44
|
+
const constraintsFilteringKey = config.constraintsFiltering === "none" ? "" : config.constraintsFiltering;
|
|
44
45
|
return withCache({
|
|
45
46
|
namespace: `datasource-${GoDatasource.id}`,
|
|
46
|
-
key:
|
|
47
|
+
key: buildCacheKey("getReleases", config.packageName, constraintsFilteringKey),
|
|
47
48
|
cacheable: isPublicGoPackage(config.packageName),
|
|
48
49
|
fallback: true
|
|
49
50
|
}, () => this._getReleases(config));
|
|
@@ -80,7 +81,7 @@ var GoDatasource = class GoDatasource extends Datasource {
|
|
|
80
81
|
getDigest(config, newValue) {
|
|
81
82
|
return withCache({
|
|
82
83
|
namespace: `datasource-${GoDatasource.id}`,
|
|
83
|
-
key:
|
|
84
|
+
key: buildCacheKey("getDigest", config.packageName, newValue),
|
|
84
85
|
cacheable: isPublicGoPackage(config.packageName),
|
|
85
86
|
fallback: true
|
|
86
87
|
}, () => this._getDigest(config, newValue));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["semverId"],"sources":["../../../../lib/modules/datasource/go/index.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { getEnv } from '../../../util/env.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { addSecretForSanitizing } from '../../../util/sanitize.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport { id as semverId } from '../../versioning/semver/index.ts';\nimport { BitbucketTagsDatasource } from '../bitbucket-tags/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport { ForgejoTagsDatasource } from '../forgejo-tags/index.ts';\nimport { GitTagsDatasource } from '../git-tags/index.ts';\nimport { GiteaTagsDatasource } from '../gitea-tags/index.ts';\nimport { GithubTagsDatasource } from '../github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../gitlab-tags/index.ts';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n ReleaseResult,\n} from '../types.ts';\nimport { BaseGoDatasource } from './base.ts';\nimport { isPublicGoPackage } from './common.ts';\nimport { parseGoproxy } from './goproxy-parser.ts';\nimport { GoDirectDatasource } from './releases-direct.ts';\nimport { GoProxyDatasource } from './releases-goproxy.ts';\n\nexport class GoDatasource extends Datasource {\n static readonly id = 'go';\n\n override readonly defaultVersioning = semverId;\n\n constructor() {\n super(GoDatasource.id);\n }\n\n override readonly defaultConfig = {\n commitMessageTopic: 'module {{depName}}',\n };\n\n override supportsCustomRegistry(_packageName: string): boolean {\n return false;\n }\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'If the release timestamp is not returned from the respective datasoure used to fetch the releases, then Renovate uses the `Time` field in the results instead. For modules hosted on GitHub, a later GitHub Release publication time or git tag creation time takes precedence over both.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `packageName` and `registryUrl`.';\n\n readonly goproxy = new GoProxyDatasource();\n readonly direct = new GoDirectDatasource();\n\n // Pseudo versions https://go.dev/ref/mod#pseudo-versions\n static readonly pversionRegexp = regEx(\n /v\\d+\\.\\d+\\.\\d+-(?:\\w+\\.)?(?:0\\.)?\\d{14}-(?<digest>[a-f0-9]{12})/,\n );\n\n private _getReleases(\n config: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n return this.goproxy.getReleases(config);\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const constraintsFilteringKey =\n config.constraintsFiltering
|
|
1
|
+
{"version":3,"file":"index.js","names":["semverId"],"sources":["../../../../lib/modules/datasource/go/index.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { buildCacheKey } from '../../../util/cache/package/key.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { getEnv } from '../../../util/env.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { addSecretForSanitizing } from '../../../util/sanitize.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport { id as semverId } from '../../versioning/semver/index.ts';\nimport { BitbucketTagsDatasource } from '../bitbucket-tags/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport { ForgejoTagsDatasource } from '../forgejo-tags/index.ts';\nimport { GitTagsDatasource } from '../git-tags/index.ts';\nimport { GiteaTagsDatasource } from '../gitea-tags/index.ts';\nimport { GithubTagsDatasource } from '../github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../gitlab-tags/index.ts';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n ReleaseResult,\n} from '../types.ts';\nimport { BaseGoDatasource } from './base.ts';\nimport { isPublicGoPackage } from './common.ts';\nimport { parseGoproxy } from './goproxy-parser.ts';\nimport { GoDirectDatasource } from './releases-direct.ts';\nimport { GoProxyDatasource } from './releases-goproxy.ts';\n\nexport class GoDatasource extends Datasource {\n static readonly id = 'go';\n\n override readonly defaultVersioning = semverId;\n\n constructor() {\n super(GoDatasource.id);\n }\n\n override readonly defaultConfig = {\n commitMessageTopic: 'module {{depName}}',\n };\n\n override supportsCustomRegistry(_packageName: string): boolean {\n return false;\n }\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'If the release timestamp is not returned from the respective datasoure used to fetch the releases, then Renovate uses the `Time` field in the results instead. For modules hosted on GitHub, a later GitHub Release publication time or git tag creation time takes precedence over both.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `packageName` and `registryUrl`.';\n\n readonly goproxy = new GoProxyDatasource();\n readonly direct = new GoDirectDatasource();\n\n // Pseudo versions https://go.dev/ref/mod#pseudo-versions\n static readonly pversionRegexp = regEx(\n /v\\d+\\.\\d+\\.\\d+-(?:\\w+\\.)?(?:0\\.)?\\d{14}-(?<digest>[a-f0-9]{12})/,\n );\n\n private _getReleases(\n config: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n return this.goproxy.getReleases(config);\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n const constraintsFilteringKey =\n config.constraintsFiltering === 'none' ? '' : config.constraintsFiltering;\n return withCache(\n {\n namespace: `datasource-${GoDatasource.id}`,\n key: buildCacheKey(\n 'getReleases',\n config.packageName,\n constraintsFilteringKey,\n ),\n cacheable: isPublicGoPackage(config.packageName),\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n\n /**\n * go.getDigest\n *\n * This datasource resolves a go module URL into its source repository\n * and then fetches the digest if it is on GitHub.\n *\n * This function will:\n * - Determine the source URL for the module\n * - Call the respective getDigest in github to retrieve the commit hash\n */\n private async _getDigest(\n { packageName }: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n if (parseGoproxy().some(({ url }) => url === 'off')) {\n logger.debug(\n `Skip digest fetch for ${packageName} with GOPROXY containing \"off\"`,\n );\n return null;\n }\n\n const source = await BaseGoDatasource.getDatasource(packageName);\n if (!source) {\n return null;\n }\n\n // ignore vX.Y.Z-(0.)? pseudo versions that are used Go Modules - look up default branch instead\n // ignore v0.0.0 versions to fetch the digest of default branch, not the commit of non-existing tag `v0.0.0`\n const tag =\n newValue &&\n !GoDatasource.pversionRegexp.test(newValue) &&\n newValue !== 'v0.0.0'\n ? newValue\n : undefined;\n\n switch (source.datasource) {\n case ForgejoTagsDatasource.id: {\n return this.direct.forgejo.getDigest(source, tag);\n }\n case GitTagsDatasource.id: {\n return this.direct.git.getDigest(source, tag);\n }\n case GiteaTagsDatasource.id: {\n return this.direct.gitea.getDigest(source, tag);\n }\n case GithubTagsDatasource.id: {\n return this.direct.github.getDigest(source, tag);\n }\n case BitbucketTagsDatasource.id: {\n return this.direct.bitbucket.getDigest(source, tag);\n }\n case GitlabTagsDatasource.id: {\n return this.direct.gitlab.getDigest(source, tag);\n }\n /* v8 ignore next: can never happen, makes lint happy */\n default: {\n return null;\n }\n }\n }\n\n override getDigest(\n config: DigestConfig,\n newValue?: string,\n ): Promise<string | null> {\n return withCache(\n {\n namespace: `datasource-${GoDatasource.id}`,\n key: buildCacheKey('getDigest', config.packageName, newValue),\n cacheable: isPublicGoPackage(config.packageName),\n fallback: true,\n },\n () => this._getDigest(config, newValue),\n );\n }\n}\n\nconst env = getEnv();\n/* v8 ignore if -- hard to test */\nif (isString(env.GOPROXY)) {\n const uri = parseUrl(env.GOPROXY);\n if (uri?.password) {\n addSecretForSanitizing(uri.password, 'global');\n } else if (uri?.username) {\n addSecretForSanitizing(uri.username, 'global');\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAa,eAAb,MAAa,qBAAqB,WAAW;CAC3C,OAAgB,KAAK;CAErB,oBAAsCA;CAEtC,cAAc;EACZ,MAAM,aAAa,EAAE;CACvB;CAEA,gBAAkC,EAChC,oBAAoB,qBACtB;CAEA,uBAAgC,cAA+B;EAC7D,OAAO;CACT;CAEA,0BAA4C;CAC5C,uBACE;CACF,mBAAqC;CACrC,gBACE;CAEF,UAAmB,IAAI,kBAAkB;CACzC,SAAkB,IAAI,mBAAmB;CAGzC,OAAgB,iBAAiB,MAC/B,iEACF;CAEA,aACE,QAC+B;EAC/B,OAAO,KAAK,QAAQ,YAAY,MAAM;CACxC;CAEA,YAAY,QAA0D;EACpE,MAAM,0BACJ,OAAO,yBAAyB,SAAS,KAAK,OAAO;EACvD,OAAO,UACL;GACE,WAAW,cAAc,aAAa;GACtC,KAAK,cACH,eACA,OAAO,aACP,uBACF;GACA,WAAW,kBAAkB,OAAO,WAAW;GAC/C,UAAU;EACZ,SACM,KAAK,aAAa,MAAM,CAChC;CACF;;;;;;;;;;;CAYA,MAAc,WACZ,EAAE,eACF,UACwB;EACxB,IAAI,aAAa,CAAC,CAAC,MAAM,EAAE,UAAU,QAAQ,KAAK,GAAG;GACnD,OAAO,MACL,yBAAyB,YAAY,+BACvC;GACA,OAAO;EACT;EAEA,MAAM,SAAS,MAAM,iBAAiB,cAAc,WAAW;EAC/D,IAAI,CAAC,QACH,OAAO;EAKT,MAAM,MACJ,YACA,CAAC,aAAa,eAAe,KAAK,QAAQ,KAC1C,aAAa,WACT,WACA,KAAA;EAEN,QAAQ,OAAO,YAAf;GACE,KAAK,sBAAsB,IACzB,OAAO,KAAK,OAAO,QAAQ,UAAU,QAAQ,GAAG;GAElD,KAAK,kBAAkB,IACrB,OAAO,KAAK,OAAO,IAAI,UAAU,QAAQ,GAAG;GAE9C,KAAK,oBAAoB,IACvB,OAAO,KAAK,OAAO,MAAM,UAAU,QAAQ,GAAG;GAEhD,KAAK,qBAAqB,IACxB,OAAO,KAAK,OAAO,OAAO,UAAU,QAAQ,GAAG;GAEjD,KAAK,wBAAwB,IAC3B,OAAO,KAAK,OAAO,UAAU,UAAU,QAAQ,GAAG;GAEpD,KAAK,qBAAqB,IACxB,OAAO,KAAK,OAAO,OAAO,UAAU,QAAQ,GAAG;;GAGjD,SACE,OAAO;EAEX;CACF;CAEA,UACE,QACA,UACwB;EACxB,OAAO,UACL;GACE,WAAW,cAAc,aAAa;GACtC,KAAK,cAAc,aAAa,OAAO,aAAa,QAAQ;GAC5D,WAAW,kBAAkB,OAAO,WAAW;GAC/C,UAAU;EACZ,SACM,KAAK,WAAW,QAAQ,QAAQ,CACxC;CACF;AACF;AAEA,MAAM,MAAM,OAAO;;AAEnB,IAAI,SAAS,IAAI,OAAO,GAAG;CACzB,MAAM,MAAM,SAAS,IAAI,OAAO;CAChC,IAAI,KAAK,UACP,uBAAuB,IAAI,UAAU,QAAQ;MACxC,IAAI,KAAK,UACd,uBAAuB,IAAI,UAAU,QAAQ;AAEjD"}
|
|
@@ -3,6 +3,7 @@ import { newlineRegex, regEx } from "../../../util/regex.js";
|
|
|
3
3
|
import { logger } from "../../../logger/index.js";
|
|
4
4
|
import { joinUrlParts, parseUrl, trimLeadingSlash, trimTrailingSlash } from "../../../util/url.js";
|
|
5
5
|
import { detectPlatform } from "../../../util/common.js";
|
|
6
|
+
import { buildCacheKey } from "../../../util/cache/package/key.js";
|
|
6
7
|
import { ExternalHostError } from "../../../types/errors/external-host-error.js";
|
|
7
8
|
import { filterMap } from "../../../util/filter-map.js";
|
|
8
9
|
import { api } from "../../versioning/go-mod-directive/index.js";
|
|
@@ -315,11 +316,13 @@ var GoProxyDatasource = class GoProxyDatasource extends Datasource {
|
|
|
315
316
|
static getCacheKey({ packageName, constraintsFiltering }) {
|
|
316
317
|
const goproxy = getEnv().GOPROXY;
|
|
317
318
|
const noproxy = parseNoproxy();
|
|
318
|
-
const constraintsFilteringKey = constraintsFiltering
|
|
319
|
-
return
|
|
319
|
+
const constraintsFilteringKey = constraintsFiltering === "none" ? "" : constraintsFiltering;
|
|
320
|
+
return buildCacheKey("getReleases", packageName, goproxy, noproxy?.toString(), constraintsFilteringKey);
|
|
320
321
|
}
|
|
321
322
|
static getVersionedCacheKey(packageName, version) {
|
|
322
|
-
|
|
323
|
+
const goproxy = getEnv().GOPROXY;
|
|
324
|
+
const noproxy = parseNoproxy();
|
|
325
|
+
return buildCacheKey("goDirective", packageName, version, goproxy, noproxy?.toString());
|
|
323
326
|
}
|
|
324
327
|
};
|
|
325
328
|
//#endregion
|