-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate-versions.sh
executable file
·57 lines (51 loc) · 1.3 KB
/
update-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
#!/usr/bin/env bash
set -ex
declare -a rust_releases ra_releases
log() {
echo "$@" 1>&2
}
get_releases() {
local repo="${1}"
log "Fetching releases of ${repo}"
gh api "repos/${repo}/releases" --paginate -q '.[] | [.tag_name, .created_at] | join(",")'
}
find_versions() {
local latest_ra
local -i i j
for ((i = 0, j = 0; ; j++)); do
IFS=',' read -r rust_ver rust_date <<<"${rust_releases[$i]}"
IFS=',' read -r ra_ver ra_date <<<"${ra_releases[$j]}"
if [[ -z "${rust_ver}" ]] || [[ -z "${ra_ver}" ]]; then
break
elif [[ "${ra_ver}" == "nightly" ]]; then
# Skip nightly release
continue
fi
# Record the latest release.
latest_ra="${latest_ra:-${ra_ver}}"
# Find the latest rust-analyzer between two releases of Rust
if [[ "${ra_date}" < "${rust_date}" ]]; then
i+=1
printf '["%s", "%s"]\n' "${rust_ver}" "${latest_ra}"
latest_ra="${ra_ver}"
fi
done
}
declare output
while getopts "o:" arg; do
case "${arg}" in
o)
output=$OPTARG
;;
*)
exit 1
;;
esac
done
if [[ -z "${output}" ]]; then
log "Missing argument -o"
exit 1
fi
while read -ra rust_releases -d '\n'; do :; done < <(get_releases rust-lang/rust)
while read -ra ra_releases -d '\n'; do :; done < <(get_releases rust-lang/rust-analyzer)
find_versions | jq -s '[.[] | {rust: .[0], rust_analyzer: .[1]}]' >"${output}"