|
1 | 1 | #!/usr/bin/env bash
|
2 | 2 | set -Eeuo pipefail
|
3 | 3 |
|
4 |
| -# TODO scrape this somehow? |
5 |
| -supportedVersions=( |
6 |
| - 16 |
7 |
| - 15 |
8 |
| - 14 |
9 |
| - 13 |
10 |
| - 12 |
11 |
| - 11 |
12 |
| - #10 |
13 |
| - #9.6 |
14 |
| - #9.5 |
15 |
| - #9.4 |
16 |
| - #9.3 |
17 |
| - #9.2 |
18 |
| -) |
19 |
| -suite='bookworm' |
| 4 | +doiCommit="$(git ls-remote https://github.com/docker-library/official-images.git HEAD | cut -d$'\t' -f1)" |
| 5 | +doiPostgres="https://github.com/docker-library/official-images/raw/$doiCommit/library/postgres" |
| 6 | +versions="$( |
| 7 | + bashbrew list "$doiPostgres" | jq -nR ' |
| 8 | + [ |
| 9 | + inputs |
| 10 | + # filter tags down to just "N-XXX" (capturing "version" and "debian suite") |
| 11 | + | capture(":(?<version>[0-9]+)-(?<suite>[a-z].*)$") |
| 12 | + | select(.suite | startswith("alpine") | not) |
| 13 | + ] |
| 14 | + ' |
| 15 | +)" |
| 16 | +supportedVersions="$(jq <<<"$versions" -r '[ .[].version | tonumber ] | unique | reverse | map(@sh) | join(" ")')" |
| 17 | +eval "supportedVersions=( $supportedVersions )" |
20 | 18 |
|
21 | 19 | json='{}'
|
22 | 20 |
|
23 | 21 | for i in "${!supportedVersions[@]}"; do
|
24 | 22 | new="${supportedVersions[$i]}"
|
25 |
| - echo "# $new" |
26 |
| - docker pull "postgres:$new-$suite" > /dev/null |
| 23 | + export new |
| 24 | + suites="$(jq <<<"$versions" -c '[ .[] | select(.version == env.new).suite ]')" |
| 25 | + echo "# $new (possible suites: $suites)" |
27 | 26 | (( j = i + 1 ))
|
28 | 27 | for old in "${supportedVersions[@]:$j}"; do
|
29 |
| - dir="$old-to-$new" |
30 |
| - echo "- $old -> $new ($dir)" |
| 28 | + export old |
| 29 | + suite="$(jq <<<"$versions" --argjson suites "$suites" -r ' |
| 30 | + first( |
| 31 | + .[] |
| 32 | + | select( |
| 33 | + .version == env.old |
| 34 | + and ( |
| 35 | + .suite as $suite |
| 36 | + | $suites | index($suite) |
| 37 | + ) |
| 38 | + ) |
| 39 | + ).suite |
| 40 | + ')" |
31 | 41 | from="postgres:$new-$suite"
|
32 |
| - oldVersion="$( |
33 |
| - docker run --rm -e OLD="$old" "$from" bash -Eeuo pipefail -c ' |
34 |
| - sed -i "s/\$/ $OLD/" /etc/apt/sources.list.d/pgdg.list |
35 |
| - apt-get update -qq 2>/dev/null |
36 |
| - apt-cache policy "postgresql-$OLD" \ |
37 |
| - | awk "\$1 == \"Candidate:\" { print \$2; exit }" |
38 |
| - ' |
39 |
| - )" |
| 42 | + dir="$old-to-$new" |
| 43 | + export suite from dir |
| 44 | + echo "- $old -> $new ($dir; $suite)" |
| 45 | + postgresCommit="$(bashbrew cat --format '{{ .TagEntry.GitCommit }}' "$doiPostgres:$old-$suite")" |
| 46 | + versionsURL="https://github.com/docker-library/postgres/raw/$postgresCommit/versions.json" |
| 47 | + oldVersion="$(wget -qO- "$versionsURL" | jq -r '.[env.old][env.suite].version // empty')" # TODO arches? (would need to cross-reference $new's arches, but that's fair / not too difficult) |
40 | 48 | echo " - $oldVersion"
|
41 |
| - if [ "$oldVersion" = '(none)' ]; then |
42 |
| - continue |
43 |
| - fi |
44 |
| - json="$(jq <<<"$json" -c --arg dir "$dir" --arg version "$oldVersion" --arg from "$from" --arg old "$old" --arg new "$new" ' |
45 |
| - .[$dir] = { |
46 |
| - from: $from, |
47 |
| - new: $new, |
48 |
| - old: $old, |
49 |
| - version: $version, |
| 49 | + [ -n "$oldVersion" ] |
| 50 | + export oldVersion |
| 51 | + json="$(jq <<<"$json" -c ' |
| 52 | + .[env.dir] = { |
| 53 | + from: env.from, |
| 54 | + new: env.new, |
| 55 | + old: env.old, |
| 56 | + version: env.oldVersion, |
50 | 57 | }
|
51 | 58 | ')"
|
52 | 59 | done
|
|
0 commit comments