diff --git a/lib/versioning/docker/index.ts b/lib/versioning/docker/index.ts index 4dc32bc918545a15fc4a7a768dcae37add691583..e9c5464d1948ab4488b4658d76ddde1917d02dc0 100644 --- a/lib/versioning/docker/index.ts +++ b/lib/versioning/docker/index.ts @@ -22,16 +22,15 @@ class DockerVersioningApi extends GenericVersioningApi { return null; } const versionPieces = version.replace(regEx(/^v/), '').split('-'); - const prefix = versionPieces.shift(); - const suffix = versionPieces.join('-'); - const m = versionPattern.exec(prefix); - if (!m?.groups) { + const [prefix, ...suffixPieces] = versionPieces; + const matchGroups = prefix?.match(versionPattern)?.groups; + if (!matchGroups) { return null; } - const { version: ver, prerelease } = m.groups; + const { version: ver, prerelease } = matchGroups; const release = ver.split('.').map(Number); - return { release, suffix, prerelease }; + return { release, suffix: suffixPieces.join('-'), prerelease }; } protected override _compare(version: string, other: string): number { @@ -65,16 +64,23 @@ class DockerVersioningApi extends GenericVersioningApi { return -1; } // alphabetic order - return parsed1.prerelease.localeCompare(parsed2.prerelease); + if (parsed1.prerelease && parsed2.prerelease) { + return parsed1.prerelease.localeCompare(parsed2.prerelease); + } } + // equals - return parsed2.suffix.localeCompare(parsed1.suffix); + const suffix1 = parsed1.suffix ?? ''; + const suffix2 = parsed2.suffix ?? ''; + return suffix2.localeCompare(suffix1); } override isCompatible(version: string, current: string): boolean { const parsed1 = this._parse(version); const parsed2 = this._parse(current); - return ( + return !!( + parsed1 && + parsed2 && parsed1.suffix === parsed2.suffix && parsed1.release.length === parsed2.release.length ); diff --git a/tsconfig.strict.json b/tsconfig.strict.json index a6360199ca6d55c7d87a4407f9a95dd6c2eaca77..8efc64c76437268c77d17ebc626367ffbbd47db3 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -391,7 +391,6 @@ "lib/versioning/aws-machine-image/index.ts", "lib/versioning/common.ts", "lib/versioning/composer/index.ts", - "lib/versioning/docker/index.ts", "lib/versioning/generic.ts", "lib/versioning/git/index.ts", "lib/versioning/hashicorp/index.ts",