summaryrefslogtreecommitdiff
path: root/pkgs/development/rocm-modules/update.nix
blob: 7ffc5f9a7e6cb1e99f99e02666d6443e5baf5135 (plain)
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
{
  lib,
  writeScript,
}:

{
  finalAttrs ? { },
  name ? finalAttrs.pname,
  owner ? finalAttrs.src.owner,
  repo ? finalAttrs.src.repo,
  page ? "releases?per_page=10",
  # input: array of [ { tag_name: "rocm-6.x.x", }, ... ]. some entries may have bad names like rocm-test-date we want to skip
  # output: first tag_name/name that's a proper version if any
  filter ? "map(.tag_name // .name) | map(select(test(\"^rocm-[0-9]+\\\\.[0-9]+(\\\\.[0-9]+)?$\"))) | first | ltrimstr(\"rocm-\")",
}:

let
  pname =
    if lib.hasPrefix "rocm-llvm-" name then "llvm.${lib.removePrefix "rocm-llvm-" name}" else name;

  updateScript = writeScript "update.sh" ''
    #!/usr/bin/env nix-shell
    #!nix-shell -i bash -p curl jq common-updater-scripts
    set -euo pipefail

    fetch_releases() {
      local api_url="https://api.github.com/repos/${owner}/${repo}/${page}"
      if [ "${page}" = "releases" ]; then
        api_url="$api_url?per_page=4"
      fi
      >&2 echo $api_url
      curl ''${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} -sL "$api_url"
    }

    find_valid_version() {
      local releases="$1"
      >&2 echo "$releases"
      # Wrap in array if not already an array to make handling specific release or tags page the same
      >&2 echo jq -r 'if type == "array" then . else [.] end | ${filter}'
      echo "$releases" | jq -r 'if type == "array" then . else [.] end | ${filter}'
    }

    releases="$(fetch_releases)"
    version="$(find_valid_version "$releases")"

    if [ -z "$version" ]; then
      echo "No valid version found in the fetched release(s)." >&2
      exit 1
    fi

    IFS='.' read -ra version_arr <<< "$version"

    >&2 echo parsed version "$version_arr" from "$version"

    if (( ''${version_arr[0]} > 7 )); then
      echo "'rocmPackages.${pname}' is already at its maximum allowed version.''\nAny further upgrades should go into 'rocmPackages_X.${pname}'." >&2
      exit 1
    fi

    update-source-version rocmPackages.${pname} "$version" --ignore-same-hash
  '';
in
[ updateScript ]