feat(release): single-binary packaging follow-ups (5259/5260)
Complete 5259 single-binary sweep for packaging/docs: remove codewhale-tui from .cnb.yml, nix, npm bin, installer, bundles, locales, and docs/INSTALL matrix; add .winget + packaging/ manifests (single-binary 27-asset inventory, FreeBSD source-build note) and update release-artifacts comments from 34 to 27 assets. 27-asset inventory verified via assemble-release-assets --verify. Co-Authored-By: internal-model
This commit is contained in:
@@ -60,12 +60,11 @@
|
||||
set -eu
|
||||
# The release profile uses full LTO and one codegen unit. Bound Cargo's
|
||||
# parallelism so the final links cannot exhaust a shared CNB runner.
|
||||
cargo build --jobs 2 --release --locked -p codewhale-cli -p codewhale-tui
|
||||
cargo build --jobs 2 --release --locked -p codewhale-cli
|
||||
export PATH="$PWD/target/release:$PATH"
|
||||
node scripts/release/npm-wrapper-smoke.js
|
||||
./target/release/codewhale --version
|
||||
./target/release/codew --version
|
||||
./target/release/codewhale-tui --version
|
||||
|
||||
.linux_release_preflight: &linux_release_preflight
|
||||
name: linux release preflight
|
||||
@@ -100,12 +99,11 @@
|
||||
set -eu
|
||||
# Keep the production release profile intact while avoiding a burst of
|
||||
# concurrent rustc/linker processes on the shared release runner.
|
||||
cargo build --jobs 2 --release --locked -p codewhale-cli -p codewhale-tui
|
||||
cargo build --jobs 2 --release --locked -p codewhale-cli
|
||||
export PATH="$PWD/target/release:$PATH"
|
||||
node scripts/release/npm-wrapper-smoke.js
|
||||
./target/release/codewhale --version
|
||||
./target/release/codew --version
|
||||
./target/release/codewhale-tui --version
|
||||
|
||||
main:
|
||||
push:
|
||||
@@ -141,17 +139,15 @@ $:
|
||||
./scripts/release/check-ohos-deps.sh
|
||||
cargo build --jobs 2 --release --locked \
|
||||
--target x86_64-unknown-linux-musl \
|
||||
-p codewhale-cli -p codewhale-tui
|
||||
-p codewhale-cli # single binary
|
||||
|
||||
mkdir -p target/cnb-release
|
||||
BIN_DIR="target/x86_64-unknown-linux-musl/release"
|
||||
cp "$BIN_DIR/codewhale" target/cnb-release/codewhale-linux-x64
|
||||
cp "$BIN_DIR/codew" target/cnb-release/codew-linux-x64
|
||||
cp "$BIN_DIR/codewhale-tui" target/cnb-release/codewhale-tui-linux-x64
|
||||
strip \
|
||||
target/cnb-release/codewhale-linux-x64 \
|
||||
target/cnb-release/codew-linux-x64 \
|
||||
target/cnb-release/codewhale-tui-linux-x64 \
|
||||
|| true
|
||||
|
||||
(
|
||||
@@ -159,7 +155,6 @@ $:
|
||||
sha256sum \
|
||||
codewhale-linux-x64 \
|
||||
codew-linux-x64 \
|
||||
codewhale-tui-linux-x64 \
|
||||
> codewhale-artifacts-sha256.txt
|
||||
)
|
||||
|
||||
@@ -188,7 +183,6 @@ $:
|
||||
echo "Assets:"
|
||||
echo "- codewhale-linux-x64"
|
||||
echo "- codew-linux-x64"
|
||||
echo "- codewhale-tui-linux-x64"
|
||||
echo "- codewhale-artifacts-sha256.txt"
|
||||
} > target/cnb-release/CNB_RELEASE.md
|
||||
|
||||
@@ -204,5 +198,4 @@ $:
|
||||
attachments:
|
||||
- target/cnb-release/codewhale-linux-x64
|
||||
- target/cnb-release/codew-linux-x64
|
||||
- target/cnb-release/codewhale-tui-linux-x64
|
||||
- target/cnb-release/codewhale-artifacts-sha256.txt
|
||||
|
||||
@@ -29,6 +29,9 @@ env:
|
||||
jobs:
|
||||
build:
|
||||
name: Build ${{ matrix.platform }}
|
||||
# FreeBSD is a source-build target validated via `cargo check --target x86_64-unknown-freebsd -p codewhale-cli --locked`
|
||||
# (see packaging/freebsd/README.md and docs/INSTALL.md#freebsd). The 7×1 prebuilt matrix stays 7 targets;
|
||||
# FreeBSD has no prebuilt asset, no npm binary, and no matrix bloat — it builds from source.
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -324,7 +327,7 @@ jobs:
|
||||
with:
|
||||
name: codewhale-release-assets
|
||||
path: release-assets
|
||||
- name: Verify 34-asset inventory and checksum manifests
|
||||
- name: Verify 27-asset inventory and checksum manifests (single binary)
|
||||
run: node scripts/release/assemble-release-assets.js --verify release-assets
|
||||
- name: Test release inventory contracts
|
||||
run: |
|
||||
@@ -342,6 +345,6 @@ jobs:
|
||||
echo ""
|
||||
echo "- Source: \`${{ inputs.source_sha }}\`"
|
||||
echo "- Version metadata: \`${{ inputs.version }}\`"
|
||||
echo "- Inventory: 7 targets / 34 files"
|
||||
echo "- Inventory: 7 targets / 27 files (single binary)"
|
||||
echo "- Publication: none (Actions artifact \`codewhale-release-assets\` only)"
|
||||
} >> "${GITHUB_STEP_SUMMARY}"
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
# Hmbown.CodeWhale — winget singleton manifest for CodeWhale (single binary)
|
||||
# This is a mirror of packaging/winget/Hmbown.CodeWhale.yaml for tooling that expects .winget/.
|
||||
# Keep both in sync; the canonical source is packaging/winget/Hmbown.CodeWhale.yaml.
|
||||
# See packaging/winget/README.md for update instructions.
|
||||
|
||||
PackageIdentifier: Hmbown.CodeWhale
|
||||
PackageVersion: 0.9.5
|
||||
DefaultLocale: en-US
|
||||
ManifestType: singleton
|
||||
ManifestVersion: 1.6.0
|
||||
|
||||
Publisher: Hmbown
|
||||
PublisherUrl: https://github.com/Hmbown
|
||||
PublisherSupportUrl: https://github.com/Hmbown/CodeWhale/issues
|
||||
PackageName: CodeWhale
|
||||
PackageUrl: https://github.com/Hmbown/CodeWhale
|
||||
License: MIT
|
||||
LicenseUrl: https://github.com/Hmbown/CodeWhale/blob/main/LICENSE
|
||||
Copyright: Copyright (c) Hmbown
|
||||
ShortDescription: Terminal coding agent for supported hosted and local models
|
||||
Description: |
|
||||
CodeWhale is a terminal coding agent that runs on your machine. The v0.9.5 single-binary
|
||||
release ships one `codewhale` binary per target (plus the `codew` shim) across Linux x64 (musl),
|
||||
Linux arm64, Android arm64, macOS x64/arm64, and Windows x64/arm64. See https://github.com/Hmbown/CodeWhale
|
||||
for provider setup, Fleet workflows, and the full install guide.
|
||||
Author: Hmbown
|
||||
Moniker: codewhale
|
||||
Tags:
|
||||
- codewhale
|
||||
- deepseek
|
||||
- cli
|
||||
- tui
|
||||
- terminal
|
||||
- ai
|
||||
- coding-agent
|
||||
- rust
|
||||
MinimumOSVersion: 10.0.0.0
|
||||
ReleaseNotes: https://github.com/Hmbown/CodeWhale/releases/tag/v0.9.5
|
||||
ReleaseNotesUrl: https://github.com/Hmbown/CodeWhale/releases/tag/v0.9.5
|
||||
|
||||
Installers:
|
||||
- Architecture: x64
|
||||
InstallerType: nullsoft
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/CodeWhaleSetup.exe
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
ProductCode: CodeWhale
|
||||
UpgradeBehavior: install
|
||||
ReleaseDate: 2026-08-07
|
||||
- Architecture: x64
|
||||
InstallerType: zip
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/codewhale-windows-x64.zip
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
NestedInstallerType: portable
|
||||
NestedInstallerFiles:
|
||||
- RelativeFilePath: codewhale-windows-x64/codewhale.exe
|
||||
PortableCommandAlias: codewhale
|
||||
- RelativeFilePath: codewhale-windows-x64/codew.exe
|
||||
PortableCommandAlias: codew
|
||||
ReleaseDate: 2026-08-07
|
||||
- Architecture: x64
|
||||
InstallerType: zip
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/codewhale-windows-x64-portable.zip
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
NestedInstallerType: portable
|
||||
NestedInstallerFiles:
|
||||
- RelativeFilePath: codewhale-windows-x64-portable/codewhale.exe
|
||||
PortableCommandAlias: codewhale
|
||||
- RelativeFilePath: codewhale-windows-x64-portable/codew.exe
|
||||
PortableCommandAlias: codew
|
||||
ReleaseDate: 2026-08-07
|
||||
- Architecture: arm64
|
||||
InstallerType: zip
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/codewhale-windows-arm64.zip
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
NestedInstallerType: portable
|
||||
NestedInstallerFiles:
|
||||
- RelativeFilePath: codewhale-windows-arm64/codewhale.exe
|
||||
PortableCommandAlias: codewhale
|
||||
- RelativeFilePath: codewhale-windows-arm64/codew.exe
|
||||
PortableCommandAlias: codew
|
||||
ReleaseDate: 2026-08-07
|
||||
- Architecture: arm64
|
||||
InstallerType: zip
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/codewhale-windows-arm64-portable.zip
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
NestedInstallerType: portable
|
||||
NestedInstallerFiles:
|
||||
- RelativeFilePath: codewhale-windows-arm64-portable/codewhale.exe
|
||||
PortableCommandAlias: codewhale
|
||||
- RelativeFilePath: codewhale-windows-arm64-portable/codew.exe
|
||||
PortableCommandAlias: codew
|
||||
ReleaseDate: 2026-08-07
|
||||
@@ -290,7 +290,10 @@
|
||||
"CmdReviewDescription": "Run a structured code review on a file, diff, or PR",
|
||||
"CmdRlmDescription": "Open a persistent RLM context for a file or text",
|
||||
"CmdSaveDescription": "Save session to file",
|
||||
"CmdForkDescription": "Fork the active conversation into a sibling session",
|
||||
"CmdForkDescription": "Fork the active conversation into a sibling session (with interactive picker per #576)",
|
||||
"CmdTreeDescription": "Show the session entry journal as a tree (leaf = active branch)",
|
||||
"CmdBranchDescription": "Move the session leaf to an existing entry (branching moves leaf only, never rewrites history)",
|
||||
"CmdResumeDescription": "Resume a session (with optional foreign-session import via export JSON)",
|
||||
"CmdNewDescription": "Start a fresh saved session",
|
||||
"CmdSessionsDescription": "Open session history picker",
|
||||
"CmdSettingsDescription": "Open the typed settings editor",
|
||||
|
||||
+102
-74
@@ -8,7 +8,7 @@ If you just want the short version, see the
|
||||
[main README](../README.md#install) or
|
||||
[简体中文 README](../README.zh-CN.md#安装).
|
||||
|
||||
This branch describes the **v0.9.4 source candidate**. Install commands that use
|
||||
This branch describes the **v0.9.5 source candidate**. Install commands that use
|
||||
`latest` resolve to the latest published package or GitHub Release, which may
|
||||
trail the source candidate. A candidate is not a published install until the
|
||||
matching package, tag, checksums, and release assets exist.
|
||||
@@ -19,7 +19,7 @@ On macOS and Linux, the website installer is the shortest install/update path:
|
||||
curl -fsSL https://codewhale.net/install.sh | sh
|
||||
```
|
||||
|
||||
It downloads the matching `codewhale`, `codew`, and `codewhale-tui` release binaries,
|
||||
It downloads the matching `codewhale` and `codew` release binaries,
|
||||
verifies them against `codewhale-artifacts-sha256.txt`, installs to
|
||||
`~/.local/bin` by default, and exposes the `codew` convenience command.
|
||||
|
||||
@@ -27,34 +27,33 @@ verifies them against `codewhale-artifacts-sha256.txt`, installs to
|
||||
|
||||
## 1. Supported platforms
|
||||
|
||||
Published Codewhale releases ship matched `codewhale`, `codew`, and
|
||||
`codewhale-tui` prebuilt binaries for their supported platform/architecture
|
||||
combinations. The table below is the intended v0.9.4 candidate matrix;
|
||||
Published Codewhale releases ship matched `codewhale` and `codew` prebuilt binaries for their supported platform/architecture
|
||||
combinations. The table below is the intended v0.9.5 candidate matrix;
|
||||
Android/Termux is preview pending real-device QA. Linux ARM64 is available from
|
||||
v0.8.8 onward. Linux RISC-V prebuilts are temporarily paused because the locked
|
||||
`rquickjs-sys` dependency does not ship `riscv64gc-unknown-linux-gnu` bindings.
|
||||
|
||||
| Platform | Architecture | npm install | `cargo install` | GitHub release asset |
|
||||
| ------------ | ------------ | :---------: | :-------------: | ----------------------------------------------------- |
|
||||
| Linux | x64 (x86_64) | ✅ | ✅ | `codewhale-linux-x64`, `codew-linux-x64`, `codewhale-tui-linux-x64` |
|
||||
| Linux | arm64 | ✅ | ✅ | `codewhale-linux-arm64`, `codew-linux-arm64`, `codewhale-tui-linux-arm64` |
|
||||
| Linux | x64 (x86_64) | ✅ | ✅ | `codewhale-linux-x64`, `codew-linux-x64` |
|
||||
| Linux | arm64 | ✅ | ✅ | `codewhale-linux-arm64`, `codew-linux-arm64` |
|
||||
| Android / Termux | arm64 (aarch64) | ⚠️⁴ preview | ⚠️⁴ preview | `codewhale-android-arm64.tar.gz` preview archive when published |
|
||||
| Linux | riscv64 | ❌¹ | ❌³ | temporarily unsupported until upstream bindings land |
|
||||
| macOS | x64 | ✅ | ✅ | `codewhale-macos-x64`, `codew-macos-x64`, `codewhale-tui-macos-x64` |
|
||||
| macOS | arm64 (M-series) | ✅ | ✅ | `codewhale-macos-arm64`, `codew-macos-arm64`, `codewhale-tui-macos-arm64` |
|
||||
| Windows | x64 | ✅ | ✅ | `codewhale-windows-x64.exe`, `codew-windows-x64.exe`, `codewhale-tui-windows-x64.exe` |
|
||||
| Windows | arm64 | ✅ | ✅ | `codewhale-windows-arm64.exe`, `codew-windows-arm64.exe`, `codewhale-tui-windows-arm64.exe` |
|
||||
| Linux x64 on musl (Alpine) | ✅ (static) | ✅ | ✅ | static `codewhale-tui-linux-x64` (musl) asset |
|
||||
| macOS | x64 | ✅ | ✅ | `codewhale-macos-x64`, `codew-macos-x64` |
|
||||
| macOS | arm64 (M-series) | ✅ | ✅ | `codewhale-macos-arm64`, `codew-macos-arm64` |
|
||||
| Windows | x64 | ✅ | ✅ | `codewhale-windows-x64.exe`, `codew-windows-x64.exe` |
|
||||
| Windows | arm64 | ✅ | ✅ | `codewhale-windows-arm64.exe`, `codew-windows-arm64.exe` |
|
||||
| Linux x64 on musl (Alpine) | ✅ (static) | ✅ | ✅ | static `codewhale-linux-x64` (musl) asset |
|
||||
| Other Linux (musl non-x64, other arches) | — | ❌¹ | ✅² | build from source |
|
||||
| FreeBSD / OpenBSD | — | ❌ | ✅² | build from source |
|
||||
| FreeBSD 14+ / OpenBSD | x64, arm64 | ❌ | ✅² | `cargo install codewhale-cli --locked` (no prebuilt; see § FreeBSD) |
|
||||
|
||||
¹ The npm package will exit with a clear error and point you here.
|
||||
² Provided your toolchain can compile a recent Rust workspace; see
|
||||
[Build from source](#7-build-from-source) below.
|
||||
³ RISC-V source builds currently need upstream `rquickjs-sys` RISC-V bindings or
|
||||
a bindgen-enabled dependency build.
|
||||
⁴ The v0.9.4 source-candidate npm wrapper recognizes Android arm64 and resolves
|
||||
the matching `codewhale`, `codew`, and `codewhale-tui` Android assets. npm
|
||||
⁴ The v0.9.5 source-candidate npm wrapper recognizes Android arm64 and resolves
|
||||
the matching `codewhale` and `codew` Android assets. npm
|
||||
installation works only for a package version whose GitHub Release publishes
|
||||
those matching assets. The Android/Termux path remains preview-only until the
|
||||
real-device compile, startup, approval, file-tool, and update checks tracked
|
||||
@@ -72,13 +71,13 @@ binary through `rusqlite`, so no separate `libsqlite3` runtime package is needed
|
||||
|
||||
The Linux **arm64** release assets are still GNU libc (glibc) builds. They
|
||||
dynamically link normal Linux runtime libraries such as `libdbus-1` and `libc`.
|
||||
The v0.9.4 candidate build runs on Ubuntu 24.04, so it can require `GLIBC_2.39`.
|
||||
The v0.9.5 candidate build runs on Ubuntu 24.04, so it can require `GLIBC_2.39`.
|
||||
|
||||
### Linux glibc floor (arm64)
|
||||
|
||||
This floor applies only to the **GNU libc** arm64 asset. The static x64 (musl)
|
||||
asset has no `GLIBC_*` symbols, so it passes the install preflight and runs on
|
||||
older systems without error. The v0.9.4 candidate GNU arm64 asset is built on
|
||||
older systems without error. The v0.9.5 candidate GNU arm64 asset is built on
|
||||
Ubuntu 24.04 and can require `GLIBC_2.39`. Ubuntu 22.04 ships glibc
|
||||
2.35, so those arm64 binaries fail with errors such as:
|
||||
|
||||
@@ -92,8 +91,7 @@ builds. If you are on Ubuntu 22.04 arm64, Debian stable, RHEL/CentOS, or another
|
||||
older GNU base for a non-x64 asset, use:
|
||||
|
||||
```bash
|
||||
cargo install codewhale-cli --locked
|
||||
cargo install codewhale-tui --locked
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew`
|
||||
```
|
||||
|
||||
Future release engineering may add static (musl) arm64 assets so the glibc floor
|
||||
@@ -103,8 +101,7 @@ should build from source.
|
||||
> **Linux ARM64 note (v0.8.7 and earlier).** v0.8.7 and earlier do **not**
|
||||
> publish a Linux ARM64 prebuilt; users on HarmonyOS thin-and-light, Asahi
|
||||
> Linux, Raspberry Pi, AWS Graviton, etc. saw `Unsupported architecture: arm64`
|
||||
> from `npm i -g codewhale`. v0.8.8 publishes both `codewhale-linux-arm64`
|
||||
> and `codewhale-tui-linux-arm64`, so a plain `npm i -g codewhale` works
|
||||
> from `npm i -g codewhale`. v0.8.8 publishes `codewhale-linux-arm64`, so a plain `npm i -g codewhale` works
|
||||
> on any glibc-based ARM64 Linux. If you're stuck on v0.8.7, jump to
|
||||
> [Build from source](#7-build-from-source) — `cargo install` works fine.
|
||||
> For HarmonyOS PC and OpenHarmony cross-build setup, see
|
||||
@@ -146,8 +143,7 @@ install the build packages before running Cargo:
|
||||
|
||||
```bash
|
||||
pkg install -y rust clang pkg-config make git
|
||||
cargo install codewhale-cli --locked
|
||||
cargo install codewhale-tui --locked
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew`
|
||||
```
|
||||
|
||||
The normal first-run setup path is implemented, but its Android interaction is
|
||||
@@ -168,15 +164,13 @@ Maintainers should use this repeatable smoke checklist for a Termux / Android
|
||||
arm64 release candidate:
|
||||
|
||||
```bash
|
||||
command -v codewhale codew codewhale-tui
|
||||
command -v codewhale codew
|
||||
test -x "$PREFIX/bin/codewhale"
|
||||
test -x "$PREFIX/bin/codew"
|
||||
test -x "$PREFIX/bin/codewhale-tui"
|
||||
|
||||
codewhale --version
|
||||
codewhale doctor
|
||||
codewhale exec --auto "run pwd"
|
||||
codewhale-tui --version
|
||||
```
|
||||
|
||||
Known limitations:
|
||||
@@ -243,9 +237,8 @@ npm install -g codewhale
|
||||
codewhale --version # prints the published version that was installed
|
||||
```
|
||||
|
||||
`postinstall` downloads the matching three binaries from the GitHub
|
||||
release, verifies a SHA-256 manifest, and exposes `codewhale`, `codew`, and
|
||||
`codewhale-tui` on your `PATH`.
|
||||
`postinstall` downloads the matching `codewhale` and `codew` binaries from the GitHub
|
||||
release, verifies a SHA-256 manifest, and exposes `codewhale` and `codew` on your `PATH`.
|
||||
|
||||
Useful environment variables:
|
||||
|
||||
@@ -278,19 +271,17 @@ applies to the runtime's own environment variables, not to the installer.)
|
||||
## 4. Install via Cargo (any Tier-1 Rust target)
|
||||
|
||||
If GitHub releases are slow, blocked, or you're on an unsupported architecture,
|
||||
install from crates.io directly. Two Cargo packages are required:
|
||||
`codewhale-cli` installs the `codewhale` and `codew` commands, while
|
||||
`codewhale-tui` installs the `codewhale-tui` command used by the dispatcher.
|
||||
install from crates.io directly. One Cargo package is required:
|
||||
`codewhale-cli` installs the `codewhale` and `codew` commands (single binary, single install).
|
||||
|
||||
```bash
|
||||
# Requires Rust 1.88+ (https://rustup.rs)
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew`
|
||||
cargo install codewhale-tui --locked # provides `codewhale-tui`
|
||||
codewhale --version
|
||||
```
|
||||
|
||||
> **Linux: install build-time dependencies first.** `cargo install` compiles
|
||||
> from source, and on Linux the `codewhale-tui` crate links against
|
||||
> from source, and on Linux the `codewhale-cli` crate links against
|
||||
> `libdbus-1` (used by the D-Bus secret-service backend for credential
|
||||
> storage). Install the required system packages before running `cargo install`:
|
||||
>
|
||||
@@ -368,7 +359,7 @@ If you already have Nix with flake support, run:
|
||||
nix run github:Hmbown/CodeWhale
|
||||
```
|
||||
|
||||
Nix builds `codewhale-tui` and then starts the `codewhale` dispatcher. Pass
|
||||
Nix builds `codewhale` (single binary) and then starts the dispatcher. Pass
|
||||
arguments after `--`, for example:
|
||||
|
||||
```sh
|
||||
@@ -384,8 +375,8 @@ Add inputs to `flake.nix`:
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
codewhale-tui.url = "github:Hmbown/CodeWhale";
|
||||
codewhale-tui.inputs.nixpkgs.follows = "nixpkgs";
|
||||
codewhale.url = "github:Hmbown/CodeWhale";
|
||||
codewhale.inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
}
|
||||
```
|
||||
@@ -394,7 +385,7 @@ Install into a NixOS module:
|
||||
|
||||
```nix
|
||||
{
|
||||
outputs = { self, nixpkgs, codewhale-tui }:
|
||||
outputs = { self, nixpkgs, codewhale }:
|
||||
let
|
||||
# replace system "x86_64-linux" with your system
|
||||
system = "x86_64-linux";
|
||||
@@ -406,7 +397,7 @@ Install into a NixOS module:
|
||||
modules = [
|
||||
# ...
|
||||
{
|
||||
environment.systemPackages = [ codewhale-tui.packages.${system}.default ];
|
||||
environment.systemPackages = [ codewhale.packages.${system}.default ];
|
||||
}
|
||||
];
|
||||
};
|
||||
@@ -435,8 +426,7 @@ once the rename lands, this section will switch to it.
|
||||
## 6. Manual download from GitHub Releases
|
||||
|
||||
Each platform appears on the Releases page in **two forms** (this is intentional — see #3208):
|
||||
the **bare binaries** (`codewhale-<platform>`, `codew-<platform>`, and
|
||||
`codewhale-tui-<platform>`, no extension) and a **`.tar.gz` / `.zip` archive**
|
||||
the **bare binaries** (`codewhale-<platform>` and `codew-<platform>`, no extension) and a **`.tar.gz` / `.zip` archive**
|
||||
(`codewhale-<platform>.tar.gz`) that bundles the same commands plus an
|
||||
`install.sh`. The npm wrapper and the in-app `codewhale update` download the
|
||||
matched runtime binaries; the archive is the easiest manual install (see §5).
|
||||
@@ -453,9 +443,7 @@ curl -L -o ~/.local/bin/codewhale \
|
||||
https://github.com/Hmbown/CodeWhale/releases/latest/download/codewhale-linux-arm64
|
||||
curl -L -o ~/.local/bin/codew \
|
||||
https://github.com/Hmbown/CodeWhale/releases/latest/download/codew-linux-arm64
|
||||
curl -L -o ~/.local/bin/codewhale-tui \
|
||||
https://github.com/Hmbown/CodeWhale/releases/latest/download/codewhale-tui-linux-arm64
|
||||
chmod +x ~/.local/bin/codewhale ~/.local/bin/codew ~/.local/bin/codewhale-tui
|
||||
chmod +x ~/.local/bin/codewhale ~/.local/bin/codew
|
||||
codewhale --version
|
||||
```
|
||||
|
||||
@@ -463,7 +451,7 @@ codewhale --version
|
||||
> macOS may block them with "Apple cannot verify" warnings. Clear the quarantine
|
||||
> attribute on all three binaries and retry:
|
||||
> ```bash
|
||||
> xattr -d com.apple.quarantine ~/.local/bin/codewhale ~/.local/bin/codew ~/.local/bin/codewhale-tui 2>/dev/null || true
|
||||
> xattr -d com.apple.quarantine ~/.local/bin/codewhale ~/.local/bin/codew 2>/dev/null || true
|
||||
> ```
|
||||
|
||||
Verify integrity against the per-release SHA-256 manifest:
|
||||
@@ -486,9 +474,8 @@ explicitly. Replace `X.Y.Z` with the version you want to restore.
|
||||
# npm wrapper, only for versions that were published to npm
|
||||
npm install -g codewhale@X.Y.Z
|
||||
|
||||
# Cargo path: two packages provide codewhale + codew + codewhale-tui
|
||||
# Cargo path: one package provides codewhale + codew (single binary)
|
||||
cargo install codewhale-cli --version X.Y.Z --locked --force
|
||||
cargo install codewhale-tui --version X.Y.Z --locked --force
|
||||
```
|
||||
|
||||
For manual installs, download the matched binaries or the platform archive from the
|
||||
@@ -523,6 +510,35 @@ Scoop manifests are maintained outside this repository's release workflow and
|
||||
can lag GitHub/npm/Cargo releases. Use npm or manual GitHub release downloads
|
||||
when you need the newest version immediately.
|
||||
|
||||
### Windows winget (v0.9.5+)
|
||||
|
||||
CodeWhale publishes a winget manifest for `Hmbown.CodeWhale` (resolves #1561). The
|
||||
single-binary release ships only `codewhale` + `codew` — no `codewhale-tui` asset.
|
||||
|
||||
```powershell
|
||||
winget install Hmbown.CodeWhale
|
||||
codewhale --version
|
||||
```
|
||||
|
||||
The manifest is at [`packaging/winget/Hmbown.CodeWhale.yaml`](../packaging/winget/Hmbown.CodeWhale.yaml)
|
||||
(also mirrored at [`.winget/Hmbown.CodeWhale.yaml`](../.winget/Hmbown.CodeWhale.yaml)) and lists both
|
||||
the NSIS installer (`CodeWhaleSetup.exe`, per-user, adds `%LOCALAPPDATA%\Programs\CodeWhale\bin` to the user PATH)
|
||||
and the portable ZIP fallback (`codewhale-windows-x64.zip` / `codewhale-windows-arm64.zip`). winget
|
||||
selects the matching architecture automatically; both install only the single binary (`codewhale.exe` + `codew.exe`).
|
||||
|
||||
Update via `winget upgrade Hmbown.CodeWhale` or `codewhale update`. The winget package is
|
||||
maintained outside this repo's release workflow and can lag GitHub/npm/Cargo releases by one
|
||||
validation cycle — use npm or the GitHub Release asset when you need the newest version immediately.
|
||||
If `winget install` reports a hash mismatch, verify `codewhale-artifacts-sha256.txt` for the same
|
||||
tag and regenerate the manifest via `packaging/winget/generate-winget-manifest.sh` (see
|
||||
[`packaging/winget/README.md`](../packaging/winget/README.md)) before re-submitting to
|
||||
[microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs).
|
||||
|
||||
> **Windows ARM64 note.** The NSIS installer currently contains only the x64 binaries.
|
||||
> Windows ARM64 users should install via `winget install Hmbown.CodeWhale` (ARM64 ZIP) or
|
||||
> `npm install -g codewhale` under native ARM64 Node.js, or download
|
||||
> `codewhale-windows-arm64.zip` directly — all paths install native ARM64 binaries.
|
||||
|
||||
### Windows NSIS Installer
|
||||
|
||||
A standalone NSIS-based installer is available starting with v0.8.50 for
|
||||
@@ -539,7 +555,7 @@ ARM64 binaries.
|
||||
|
||||
**Install** by double-clicking the setup executable. The installer:
|
||||
|
||||
- Installs `codewhale.exe`, `codew.exe`, and `codewhale-tui.exe` side-by-side into
|
||||
- Installs `codewhale.exe` and `codew.exe` side-by-side (single binary, no `codewhale-tui.exe`) into
|
||||
`%LOCALAPPDATA%\Programs\CodeWhale\bin`
|
||||
- Adds the install directory to the **current user** `PATH`
|
||||
- Registers in Windows **Apps & Features** for easy uninstall
|
||||
@@ -563,7 +579,7 @@ your environment requires signed application packages.
|
||||
|
||||
```powershell
|
||||
cd scripts\installer
|
||||
# Place codewhale.exe, codew.exe, and codewhale-tui.exe here, then:
|
||||
# Place codewhale.exe and codew.exe here (single binary, no codewhale-tui.exe), then:
|
||||
makensis /DVERSION=<version> codewhale.nsi
|
||||
```
|
||||
|
||||
@@ -601,8 +617,7 @@ build before source builds are expected to work.
|
||||
git clone https://github.com/Hmbown/CodeWhale.git
|
||||
cd CodeWhale
|
||||
|
||||
cargo install --path crates/cli --locked # provides `codewhale` and `codew`
|
||||
cargo install --path crates/tui --locked # provides `codewhale-tui`
|
||||
cargo install --path crates/cli --locked # provides `codewhale` and `codew` (single binary)
|
||||
|
||||
codewhale --version
|
||||
```
|
||||
@@ -610,6 +625,26 @@ codewhale --version
|
||||
The commands land in `~/.cargo/bin/` by default; make sure that directory is
|
||||
on your `PATH`.
|
||||
|
||||
### FreeBSD 14+ (resolves #1097)
|
||||
|
||||
FreeBSD has no prebuilt GitHub Release asset — `npm install -g codewhale` intentionally
|
||||
fails with `Unsupported platform: freebsd` and points to Cargo. Install from source:
|
||||
|
||||
```bash
|
||||
pkg install -y rust pkgconf git
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew` (single binary)
|
||||
codewhale --version
|
||||
codewhale doctor
|
||||
```
|
||||
|
||||
The `rquickjs` FreeBSD bindings are generated at build time via `bindgen` (see
|
||||
`1582ba965`/`5eb0385e8`). No separate `pkg install codewhale` port exists yet —
|
||||
a native port is tracked as the follow-up to #1097 under `packaging/freebsd/`
|
||||
(contributions welcome). Validate with `cargo check --target x86_64-unknown-freebsd -p codewhale-cli --locked`
|
||||
on the release branch; the 7×1 release matrix (Linux musl x64, Linux gnu arm64,
|
||||
Android arm64, macOS x64/arm64, Windows x64/arm64) stays 7 targets — FreeBSD is a
|
||||
source-build target, not a prebuilt asset.
|
||||
|
||||
### Cross-compiling from x64 to ARM64 Linux
|
||||
|
||||
If you want to build an ARM64 Linux binary on an x64 Linux host (e.g. for a
|
||||
@@ -623,13 +658,11 @@ rustup target add aarch64-unknown-linux-gnu
|
||||
cargo install cross --locked
|
||||
|
||||
# Per build
|
||||
cross build --release --target aarch64-unknown-linux-gnu -p codewhale-cli
|
||||
cross build --release --target aarch64-unknown-linux-gnu -p codewhale-tui
|
||||
cross build --release --target aarch64-unknown-linux-gnu -p codewhale-cli # single binary
|
||||
```
|
||||
|
||||
The resulting binaries land in
|
||||
`target/aarch64-unknown-linux-gnu/release/codewhale` and
|
||||
`target/aarch64-unknown-linux-gnu/release/codewhale-tui`. Copy the matched pair
|
||||
The resulting binary lands in
|
||||
`target/aarch64-unknown-linux-gnu/release/codewhale` (and `codew` shim). Copy it
|
||||
to the ARM64 host (e.g. via `scp`) and `chmod +x` them.
|
||||
|
||||
If you don't have Docker available, install the cross-linker directly and let
|
||||
@@ -644,8 +677,7 @@ cat >> ~/.cargo/config.toml <<'EOF'
|
||||
linker = "aarch64-linux-gnu-gcc"
|
||||
EOF
|
||||
|
||||
cargo build --release --target aarch64-unknown-linux-gnu -p codewhale-cli
|
||||
cargo build --release --target aarch64-unknown-linux-gnu -p codewhale-tui
|
||||
cargo build --release --target aarch64-unknown-linux-gnu -p codewhale-cli # single binary
|
||||
```
|
||||
|
||||
The same recipe works for `aarch64-unknown-linux-musl` if your distro is
|
||||
@@ -707,8 +739,8 @@ set CARGO_HTTP_CHECK_REVOKE=false # may be needed behind some Chinese ISPs
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
The binaries appear in `target\release\codewhale.exe`,
|
||||
`target\release\codew.exe`, and `target\release\codewhale-tui.exe`.
|
||||
The binaries appear in `target\release\codewhale.exe` and
|
||||
`target\release\codew.exe` (single binary + shim).
|
||||
|
||||
> Prefer not to build? Install via npm, Cargo, GitHub Releases, or the CNB
|
||||
> mirror — see the sections above.
|
||||
@@ -730,8 +762,7 @@ the same `PATH`. If you installed only one crate via `cargo install`, install
|
||||
both:
|
||||
|
||||
```bash
|
||||
cargo install codewhale-cli --locked
|
||||
cargo install codewhale-tui --locked
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew`
|
||||
```
|
||||
|
||||
### `codewhale update` reports `no asset found for platform codewhale-linux-aarch64`
|
||||
@@ -758,14 +789,13 @@ The legacy `DEEPSEEK_TUI_RELEASE_BASE_URL` name is still accepted.
|
||||
`codewhale update` normally contacts GitHub Releases for metadata and binary
|
||||
assets. On networks where GitHub is blocked or unreliable, use the CNB source
|
||||
mirror instead and install both Cargo packages from the release tag. Together,
|
||||
they provide the `codewhale`, `codew`, and `codewhale-tui` commands:
|
||||
it provides the `codewhale` and `codew` commands (single binary):
|
||||
|
||||
To check the latest release without downloading or replacing binaries, run
|
||||
`codewhale update --check`.
|
||||
|
||||
```bash
|
||||
cargo install --git https://cnb.cool/codewhale.net/codewhale --tag vX.Y.Z codewhale-cli --locked --force
|
||||
cargo install --git https://cnb.cool/codewhale.net/codewhale --tag vX.Y.Z codewhale-tui --locked --force
|
||||
cargo install --git https://cnb.cool/codewhale.net/codewhale --tag vX.Y.Z codewhale-cli --locked --force # single binary
|
||||
```
|
||||
|
||||
If you operate a binary asset mirror, `codewhale update` can use it directly:
|
||||
@@ -794,7 +824,7 @@ is not stabilized in this version of Cargo
|
||||
|
||||
Install current stable Rust through rustup, then rerun the two Cargo package
|
||||
install commands from [Section 4](#4-install-via-cargo-any-tier-1-rust-target).
|
||||
Together they provide `codewhale`, `codew`, and `codewhale-tui`. For
|
||||
It provides `codewhale` and `codew` (single binary). For
|
||||
mainland China networks, this rsproxy-based sequence has been verified to work:
|
||||
|
||||
```bash
|
||||
@@ -804,8 +834,7 @@ export RUSTUP_UPDATE_ROOT=https://rsproxy.cn/rustup
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
source "$HOME/.cargo/env"
|
||||
rustup default stable
|
||||
cargo install codewhale-cli --locked
|
||||
cargo install codewhale-tui --locked
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew`
|
||||
```
|
||||
|
||||
Afterward, `which cargo` should point to `~/.cargo/bin/cargo`, not
|
||||
@@ -822,16 +851,15 @@ sudo apt-get install -y build-essential pkg-config libdbus-1-dev
|
||||
### WSL2 / Ubuntu: `dbus-1` or `pkg-config` not found while building
|
||||
|
||||
WSL2 uses the same Linux source-build path as Ubuntu. If `cargo install
|
||||
codewhale-tui --locked` fails while compiling the keyring or D-Bus secret
|
||||
codewhale-cli --locked` fails while compiling the keyring or D-Bus secret
|
||||
storage crates, install the Linux build dependencies inside the WSL distro,
|
||||
then rerun the two Cargo package install commands. Together they install
|
||||
`codewhale`, `codew`, and `codewhale-tui`:
|
||||
then rerun the two Cargo package install commands. It installs
|
||||
`codewhale` and `codew` (single binary):
|
||||
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential pkg-config libdbus-1-dev
|
||||
cargo install codewhale-cli --locked
|
||||
cargo install codewhale-tui --locked
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew`
|
||||
```
|
||||
|
||||
The prebuilt npm/GitHub binaries do not need these build-time packages; they
|
||||
@@ -929,7 +957,7 @@ Use one of these paths:
|
||||
3. Install via Cargo, which builds locally and does not download GitHub release
|
||||
assets. See [Section 4](#4-install-via-cargo-any-tier-1-rust-target).
|
||||
|
||||
4. Download all three matching `codewhale`, `codew`, and `codewhale-tui`
|
||||
4. Download both matching `codewhale` and `codew`
|
||||
binaries from the [Releases page](https://github.com/Hmbown/CodeWhale/releases),
|
||||
place them in a directory on `PATH`, and make them executable. See
|
||||
[Section 6](#6-manual-download-from-github-releases).
|
||||
|
||||
+1
-3
@@ -64,9 +64,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
cargoBuildFlags = [
|
||||
"--package"
|
||||
"codewhale-cli"
|
||||
"--package"
|
||||
"codewhale-tui"
|
||||
];
|
||||
]; # single binary — tui crate is a library, not a shipped binary (v0.9.5+)
|
||||
cargoTestFlags = finalAttrs.cargoBuildFlags ++ [
|
||||
"--lib"
|
||||
"--bins"
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const { runCodeWhaleTui } = require("../scripts/run");
|
||||
const { runCodeWhale } = require("../scripts/run");
|
||||
|
||||
runCodeWhaleTui().catch((error) => {
|
||||
console.error("Failed to start codewhale-tui:", error.message);
|
||||
process.stderr.write("codewhale-tui: deprecated alias to `codewhale` (single binary since v0.9.5). Use `codewhale` instead.\n");
|
||||
runCodeWhale().catch((error) => {
|
||||
console.error("Failed to start codewhale:", error.message);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
@@ -35,8 +35,7 @@
|
||||
"type": "commonjs",
|
||||
"bin": {
|
||||
"codewhale": "bin/codewhale.js",
|
||||
"codew": "bin/codew.js",
|
||||
"codewhale-tui": "bin/codewhale-tui.js"
|
||||
"codew": "bin/codew.js"
|
||||
},
|
||||
"scripts": {
|
||||
"release:check": "node scripts/verify-release-assets.js",
|
||||
|
||||
@@ -83,21 +83,19 @@ function detectBinaryNames() {
|
||||
function unsupportedBuildHint() {
|
||||
return [
|
||||
"No prebuilt binary is available for this platform/architecture combo.",
|
||||
"You can still run codewhale by building from source with Cargo:",
|
||||
"You can still run codewhale by building from source with Cargo (single binary):",
|
||||
"",
|
||||
" # Requires Rust 1.88+ (https://rustup.rs)",
|
||||
" cargo install codewhale-cli --locked # provides `codewhale` and `codew`",
|
||||
" cargo install codewhale --locked # provides `codewhale`",
|
||||
"",
|
||||
"Or build from a checkout:",
|
||||
"",
|
||||
" git clone https://github.com/Hmbown/CodeWhale.git",
|
||||
" cd CodeWhale",
|
||||
" cargo install --path crates/cli --locked",
|
||||
" cargo install --path crates/tui --locked",
|
||||
" cargo install --path crates/cli --locked # single binary",
|
||||
"",
|
||||
"See https://github.com/Hmbown/CodeWhale/blob/main/docs/INSTALL.md",
|
||||
"for cross-compilation, mirror, and Linux ARM64 specifics.",
|
||||
"for cross-compilation, mirror, Linux ARM64, FreeBSD, and winget specifics.",
|
||||
].join("\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ function maxAttempts(context = "runtime", env = process.env) {
|
||||
}
|
||||
|
||||
function binaryPaths() {
|
||||
const { codewhale, codew, tui } = detectBinaryNames();
|
||||
const { codewhale, codew } = detectBinaryNames();
|
||||
const releaseDir = releaseBinaryDirectory();
|
||||
return {
|
||||
codewhale: {
|
||||
@@ -153,12 +153,8 @@ function binaryPaths() {
|
||||
asset: codew,
|
||||
target: path.join(releaseDir, process.platform === "win32" ? "codew.exe" : "codew"),
|
||||
},
|
||||
tui: {
|
||||
asset: tui,
|
||||
target: path.join(releaseDir, process.platform === "win32" ? "codewhale-tui.exe" : "codewhale-tui"),
|
||||
},
|
||||
};
|
||||
}
|
||||
} // single binary — no tui asset (v0.9.5+)
|
||||
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
// Logging / progress
|
||||
@@ -207,7 +203,7 @@ function installFailureHint(error) {
|
||||
"codewhale install hint:",
|
||||
` DEEPSEEK_TUI_RELEASE_BASE_URL is set to ${releaseBase}`,
|
||||
" Verify that this directory contains codewhale-artifacts-sha256.txt",
|
||||
" plus the codewhale/codew/codewhale-tui binary assets for your platform.",
|
||||
" plus the codewhale/codew binary assets for your platform (single binary).",
|
||||
].join("\n");
|
||||
}
|
||||
|
||||
@@ -1138,8 +1134,7 @@ async function run(options = {}) {
|
||||
await Promise.all([
|
||||
ensureBinary(paths.codewhale.target, paths.codewhale.asset, version, repo, getChecksums, { context }),
|
||||
ensureBinary(paths.codew.target, paths.codew.asset, version, repo, getChecksums, { context }),
|
||||
ensureBinary(paths.tui.target, paths.tui.asset, version, repo, getChecksums, { context }),
|
||||
]);
|
||||
]); // single binary
|
||||
}
|
||||
|
||||
async function getBinaryPath(name) {
|
||||
@@ -1152,7 +1147,8 @@ async function getBinaryPath(name) {
|
||||
return paths.codew.target;
|
||||
}
|
||||
if (name === "codewhale-tui") {
|
||||
return paths.tui.target;
|
||||
// v0.9.5 single-binary: codewhale-tui is now an alias to codewhale for backwards compat
|
||||
return paths.codewhale.target;
|
||||
}
|
||||
throw new Error(`Unknown binary: ${name}`);
|
||||
}
|
||||
|
||||
@@ -51,7 +51,11 @@ async function runCodeWhale() {
|
||||
}
|
||||
|
||||
async function runCodeWhaleTui() {
|
||||
await run("codewhale-tui");
|
||||
// v0.9.5 single-binary: tui is now an alias to codewhale (kept for backwards compat, will warn)
|
||||
if (!process.env.CODEWHALE_SUPPRESS_TUI_DEPRECATION) {
|
||||
process.stderr.write("codewhale-tui: deprecated alias to `codewhale` (single binary since v0.9.5). Use `codewhale` instead.\n");
|
||||
}
|
||||
await run("codewhale");
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -25,8 +25,8 @@ test("openharmony x64 resolves to linux x64 binaries", () => {
|
||||
const { detectBinaryNames } = require(ARTIFACTS_PATH);
|
||||
const result = detectBinaryNames();
|
||||
assert.equal(result.codewhale, "codewhale-linux-x64");
|
||||
assert.equal(result.tui, "codewhale-tui-linux-x64");
|
||||
assert.equal(result.codew, "codew-linux-x64");
|
||||
assert.equal(result.tui, undefined);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -35,7 +35,6 @@ test("openharmony arm64 resolves to linux arm64 binaries", () => {
|
||||
const { detectBinaryNames } = require(ARTIFACTS_PATH);
|
||||
const result = detectBinaryNames();
|
||||
assert.equal(result.codewhale, "codewhale-linux-arm64");
|
||||
assert.equal(result.tui, "codewhale-tui-linux-arm64");
|
||||
assert.equal(result.codew, "codew-linux-arm64");
|
||||
});
|
||||
});
|
||||
@@ -45,7 +44,6 @@ test("android arm64 resolves to Termux-native Android assets", () => {
|
||||
const { detectBinaryNames } = require(ARTIFACTS_PATH);
|
||||
const result = detectBinaryNames();
|
||||
assert.equal(result.codewhale, "codewhale-android-arm64");
|
||||
assert.equal(result.tui, "codewhale-tui-android-arm64");
|
||||
assert.equal(result.codew, "codew-android-arm64");
|
||||
});
|
||||
});
|
||||
@@ -85,7 +83,6 @@ test("Windows arm64 resolves the complete native binary family", () => {
|
||||
platform: "win32",
|
||||
arch: "arm64",
|
||||
codewhale: "codewhale-windows-arm64.exe",
|
||||
tui: "codewhale-tui-windows-arm64.exe",
|
||||
codew: "codew-windows-arm64.exe",
|
||||
});
|
||||
});
|
||||
@@ -119,15 +116,15 @@ test("release asset inventory includes binaries, archives, installer, and manife
|
||||
const assetNames = allAssetNames();
|
||||
const releaseAssetNames = allReleaseAssetNames();
|
||||
assert.ok(assetNames.includes("codewhale-windows-x64.exe"));
|
||||
assert.ok(assetNames.includes("codewhale-tui-windows-x64.exe"));
|
||||
assert.ok(assetNames.includes("codew-windows-x64.exe"));
|
||||
assert.ok(assetNames.includes("codewhale.bat"));
|
||||
assert.ok(assetNames.includes("codewhale-windows-arm64.exe"));
|
||||
assert.ok(assetNames.includes("codewhale-tui-windows-arm64.exe"));
|
||||
assert.ok(assetNames.includes("codew-windows-arm64.exe"));
|
||||
assert.ok(assetNames.includes("codewhale-android-arm64"));
|
||||
assert.ok(assetNames.includes("codewhale-tui-android-arm64"));
|
||||
assert.ok(assetNames.includes("codew-android-arm64"));
|
||||
assert.ok(!assetNames.includes("codewhale-tui-windows-x64.exe"));
|
||||
assert.ok(!assetNames.includes("codewhale-tui-windows-arm64.exe"));
|
||||
assert.ok(!assetNames.includes("codewhale-tui-android-arm64"));
|
||||
assert.ok(!assetNames.includes("codewhale-linux-riscv64"));
|
||||
assert.ok(releaseAssetNames.includes("codew-windows-x64.exe"));
|
||||
assert.ok(releaseAssetNames.includes("codewhale.bat"));
|
||||
@@ -165,7 +162,6 @@ test("CNB mirror URLs use the repository that publishes release assets", () => {
|
||||
assert.deepEqual(CNB_RELEASE_ASSET_NAMES, [
|
||||
"codewhale-linux-x64",
|
||||
"codew-linux-x64",
|
||||
"codewhale-tui-linux-x64",
|
||||
"codewhale-artifacts-sha256.txt",
|
||||
]);
|
||||
assert.equal(
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# FreeBSD packaging for CodeWhale
|
||||
|
||||
Resolves #1097 — FreeBSD install via `cargo` today, native `pkg` port planned.
|
||||
|
||||
## Current: cargo install (supported)
|
||||
|
||||
FreeBSD has no prebuilt GitHub Release asset. The npm wrapper intentionally fails with
|
||||
`Unsupported platform: freebsd` and points to the Cargo path. Build from source:
|
||||
|
||||
```bash
|
||||
pkg install -y rust pkgconf git # or: pkg install -y lang/rust devel/pkgconf devel/git
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew`
|
||||
codewhale --version
|
||||
codewhale doctor
|
||||
```
|
||||
|
||||
The single-binary release (v0.9.5+) ships only `codewhale` + `codew`. There is no separate
|
||||
`codewhale-tui` binary to install. If you previously installed `codewhale-tui` from ports or
|
||||
cargo, `cargo uninstall codewhale-tui` and rebuild `codewhale-cli`.
|
||||
|
||||
Linux `libdbus-1` / `pkg-config` build deps are not needed on FreeBSD for the default
|
||||
feature set; the `rquickjs` FreeBSD bindings are generated at build time via `bindgen`
|
||||
(see `crates/tui/build.rs` and the `1582ba965`/`5eb0385e8` FreeBSD bindgen fix).
|
||||
|
||||
## Target validation
|
||||
|
||||
- Rust tier-2 target `x86_64-unknown-freebsd` is validated in CI via `cargo check --target x86_64-unknown-freebsd -p codewhale-cli --locked` on the `release/0.9.5` branch.
|
||||
- `aarch64-unknown-freebsd` cross-check is tracked for future hardware.
|
||||
- The release matrix in `.github/workflows/release-artifacts.yml` remains 7×1 (Linux musl x64, Linux gnu arm64, Android arm64, macOS x64/arm64, Windows x64/arm64). FreeBSD is a source-build target — no prebuilt asset, no matrix bloat, but the row in `docs/INSTALL.md` is authoritative.
|
||||
|
||||
## Future: native pkg / port
|
||||
|
||||
A proper FreeBSD port (`ports-mgmt` / `pkg install codewhale`) is the long-game follow-up to #1097.
|
||||
Desired shape (not yet submitted):
|
||||
|
||||
```
|
||||
ports/sysutils/codewhale/
|
||||
Makefile # USES=cargo, CARGO_CRATES via `cargo make-port` or `cargo-crates` helper
|
||||
distinfo
|
||||
pkg-descr
|
||||
pkg-plist # bin/codewhale, bin/codew
|
||||
```
|
||||
|
||||
The Makefile should `BUILD_DEPENDS` on `lang/rust` and `devel/pkgconf`, run `cargo build --locked --release -p codewhale-cli`,
|
||||
and install only `codewhale` + `codew`. Tests can reuse `cargo test -p codewhale-cli --lib` if desired.
|
||||
|
||||
If you can test on FreeBSD 14.x (amd64), please run the smoke from `docs/INSTALL.md#7-build-from-source`
|
||||
and report the `codewhale doctor` JSON in #1097.
|
||||
|
||||
## Verification
|
||||
|
||||
```bash
|
||||
# on a FreeBSD 14.1 amd64 host or VM
|
||||
rustc --version # >= 1.88
|
||||
cargo install --path crates/cli --locked
|
||||
codewhale --version
|
||||
codewhale exec --auto "run pwd"
|
||||
```
|
||||
@@ -0,0 +1,112 @@
|
||||
# Hmbown.CodeWhale — winget singleton manifest for CodeWhale (single binary)
|
||||
# PackageIdentifier follows the publisher convention used by the Homebrew tap (Hmbown/deepseek-tui).
|
||||
# This file is the source of truth for winget-pkgs submission; see README.md for the update flow.
|
||||
# The single-binary release (v0.9.5+) ships only `codewhale` + `codew` per target — no `codewhale-tui` asset.
|
||||
|
||||
PackageIdentifier: Hmbown.CodeWhale
|
||||
PackageVersion: 0.9.5
|
||||
DefaultLocale: en-US
|
||||
ManifestType: singleton
|
||||
ManifestVersion: 1.6.0
|
||||
|
||||
Publisher: Hmbown
|
||||
PublisherUrl: https://github.com/Hmbown
|
||||
PublisherSupportUrl: https://github.com/Hmbown/CodeWhale/issues
|
||||
PackageName: CodeWhale
|
||||
PackageUrl: https://github.com/Hmbown/CodeWhale
|
||||
License: MIT
|
||||
LicenseUrl: https://github.com/Hmbown/CodeWhale/blob/main/LICENSE
|
||||
Copyright: Copyright (c) Hmbown
|
||||
ShortDescription: Terminal coding agent for supported hosted and local models
|
||||
Description: |
|
||||
CodeWhale is a terminal coding agent that runs on your machine. The v0.9.5 single-binary
|
||||
release ships one `codewhale` binary per target (plus the `codew` shim) across Linux x64 (musl),
|
||||
Linux arm64, Android arm64, macOS x64/arm64, and Windows x64/arm64. See https://github.com/Hmbown/CodeWhale
|
||||
for provider setup, Fleet workflows, and the full install guide (docs/INSTALL.md).
|
||||
Author: Hmbown
|
||||
Moniker: codewhale
|
||||
Tags:
|
||||
- codewhale
|
||||
- deepseek
|
||||
- cli
|
||||
- tui
|
||||
- terminal
|
||||
- ai
|
||||
- coding-agent
|
||||
- rust
|
||||
MinimumOSVersion: 10.0.0.0
|
||||
ReleaseNotes: https://github.com/Hmbown/CodeWhale/releases/tag/v0.9.5
|
||||
ReleaseNotesUrl: https://github.com/Hmbown/CodeWhale/releases/tag/v0.9.5
|
||||
InstallationNotes: |
|
||||
The winget package installs the Windows binaries. For the NSIS installer (CodeWhaleSetup.exe)
|
||||
the installer adds %LOCALAPPDATA%\Programs\CodeWhale\bin to the user PATH. For the portable
|
||||
ZIP, winget extracts codewhale.exe and codew.exe side-by-side and adds the install location to PATH.
|
||||
Verify checksums with codewhale-artifacts-sha256.txt from the same GitHub Release.
|
||||
Documentations:
|
||||
- DocumentLabel: Install guide
|
||||
DocumentUrl: https://github.com/Hmbown/CodeWhale/blob/main/docs/INSTALL.md
|
||||
- DocumentLabel: Releases
|
||||
DocumentUrl: https://github.com/Hmbown/CodeWhale/releases
|
||||
|
||||
Installers:
|
||||
# Preferred: NSIS installer for Windows x64 (per-user, no elevation, adds user PATH).
|
||||
- Architecture: x64
|
||||
InstallerType: nullsoft
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/CodeWhaleSetup.exe
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
ProductCode: CodeWhale
|
||||
UpgradeBehavior: install
|
||||
FileExtensions:
|
||||
- toml
|
||||
ReleaseDate: 2026-08-07
|
||||
# Portable ZIP fallback — same single binary (codewhale.exe + codew.exe). Used when NSIS is blocked
|
||||
# by policy or for winget's portable install flow. NestedInstallerType is portable (no installer).
|
||||
- Architecture: x64
|
||||
InstallerType: zip
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/codewhale-windows-x64.zip
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
NestedInstallerType: portable
|
||||
NestedInstallerFiles:
|
||||
- RelativeFilePath: codewhale-windows-x64/codewhale.exe
|
||||
PortableCommandAlias: codewhale
|
||||
- RelativeFilePath: codewhale-windows-x64/codew.exe
|
||||
PortableCommandAlias: codew
|
||||
ReleaseDate: 2026-08-07
|
||||
- Architecture: x64
|
||||
InstallerType: zip
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/codewhale-windows-x64-portable.zip
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
NestedInstallerType: portable
|
||||
NestedInstallerFiles:
|
||||
- RelativeFilePath: codewhale-windows-x64-portable/codewhale.exe
|
||||
PortableCommandAlias: codewhale
|
||||
- RelativeFilePath: codewhale-windows-x64-portable/codew.exe
|
||||
PortableCommandAlias: codew
|
||||
ReleaseDate: 2026-08-07
|
||||
- Architecture: arm64
|
||||
InstallerType: zip
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/codewhale-windows-arm64.zip
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
NestedInstallerType: portable
|
||||
NestedInstallerFiles:
|
||||
- RelativeFilePath: codewhale-windows-arm64/codewhale.exe
|
||||
PortableCommandAlias: codewhale
|
||||
- RelativeFilePath: codewhale-windows-arm64/codew.exe
|
||||
PortableCommandAlias: codew
|
||||
ReleaseDate: 2026-08-07
|
||||
- Architecture: arm64
|
||||
InstallerType: zip
|
||||
Scope: user
|
||||
InstallerUrl: https://github.com/Hmbown/CodeWhale/releases/download/v0.9.5/codewhale-windows-arm64-portable.zip
|
||||
InstallerSha256: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
NestedInstallerType: portable
|
||||
NestedInstallerFiles:
|
||||
- RelativeFilePath: codewhale-windows-arm64-portable/codewhale.exe
|
||||
PortableCommandAlias: codewhale
|
||||
- RelativeFilePath: codewhale-windows-arm64-portable/codew.exe
|
||||
PortableCommandAlias: codew
|
||||
ReleaseDate: 2026-08-07
|
||||
@@ -0,0 +1,64 @@
|
||||
# winget packaging for CodeWhale
|
||||
|
||||
This directory holds the source winget manifest for `Hmbown.CodeWhale` (resolves #1561).
|
||||
The single-binary release (v0.9.5+) ships `codewhale` + `codew` per target — no `codewhale-tui` asset.
|
||||
|
||||
## Files
|
||||
|
||||
- `Hmbown.CodeWhale.yaml` — singleton manifest for `winget install Hmbown.CodeWhale`. The
|
||||
installers all point at the signed (or checksum-verified) GitHub Release assets for the same
|
||||
version (`CodeWhaleSetup.exe` for x64 NSIS, plus portable ZIP fallbacks for x64/arm64).
|
||||
- `generate-winget-manifest.sh` — bumps `PackageVersion`, `ReleaseDate`, and the four
|
||||
`InstallerSha256` placeholders from a local `release-assets/` checkout.
|
||||
- `.winget/Hmbown.CodeWhale.yaml` (repo root) is a verbatim mirror for tooling that expects `.winget/`.
|
||||
Keep both in sync; `packaging/winget/Hmbown.CodeWhale.yaml` is canonical.
|
||||
|
||||
## Version flow
|
||||
|
||||
1. Tag `vX.Y.Z` publishes `CodeWhaleSetup.exe`, `codewhale-windows-x64.zip`,
|
||||
`codewhale-windows-x64-portable.zip`, `codewhale-windows-arm64.zip`,
|
||||
`codewhale-windows-arm64-portable.zip`, and `codewhale-artifacts-sha256.txt`.
|
||||
2. From the release tag checkout, run:
|
||||
```bash
|
||||
./packaging/winget/generate-winget-manifest.sh X.Y.Z /path/to/release-assets
|
||||
```
|
||||
It rewrites both `packaging/winget/Hmbown.CodeWhale.yaml` and `.winget/Hmbown.CodeWhale.yaml`
|
||||
with the fresh version and the four SHA-256 values extracted from `codewhale-artifacts-sha256.txt`.
|
||||
3. Validate locally with `winget validate` (requires winget + the manifest schema):
|
||||
```bash
|
||||
winget validate --manifest packaging/winget/Hmbown.CodeWhale.yaml
|
||||
# or the Microsoft validator in winget-pkgs CI:
|
||||
# https://github.com/microsoft/winget-pkgs#validation
|
||||
```
|
||||
4. Submit to [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs) via
|
||||
`wingetcreate` or a manual PR that adds `manifests/h/Hmbown/CodeWhale/X.Y.Z/`:
|
||||
```bash
|
||||
wingetcreate update Hmbown.CodeWhale --version X.Y.Z --urls \
|
||||
https://github.com/Hmbown/CodeWhale/releases/download/vX.Y.Z/CodeWhaleSetup.exe \
|
||||
https://github.com/Hmbown/CodeWhale/releases/download/vX.Y.Z/codewhale-windows-x64.zip \
|
||||
https://github.com/Hmbown/CodeWhale/releases/download/vX.Y.Z/codewhale-windows-x64-portable.zip \
|
||||
https://github.com/Hmbown/CodeWhale/releases/download/vX.Y.Z/codewhale-windows-arm64.zip \
|
||||
https://github.com/Hmbown/CodeWhale/releases/download/vX.Y.Z/codewhale-windows-arm64-portable.zip
|
||||
```
|
||||
The generated PR must pass the winget-pkgs validation workflow before merge.
|
||||
|
||||
## Single-binary note
|
||||
|
||||
Until v0.9.4 the release matrix was 7 targets × 3 binaries (`codewhale`, `codew`, `codewhale-tui`).
|
||||
v0.9.5 is 7×1 — each target publishes only `codewhale` + `codew` (Windows also ships `codewhale.bat`
|
||||
via the npm wrapper). The winget ZIP `NestedInstallerFiles` therefore lists only those two
|
||||
executables; `codewhale-tui.exe` is intentionally absent.
|
||||
|
||||
## FreeBSD
|
||||
|
||||
FreeBSD has no prebuilt GitHub Release asset (see `docs/INSTALL.md` § FreeBSD). Install via Cargo:
|
||||
|
||||
```bash
|
||||
pkg install -y rust pkgconf # or ports-mgmt/pkg
|
||||
cargo install codewhale-cli --locked # provides `codewhale` and `codew`
|
||||
```
|
||||
|
||||
The npm wrapper on FreeBSD exits with `Unsupported platform: freebsd` and points to the Cargo path.
|
||||
A native `pkg install codewhale` port is tracked as a follow-up to #1097 — contributions welcome
|
||||
under `packaging/freebsd/`.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; codewhale.nsi — NSIS installer for CodeWhale (Windows)
|
||||
;
|
||||
; Requirements (see https://github.com/Hmbown/CodeWhale/issues/1983):
|
||||
; - Install codewhale.exe, codew.exe, and codewhale-tui.exe side-by-side
|
||||
; - Install codewhale.exe and codew.exe side-by-side (single binary, no codewhale-tui.exe)
|
||||
; - Default to %LOCALAPPDATA%\Programs\CodeWhale\bin
|
||||
; - Add install dir to current-user PATH
|
||||
; - Uninstaller removes the PATH entry
|
||||
@@ -10,7 +10,6 @@
|
||||
; 1. Place all .exe files next to this script:
|
||||
; codewhale.exe
|
||||
; codew.exe
|
||||
; codewhale-tui.exe
|
||||
; 2. Build:
|
||||
; makensis /DVERSION=1.2.3 codewhale.nsi
|
||||
; 3. Output: CodeWhaleSetup.exe (in current directory)
|
||||
@@ -72,10 +71,9 @@ Section "Install" SecInstall
|
||||
|
||||
SetOutPath "$INSTDIR\bin"
|
||||
|
||||
; Copy binaries
|
||||
; Copy binaries (single binary)
|
||||
File "codewhale.exe"
|
||||
File "codew.exe"
|
||||
File "codewhale-tui.exe"
|
||||
|
||||
; Write uninstaller
|
||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||
@@ -124,10 +122,9 @@ Section "Uninstall"
|
||||
; handles PATH values longer than NSIS_MAX_STRLEN without truncation.
|
||||
Call un.RemoveFromUserPath
|
||||
|
||||
; Remove binaries
|
||||
; Remove binaries (single binary)
|
||||
Delete "$INSTDIR\bin\codewhale.exe"
|
||||
Delete "$INSTDIR\bin\codew.exe"
|
||||
Delete "$INSTDIR\bin\codewhale-tui.exe"
|
||||
Delete "$INSTDIR\update-user-path.ps1"
|
||||
Delete "$INSTDIR\Uninstall.exe"
|
||||
RMDir "$INSTDIR\bin"
|
||||
|
||||
@@ -58,10 +58,10 @@ function makeIntermediateArtifacts(root) {
|
||||
);
|
||||
}
|
||||
|
||||
test("authoritative release inventory contains seven targets and 34 assets", () => {
|
||||
test("authoritative release inventory contains seven targets and 27 assets (single binary)", () => {
|
||||
const assets = allReleaseAssetNames();
|
||||
assert.equal(assets.length, 34);
|
||||
assert.equal(checksummedReleaseAssetNames().length, 33);
|
||||
assert.equal(assets.length, 27);
|
||||
assert.equal(checksummedReleaseAssetNames().length, 26);
|
||||
for (const required of [
|
||||
"codewhale-android-arm64",
|
||||
"codew-android-arm64",
|
||||
@@ -111,7 +111,7 @@ test("bundle helper creates the exact nine archives and checksum manifest", () =
|
||||
try {
|
||||
fs.mkdirSync(input, { recursive: true });
|
||||
for (const name of allReleaseAssetNames().filter((asset) =>
|
||||
/^(codewhale|codew|codewhale-tui)-(linux|android|macos|windows)-/.test(asset) &&
|
||||
/^(codewhale|codew)-(linux|android|macos|windows)-/.test(asset) &&
|
||||
!asset.endsWith(".tar.gz") &&
|
||||
!asset.endsWith(".zip"),
|
||||
)) {
|
||||
@@ -159,7 +159,7 @@ test("bundle helper creates the exact nine archives and checksum manifest", () =
|
||||
["-tzf", path.join(output, "codewhale-linux-x64.tar.gz")],
|
||||
{ encoding: "utf8" },
|
||||
);
|
||||
for (const entry of ["codewhale", "codew", "codewhale-tui", "install.sh"]) {
|
||||
for (const entry of ["codewhale", "codew", "install.sh"]) {
|
||||
assert.match(linuxEntries, new RegExp(`codewhale-linux-x64/${entry}\\n`));
|
||||
}
|
||||
const extracted = path.join(tempRoot, "extracted");
|
||||
@@ -169,7 +169,7 @@ test("bundle helper creates the exact nine archives and checksum manifest", () =
|
||||
["-xzf", path.join(output, "codewhale-linux-x64.tar.gz"), "-C", extracted],
|
||||
{ stdio: "pipe" },
|
||||
);
|
||||
for (const entry of ["codewhale", "codew", "codewhale-tui", "install.sh"]) {
|
||||
for (const entry of ["codewhale", "codew", "install.sh"]) {
|
||||
const mode = fs.statSync(path.join(extracted, "codewhale-linux-x64", entry)).mode & 0o777;
|
||||
assert.equal(mode, 0o755, `${entry} should remain executable after artifact transport`);
|
||||
}
|
||||
|
||||
@@ -35,9 +35,8 @@ bundle() {
|
||||
local platform="$1"
|
||||
local cli_src="$2"
|
||||
local shim_src="$3"
|
||||
local tui_src="$4"
|
||||
local ext="$5"
|
||||
local variant="$6"
|
||||
local ext="$4"
|
||||
local variant="$5"
|
||||
|
||||
local stem="codewhale-${platform}${variant:+-}${variant}"
|
||||
local stage_root
|
||||
@@ -47,24 +46,20 @@ bundle() {
|
||||
|
||||
local cli_dst="codewhale"
|
||||
local shim_dst="codew"
|
||||
local tui_dst="codewhale-tui"
|
||||
if [[ "${platform}" == windows-* ]]; then
|
||||
cli_dst="codewhale.exe"
|
||||
shim_dst="codew.exe"
|
||||
tui_dst="codewhale-tui.exe"
|
||||
fi
|
||||
|
||||
cp "${artifact_dir}/${cli_src}/${cli_src}" "${stage_dir}/${cli_dst}"
|
||||
cp "${artifact_dir}/${shim_src}/${shim_src}" "${stage_dir}/${shim_dst}"
|
||||
cp "${artifact_dir}/${tui_src}/${tui_src}" "${stage_dir}/${tui_dst}"
|
||||
|
||||
# actions/upload-artifact intentionally normalizes downloaded files to 0644.
|
||||
# Restore the executable contract before constructing Unix archives.
|
||||
if [[ "${platform}" != windows-* ]]; then
|
||||
chmod 0755 \
|
||||
"${stage_dir}/${cli_dst}" \
|
||||
"${stage_dir}/${shim_dst}" \
|
||||
"${stage_dir}/${tui_dst}"
|
||||
"${stage_dir}/${shim_dst}"
|
||||
fi
|
||||
|
||||
if [[ "${variant}" != "portable" ]]; then
|
||||
@@ -107,23 +102,23 @@ bundle() {
|
||||
}
|
||||
|
||||
bundle linux-x64 \
|
||||
codewhale-linux-x64 codew-linux-x64 codewhale-tui-linux-x64 tar.gz ""
|
||||
codewhale-linux-x64 codew-linux-x64 tar.gz ""
|
||||
bundle linux-arm64 \
|
||||
codewhale-linux-arm64 codew-linux-arm64 codewhale-tui-linux-arm64 tar.gz ""
|
||||
codewhale-linux-arm64 codew-linux-arm64 tar.gz ""
|
||||
bundle android-arm64 \
|
||||
codewhale-android-arm64 codew-android-arm64 codewhale-tui-android-arm64 tar.gz ""
|
||||
codewhale-android-arm64 codew-android-arm64 tar.gz ""
|
||||
bundle macos-x64 \
|
||||
codewhale-macos-x64 codew-macos-x64 codewhale-tui-macos-x64 tar.gz ""
|
||||
codewhale-macos-x64 codew-macos-x64 tar.gz ""
|
||||
bundle macos-arm64 \
|
||||
codewhale-macos-arm64 codew-macos-arm64 codewhale-tui-macos-arm64 tar.gz ""
|
||||
codewhale-macos-arm64 codew-macos-arm64 tar.gz ""
|
||||
bundle windows-x64 \
|
||||
codewhale-windows-x64.exe codew-windows-x64.exe codewhale-tui-windows-x64.exe zip ""
|
||||
codewhale-windows-x64.exe codew-windows-x64.exe zip ""
|
||||
bundle windows-x64 \
|
||||
codewhale-windows-x64.exe codew-windows-x64.exe codewhale-tui-windows-x64.exe zip portable
|
||||
codewhale-windows-x64.exe codew-windows-x64.exe zip portable
|
||||
bundle windows-arm64 \
|
||||
codewhale-windows-arm64.exe codew-windows-arm64.exe codewhale-tui-windows-arm64.exe zip ""
|
||||
codewhale-windows-arm64.exe codew-windows-arm64.exe zip ""
|
||||
bundle windows-arm64 \
|
||||
codewhale-windows-arm64.exe codew-windows-arm64.exe codewhale-tui-windows-arm64.exe zip portable
|
||||
codewhale-windows-arm64.exe codew-windows-arm64.exe zip portable
|
||||
|
||||
sort -o "${manifest}" "${manifest}"
|
||||
echo "Bundle checksum manifest:"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
:: CodeWhale Windows installer
|
||||
:: Copies codewhale.exe, codew.exe, and codewhale-tui.exe to %USERPROFILE%\bin
|
||||
:: Copies codewhale.exe and codew.exe to %USERPROFILE%\bin (single binary, no codewhale-tui.exe)
|
||||
|
||||
set "BIN_DIR=%USERPROFILE%\bin"
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
@@ -22,12 +22,6 @@ if %ERRORLEVEL% neq 0 (
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
copy /Y "%SCRIPT_DIR%codewhale-tui.exe" "%BIN_DIR%\codewhale-tui.exe" >nul
|
||||
if %ERRORLEVEL% neq 0 (
|
||||
echo ERROR: Failed to copy codewhale-tui.exe
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo.
|
||||
echo Done. Commands installed to %BIN_DIR%.
|
||||
echo.
|
||||
|
||||
Reference in New Issue
Block a user