feat: self-package claude-code
This commit is contained in:
63
packages/claude-code/update.sh
Executable file
63
packages/claude-code/update.sh
Executable 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 "$@"
|
||||
Reference in New Issue
Block a user