@@ -46,11 +46,57 @@ for version in "${versions[@]}"; do
4646
4747 # Parse image manifest for sha
4848 authToken=" $( curl -fsSL " https://docker-auth.elastic.co/auth?service=token-service&scope=repository:$upstreamImageRepo :pull" | jq -r .token) "
49- digest=" $( curl --head -fsSL -H ' Accept: application/vnd.docker.distribution.manifest.v2+json' -H " Authorization: Bearer $authToken " " https://docker.elastic.co/v2/$upstreamImageRepo /manifests/$fullVersion " | tr -d ' \r' | gawk -F ' :[[:space:]]+' ' tolower($1) == "docker-content-digest" { print $2 }' ) "
49+ manifestList=" $(
50+ curl -D- -fsSL \
51+ -H ' Accept: application/vnd.docker.distribution.manifest.list.v2+json' \
52+ -H ' Accept: application/vnd.docker.distribution.manifest.v2+json' \
53+ -H " Authorization: Bearer $authToken " \
54+ " https://docker.elastic.co/v2/$upstreamImageRepo /manifests/$fullVersion " \
55+ | tr -d ' \r'
56+ ) "
57+ digest=" $( gawk -F ' :[[:space:]]+' ' tolower($1) == "docker-content-digest" { print $2; exit }' <<< " $manifestList" ) "
58+ manifestList=" $( gawk ' /^$/ { pre = 1; next } pre { print }' <<< " $manifestList" ) "
5059
5160 # Format image reference (image@sha)
5261 upstreamImageDigest=" $upstreamImage @$digest "
5362
63+ schemaVersion=" $( jq -r ' .schemaVersion' <<< " $manifestList" ) "
64+ [ " $schemaVersion " = 2 ] # sanity check
65+ mediaType=" $( jq -r ' .mediaType' <<< " $manifestList" ) "
66+ case " $mediaType " in
67+ ' application/vnd.docker.distribution.manifest.v2+json' )
68+ upstreamImageArchitectures=' amd64'
69+ ;;
70+
71+ ' application/vnd.docker.distribution.manifest.list.v2+json' )
72+ upstreamImageArchitectures=" $(
73+ jq -r '
74+ .manifests[].platform
75+ | if .os != "linux" then
76+ .os + "-"
77+ else "" end
78+ + if .architecture == "arm" then
79+ "arm32"
80+ elif .architecture == "386" then
81+ "i386"
82+ else .architecture end
83+ + if .variant then
84+ .variant
85+ elif .architecture == "arm64" then
86+ "v8"
87+ else "" end
88+ ' <<< " $manifestList" \
89+ | sort -u \
90+ | xargs
91+ ) "
92+ ;;
93+
94+ * )
95+ echo >&2 " error: unknown media type on '$upstreamImageDigest ': '$mediaType '"
96+ exit 1
97+ ;;
98+ esac
99+
54100 upstreamDockerfileTag=" v$fullVersion "
55101 upstreamDockerfileLink=" https://github.com/elastic/dockerfiles/tree/$upstreamDockerfileTag /$upstreamProduct "
56102 upstreamDockerfile=" ${upstreamDockerfileLink// tree/ raw} /Dockerfile"
@@ -65,6 +111,7 @@ for version in "${versions[@]}"; do
65111
66112 sed -e ' s!%%VERSION%%!' " $fullVersion " ' !g' \
67113 -e ' s!%%UPSTREAM_IMAGE_DIGEST%%!' " $upstreamImageDigest " ' !g' \
114+ -e ' s!%%UPSTREAM_IMAGE_ARCHITECTURES%%!' " $upstreamImageArchitectures " ' !g' \
68115 -e ' s!%%UPSTREAM_DOCKERFILE_LINK%%!' " $upstreamDockerfileLink " ' !g' \
69116 -e ' s!%%UPSTREAM_DOCKER_BUILD%%!' " $upstreamDockerBuild " ' !g' \
70117 Dockerfile.template > " $version /Dockerfile"
0 commit comments