- Add packages/opencode with pre-built binaries from GitHub releases (v1.4.0) - Support all 4 platforms (aarch64-darwin, x86_64-darwin, x86_64-linux, aarch64-linux) - Add update-opencode flake app for automated version bumps - Install opencode via home.roles.base so it's available on all machines - Reformat flake.nix and packages with nixfmt
149 lines
4.7 KiB
Bash
Executable File
149 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
DRY_RUN=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--dry-run|-n)
|
|
DRY_RUN=true
|
|
shift
|
|
;;
|
|
--help|-h)
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --dry-run, -n Show what would be updated without making changes"
|
|
echo " --help, -h Show this help message"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Use --help for usage information"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
|
|
NIX_FILE="$REPO_ROOT/packages/opencode/default.nix"
|
|
|
|
echo "Fetching latest opencode version from GitHub API..."
|
|
|
|
RELEASE_INFO=$(curl -fsSL https://api.github.com/repos/anomalyco/opencode/releases/latest)
|
|
NEW_VERSION=$(echo "$RELEASE_INFO" | jq -r '.tag_name' | sed 's/^v//')
|
|
|
|
if [ -z "$NEW_VERSION" ] || [ "$NEW_VERSION" = "null" ]; then
|
|
echo -e "${RED}Error: Failed to fetch version from GitHub API${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
CURRENT_VERSION=$(grep -m1 'version = ' "$NIX_FILE" | sed -E 's/.*version = "([^"]+)".*/\1/')
|
|
|
|
if [ "$CURRENT_VERSION" = "$NEW_VERSION" ]; then
|
|
echo -e "${GREEN}Already up to date: $CURRENT_VERSION${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${YELLOW}Updating from $CURRENT_VERSION to $NEW_VERSION${NC}"
|
|
|
|
# Compute SHA256 hashes for each platform
|
|
# fetchzip hashes the unpacked directory, so we need to extract and hash
|
|
compute_unpacked_hash() {
|
|
local url="$1"
|
|
local ext="$2"
|
|
local tmpdir=$(mktemp -d)
|
|
local archive="/tmp/opencode-archive.$ext"
|
|
|
|
curl -fsSL "$url" -o "$archive"
|
|
|
|
if [ "$ext" = "zip" ]; then
|
|
(cd "$tmpdir" && unzip -q "$archive")
|
|
else
|
|
(cd "$tmpdir" && tar xzf "$archive")
|
|
fi
|
|
|
|
local sri_hash=$(nix hash path "$tmpdir")
|
|
local nix32_hash=$(nix hash convert --hash-algo sha256 --to nix32 "$sri_hash")
|
|
|
|
rm -rf "$tmpdir" "$archive"
|
|
echo "$nix32_hash"
|
|
}
|
|
|
|
echo "Computing SHA256 hashes (this may take a moment)..."
|
|
|
|
SHA_DARWIN_ARM=$(compute_unpacked_hash "https://github.com/anomalyco/opencode/releases/download/v${NEW_VERSION}/opencode-darwin-arm64.zip" "zip")
|
|
echo " aarch64-darwin: $SHA_DARWIN_ARM"
|
|
|
|
SHA_DARWIN_X64=$(compute_unpacked_hash "https://github.com/anomalyco/opencode/releases/download/v${NEW_VERSION}/opencode-darwin-x64.zip" "zip")
|
|
echo " x86_64-darwin: $SHA_DARWIN_X64"
|
|
|
|
SHA_LINUX_X64=$(compute_unpacked_hash "https://github.com/anomalyco/opencode/releases/download/v${NEW_VERSION}/opencode-linux-x64.tar.gz" "tar.gz")
|
|
echo " x86_64-linux: $SHA_LINUX_X64"
|
|
|
|
SHA_LINUX_ARM64=$(compute_unpacked_hash "https://github.com/anomalyco/opencode/releases/download/v${NEW_VERSION}/opencode-linux-arm64.tar.gz" "tar.gz")
|
|
echo " aarch64-linux: $SHA_LINUX_ARM64"
|
|
|
|
if [ "$DRY_RUN" = true ]; then
|
|
echo -e "${YELLOW}DRY RUN - No changes will be made${NC}"
|
|
echo ""
|
|
echo "Would update:"
|
|
echo " Version: $CURRENT_VERSION -> $NEW_VERSION"
|
|
echo " aarch64-darwin SHA: $SHA_DARWIN_ARM"
|
|
echo " x86_64-darwin SHA: $SHA_DARWIN_X64"
|
|
echo " x86_64-linux SHA: $SHA_LINUX_X64"
|
|
echo " aarch64-linux SHA: $SHA_LINUX_ARM64"
|
|
exit 0
|
|
fi
|
|
|
|
# Update version
|
|
sed -i.tmp "s/version = \".*\";/version = \"$NEW_VERSION\";/" "$NIX_FILE"
|
|
|
|
# Update SHA256 hashes using awk
|
|
awk -v sha_arm="$SHA_DARWIN_ARM" -v sha_x64="$SHA_DARWIN_X64" -v sha_linux_x64="$SHA_LINUX_X64" -v sha_linux_arm="$SHA_LINUX_ARM64" '
|
|
/aarch64-darwin = {/ { in_arm = 1 }
|
|
/x86_64-darwin = {/ { in_x64 = 1; in_arm = 0 }
|
|
/x86_64-linux = {/ { in_linux_x64 = 1; in_x64 = 0 }
|
|
/aarch64-linux = {/ { in_linux_arm = 1; in_linux_x64 = 0 }
|
|
/};/ {
|
|
in_arm = 0
|
|
in_x64 = 0
|
|
in_linux_x64 = 0
|
|
in_linux_arm = 0
|
|
}
|
|
/sha256 = / {
|
|
if (in_arm) {
|
|
sub(/sha256 = ".*";/, "sha256 = \"" sha_arm "\";")
|
|
} else if (in_x64) {
|
|
sub(/sha256 = ".*";/, "sha256 = \"" sha_x64 "\";")
|
|
} else if (in_linux_x64) {
|
|
sub(/sha256 = ".*";/, "sha256 = \"" sha_linux_x64 "\";")
|
|
} else if (in_linux_arm) {
|
|
sub(/sha256 = ".*";/, "sha256 = \"" sha_linux_arm "\";")
|
|
}
|
|
}
|
|
{ print }
|
|
' "$NIX_FILE" > "$NIX_FILE.new"
|
|
|
|
mv "$NIX_FILE.new" "$NIX_FILE"
|
|
rm -f "$NIX_FILE.tmp"
|
|
|
|
echo -e "${GREEN}Successfully updated to version $NEW_VERSION${NC}"
|
|
echo ""
|
|
echo "Updated SHA256 hashes:"
|
|
echo " aarch64-darwin: $SHA_DARWIN_ARM"
|
|
echo " x86_64-darwin: $SHA_DARWIN_X64"
|
|
echo " x86_64-linux: $SHA_LINUX_X64"
|
|
echo " aarch64-linux: $SHA_LINUX_ARM64"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Review changes: git diff $NIX_FILE"
|
|
echo " 2. Test build: nix build .#custom-opencode"
|
|
echo " 3. Verify version: ./result/bin/opencode --version"
|
|
echo " 4. Commit: git add $NIX_FILE && git commit -m 'opencode: Update to version $NEW_VERSION'"
|