1#!/usr/bin/env nix-shell
2#!nix-shell -i bash -p bash nix-prefetch curl jq gawk gnused nixfmt-rfc-style
3
4set -euo pipefail
5
6SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
7FILE_PATH="$SCRIPT_DIR/xanmod-kernels.nix"
8
9get_old_version() {
10 local file_path="$1"
11 local variant="$2"
12
13 grep -A 2 "$variant = {" "$file_path" | grep "version =" | cut -d '"' -f 2
14}
15
16VARIANT="${1:-lts}"
17OLD_VERSION=${UPDATE_NIX_OLD_VERSION:-$(get_old_version "$FILE_PATH" "$VARIANT")}
18
19RELEASES=$(curl --silent https://gitlab.com/api/v4/projects/xanmod%2Flinux/releases)
20
21# list of URLs. latest first, oldest last
22RELEASE_URLS=$(echo "$RELEASES" | jq '.[].assets.links.[0].name')
23
24while IFS= read -r url; do
25 # Get variant, version and suffix from url fields:
26 # 8 9 NF
27 # | | |
28 # https://.../<variant>/<version>-<suffix>
29 release_variant=$(echo "$url" | awk -F'[/-]' '{print $8}')
30 release_version=$(echo "$url" | awk -F'[/-]' '{print $9}')
31
32 # either xanmod1 or xanmod2
33 suffix=$(echo "$url" | awk -F'[/-]' '{print $NF}')
34
35 if [[ "$release_variant" == "$VARIANT" ]]; then
36 if [[ "$release_version" == "$OLD_VERSION" ]]; then
37 echo "Xanmod $VARIANT is up-to-date: ${OLD_VERSION}"
38 exit 0
39 else
40 NEW_VERSION="$release_version"
41 SUFFIX="$suffix"
42 break
43 fi
44 fi
45done < <(echo "$RELEASE_URLS" | jq -r)
46
47echo "Updating Xanmod \"$VARIANT\" from $OLD_VERSION to $NEW_VERSION ($SUFFIX)"
48
49URL="https://gitlab.com/api/v4/projects/xanmod%2Flinux/repository/archive.tar.gz?sha=$NEW_VERSION-$SUFFIX"
50HASH="$(nix-prefetch fetchzip --quiet --url "$URL")"
51
52update_variant() {
53 local file_path="$1"
54 local variant="$2"
55 local new_version="$3"
56 local new_hash="$4"
57 local suffix="$5"
58
59 # ${variant} = { <- range start
60 # version = ...
61 # hash = ...
62 # suffix = ...
63 # }; <- range end
64 range_start="^\s*$variant = {"
65 range_end="^\s*};"
66
67 # - Update the version and hash using sed range addresses
68 # - Remove suffix line, if it exists
69 sed -i -e "/$range_start/,/$range_end/ {
70 s|^\s*version = \".*\";| version = \"$new_version\";|;
71 s|^\s*hash = \".*\";| hash = \"$new_hash\";|;
72 /^\s*suffix = /d
73 }" "$file_path"
74
75 # Add suffix, if it's different than xanmod1 (the default)
76 if [[ "$suffix" != "xanmod1" ]]; then
77 sed -i -e "/$range_start/,/$range_end/ {
78 s|$range_end| suffix = \"$suffix\";\n };|;
79 }" "$file_path"
80 fi
81
82 # Apply proper formatting
83 nixfmt "$file_path"
84}
85
86update_variant "$FILE_PATH" "$VARIANT" "$NEW_VERSION" "$HASH" "$SUFFIX"