diff --git a/services/docker/docker-fixtures.js b/services/docker/docker-fixtures.js index a8f17aaa7a1bb..5f0001af3f5d6 100644 --- a/services/docker/docker-fixtures.js +++ b/services/docker/docker-fixtures.js @@ -2998,6 +2998,49 @@ const versionDataWithVaryingArchitectures = [ { name: '2.6', images: [] }, ] +const versionDataWithArchSpecificVersions = [ + { + name: '3.8-arm64', + images: [ + { + digest: + 'sha256:3d62c3ceeba113f72efaaf3a35d83081963fa2cd29be76ed1aaa87b59f6f8eae', + architecture: 'arm64', + }, + ], + }, + { + name: '3.8-amd64', + images: [ + { + digest: + 'sha256:661bdba24d94ee8f1e4002eb3a87d7062244dd2583fb294471e9e00a7bfba45d', + architecture: 'amd64', + }, + ], + }, + { + name: '3.9-arm64', + images: [ + { + digest: + 'sha256:1c1d100e50a7684afcbdc82929de1bc79bee8adcaafd367c38e5aa7eed4d6e19', + architecture: 'arm64', + }, + ], + }, + { + name: '3.9-amd64', + images: [ + { + digest: + 'sha256:faf4f034c82d40b66a7285a5e9d305f543a2726961cc6da11206770ef013244e', + architecture: 'amd64', + }, + ], + }, +] + export { sizeDataNoTagSemVerSort, versionDataNoTagDateSort, @@ -3005,4 +3048,5 @@ export { versionDataNoTagSemVerSort, versionDataWithTag, versionDataWithVaryingArchitectures, + versionDataWithArchSpecificVersions, } diff --git a/services/docker/docker-version.service.js b/services/docker/docker-version.service.js index 7fef8557fdf4e..7bf715eadd8b6 100644 --- a/services/docker/docker-version.service.js +++ b/services/docker/docker-version.service.js @@ -131,7 +131,14 @@ export default class DockerVersion extends BaseJsonService { const { digest } = imageTag return { version: getDigestSemVerMatches({ data: pagedData, digest }) } } else if (!tag && sort === 'semver') { - const matches = data.map(d => d.name) + const matches = data + .filter(d => d.images.some(image => image.architecture === arch)) + .map(d => d.name) + if (matches.length === 0) { + throw new InvalidResponse({ + prettyMessage: `no images found for arch ${arch}`, + }) + } return { version: latest(matches) } } else { version = data.find(d => d.name === tag) diff --git a/services/docker/docker-version.spec.js b/services/docker/docker-version.spec.js index bd1681c27b0da..73c61e4eab85f 100644 --- a/services/docker/docker-version.spec.js +++ b/services/docker/docker-version.spec.js @@ -8,6 +8,7 @@ import { versionDataNoTagSemVerSort, versionDataWithTag, versionDataWithVaryingArchitectures, + versionDataWithArchSpecificVersions, } from './docker-fixtures.js' describe('DockerVersion', function () { @@ -65,6 +66,13 @@ describe('DockerVersion', function () { }).expect({ version: '3.10.4', }) + given({ + data: versionDataWithArchSpecificVersions, + sort: 'semver', + arch: 'arm64', + }).expect({ + version: '3.9-arm64', + }) }) it('throws InvalidResponse error with latest tag and no amd64 architecture digests', function () {