feat: refactor packages and add update scripts
This commit is contained in:
8
justfile
8
justfile
@@ -17,6 +17,14 @@ update:
|
|||||||
# update flake inputs, rebuild and switch
|
# update flake inputs, rebuild and switch
|
||||||
bump: update switch
|
bump: update switch
|
||||||
|
|
||||||
|
# update a package to latest version
|
||||||
|
update-package pkg:
|
||||||
|
bash packages/{{pkg}}/update.sh
|
||||||
|
|
||||||
|
# update all packages with update scripts
|
||||||
|
update-package-all:
|
||||||
|
@for script in packages/*/update.sh; do bash "$script"; done
|
||||||
|
|
||||||
# build installation iso
|
# build installation iso
|
||||||
iso:
|
iso:
|
||||||
nixos-rebuild build-image --image-variant iso-installer --flake .#live-iso
|
nixos-rebuild build-image --image-variant iso-installer --flake .#live-iso
|
||||||
|
|||||||
@@ -1,15 +1,10 @@
|
|||||||
lib:
|
lib:
|
||||||
|
|
||||||
# import all .nix files in dir as attribute set
|
# import package.nix from each subdirectory in dir as attribute set
|
||||||
dir:
|
dir:
|
||||||
let
|
let
|
||||||
readDir = builtins.readDir dir;
|
readDir = builtins.readDir dir;
|
||||||
files = lib.attrNames (
|
dirs = lib.attrNames (lib.filterAttrs (_: type: type == "directory") readDir);
|
||||||
lib.filterAttrs (
|
packages = lib.filter (name: builtins.pathExists (dir + "/${name}/package.nix")) dirs;
|
||||||
name: type: type == "regular" && lib.hasSuffix ".nix" name && name != "default.nix"
|
|
||||||
) readDir
|
|
||||||
);
|
|
||||||
|
|
||||||
packages = builtins.map (name: lib.removeSuffix ".nix" name) files;
|
|
||||||
in
|
in
|
||||||
lib.genAttrs packages (name: import (dir + "/${name}.nix"))
|
lib.genAttrs packages (name: import (dir + "/${name}/package.nix"))
|
||||||
|
|||||||
62
packages/ahab/update.sh
Executable file
62
packages/ahab/update.sh
Executable file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#!nix-shell -i bash -p curl jq nix-prefetch
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||||
|
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+/]+='
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "fetching latest version..."
|
||||||
|
LATEST=$(curl -sf "https://git.janezic.dev/api/v1/repos/janezicmatej/ahab/tags?limit=1" | jq -r '.[0].name')
|
||||||
|
CURRENT=$(grep 'version = ' "$PKG_FILE" | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
||||||
|
|
||||||
|
if [[ "$CURRENT" == "$LATEST" ]]; then
|
||||||
|
echo "ahab already at $LATEST"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "updating ahab: $CURRENT -> $LATEST"
|
||||||
|
|
||||||
|
echo " prefetching source..."
|
||||||
|
BASE32=$(nix-prefetch-url --unpack "https://git.janezic.dev/janezicmatej/ahab/archive/${LATEST}.tar.gz" 2>/dev/null)
|
||||||
|
SRC_HASH=$(nix hash convert --to sri "sha256:$BASE32")
|
||||||
|
echo " source: $SRC_HASH"
|
||||||
|
|
||||||
|
echo " computing cargo hash..."
|
||||||
|
BUILD_OUTPUT=$(nix build --no-link --impure --expr "
|
||||||
|
let
|
||||||
|
pkgs = (builtins.getFlake \"path:$ROOT_DIR\").inputs.nixpkgs.legacyPackages.\${builtins.currentSystem};
|
||||||
|
in pkgs.rustPlatform.fetchCargoVendor {
|
||||||
|
src = pkgs.fetchFromGitea {
|
||||||
|
domain = \"git.janezic.dev\";
|
||||||
|
owner = \"janezicmatej\";
|
||||||
|
repo = \"ahab\";
|
||||||
|
rev = \"$LATEST\";
|
||||||
|
hash = \"$SRC_HASH\";
|
||||||
|
};
|
||||||
|
hash = \"\";
|
||||||
|
}
|
||||||
|
" 2>&1) || true
|
||||||
|
CARGO_HASH=$(echo "$BUILD_OUTPUT" | extract_hash) || true
|
||||||
|
|
||||||
|
if [[ -z "$CARGO_HASH" ]]; then
|
||||||
|
echo " error: failed to compute cargo hash"
|
||||||
|
echo "$BUILD_OUTPUT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo " cargo: $CARGO_HASH"
|
||||||
|
|
||||||
|
OLD_SRC=$(grep 'sha256 = ' "$PKG_FILE" | grep -oP 'sha256-[A-Za-z0-9+/]+=')
|
||||||
|
OLD_CARGO=$(grep 'cargoHash = ' "$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_CARGO|$CARGO_HASH|" "$PKG_FILE"
|
||||||
|
|
||||||
|
echo "ahab updated to $LATEST"
|
||||||
63
packages/ggman/update.sh
Executable file
63
packages/ggman/update.sh
Executable file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#!nix-shell -i bash -p curl jq nix-prefetch
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||||
|
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+/]+='
|
||||||
|
}
|
||||||
|
|
||||||
|
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/')
|
||||||
|
|
||||||
|
if [[ "$CURRENT" == "$LATEST" ]]; then
|
||||||
|
echo "ggman already at $LATEST"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
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 " 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
|
||||||
|
|
||||||
|
if [[ -z "$VENDOR_HASH" ]]; then
|
||||||
|
echo " error: failed to compute vendor hash"
|
||||||
|
echo "$BUILD_OUTPUT"
|
||||||
|
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+/]+=')
|
||||||
|
|
||||||
|
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"
|
||||||
62
packages/todo-mcp/update.sh
Executable file
62
packages/todo-mcp/update.sh
Executable file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#!nix-shell -i bash -p curl jq nix-prefetch
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||||
|
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+/]+='
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "fetching latest version..."
|
||||||
|
LATEST=$(curl -sf "https://git.janezic.dev/api/v1/repos/janezicmatej/todo-mcp/tags?limit=1" | jq -r '.[0].name')
|
||||||
|
CURRENT=$(grep 'version = ' "$PKG_FILE" | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
||||||
|
|
||||||
|
if [[ "$CURRENT" == "$LATEST" ]]; then
|
||||||
|
echo "todo-mcp already at $LATEST"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "updating todo-mcp: $CURRENT -> $LATEST"
|
||||||
|
|
||||||
|
echo " prefetching source..."
|
||||||
|
BASE32=$(nix-prefetch-url --unpack "https://git.janezic.dev/janezicmatej/todo-mcp/archive/${LATEST}.tar.gz" 2>/dev/null)
|
||||||
|
SRC_HASH=$(nix hash convert --to sri "sha256:$BASE32")
|
||||||
|
echo " source: $SRC_HASH"
|
||||||
|
|
||||||
|
echo " computing cargo hash..."
|
||||||
|
BUILD_OUTPUT=$(nix build --no-link --impure --expr "
|
||||||
|
let
|
||||||
|
pkgs = (builtins.getFlake \"path:$ROOT_DIR\").inputs.nixpkgs.legacyPackages.\${builtins.currentSystem};
|
||||||
|
in pkgs.rustPlatform.fetchCargoVendor {
|
||||||
|
src = pkgs.fetchFromGitea {
|
||||||
|
domain = \"git.janezic.dev\";
|
||||||
|
owner = \"janezicmatej\";
|
||||||
|
repo = \"todo-mcp\";
|
||||||
|
rev = \"$LATEST\";
|
||||||
|
hash = \"$SRC_HASH\";
|
||||||
|
};
|
||||||
|
hash = \"\";
|
||||||
|
}
|
||||||
|
" 2>&1) || true
|
||||||
|
CARGO_HASH=$(echo "$BUILD_OUTPUT" | extract_hash) || true
|
||||||
|
|
||||||
|
if [[ -z "$CARGO_HASH" ]]; then
|
||||||
|
echo " error: failed to compute cargo hash"
|
||||||
|
echo "$BUILD_OUTPUT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo " cargo: $CARGO_HASH"
|
||||||
|
|
||||||
|
OLD_SRC=$(grep 'sha256 = ' "$PKG_FILE" | grep -oP 'sha256-[A-Za-z0-9+/]+=')
|
||||||
|
OLD_CARGO=$(grep 'cargoHash = ' "$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_CARGO|$CARGO_HASH|" "$PKG_FILE"
|
||||||
|
|
||||||
|
echo "todo-mcp updated to $LATEST"
|
||||||
Reference in New Issue
Block a user