nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 62 lines 1.9 kB view raw
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 ]