nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 writeScript,
4}:
5
6{
7 name ? "",
8 owner ? "",
9 repo ? "",
10 page ? "releases",
11 # input: array of [ { tag_name: "rocm-6.x.x", }, ... ]. some entries may have bad names like rocm-test-date we want to skip
12 # output: first tag_name/name that's a proper version if any
13 filter ? "map(.tag_name // .name) | map(select(test(\"^rocm-[0-9]+\\\\.[0-9]+(\\\\.[0-9]+)?$\"))) | first | ltrimstr(\"rocm-\")",
14}:
15
16let
17 pname =
18 if lib.hasPrefix "rocm-llvm-" name then "llvm.${lib.removePrefix "rocm-llvm-" name}" else name;
19
20 updateScript = writeScript "update.sh" ''
21 #!/usr/bin/env nix-shell
22 #!nix-shell -i bash -p curl jq common-updater-scripts
23 set -euo pipefail
24
25 fetch_releases() {
26 local api_url="https://api.github.com/repos/${owner}/${repo}/${page}"
27 if [ "${page}" = "releases" ]; then
28 api_url="$api_url?per_page=4"
29 fi
30 >&2 echo $api_url
31 curl ''${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} -sL "$api_url"
32 }
33
34 find_valid_version() {
35 local releases="$1"
36 >&2 echo "$releases"
37 # Wrap in array if not already an array to make handline specific release or tags page the same
38 >&2 echo jq -r 'if type == "array" then . else [.] end | ${filter}'
39 echo "$releases" | jq -r 'if type == "array" then . else [.] end | ${filter}'
40 }
41
42 releases="$(fetch_releases)"
43 version="$(find_valid_version "$releases")"
44
45 if [ -z "$version" ]; then
46 echo "No valid version found in the fetched release(s)." >&2
47 exit 1
48 fi
49
50 IFS='.' read -ra version_arr <<< "$version"
51
52 >&2 echo parsed version "$version_arr" from "$version"
53
54 if (( ''${version_arr[0]} > 7 )); then
55 echo "'rocmPackages.${pname}' is already at its maximum allowed version.''\nAny further upgrades should go into 'rocmPackages_X.${pname}'." >&2
56 exit 1
57 fi
58
59 update-source-version rocmPackages.${pname} "$version" --ignore-same-hash
60 '';
61in
62[ updateScript ]