feat: improve scripts setup (lint, format, refactor)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p curl jq nix-prefetch
|
||||
# shellcheck shell=bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
@@ -9,55 +10,63 @@ PKG_FILE="$SCRIPT_DIR/package.nix"
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
extract_hash() {
|
||||
sed 's/\x1b\[[0-9;]*m//g' | grep 'got:' | tail -1 | grep -oP 'sha256-[A-Za-z0-9+/]+='
|
||||
sed 's/\x1b\[[0-9;]*m//g' | grep 'got:' | tail -1 | grep -oP 'sha256-[A-Za-z0-9+/]+='
|
||||
}
|
||||
|
||||
echo "fetching latest tag..."
|
||||
LATEST=$(curl -sf "https://api.github.com/repos/tkw1536/ggman/tags?per_page=1" | jq -r '.[0].name')
|
||||
CURRENT=$(grep 'version = ' "$PKG_FILE" | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
||||
main() {
|
||||
echo "fetching latest tag..."
|
||||
local latest current
|
||||
latest=$(curl -sf "https://api.github.com/repos/tkw1536/ggman/tags?per_page=1" | jq -r '.[0].name')
|
||||
current=$(grep 'version = ' "$PKG_FILE" | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
||||
|
||||
if [[ "$CURRENT" == "$LATEST" ]]; then
|
||||
echo "ggman already at $LATEST"
|
||||
exit 0
|
||||
fi
|
||||
if [[ "$current" == "$latest" ]]; then
|
||||
echo "ggman already at $latest"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "updating ggman: $CURRENT -> $LATEST"
|
||||
echo "updating ggman: $current -> $latest"
|
||||
|
||||
echo " prefetching source..."
|
||||
BASE32=$(nix-prefetch-url --unpack "https://github.com/tkw1536/ggman/archive/${LATEST}.tar.gz" 2>/dev/null)
|
||||
SRC_HASH=$(nix hash convert --to sri "sha256:$BASE32")
|
||||
echo " source: $SRC_HASH"
|
||||
echo " prefetching source..."
|
||||
local base32 src_hash
|
||||
base32=$(nix-prefetch-url --unpack "https://github.com/tkw1536/ggman/archive/${latest}.tar.gz" 2>/dev/null)
|
||||
src_hash=$(nix hash convert --to sri "sha256:$base32")
|
||||
echo " source: $src_hash"
|
||||
|
||||
echo " computing vendor hash..."
|
||||
BUILD_OUTPUT=$(nix build --no-link --impure --expr "
|
||||
let
|
||||
pkgs = (builtins.getFlake \"path:$ROOT_DIR\").inputs.nixpkgs-master.legacyPackages.\${builtins.currentSystem};
|
||||
in (pkgs.buildGoModule.override { go = pkgs.go_1_26; } {
|
||||
pname = \"ggman\";
|
||||
version = \"$LATEST\";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = \"tkw1536\";
|
||||
repo = \"ggman\";
|
||||
rev = \"$LATEST\";
|
||||
hash = \"$SRC_HASH\";
|
||||
};
|
||||
vendorHash = \"\";
|
||||
}).goModules
|
||||
" 2>&1) || true
|
||||
VENDOR_HASH=$(echo "$BUILD_OUTPUT" | extract_hash) || true
|
||||
echo " computing vendor hash..."
|
||||
local build_output vendor_hash
|
||||
build_output=$(nix build --no-link --impure --expr "
|
||||
let
|
||||
pkgs = (builtins.getFlake \"path:$ROOT_DIR\").inputs.nixpkgs-master.legacyPackages.\${builtins.currentSystem};
|
||||
in (pkgs.buildGoModule.override { go = pkgs.go_1_26; } {
|
||||
pname = \"ggman\";
|
||||
version = \"$latest\";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = \"tkw1536\";
|
||||
repo = \"ggman\";
|
||||
rev = \"$latest\";
|
||||
hash = \"$src_hash\";
|
||||
};
|
||||
vendorHash = \"\";
|
||||
}).goModules
|
||||
" 2>&1) || true
|
||||
vendor_hash=$(echo "$build_output" | extract_hash) || true
|
||||
|
||||
if [[ -z "$VENDOR_HASH" ]]; then
|
||||
echo " error: failed to compute vendor hash"
|
||||
echo "$BUILD_OUTPUT"
|
||||
exit 1
|
||||
fi
|
||||
echo " vendor: $VENDOR_HASH"
|
||||
if [[ -z "$vendor_hash" ]]; then
|
||||
echo "error: failed to compute vendor hash" >&2
|
||||
echo "$build_output" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo " vendor: $vendor_hash"
|
||||
|
||||
OLD_SRC=$(grep 'sha256 = ' "$PKG_FILE" | grep -oP 'sha256-[A-Za-z0-9+/]+=')
|
||||
OLD_VENDOR=$(grep 'vendorHash = ' "$PKG_FILE" | grep -oP 'sha256-[A-Za-z0-9+/]+=')
|
||||
local old_src old_vendor
|
||||
old_src=$(grep 'sha256 = ' "$PKG_FILE" | grep -oP 'sha256-[A-Za-z0-9+/]+=')
|
||||
old_vendor=$(grep 'vendorHash = ' "$PKG_FILE" | grep -oP 'sha256-[A-Za-z0-9+/]+=')
|
||||
|
||||
sed -i "s|version = \"$CURRENT\"|version = \"$LATEST\"|" "$PKG_FILE"
|
||||
sed -i "s|$OLD_SRC|$SRC_HASH|" "$PKG_FILE"
|
||||
sed -i "s|$OLD_VENDOR|$VENDOR_HASH|" "$PKG_FILE"
|
||||
sed -i "s|version = \"$current\"|version = \"$latest\"|" "$PKG_FILE"
|
||||
sed -i "s|$old_src|$src_hash|" "$PKG_FILE"
|
||||
sed -i "s|$old_vendor|$vendor_hash|" "$PKG_FILE"
|
||||
|
||||
echo "ggman updated to $LATEST"
|
||||
echo "ggman updated to $latest"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user