forked from docker-library/php
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathversions.sh
executable file
·144 lines (131 loc) · 3.69 KB
/
versions.sh
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/usr/bin/env bash
set -Eeuo pipefail
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
versions=( "$@" )
if [ ${#versions[@]} -eq 0 ]; then
versions=( */ )
json='{}'
else
json="$(< versions.json)"
fi
versions=( "${versions[@]%/}" )
for version in "${versions[@]}"; do
rcVersion="${version%-rc}"
export version rcVersion
# scrape the relevant API based on whether we're looking for pre-releases
if [ "$rcVersion" = "$version" ]; then
apiUrl="https://www.php.net/releases/index.php?json&max=100&version=${rcVersion%%.*}"
apiJqExpr='
(keys[] | select(startswith(env.rcVersion))) as $version
| [ $version, (
.[$version].source[]
| select(.filename | endswith(".xz"))
|
"https://www.php.net/distributions/" + .filename,
"https://www.php.net/distributions/" + .filename + ".asc",
.sha256 // ""
) ]
'
else
apiUrl='https://qa.php.net/api.php?type=qa-releases&format=json'
apiJqExpr='
(.releases // [])[]
| select(.version | startswith(env.rcVersion))
| [
.version,
.files.xz.path // "",
"",
.files.xz.sha256 // ""
]
'
fi
IFS=$'\n'
possibles=( $(
curl -fsSL "$apiUrl" \
| jq --raw-output "$apiJqExpr | @sh" \
| sort -rV
) )
unset IFS
if [ "${#possibles[@]}" -eq 0 ]; then
if [ "$rcVersion" = "$version" ]; then
echo >&2
echo >&2 "error: unable to determine available releases of $version"
echo >&2
exit 1
else
echo >&2 "warning: skipping/removing '$version' (does not appear to exist upstream)"
json="$(jq <<<"$json" -c '.[env.version] = null')"
continue
fi
fi
# format of "possibles" array entries is "VERSION URL.TAR.XZ URL.TAR.XZ.ASC SHA256" (each value shell quoted)
# see the "apiJqExpr" values above for more details
eval "possi=( ${possibles[0]} )"
fullVersion="${possi[0]}"
url="${possi[1]}"
ascUrl="${possi[2]}"
sha256="${possi[3]}"
if ! wget -q --spider "$url"; then
echo >&2 "error: '$url' appears to be missing"
exit 1
fi
# if we don't have a .asc URL, let's see if we can figure one out :)
if [ -z "$ascUrl" ] && wget -q --spider "$url.asc"; then
ascUrl="$url.asc"
fi
variants='[]'
# order here controls the order of the library/ file
for suite in \
bookworm \
bullseye \
buster \
alpine3.18 \
alpine3.17 \
alpine3.16 \
; do
# https://github.com/docker-library/php/pull/1348
if [ "$rcVersion" = '8.0' ] && [[ "$suite" = alpine* ]] && [ "$suite" != 'alpine3.16' ]; then
continue
fi
# 8.0 doesn't support OpenSSL 3, which is the only version in bookworm
# only keep two variants of Debian per version of php
if [ "$rcVersion" = '8.0' ] && [ "$suite" = 'bookworm' ]; then
continue
elif [ "$rcVersion" != '8.0' ] && [ "$suite" = 'buster' ]; then
continue
fi
# https://github.com/docker-library/php/pull/1405
# 8.1 is temporary: https://github.com/docker-library/official-images/pull/14735 (should remove Alpine 3.16 support once Nextcloud 25 is EOL ~Oct 2023)
if [ "$suite" = 'alpine3.16' ] && [ "$rcVersion" != '8.0' ] && [ "$rcVersion" != '8.1' ]; then
continue
fi
for variant in cli apache fpm zts; do
if [[ "$suite" = alpine* ]]; then
if [ "$variant" = 'apache' ]; then
continue
fi
fi
export suite variant
variants="$(jq <<<"$variants" -c '. + [ env.suite + "/" + env.variant ]')"
done
done
echo "$version: $fullVersion"
export fullVersion url ascUrl sha256
json="$(
jq <<<"$json" -c --argjson variants "$variants" '
.[env.version] = {
version: env.fullVersion,
url: env.url,
ascUrl: env.ascUrl,
sha256: env.sha256,
variants: $variants,
}
'
)"
if [ "$version" = "$rcVersion" ]; then
json="$(jq <<<"$json" -c '
.[env.version + "-rc"] //= null
')"
fi
done
jq <<<"$json" -S . > versions.json