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"