1- #! /bin/bash
2- set -eu
1+ #! /usr/ bin/env bash
2+ set -Eeuo pipefail
33
44declare -A aliases=(
55 [4]=' latest'
@@ -8,11 +8,14 @@ declare -A aliases=(
88self=" $( basename " $BASH_SOURCE " ) "
99cd " $( dirname " $( readlink -f " $BASH_SOURCE " ) " ) "
1010
11- versions=( * / )
12- versions=( " ${versions[@]%/ } " )
11+ if [ " $# " -eq 0 ]; then
12+ versions=( * / )
13+ versions=( " ${versions[@]%/ } " )
14+ eval " set -- $versions "
15+ fi
1316
1417# sort version numbers with highest first
15- IFS=$' \n ' ; versions=( $( echo " ${versions[*]} " | sort -rV) ); unset IFS
18+ IFS=$' \n ' ; set -- $( sort -rV <<< " $* " ) ; unset IFS
1619
1720# get the most recent commit which modified any of "$@"
1821fileCommit () {
@@ -38,17 +41,19 @@ dirCommit() {
3841
3942getArches () {
4043 local repo=" $1 " ; shift
41- local officialImagesUrl= ' https://github.com/docker-library/official-images/raw/master /library/ '
44+ local officialImagesBase= " ${BASHBREW_LIBRARY :- https:// github.com/ docker-library/ official-images/ raw/ HEAD / library} / "
4245
43- eval " declare -g -A parentRepoToArches=( $(
44- find -name ' Dockerfile' -exec awk '
45- toupper($1) == "FROM" && $2 !~ /^(' " $repo " ' |scratch|microsoft\/[^:]+)(:|$)/ {
46- print "' " $officialImagesUrl " ' " $2
46+ local parentRepoToArchesStr
47+ parentRepoToArchesStr=" $(
48+ find -name ' Dockerfile' -exec awk -v officialImagesBase=" $officialImagesBase " '
49+ toupper($1) == "FROM" && $2 !~ /^(' " $repo " ' |scratch|.*\/.*)(:|$)/ {
50+ printf "%s%s\n", officialImagesBase, $2
4751 }
4852 ' ' {}' + \
4953 | sort -u \
50- | xargs bashbrew cat --format ' [{{ .RepoName }}:{{ .TagName }}]="{{ join " " .TagEntry.Architectures }}"'
51- ) )"
54+ | xargs -r bashbrew cat --format ' ["{{ .RepoName }}:{{ .TagName }}"]="{{ join " " .TagEntry.Architectures }}"'
55+ ) "
56+ eval " declare -g -A parentRepoToArches=( $parentRepoToArchesStr )"
5257}
5358getArches ' adminer'
5459
@@ -66,7 +71,9 @@ join() {
6671 echo " ${out# $sep } "
6772}
6873
69- for version in " ${versions[@]} " ; do
74+ for version; do
75+ export version
76+
7077 commit=" $( dirCommit " $version " ) "
7178
7279 fullVersion=" $( git show " $commit " :" $version /Dockerfile" | awk '
@@ -86,30 +93,31 @@ for version in "${versions[@]}"; do
8693 ${aliases[$version]:- }
8794 )
8895
89- for variant in \
90- ' ' \
91- fastcgi \
92- ; do
96+ for variant in ' ' fastcgi; do
97+ export variant
9398 dir=" $version ${variant: +/ $variant } "
94- [ -f " $dir /Dockerfile" ] || continue
95- variant=" ${variant:- standalone} "
99+ if [ ! -d " $dir " ]; then
100+ continue
101+ fi
96102
97103 commit=" $( dirCommit " $dir " ) "
98104
99- slash=' /'
100- variantAliases=( " ${versionAliases[@]/%/ -${variant// $slash / -} } " )
101- variantAliases=( " ${variantAliases[@]// latest-/ } " )
102- if [ " $variant " = ' standalone' ]; then
103- variantAliases+=( " ${versionAliases[@]} " )
105+ if [ -n " $variant " ]; then
106+ variantAliases=( " ${versionAliases[@]/%/ -$variant } " )
107+ variantAliases=( " ${variantAliases[@]// latest-/ } " )
108+ else
109+ variantAliases=( " ${versionAliases[@]} " )
110+ variantAliases+=( " ${versionAliases[@]/%/ -standalone} " )
111+ variantAliases=( " ${variantAliases[@]// latest-/ } " )
104112 fi
105113
106- variantParent =" $( awk ' toupper($1) == "FROM" { print $2 }' " $dir /Dockerfile" ) "
107- variantArches =" ${parentRepoToArches[$variantParent ]} "
114+ parent =" $( awk ' toupper($1) == "FROM" { print $2 }' " $dir /Dockerfile" ) "
115+ arches =" ${parentRepoToArches[$parent ]} "
108116
109117 echo
110118 cat << -EOE
111119 Tags: $( join ' , ' " ${variantAliases[@]} " )
112- Architectures: $( join ' , ' $variantArches )
120+ Architectures: $( join ' , ' $arches )
113121 GitCommit: $commit
114122 Directory: $dir
115123 EOE
0 commit comments