-
Notifications
You must be signed in to change notification settings - Fork 443
/
.architectures-lib
48 lines (41 loc) · 1.48 KB
/
.architectures-lib
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env bash
hasBashbrewArch() {
local version="$1"; shift
local bashbrewArch="$1"; shift
local arches="$(grep -m1 'bashbrew-architectures:' "$version/Dockerfile" | cut -d':' -f2)"
[[ " $arches " == *" $bashbrewArch "* ]]
}
_generateParentRepoToArches() {
local repo="$1"; shift
local officialImagesUrl='https://github.com/docker-library/official-images/raw/master/library/'
eval "declare -g -A parentRepoToArches=( $(
find . -name 'Dockerfile' -exec awk '
toupper($1) == "FROM" && $2 !~ /^('"$repo"'|scratch|.*\/.*)(:|$)/ {
print "'"$officialImagesUrl"'" $2
}
' '{}' + \
| sort -u \
| xargs bashbrew cat --format '[{{ .RepoName }}:{{ .TagName }}]="{{ join " " .TagEntry.Architectures }}"'
) )"
# could do, but returns arm64 rather than arm64v8
#readarray -t ubiarch < <(docker manifest inspect redhat/ubi9-minimal | jq '.manifests[].platform.architecture')
local ubiarch=(amd64 arm64v8 s390x ppc64le)
parentRepoToArches[redhat/ubi9-minimal]=${ubiarch[@]//\"/}
}
_generateParentRepoToArches 'mariadb'
parentArches() {
local version="$1"; shift # "1.8", etc
local parent="$(awk 'toupper($1) == "FROM" { print $2 }' "$version/Dockerfile")"
echo "${parentRepoToArches[$parent]:-}"
}
versionArches() {
local version="$1"; shift # "1.8", etc
local parentArches="$(parentArches "$version")"
local variantArches=()
for arch in $parentArches; do
if hasBashbrewArch "$version" "$arch"; then
variantArches+=( "$arch" )
fi
done
echo "${variantArches[*]}"
}