Add opencode package and install via base role
- 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
This commit is contained in:
@@ -68,11 +68,22 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, nixpkgs-unstable, ... } @ inputs: let
|
outputs =
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
nixpkgs-unstable,
|
||||||
|
...
|
||||||
|
}@inputs:
|
||||||
|
let
|
||||||
# Shared overlay function to reduce duplication across module sets
|
# Shared overlay function to reduce duplication across module sets
|
||||||
# Parameters:
|
# Parameters:
|
||||||
# unstableOverlays: Additional overlays to apply when importing nixpkgs-unstable
|
# unstableOverlays: Additional overlays to apply when importing nixpkgs-unstable
|
||||||
mkBaseOverlay = { unstableOverlays ? [] }: (final: prev: {
|
mkBaseOverlay =
|
||||||
|
{
|
||||||
|
unstableOverlays ? [ ],
|
||||||
|
}:
|
||||||
|
(final: prev: {
|
||||||
unstable = import nixpkgs-unstable {
|
unstable = import nixpkgs-unstable {
|
||||||
system = prev.stdenv.hostPlatform.system;
|
system = prev.stdenv.hostPlatform.system;
|
||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
@@ -86,7 +97,7 @@
|
|||||||
permittedInsecurePackages = [ "qtwebengine-5.15.19" ];
|
permittedInsecurePackages = [ "qtwebengine-5.15.19" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
custom = prev.callPackage ./packages {};
|
custom = prev.callPackage ./packages { };
|
||||||
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
|
# Compatibility: bitwarden renamed to bitwarden-desktop in unstable
|
||||||
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
|
bitwarden-desktop = prev.bitwarden-desktop or prev.bitwarden;
|
||||||
});
|
});
|
||||||
@@ -94,7 +105,11 @@
|
|||||||
# Shared home-manager configuration factory
|
# Shared home-manager configuration factory
|
||||||
# Parameters:
|
# Parameters:
|
||||||
# sharedModules: Additional modules to include in home-manager.sharedModules
|
# sharedModules: Additional modules to include in home-manager.sharedModules
|
||||||
mkHomeManagerConfig = { sharedModules ? [] }: {
|
mkHomeManagerConfig =
|
||||||
|
{
|
||||||
|
sharedModules ? [ ],
|
||||||
|
}:
|
||||||
|
{
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
home-manager.useUserPackages = true;
|
home-manager.useUserPackages = true;
|
||||||
home-manager.sharedModules = sharedModules ++ [
|
home-manager.sharedModules = sharedModules ++ [
|
||||||
@@ -105,13 +120,12 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# Shared unstable overlays for custom package builds
|
# Shared unstable overlays for custom package builds
|
||||||
customUnstableOverlays = [
|
customUnstableOverlays = [
|
||||||
# Override claude-code in unstable to use our custom GCS-based build
|
# Override claude-code in unstable to use our custom GCS-based build
|
||||||
# (needed for corporate networks that block npm registry)
|
# (needed for corporate networks that block npm registry)
|
||||||
(ufinal: uprev: {
|
(ufinal: uprev: {
|
||||||
claude-code = uprev.callPackage ./packages/claude-code {};
|
claude-code = uprev.callPackage ./packages/claude-code { };
|
||||||
})
|
})
|
||||||
# Pin dolt to v1.82.4 (gastown requires >= 1.82.4)
|
# Pin dolt to v1.82.4 (gastown requires >= 1.82.4)
|
||||||
(ufinal: uprev: {
|
(ufinal: uprev: {
|
||||||
@@ -158,10 +172,11 @@
|
|||||||
{
|
{
|
||||||
nixpkgs.overlays = [ (mkBaseOverlay { unstableOverlays = customUnstableOverlays; }) ];
|
nixpkgs.overlays = [ (mkBaseOverlay { unstableOverlays = customUnstableOverlays; }) ];
|
||||||
}
|
}
|
||||||
(mkHomeManagerConfig { sharedModules = []; })
|
(mkHomeManagerConfig { sharedModules = [ ]; })
|
||||||
];
|
];
|
||||||
|
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
nixosConfigurations.nix-book = nixpkgs.lib.nixosSystem rec {
|
nixosConfigurations.nix-book = nixpkgs.lib.nixosSystem rec {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
modules = nixosModules ++ [
|
modules = nixosModules ++ [
|
||||||
@@ -262,12 +277,13 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Packages for CI caching (custom packages, flake inputs, and qt-pinned)
|
# Packages for CI caching (custom packages, flake inputs, and qt-pinned)
|
||||||
packages = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (system:
|
packages = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (
|
||||||
|
system:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
overlays = [ (mkBaseOverlay {}) ];
|
overlays = [ (mkBaseOverlay { }) ];
|
||||||
};
|
};
|
||||||
pkgsQt = import inputs.nixpkgs-qt {
|
pkgsQt = import inputs.nixpkgs-qt {
|
||||||
inherit system;
|
inherit system;
|
||||||
@@ -279,13 +295,15 @@
|
|||||||
# Version strings for flake input packages
|
# Version strings for flake input packages
|
||||||
beadsRev = builtins.substring 0 8 (inputs.beads.rev or "unknown");
|
beadsRev = builtins.substring 0 8 (inputs.beads.rev or "unknown");
|
||||||
gastownRev = builtins.substring 0 8 (inputs.gastown.rev or "unknown");
|
gastownRev = builtins.substring 0 8 (inputs.gastown.rev or "unknown");
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
"custom-claude-code" = pkgs.custom.claude-code;
|
"custom-claude-code" = pkgs.custom.claude-code;
|
||||||
"custom-app-launcher-server" = pkgs.custom.app-launcher-server;
|
"custom-app-launcher-server" = pkgs.custom.app-launcher-server;
|
||||||
"custom-mcrcon-rbw" = pkgs.custom.mcrcon-rbw;
|
"custom-mcrcon-rbw" = pkgs.custom.mcrcon-rbw;
|
||||||
"custom-tea-rbw" = pkgs.custom.tea-rbw;
|
"custom-tea-rbw" = pkgs.custom.tea-rbw;
|
||||||
"custom-rclone-torbox-setup" = pkgs.custom.rclone-torbox-setup;
|
"custom-rclone-torbox-setup" = pkgs.custom.rclone-torbox-setup;
|
||||||
"custom-nextcloud-talk-desktop" = pkgs.custom.nextcloud-talk-desktop;
|
"custom-nextcloud-talk-desktop" = pkgs.custom.nextcloud-talk-desktop;
|
||||||
|
"custom-opencode" = pkgs.custom.opencode;
|
||||||
"qt-pinned-jellyfin-media-player" = pkgsQt.jellyfin-media-player;
|
"qt-pinned-jellyfin-media-player" = pkgsQt.jellyfin-media-player;
|
||||||
"qt-pinned-stremio" = pkgsQt.stremio;
|
"qt-pinned-stremio" = pkgsQt.stremio;
|
||||||
# Flake input packages (beads, gastown) - these get version from input rev
|
# Flake input packages (beads, gastown) - these get version from input rev
|
||||||
@@ -303,17 +321,33 @@
|
|||||||
src = inputs.perles;
|
src = inputs.perles;
|
||||||
version = "unstable-${builtins.substring 0 8 (inputs.perles.rev or "unknown")}";
|
version = "unstable-${builtins.substring 0 8 (inputs.perles.rev or "unknown")}";
|
||||||
};
|
};
|
||||||
} // (if system == "x86_64-linux" then {
|
}
|
||||||
|
// (
|
||||||
|
if system == "x86_64-linux" then
|
||||||
|
{
|
||||||
# nix-deck kernel from Jovian-NixOS (Steam Deck) - expensive to build
|
# nix-deck kernel from Jovian-NixOS (Steam Deck) - expensive to build
|
||||||
"nix-deck-kernel" = self.nixosConfigurations.nix-deck.config.boot.kernelPackages.kernel;
|
"nix-deck-kernel" = self.nixosConfigurations.nix-deck.config.boot.kernelPackages.kernel;
|
||||||
} else {})
|
}
|
||||||
|
else
|
||||||
|
{ }
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
# Flake apps
|
# Flake apps
|
||||||
apps = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ] (system:
|
apps = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ] (
|
||||||
|
system:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs { inherit system; };
|
pkgs = import nixpkgs { inherit system; };
|
||||||
commonDeps = [ pkgs.curl pkgs.jq pkgs.nix pkgs.git pkgs.gnused pkgs.gnugrep pkgs.coreutils pkgs.gawk ];
|
commonDeps = [
|
||||||
|
pkgs.curl
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.nix
|
||||||
|
pkgs.git
|
||||||
|
pkgs.gnused
|
||||||
|
pkgs.gnugrep
|
||||||
|
pkgs.coreutils
|
||||||
|
pkgs.gawk
|
||||||
|
];
|
||||||
|
|
||||||
update-doomemacs = pkgs.writeShellScriptBin "update-doomemacs" ''
|
update-doomemacs = pkgs.writeShellScriptBin "update-doomemacs" ''
|
||||||
export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH"
|
export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH"
|
||||||
@@ -325,6 +359,11 @@
|
|||||||
${builtins.readFile ./packages/claude-code/update.sh}
|
${builtins.readFile ./packages/claude-code/update.sh}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
update-opencode = pkgs.writeShellScriptBin "update-opencode" ''
|
||||||
|
export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH"
|
||||||
|
${builtins.readFile ./packages/opencode/update.sh}
|
||||||
|
'';
|
||||||
|
|
||||||
rotate-wallpaper = pkgs.writeShellScriptBin "rotate-wallpaper" ''
|
rotate-wallpaper = pkgs.writeShellScriptBin "rotate-wallpaper" ''
|
||||||
export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH"
|
export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH"
|
||||||
${builtins.readFile ./scripts/rotate-wallpaper.sh}
|
${builtins.readFile ./scripts/rotate-wallpaper.sh}
|
||||||
@@ -344,7 +383,8 @@
|
|||||||
export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH"
|
export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH"
|
||||||
${builtins.readFile ./scripts/build-liveusb.sh}
|
${builtins.readFile ./scripts/build-liveusb.sh}
|
||||||
'';
|
'';
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
update-doomemacs = {
|
update-doomemacs = {
|
||||||
type = "app";
|
type = "app";
|
||||||
program = "${update-doomemacs}/bin/update-doomemacs";
|
program = "${update-doomemacs}/bin/update-doomemacs";
|
||||||
@@ -353,6 +393,10 @@
|
|||||||
type = "app";
|
type = "app";
|
||||||
program = "${update-claude-code}/bin/update-claude-code";
|
program = "${update-claude-code}/bin/update-claude-code";
|
||||||
};
|
};
|
||||||
|
update-opencode = {
|
||||||
|
type = "app";
|
||||||
|
program = "${update-opencode}/bin/update-opencode";
|
||||||
|
};
|
||||||
rotate-wallpaper = {
|
rotate-wallpaper = {
|
||||||
type = "app";
|
type = "app";
|
||||||
program = "${rotate-wallpaper}/bin/rotate-wallpaper";
|
program = "${rotate-wallpaper}/bin/rotate-wallpaper";
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
@@ -24,6 +29,7 @@ in
|
|||||||
tmux
|
tmux
|
||||||
tree
|
tree
|
||||||
watch
|
watch
|
||||||
|
custom.opencode
|
||||||
];
|
];
|
||||||
|
|
||||||
# Automatic garbage collection for user profile (home-manager generations).
|
# Automatic garbage collection for user profile (home-manager generations).
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
tea-rbw = pkgs.callPackage ./tea-rbw {};
|
tea-rbw = pkgs.callPackage ./tea-rbw { };
|
||||||
app-launcher-server = pkgs.callPackage ./app-launcher-server {};
|
app-launcher-server = pkgs.callPackage ./app-launcher-server { };
|
||||||
claude-code = pkgs.callPackage ./claude-code {};
|
claude-code = pkgs.callPackage ./claude-code { };
|
||||||
mcrcon-rbw = pkgs.callPackage ./mcrcon-rbw {};
|
mcrcon-rbw = pkgs.callPackage ./mcrcon-rbw { };
|
||||||
rclone-torbox-setup = pkgs.callPackage ./rclone-torbox-setup {};
|
rclone-torbox-setup = pkgs.callPackage ./rclone-torbox-setup { };
|
||||||
pi-coding-agent = pkgs.callPackage ./pi-coding-agent {};
|
pi-coding-agent = pkgs.callPackage ./pi-coding-agent { };
|
||||||
nextcloud-talk-desktop = pkgs.callPackage ./nextcloud-talk-desktop {};
|
nextcloud-talk-desktop = pkgs.callPackage ./nextcloud-talk-desktop { };
|
||||||
|
opencode = pkgs.callPackage ./opencode { };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchzip,
|
||||||
|
patchelf,
|
||||||
|
glibc,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
version = "1.4.0";
|
||||||
|
|
||||||
|
srcs = {
|
||||||
|
aarch64-darwin = {
|
||||||
|
url = "https://github.com/anomalyco/opencode/releases/download/v${version}/opencode-darwin-arm64.zip";
|
||||||
|
sha256 = "0m97j2vln8yhhvnsjl92phx6dac24y7hgh75csmbkbhawkz9xm4l";
|
||||||
|
};
|
||||||
|
x86_64-darwin = {
|
||||||
|
url = "https://github.com/anomalyco/opencode/releases/download/v${version}/opencode-darwin-x64.zip";
|
||||||
|
sha256 = "17n04j06pdc2raxjm91y6p87gwpnra0liabpbjwdmyd1iqgqv0q8";
|
||||||
|
};
|
||||||
|
x86_64-linux = {
|
||||||
|
url = "https://github.com/anomalyco/opencode/releases/download/v${version}/opencode-linux-x64.tar.gz";
|
||||||
|
sha256 = "16117lwfj2lb8wjbq5cyf77vhi52ada5ys3212hjqw3qw3wrcc0r";
|
||||||
|
};
|
||||||
|
aarch64-linux = {
|
||||||
|
url = "https://github.com/anomalyco/opencode/releases/download/v${version}/opencode-linux-arm64.tar.gz";
|
||||||
|
sha256 = "06lvm1qiji74xdd3psqn6lwxak65gqsbmkib1pjb4n65f9246jwm";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
src =
|
||||||
|
srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
||||||
|
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "opencode";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = fetchzip {
|
||||||
|
inherit (src) url sha256;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Bun standalone binaries have JS code appended after the ELF sections
|
||||||
|
# stripping/patching would remove or corrupt this appended data
|
||||||
|
dontStrip = true;
|
||||||
|
dontPatchELF = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = lib.optionals stdenv.isLinux [ patchelf ];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
install -Dm755 $src/opencode $out/bin/opencode
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Manually patch the interpreter for bun standalone binaries on Linux
|
||||||
|
postFixup = lib.optionalString stdenv.isLinux ''
|
||||||
|
interpreter="${glibc}/lib/${
|
||||||
|
if stdenv.hostPlatform.system == "aarch64-linux" then
|
||||||
|
"ld-linux-aarch64.so.1"
|
||||||
|
else
|
||||||
|
"ld-linux-x86-64.so.2"
|
||||||
|
}"
|
||||||
|
patchelf --set-interpreter "$interpreter" $out/bin/opencode
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Terminal-based AI coding assistant";
|
||||||
|
homepage = "https://opencode.ai";
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = [ ];
|
||||||
|
platforms = [
|
||||||
|
"aarch64-darwin"
|
||||||
|
"x86_64-darwin"
|
||||||
|
"x86_64-linux"
|
||||||
|
"aarch64-linux"
|
||||||
|
];
|
||||||
|
mainProgram = "opencode";
|
||||||
|
};
|
||||||
|
}
|
||||||
Executable
+148
@@ -0,0 +1,148 @@
|
|||||||
|
#!/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'"
|
||||||
Reference in New Issue
Block a user