update/navibeat
1#!/usr/bin/env nix-shell
2#!nix-shell -i bash -p jq -p nix
3# shellcheck shell=bash
4set -euo pipefail
5
6REPO_URL="https://github.com/shish/shimmie2"
7
8SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
9PKG_FILE="$SCRIPT_DIR/unwrapped.nix"
10PKG_NAME="shimmie2"
11
12OLD_VERSION=$(sed -n 's/.*version = "\([^"]*\)";.*/\1/p' "$PKG_FILE" | head -1)
13NEW_VERSION=$(git ls-remote --tags "$REPO_URL" | grep -v '\^{}' | sed 's#.*refs/tags/v##' | grep -v 'refs/tags' | grep -E '^[0-9]' | sort -V | tail -1)
14
15if [ "$NEW_VERSION" = "$OLD_VERSION" ]; then
16 exit 0
17fi
18
19NEW_HASH=$(nix store prefetch-file --json --unpack "${REPO_URL}/archive/refs/tags/v${NEW_VERSION}.tar.gz" | jq -r .hash)
20
21TMP_PKG_FILE=$(mktemp --suffix=.nix)
22trap 'rm -f "$TMP_PKG_FILE"' EXIT
23
24sed \
25 -e "s/version = \"$OLD_VERSION\";/version = \"$NEW_VERSION\";/" \
26 -e "/src = fetchFromGitHub {/,/^ };/ s|hash = \"sha256-[^\"]*\";|hash = \"$NEW_HASH\";|" \
27 "$PKG_FILE" >"$TMP_PKG_FILE"
28
29COMPOSER_HASH=$(nix-build --no-out-link --expr "
30 let pkgs = import <nixpkgs> {};
31 unwrapped = import \"$TMP_PKG_FILE\" {
32 inherit (pkgs) lib php fetchFromGitHub;
33 };
34 in unwrapped.composerVendor.overrideAttrs (_: { outputHash = \"\"; outputHashAlgo = \"sha256\"; })
35" 2>&1 | grep -o 'got:.*sha256-[A-Za-z0-9+/=]*' | tail -1 | sed 's/got:.*\(sha256-[A-Za-z0-9+/=]*\)/\1/' || true)
36
37if [ -z "$COMPOSER_HASH" ]; then
38 echo "failed to extract composerVendor hash" >&2
39 exit 1
40fi
41
42sed -i \
43 -e "s/version = \"$OLD_VERSION\";/version = \"$NEW_VERSION\";/" \
44 -e "/src = fetchFromGitHub {/,/^ };/ s|hash = \"sha256-[^\"]*\";|hash = \"$NEW_HASH\";|" \
45 -e "s|vendorHash = \"sha256-[^\"]*\";|vendorHash = \"$COMPOSER_HASH\";|" \
46 "$PKG_FILE"
47
48echo "$PKG_NAME: $OLD_VERSION -> $NEW_VERSION"