@@ -52,7 +52,7 @@ shell="$(
52
52
"3.6", # April 2021
53
53
"4.0", # April 2022
54
54
"4.2", # April 2023
55
- null # ... so we can have a trailing comma above, making diffs nicer :trollface:
55
+ empty
56
56
] | index($v) | not)
57
57
58
58
# filter out so-called "rapid releases": https://docs.mongodb.com/upcoming/reference/versioning/
@@ -62,8 +62,21 @@ shell="$(
62
62
| ($splitVersion[0] | tonumber) >= 5 and ($splitVersion[1] | tonumber) > 0
63
63
| not
64
64
)
65
+
66
+ # if a given pre-release version has not had a GA release yet, we need the previous release for mongodb-mongosh and mongodb-database-tools
67
+ | (.version | rtrimstr("-rc")) as $rcVersion
68
+ | if .version != $rcVersion and (.meta.version | ltrimstr($rcVersion) | startswith(".0-")) then
69
+ .meta.dockerNeedsVersion = ($rcVersion | split(".") | .[0] |= (tonumber -1 | tostring) | join("."))
70
+ else . end
65
71
]
66
72
73
+ # filter the list of "downloads" (targets) down to the set of targets of (M-1).0 if we need that previous version (see "dockerNeedsVersion" above)
74
+ | (map({ key: .version, value: [ .meta.downloads[].target ] }) | from_entries) as $targets
75
+ | map(if .meta | has("dockerNeedsVersion") then
76
+ .meta.dockerNeedsVersion as $needsVersion
77
+ | .meta.downloads |= map(select(.target as $target | $targets[$needsVersion] | index($target)))
78
+ else . end)
79
+
67
80
# now convert all that data to a basic shell list + map so we can loop over/use it appropriately
68
81
| "allVersions=( " + (
69
82
map(.version | ., if endswith("-rc") then empty else . + "-rc" end)
@@ -112,44 +125,38 @@ for version in "${versions[@]}"; do
112
125
msiSha256=" ${msiSha256%% * } "
113
126
export msiUrl msiSha256
114
127
115
- export pgpKeyVersion=" ${version% -rc} "
116
- pgp=' []'
117
- if [ " $pgpKeyVersion " != " $version " ]; then
118
- # the "testing" repository (used for RCs) has a dedicated PGP key (but still needs the "release" key for the release line)
119
- pgp=" $( jq -c --argjson pgp " $pgp " ' $pgp + [ .dev // error("missing PGP key for dev") ]' pgp-keys.json) "
120
-
121
- # if {{ env.rcVersion }} is not GA, so we need the previous release for mongodb-mongosh and mongodb-database-tools
122
- isDotZeroPrerelease=" $( _jq -r ' .version | ltrimstr(env.pgpKeyVersion) | startswith(".0-")' ) "
123
- if [ " $isDotZeroPrerelease " = ' true' ]; then
124
- pgp=" $(
125
- jq -c --argjson pgp " $pgp " '
126
- (env.pgpKeyVersion | split(".") | .[0] |= (tonumber - 1 | tostring) | join(".")) as $previousVersion
127
- | $pgp + [ .[$previousVersion] // error("missing PGP key for \($previousVersion)") ]
128
- ' pgp-keys.json
129
- ) "
130
- fi
131
- fi
132
- minor=" ${pgpKeyVersion#* .} " # "4.3" -> "3"
133
- if [ " $(( minor % 2 )) " = 1 ]; then
134
- pgpKeyVersion=" ${version% .* } .$(( minor + 1 )) "
135
- fi
136
- pgp=" $( jq -c --argjson pgp " $pgp " ' $pgp + [ .[env.pgpKeyVersion] // error("missing PGP key for \(env.pgpKeyVersion)") ]' pgp-keys.json) "
137
-
138
128
json=" $(
139
129
{
140
130
jq <<< " $json" -c .
141
- _jq --argjson pgp " $pgp " ' { (env.version): (
142
- with_entries(select(.key as $key | [
131
+ _jq --slurpfile pgpKeys pgp-keys.json ' { (env.version): (
132
+ $pgpKeys[0] as $pgp
133
+ | (env.version | rtrimstr("-rc")) as $rcVersion
134
+ | with_entries(select(.key as $key | [
143
135
# interesting bits of raw upstream metadata
144
136
"changes",
145
137
"date",
146
138
"githash",
147
139
"notes",
148
140
"version",
149
- null # ... trailing comma hack
141
+ "dockerNeedsVersion",
142
+ empty
150
143
] | index($key)))
151
144
+ {
152
- pgp: $pgp,
145
+ pgp: [
146
+ if env.version != $rcVersion then
147
+ # the "testing" repository (used for RCs) has a dedicated PGP key (but still needs the "release" key for the release line)
148
+ $pgp.dev
149
+ else empty end,
150
+
151
+ if .dockerNeedsVersion then
152
+ # see "dockerNeedsVersion" notes above
153
+ $pgp[.dockerNeedsVersion]
154
+ else empty end,
155
+
156
+ $pgp[$rcVersion],
157
+
158
+ empty
159
+ ],
153
160
targets: (
154
161
reduce (
155
162
.downloads[]
0 commit comments