Skip to content

Commit

Permalink
fix(go): handle pseudo version with digest updates (#26746)
Browse files Browse the repository at this point in the history
  • Loading branch information
rarkins committed Jan 20, 2024
1 parent 281aeb7 commit 6362acd
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 8 deletions.
6 changes: 6 additions & 0 deletions lib/modules/datasource/go/releases-goproxy.spec.ts
Expand Up @@ -344,6 +344,7 @@ describe('modules/datasource/go/releases-goproxy', () => {
codeBlock`
v1.0.0 2018-08-13T15:31:12Z
v1.0.1
v1.28.1-20230721020619-4464c06fa399.4
`,
)
.get('/@v/v1.0.1.info')
Expand All @@ -361,6 +362,11 @@ describe('modules/datasource/go/releases-goproxy', () => {
releases: [
{ releaseTimestamp: '2018-08-13T15:31:12Z', version: 'v1.0.0' },
{ releaseTimestamp: '2019-10-16T16:15:28Z', version: 'v1.0.1' },
{
newDigest: '4464c06fa399',
releaseTimestamp: '20230721020619',
version: 'v1.28.1-20230721020619-4464c06fa399.4',
},
],
sourceUrl: 'https://github.com/google/btree',
tags: { latest: 'v1.0.1' },
Expand Down
32 changes: 25 additions & 7 deletions lib/modules/datasource/go/releases-goproxy.ts
Expand Up @@ -18,6 +18,10 @@ const parsedGoproxy: Record<string, GoproxyItem[]> = {};

const modRegex = regEx(/^(?<baseMod>.*?)(?:[./]v(?<majorVersion>\d+))?$/);

const pversionRegexp = regEx(
/v\d+\.\d+\.\d+-(?:"\w+\.)?(?:0\.)?(?<releaseTimestamp>\d{14})-(?<digest>[a-f0-9]{12})/,
);

export class GoProxyDatasource extends Datasource {
static readonly id = 'go-proxy';

Expand Down Expand Up @@ -211,10 +215,24 @@ export class GoProxyDatasource extends Datasource {
.split(newlineRegex)
.filter(is.nonEmptyStringAndNotWhitespace)
.map((str) => {
const [version, releaseTimestamp] = str.split(regEx(/\s+/));
return DateTime.fromISO(releaseTimestamp).isValid
? { version, releaseTimestamp }
: { version };
let version: string | undefined;
let newDigest: string | undefined;
let releaseTimestamp: string | undefined;
[version, releaseTimestamp] = str.split(regEx(/\s+/));

if (!DateTime.fromISO(releaseTimestamp).isValid) {
version = str;
releaseTimestamp = undefined;
}
const digestMatch = pversionRegexp.exec(version);

if (!releaseTimestamp && digestMatch?.groups?.releaseTimestamp) {
releaseTimestamp = digestMatch.groups.releaseTimestamp;
}
if (digestMatch?.groups?.digest) {
newDigest = digestMatch.groups.digest;
}
return { version, newDigest, releaseTimestamp };
});
}

Expand Down Expand Up @@ -246,7 +264,7 @@ export class GoProxyDatasource extends Datasource {
const res = await this.http.getJson<VersionInfo>(url);
return res.body.Version;
} catch (err) {
logger.debug({ err }, 'Failed to get latest version');
logger.trace({ err }, 'Failed to get latest version');
return null;
}
}
Expand All @@ -272,10 +290,10 @@ export class GoProxyDatasource extends Datasource {
try {
const res = await this.listVersions(baseUrl, pkg);
const releases = await p.map(res, async (versionInfo) => {
const { version, releaseTimestamp } = versionInfo;
const { version, newDigest, releaseTimestamp } = versionInfo;

if (releaseTimestamp) {
return { version, releaseTimestamp };
return { version, newDigest, releaseTimestamp };
}

try {
Expand Down
2 changes: 2 additions & 0 deletions lib/modules/datasource/metadata.spec.ts
Expand Up @@ -284,13 +284,15 @@ describe('modules/datasource/metadata', () => {
{ version: '1.0.1', releaseTimestamp: '2000-01-01T12:34:56' },
{ version: '1.0.2', releaseTimestamp: '2000-01-02T12:34:56.000Z' },
{ version: '1.0.3', releaseTimestamp: '2000-01-03T14:34:56.000+02:00' },
{ version: '1.0.4', releaseTimestamp: '20000103150210' },
],
};
addMetaData(dep, MavenDatasource.id, 'foobar');
expect(dep.releases).toMatchObject([
{ releaseTimestamp: '2000-01-01T12:34:56.000Z' },
{ releaseTimestamp: '2000-01-02T12:34:56.000Z' },
{ releaseTimestamp: '2000-01-03T12:34:56.000Z' },
{ releaseTimestamp: '2000-01-03T15:02:10.000Z' },
]);
});

Expand Down
9 changes: 8 additions & 1 deletion lib/modules/datasource/metadata.ts
Expand Up @@ -87,7 +87,14 @@ export function normalizeDate(input: any): string | null {
// 2. Format of `input` is very exotic
// (from `DateTime.fromISO()` perspective)
//
const luxonDate = DateTime.fromISO(input, { zone: 'UTC' });

let luxonDate = DateTime.fromISO(input, { zone: 'UTC' });
if (luxonDate.isValid) {
return luxonDate.toISO();
}
luxonDate = DateTime.fromFormat(input, 'yyyyMMddHHmmss', {
zone: 'UTC',
});
if (luxonDate.isValid) {
return luxonDate.toISO();
}
Expand Down
28 changes: 28 additions & 0 deletions lib/modules/manager/gomod/__snapshots__/extract.spec.ts.snap
Expand Up @@ -23,6 +23,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 4,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "bcc4c8345a21",
Expand All @@ -35,6 +36,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 5,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v1.1.0",
Expand Down Expand Up @@ -97,6 +99,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 11,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "d5fe4b57a186",
Expand All @@ -109,6 +112,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 12,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "4bda8fa99001",
Expand All @@ -121,6 +125,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 13,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "b1a1dbde6fdc",
Expand All @@ -133,6 +138,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 14,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v1.0.0",
Expand All @@ -155,6 +161,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 16,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "fc0cef2ff331",
Expand All @@ -167,6 +174,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 17,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "d14ea06fba99",
Expand All @@ -179,6 +187,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 18,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "906e15686e63",
Expand All @@ -191,6 +200,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 19,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "03e26ff3f1de",
Expand All @@ -203,6 +213,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 20,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "1e272ff78dcb",
Expand All @@ -215,6 +226,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 21,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "0b12d6b521d8",
Expand All @@ -227,6 +239,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 22,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "ae77be60afb1",
Expand All @@ -239,6 +252,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 23,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "9fc7bb800b55",
Expand All @@ -251,6 +265,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 24,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v1.8.0",
Expand Down Expand Up @@ -313,6 +328,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 30,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "a61a99592b77",
Expand All @@ -325,6 +341,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 31,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "f15292f7a699",
Expand All @@ -337,6 +354,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 32,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "a16b91a3ba80",
Expand All @@ -349,6 +367,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 33,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v0.2.0",
Expand Down Expand Up @@ -411,6 +430,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 39,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v1.0.6",
Expand Down Expand Up @@ -453,6 +473,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 43,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v1.0.2",
Expand Down Expand Up @@ -485,6 +506,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 46,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v2.3.0",
Expand Down Expand Up @@ -517,6 +539,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 49,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v0.1.2",
Expand Down Expand Up @@ -559,6 +582,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 53,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "c39426892332",
Expand All @@ -571,6 +595,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 54,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentDigest": "98c5dad5d1a0",
Expand All @@ -583,6 +608,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 55,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v0.3.0",
Expand Down Expand Up @@ -615,6 +641,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 58,
"multiLine": true,
},
"versioning": "loose",
},
{
"currentValue": "v0.1.2",
Expand Down Expand Up @@ -648,6 +675,7 @@ exports[`modules/manager/gomod/extract extractPackageFile() extracts multi-line
"lineNumber": 61,
"multiLine": true,
},
"versioning": "loose",
},
]
`;
Expand Down
1 change: 1 addition & 0 deletions lib/modules/manager/gomod/extract.ts
Expand Up @@ -32,6 +32,7 @@ function getDep(
if (digestMatch?.groups?.digest) {
dep.currentDigest = digestMatch.groups.digest;
dep.digestOneAndOnly = true;
dep.versioning = 'loose';
}
return dep;
}
Expand Down

0 comments on commit 6362acd

Please sign in to comment.