@@ -27,32 +27,65 @@ declare -A alpineVersion=(
2727)
2828
2929packagesBase=' http://apt.postgresql.org/pub/repos/apt/dists/'
30-
3130declare -A suitePackageList=() suiteArches=()
31+ fetch_suite_package_list () {
32+ local suite=" $1 " ; shift
33+ local arch=" ${1:- amd64} "
34+
35+ if [ -z " ${suitePackageList["$suite-$arch"]: +isset} " ]; then
36+ suitePackageList[" $suite -$arch " ]=" $( curl -fsSL " $packagesBase /$suite -pgdg/main/binary-$arch /Packages.bz2" | bunzip2) "
37+ fi
38+ }
39+ fetch_suite_arches () {
40+ local suite=" $1 " ; shift
41+
42+ if [ -z " ${suiteArches["$suite"]: +isset} " ]; then
43+ local suiteRelease
44+ suiteRelease=" $( curl -fsSL " $packagesBase /$suite -pgdg/Release" ) "
45+ suiteArches[" $suite " ]=" $( gawk <<< " $suiteRelease" -F ' :[[:space:]]+' ' $1 == "Architectures" { print $2; exit }' ) "
46+ fi
47+ }
48+
3249travisEnv=
3350for version in " ${versions[@]} " ; do
3451 tag=" ${debianSuite[$version]:- $defaultDebianSuite } "
3552 suite=" ${tag%% -slim} "
36- if [ -z " ${suitePackageList["$suite"]: +isset} " ]; then
37- suitePackageList[" $suite " ]=" $( curl -fsSL " ${packagesBase} /${suite} -pgdg/main/binary-amd64/Packages.bz2" | bunzip2) "
38- fi
39- if [ -z " ${suiteArches["$suite"]: +isset} " ]; then
40- suiteArches[" $suite " ]=" $( curl -fsSL " ${packagesBase} /${suite} -pgdg/Release" | gawk -F ' :[[:space:]]+' ' $1 == "Architectures" { gsub(/[[:space:]]+/, "|", $2); print $2 }' ) "
53+ majorVersion=" ${version%% .* } "
54+
55+ fetch_suite_package_list " $suite " ' amd64'
56+ fullVersion=" $( awk <<< " ${suitePackageList[" $suite -amd64" ]}" -F ' : ' -v version=" $version " '
57+ $1 == "Package" { pkg = $2 }
58+ $1 == "Version" && pkg == "postgresql-" version { print $2; exit }
59+ ' ) "
60+ if [ -z " $fullVersion " ]; then
61+ echo >&2 " error: missing postgresql-$version package!"
62+ exit 1
4163 fi
4264
43- versionList=" $( echo " ${suitePackageList["$suite"]} " ; curl -fsSL " ${packagesBase} /${suite} -pgdg/${version} /binary-amd64/Packages.bz2" | bunzip2) "
44- fullVersion=" $( echo " $versionList " | awk -F ' : ' ' $1 == "Package" { pkg = $2 } $1 == "Version" && pkg == "postgresql-' " $version " ' " { print $2; exit }' || true) "
45- majorVersion=" ${version%% .* } "
65+ fetch_suite_arches " $suite "
66+ versionArches=
67+ for arch in ${suiteArches["$suite"]} ; do
68+ fetch_suite_package_list " $suite " " $arch "
69+ archVersion=" $( awk <<< " ${suitePackageList[" $suite -$arch " ]}" -F ' : ' -v version=" $version " '
70+ $1 == "Package" { pkg = $2 }
71+ $1 == "Version" && pkg == "postgresql-" version { print $2; exit }
72+ ' ) "
73+ if [ " $archVersion " = " $fullVersion " ]; then
74+ [ -z " $versionArches " ] || versionArches+=' | '
75+ versionArches+=" $arch "
76+ fi
77+ done
4678
47- echo " $version : $fullVersion "
79+ echo " $version : $fullVersion ( $versionArches ) "
4880
4981 cp docker-entrypoint.sh " $version /"
5082 sed -e ' s/%%PG_MAJOR%%/' " $version " ' /g;' \
5183 -e ' s/%%PG_VERSION%%/' " $fullVersion " ' /g' \
5284 -e ' s/%%DEBIAN_TAG%%/' " $tag " ' /g' \
5385 -e ' s/%%DEBIAN_SUITE%%/' " $suite " ' /g' \
54- -e ' s/%%ARCH_LIST%%/' " ${suiteArches["$suite"]} " ' /g' \
55- Dockerfile-debian.template > " $version /Dockerfile"
86+ -e ' s/%%ARCH_LIST%%/' " $versionArches " ' /g' \
87+ Dockerfile-debian.template \
88+ > " $version /Dockerfile"
5689 if [ " $majorVersion " = ' 9' ]; then
5790 sed -i -e ' s/WALDIR/XLOGDIR/g' \
5891 -e ' s/waldir/xlogdir/g' \
@@ -84,7 +117,8 @@ for version in "${versions[@]}"; do
84117 -e ' s/%%PG_VERSION%%/' " $srcVersion " ' /g' \
85118 -e ' s/%%PG_SHA256%%/' " $srcSha256 " ' /g' \
86119 -e ' s/%%ALPINE-VERSION%%/' " ${alpineVersion[$version]:- $defaultAlpineVersion } " ' /g' \
87- " Dockerfile-$variant .template" > " $version /$variant /Dockerfile"
120+ " Dockerfile-$variant .template" \
121+ > " $version /$variant /Dockerfile"
88122 if [ " $majorVersion " = ' 9' ]; then
89123 sed -i -e ' s/WALDIR/XLOGDIR/g' \
90124 -e ' s/waldir/xlogdir/g' \
@@ -109,4 +143,4 @@ for version in "${versions[@]}"; do
109143done
110144
111145travis=" $( awk -v ' RS=\n\n' ' $1 == "env:" { $0 = "env:' " $travisEnv " ' " } { printf "%s%s", $0, RS }' .travis.yml) "
112- echo " $travis " > .travis.yml
146+ cat <<< " $travis" > .travis.yml
0 commit comments