main
1#!/usr/bin/env nix-shell
2#!nix-shell -i bash -p git -p jq -p nix -p python3 -p nurl
3# shellcheck shell=bash
4set -euo pipefail
5
6REPO_URL="https://github.com/mattwparas/helix"
7BRANCH="steel-event-system"
8
9SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
10PKG_FILE="$SCRIPT_DIR/unwrapped.nix"
11OLD_VERSION=$(sed -n 's/.*version = "\([^"]*\)";.*/\1/p' "$PKG_FILE" | head -1)
12PKG_NAME="steelix"
13
14OLD_REV=$(sed -n 's/.*rev = "\([0-9a-f]\{40\}\)".*/\1/p' "$PKG_FILE")
15NEW_REV=$(git ls-remote "$REPO_URL" "refs/heads/$BRANCH" | awk '{print $1}')
16
17if [ "$NEW_REV" = "$OLD_REV" ]; then
18 exit 0
19fi
20
21TMPDIR=$(mktemp -d)
22trap 'rm -rf "$TMPDIR"' EXIT
23
24git clone --depth 1 --branch "$BRANCH" "$REPO_URL" "$TMPDIR/repo"
25NEW_DATE=$(git -C "$TMPDIR/repo" show -s --format=%cs HEAD)
26
27NEW_HASH=$(nix store prefetch-file --json --unpack "https://github.com/mattwparas/helix/archive/$NEW_REV.tar.gz" | jq -r .hash)
28NEW_VERSION="0-unstable-$NEW_DATE"
29
30sed -i \
31 -e "s/version = \"[^\"]*\";/version = \"$NEW_VERSION\";/" \
32 -e "s/rev = \"$OLD_REV\";/rev = \"$NEW_REV\";/" \
33 -e "/src = fetchFromGitHub {/,/^ };/ s|hash = \"sha256-[^\"]*\";|hash = \"$NEW_HASH\";|" \
34 "$PKG_FILE"
35
36CARGO_DEPS_HASH=$(nix-build --no-out-link --expr "
37 let pkgs = import <nixpkgs> {};
38 unwrapped = import \"$PKG_FILE\" {
39 inherit (pkgs) rustPlatform fetchFromGitHub fetchpatch helix-unwrapped;
40 };
41 in unwrapped.cargoDeps.vendorStaging.overrideAttrs (_: { outputHash = \"\"; outputHashAlgo = \"sha256\"; })
42" 2>&1 | grep -o 'got:.*sha256-[A-Za-z0-9+/=]*' | tail -1 | sed 's/got:.*\(sha256-[A-Za-z0-9+/=]*\)/\1/' || true)
43
44if [ -z "$CARGO_DEPS_HASH" ]; then
45 echo "failed to extract cargoDeps hash" >&2
46 exit 1
47fi
48
49awk -v hash="$CARGO_DEPS_HASH" '
50 /inherit \(finalAttrs\) src pname version;/ { print; getline; sub(/hash = "[^"]*"/, "hash = \"" hash "\""); print; next }
51 { print }
52' "$PKG_FILE" >"$PKG_FILE.tmp" && mv "$PKG_FILE.tmp" "$PKG_FILE"
53
54python3 "$SCRIPT_DIR/generate_grammars.py" "$TMPDIR/repo/languages.toml" -o "$SCRIPT_DIR/grammars.json"
55
56echo "$PKG_NAME: $OLD_VERSION -> $NEW_VERSION"