feat: self-package claude-code

This commit is contained in:
2026-04-16 22:59:01 +02:00
parent a60b40eeac
commit 5b52e41496
5 changed files with 455 additions and 17 deletions

63
packages/claude-code/update.sh Executable file
View File

@@ -0,0 +1,63 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq nodejs prefetch-npm-deps nix-prefetch
# shellcheck shell=bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
PKG_FILE="$SCRIPT_DIR/package.nix"
LOCK_FILE="$SCRIPT_DIR/package-lock.json"
cd "$ROOT_DIR"
extract_hash() {
sed 's/\x1b\[[0-9;]*m//g' | grep 'got:' | tail -1 | grep -oP 'sha256-[A-Za-z0-9+/]+='
}
main() {
echo "fetching latest version from npm..."
local latest current
latest=$(curl -sf "https://registry.npmjs.org/@anthropic-ai/claude-code/latest" | jq -r '.version')
current=$(grep 'version = ' "$PKG_FILE" | head -1 | sed 's/.*"\(.*\)".*/\1/')
if [[ "$current" == "$latest" ]]; then
echo "claude-code already at $latest"
return 0
fi
echo "updating claude-code: $current -> $latest"
local url="https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-${latest}.tgz"
echo " prefetching source..."
local base32 src_hash
base32=$(nix-prefetch-url --unpack "$url" 2>/dev/null)
src_hash=$(nix hash convert --to sri "sha256:$base32")
echo " source: $src_hash"
echo " generating package-lock.json..."
local tmpdir
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' RETURN
curl -sf "$url" -o "$tmpdir/pkg.tgz"
tar xzf "$tmpdir/pkg.tgz" -C "$tmpdir" --strip-components=1
(cd "$tmpdir" && npm install --package-lock-only --ignore-scripts --no-audit --no-fund 2>/dev/null)
cp "$tmpdir/package-lock.json" "$LOCK_FILE"
echo " computing npm deps hash..."
local npm_hash
npm_hash=$(prefetch-npm-deps "$LOCK_FILE" 2>/dev/null)
echo " npmDepsHash: $npm_hash"
local old_src old_npm
old_src=$(grep 'hash = "sha256-' "$PKG_FILE" | head -1 | grep -oP 'sha256-[A-Za-z0-9+/]+=')
old_npm=$(grep 'npmDepsHash = "sha256-' "$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_npm|$npm_hash|" "$PKG_FILE"
echo "claude-code updated to $latest"
}
main "$@"