main
1#!/usr/bin/env nix-shell
2#!nix-shell -i bash -p curl -p jq -p nix -p flutter347 -p python3 -p python3Packages.pyyaml
3# shellcheck shell=bash
4set -euo pipefail
5
6REPO_URL="https://github.com/Chevey339/kelivo"
7
8SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
9PKG_FILE="$SCRIPT_DIR/default.nix"
10PKG_NAME="kelivo"
11
12OLD_VERSION=$(sed -n 's/.*version = "\([^"]*\)";.*/\1/p' "$PKG_FILE" | head -1)
13NEW_VERSION=$(curl -fsSL "${REPO_URL}/releases.atom" | sed -n 's#.*releases/tag/v\([^"<]*\).*#\1#p' | head -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
21TMPDIR=$(mktemp -d)
22trap 'rm -rf "$TMPDIR"' EXIT
23
24curl -fsSL "${REPO_URL}/archive/refs/tags/v${NEW_VERSION}.tar.gz" | tar xz -C "$TMPDIR" --strip-components=1
25chmod -R +w "$TMPDIR"
26
27cp "$SCRIPT_DIR/pubspec.lock.json" "$TMPDIR/pubspec.lock.json.old"
28
29(
30 cd "$TMPDIR"
31 # upstream does not commit pubspec.lock, so resolve it here
32 flutter pub get </dev/null >/dev/null
33)
34
35# flutter writes the YAML pubspec.lock; the package consumes a JSON one.
36python3 - "$TMPDIR/pubspec.lock" <<'PY'
37import json
38import sys
39import yaml
40
41with open(sys.argv[1]) as f:
42 data = yaml.safe_load(f)
43with open(sys.argv[1] + ".json", "w") as f:
44 json.dump(data, f, indent=2)
45 f.write("\n")
46PY
47
48if ! cmp -s "$TMPDIR/pubspec.lock.json.old" "$TMPDIR/pubspec.lock.json"; then
49 cp "$TMPDIR/pubspec.lock.json" "$SCRIPT_DIR/pubspec.lock.json"
50fi
51
52sed -i "s/version = \"$OLD_VERSION\";/version = \"$NEW_VERSION\";/" "$PKG_FILE"
53
54awk -v hash="$NEW_HASH" '
55 /src = fetchFromGitHub {/ { in_src = 1 }
56 in_src && /hash = "[^"]*"/ { sub(/hash = "[^"]*"/, "hash = \"" hash "\""); in_src = 0 }
57 { print }
58' "$PKG_FILE" >"$PKG_FILE.tmp" && mv "$PKG_FILE.tmp" "$PKG_FILE"
59
60echo "$PKG_NAME: $OLD_VERSION -> $NEW_VERSION"