Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 86 lines 2.7 kB view raw
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"