chore(release): harden deepseek-tui deprecation path

This commit is contained in:
Hunter B
2026-06-01 06:01:03 -07:00
parent 382635e4aa
commit 998af56d6a
14 changed files with 78 additions and 60 deletions
-1
View File
@@ -19,7 +19,6 @@ on:
paths:
- 'Cargo.toml'
- 'npm/codewhale/package.json'
- 'npm/deepseek-tui/package.json'
workflow_dispatch:
permissions:
+6 -5
View File
@@ -506,10 +506,11 @@ jobs:
body: |
> This release renames the project to **CodeWhale**. The legacy
> `deepseek` and `deepseek-tui` binaries continue to ship as
> deprecation shims for one release cycle; they print a one-line
> warning and forward to `codewhale` / `codewhale-tui`. They will
> be removed in v0.9.0. See `docs/REBRAND.md` for the full
> migration story.
> compatibility-only deprecation shims during v0.8.x; they print a
> one-line warning and forward to `codewhale` / `codewhale-tui`.
> They will be removed in v0.9.0. The legacy npm package
> `deepseek-tui` is deprecated and receives no further releases.
> See `docs/REBRAND.md` for the full migration story.
## Install
@@ -568,7 +569,7 @@ jobs:
The **portable** Windows archive skips the install script — extract and run from any directory.
Individual binaries are also attached below for scripting and the npm wrapper. Legacy `deepseek-*` and `deepseek-tui-*` assets ship for one release cycle so that existing `deepseek update` invocations on v0.8.40 keep working; they install the deprecation shims, which forward to the canonical binaries.
Individual binaries are also attached below for scripting and the npm wrapper. Legacy `deepseek-*` and `deepseek-tui-*` assets are compatibility-only deprecation shims for v0.8.x so that existing `deepseek update` invocations on v0.8.40 keep working; they forward to the canonical binaries. The legacy npm package `deepseek-tui` is deprecated and is not republished.
### Verify (recommended)
+5 -4
View File
@@ -9,7 +9,7 @@
## インストール
`codewhale` は自己完結型の Rust リリースバイナリのペアとしてインストールされます。`codewhale` はディスパッチャーで、同じ場所にある `codewhale-tui` ランタイムを起動して対話セッションを実行します。npm、Homebrew、Docker は両方を自動でインストールします。Cargo や手動インストールでは、両方を同じディレクトリ(通常は `PATH` 上のディレクトリ)に置いてください。実行に Node.js や Python のランタイムは不要です。
`codewhale` は自己完結型の Rust リリースバイナリのペアとしてインストールされます。`codewhale` はディスパッチャーで、同じ場所にある `codewhale-tui` ランタイムを起動して対話セッションを実行します。npmDocker は両方を自動でインストールします。Cargo や手動インストールでは、両方を同じディレクトリ(通常は `PATH` 上のディレクトリ)に置いてください。実行に Node.js や Python のランタイムは不要です。
```bash
# 1. npm — すでに Node を使っているなら最も簡単。npm パッケージは
@@ -21,8 +21,9 @@ npm install -g codewhale
cargo install codewhale-cli --locked # `codewhale` (エントリーポイント)
cargo install codewhale-tui --locked # `codewhale-tui` (TUI バイナリ)
# 3. Homebrew — macOS パッケージマネージャ
# tap/formula 名は旧名のままですが、codewhale と codewhale-tui をインストールします。
# 3. Homebrew — 旧インストールとの互換用です
# tap/formula はまだ旧 deepseek-tui 名を使っています。新規インストールでは、
# formula が改名されるまで npm、Cargo、Docker、直接ダウンロードを優先してください。
brew tap Hmbown/deepseek-tui
brew install deepseek-tui
@@ -48,7 +49,7 @@ docker run --rm -it \
```bash
codewhale update
npm install -g codewhale@latest
brew update && brew upgrade deepseek-tui
brew update && brew upgrade deepseek-tui # 旧 Homebrew インストールのみ
cargo install codewhale-cli --locked --force
cargo install codewhale-tui --locked --force
```
+6 -5
View File
@@ -11,8 +11,8 @@
`codewhale` installs as a matched pair of self-contained Rust release binaries:
the `codewhale` dispatcher command and the sibling `codewhale-tui` runtime it
launches for interactive sessions. npm, Homebrew, and Docker install both for
you; Cargo and manual installs must put both binaries in the same directory
launches for interactive sessions. npm and Docker install both for you; Cargo
and manual installs must put both binaries in the same directory
(normally a directory on your `PATH`). The npm package is only an
installer/wrapper for those release binaries; the agent does not run on Node.
@@ -27,8 +27,9 @@ npm install -g codewhale
cargo install codewhale-cli --locked # `codewhale` (entry point)
cargo install codewhale-tui --locked # `codewhale-tui` (TUI binary)
# 3. Homebrew — macOS package manager.
# The tap/formula name is legacy; it installs codewhale and codewhale-tui.
# 3. Homebrew — legacy compatibility only.
# The tap/formula still uses the old deepseek-tui name. Prefer npm, Cargo,
# Docker, or direct downloads for new installs until the formula is renamed.
brew tap Hmbown/deepseek-tui
brew install deepseek-tui
@@ -61,7 +62,7 @@ Already installed? Use the updater that matches the install path:
```bash
codewhale update # release-binary updater
npm install -g codewhale@latest # npm wrapper
brew update && brew upgrade deepseek-tui
brew update && brew upgrade deepseek-tui # legacy Homebrew installs only
cargo install codewhale-cli --locked --force
cargo install codewhale-tui --locked --force
```
+5 -4
View File
@@ -9,7 +9,7 @@
## Cài đặt
`codewhale` được cài đặt dưới dạng một cặp binary tự chạy bằng Rust đồng bộ với nhau:
Lệnh điều phối `codewhale` (dispatcher) và môi trường chạy giao diện `codewhale-tui` (runtime) do nó khởi chạy để thực hiện các phiên làm việc tương tác. Các trình quản lý gói như npm, Homebrew, và Docker sẽ tự động cài đặt cả hai cho bạn; đối với Cargo hoặc cài đặt thủ công, bạn phải đặt cả hai tệp binary này trong cùng một thư mục (thông thường là một thư mục nằm trong biến môi trường `PATH` của bạn). Gói npm chỉ là một trình cài đặt/bao bọc (wrapper) cho các tệp binary phát hành này; agent không chạy trên môi trường Node.js.
Lệnh điều phối `codewhale` (dispatcher) và môi trường chạy giao diện `codewhale-tui` (runtime) do nó khởi chạy để thực hiện các phiên làm việc tương tác. npm và Docker sẽ tự động cài đặt cả hai cho bạn; đối với Cargo hoặc cài đặt thủ công, bạn phải đặt cả hai tệp binary này trong cùng một thư mục (thông thường là một thư mục nằm trong biến môi trường `PATH` của bạn). Gói npm chỉ là một trình cài đặt/bao bọc (wrapper) cho các tệp binary phát hành này; agent không chạy trên môi trường Node.js.
```bash
# 1. npm — dễ nhất nếu bạn đã cài đặt Node. Gói này sẽ tự động tải các
@@ -22,8 +22,9 @@ npm install -g codewhale
cargo install codewhale-cli --locked # cài đặt `codewhale` (điểm truy cập CLI chính)
cargo install codewhale-tui --locked # cài đặt `codewhale-tui` (giao diện TUI)
# 3. Homebrew — trình quản lý gói dành cho macOS.
# Tên tap/formula là tên cũ (legacy); nó sẽ cài đặt cả codewhale và codewhale-tui.
# 3. Homebrew — chỉ dành cho khả năng tương thích với cài đặt cũ.
# Tap/formula vẫn dùng tên deepseek-tui cũ. Với cài đặt mới, hãy ưu tiên
# npm, Cargo, Docker hoặc tải trực tiếp cho đến khi formula được đổi tên.
brew tap Hmbown/deepseek-tui
brew install deepseek-tui
@@ -56,7 +57,7 @@ docker run --rm -it \
```bash
codewhale update # trình cập nhật binary phát hành trực tiếp
npm install -g codewhale@latest # thông qua trình bao bọc npm
brew update && brew upgrade deepseek-tui
brew update && brew upgrade deepseek-tui # chỉ cho cài đặt Homebrew cũ
cargo install codewhale-cli --locked --force
cargo install codewhale-tui --locked --force
```
+6 -5
View File
@@ -10,8 +10,8 @@
## 安装
`codewhale` 以一组自包含 Rust 发布二进制安装:`codewhale` 调度器命令,
以及它在交互会话中启动的同级 `codewhale-tui` 运行时。npm、Homebrew 和
Docker 会自动安装这两个二进制;Cargo 或手动下载时必须把两者放在同一目录
以及它在交互会话中启动的同级 `codewhale-tui` 运行时。npm 和 Docker
会自动安装这两个二进制;Cargo 或手动下载时必须把两者放在同一目录
(通常是 `PATH` 上的某个目录)。运行时不依赖 Node.js 或 Python。
```bash
@@ -24,8 +24,9 @@ npm install -g codewhale
cargo install codewhale-cli --locked # `codewhale` 入口
cargo install codewhale-tui --locked # `codewhale-tui` TUI 二进制
# 3. Homebrew —— macOS 包管理器
# tap/formula 名称仍是旧名;实际安装 codewhale 和 codewhale-tui。
# 3. Homebrew —— 仅用于旧安装兼容
# tap/formula 仍使用旧的 deepseek-tui 名称。新安装请优先使用
# npm、Cargo、Docker 或直接下载,直到 formula 完成改名。
brew tap Hmbown/deepseek-tui
brew install deepseek-tui
@@ -57,7 +58,7 @@ docker run --rm -it \
```bash
codewhale update # release 二进制更新器
npm install -g codewhale@latest # npm 包装器
brew update && brew upgrade deepseek-tui
brew update && brew upgrade deepseek-tui # 仅旧 Homebrew 安装
cargo install codewhale-cli --locked --force
cargo install codewhale-tui --locked --force
```
+3 -2
View File
@@ -56,8 +56,9 @@ npm install -g codewhale
cargo install codewhale-cli --locked
cargo install codewhale-tui --locked
# Homebrew
# The tap/formula name is legacy; it installs codewhale and codewhale-tui.
# Homebrew, legacy installs only
# The tap/formula still uses the old deepseek-tui name. Prefer npm, Cargo,
# Docker, or direct downloads for new installs until the formula is renamed.
brew tap Hmbown/deepseek-tui
brew install deepseek-tui
```
+13 -12
View File
@@ -14,9 +14,9 @@ npm uninstall -g deepseek-tui # or cargo uninstall deepseek-tui-cli deepsee
# 2. Install under the new name.
npm install -g codewhale # or cargo install codewhale-cli codewhale-tui --locked
# or brew install deepseek-tui (Homebrew tap still
# uses the legacy name during the transition;
# it installs the new binaries underneath.)
# legacy Homebrew installs may still use
# brew install deepseek-tui until the tap
# formula is renamed.
# 3. Run with the new command.
codewhale doctor
@@ -57,9 +57,10 @@ Anything that targets the DeepSeek provider API stays exactly as it was:
and audit log.
- **GitHub repository URL**: `https://github.com/Hmbown/CodeWhale`.
The old `Hmbown/DeepSeek-TUI` URL redirects there during the transition.
- **Homebrew tap and formula** (`Hmbown/homebrew-deepseek-tui`): still
installs by the legacy name during the transition. The tap's formula
will be flipped to the new names in a follow-up.
- **Homebrew tap and formula** (`Hmbown/homebrew-deepseek-tui`): still uses
the legacy formula name for existing installs. Treat it as compatibility-only
until the tap is renamed; new install docs prefer `codewhale` npm, Cargo,
Docker, or direct downloads.
- **Docker image**: `ghcr.io/hmbown/codewhale`.
## Deprecation shims (through v0.8.x)
@@ -70,8 +71,8 @@ v0.8.41 and later v0.8.x releases ship **deprecation shims**:
- A `deepseek` binary that prints a one-line warning to stderr and forwards
argv to `codewhale`.
- A `deepseek-tui` binary that does the same for `codewhale-tui`.
- An `npm` package at `deepseek-tui@0.8.x` with no `bin` and a postinstall
that prints a clear rename notice.
- The legacy `deepseek-tui` npm package is deprecated and no longer receives
new releases. Install the `codewhale` npm package instead.
These shims will be removed in **v0.9.0**. Please migrate before then.
@@ -100,10 +101,10 @@ cargo install --path crates/tui --locked --force
### Homebrew
The tap formula still installs `deepseek-tui` during the transition.
Existing `brew install deepseek-tui` invocations continue to work and land
the new binaries underneath the legacy formula name. The formula and tap
repo will follow up with their own rename.
The tap formula still installs through the legacy `deepseek-tui` name for
existing Homebrew users. Keep using `brew upgrade deepseek-tui` only for that
compatibility path. New installs should prefer npm, Cargo, Docker, or direct
downloads until the formula and tap repo are renamed.
### Manual / GitHub Releases
+4 -2
View File
@@ -34,8 +34,8 @@ publish-crates), see [`RELEASE_RUNBOOK.md`](RELEASE_RUNBOOK.md).
pins match the new workspace version.
- [ ] `npm/codewhale/package.json` `version` AND `codewhaleBinaryVersion`
are both bumped.
- [ ] `npm/deepseek-tui/package.json` `version` is bumped for the one-release
deprecation shim.
- [ ] `npm/deepseek-tui/package.json` remains private/compatibility-only and
is **not** bumped or published.
- [ ] `Cargo.lock` is refreshed (`cargo update --workspace --offline`).
- [ ] `./scripts/release/check-versions.sh` reports
`Version state OK: workspace=X.Y.Z, npm=X.Y.Z, lockfile in sync.`
@@ -95,6 +95,8 @@ Run, in order, from the repo root:
```
- [ ] `npm view codewhale@X.Y.Z version codewhaleBinaryVersion --json`
reports the new version on the npm registry.
- [ ] `npm view deepseek-tui deprecated` is non-empty. The legacy npm package
is deprecated and must not receive an `X.Y.Z` publish.
- [ ] `crates.io` has the new version (or the `publish-crates.sh` job has
pushed it).
- [ ] `ghcr.io/hmbown/codewhale:vX.Y.Z` and `:latest` are updated.
+2 -2
View File
@@ -4,8 +4,8 @@ Install and run CodeWhale, the agentic terminal for open-source and open-weight
models, from GitHub release artifacts.
> Previously published as `deepseek-tui`. See `docs/REBRAND.md` in the upstream
> repository for the migration notes; the legacy `deepseek-tui` npm package
> remains a deprecation shim through the v0.8.x transition.
> repository for the migration notes; the legacy `deepseek-tui` npm package is
> deprecated and receives no further releases.
## Install
+4 -3
View File
@@ -7,9 +7,10 @@ npm uninstall -g deepseek-tui
npm install -g codewhale
```
`codewhale` ships the same `codewhale` and `codewhale-tui` binaries plus
deprecation shims under the old `deepseek` / `deepseek-tui` names so existing
scripts keep working through the v0.8.x transition.
This legacy npm package is deprecated and receives no further releases.
`codewhale` ships the canonical `codewhale` and `codewhale-tui` binaries, plus
compatibility-only deprecation shims under the old `deepseek` /
`deepseek-tui` binary names for v0.8.x.
See [docs/REBRAND.md](https://github.com/Hmbown/CodeWhale/blob/main/docs/REBRAND.md)
for the full migration story.
+2 -4
View File
@@ -1,7 +1,8 @@
{
"name": "deepseek-tui",
"version": "0.8.49",
"description": "Legacy compatibility package. Renamed to `codewhale`; run `npm install -g codewhale` for new installs.",
"private": true,
"description": "Deprecated legacy package name. Install `codewhale` instead; this package is not republished.",
"author": "Hmbown",
"license": "MIT",
"funding": [
@@ -34,9 +35,6 @@
"engines": {
"node": ">=18"
},
"publishConfig": {
"access": "public"
},
"files": [
"scripts/*.js",
"README.md",
+12 -4
View File
@@ -92,14 +92,22 @@ else
fail=1
fi
# Legacy `deepseek-tui` deprecation shim package. Best-effort check —
# absence after the transition release is expected and not fatal.
# Legacy `deepseek-tui` npm package. It is deprecated and must not be
# republished under the release version.
if legacy_version="$(npm view "deepseek-tui@${version}" version 2>/dev/null)"; then
echo "npm deepseek-tui@${legacy_version} (deprecation shim) is published."
echo "npm deepseek-tui@${legacy_version} exists, but the legacy npm package must not be republished." >&2
fail=1
fi
if legacy_deprecated="$(npm view deepseek-tui deprecated 2>/dev/null)" && [[ -n "${legacy_deprecated}" ]]; then
echo "npm deepseek-tui is deprecated: ${legacy_deprecated}"
else
echo "npm deepseek-tui is not marked deprecated." >&2
fail=1
fi
crates_user_agent="CodeWhale release check (https://github.com/Hmbown/CodeWhale)"
for crate in "${release_crates[@]}"; do
if curl -fsSL "https://crates.io/api/v1/crates/${crate}/${version}" >/dev/null 2>&1; then
if curl -fsSL -A "${crates_user_agent}" "https://crates.io/api/v1/crates/${crate}/${version}" >/dev/null 2>&1; then
echo "crates.io ${crate}@${version} is published."
else
echo "crates.io ${crate}@${version} is not published." >&2
+10 -7
View File
@@ -7,8 +7,8 @@
# crate must inherit `version.workspace = true`.
# 2. `npm/codewhale/package.json` `version` matches the workspace
# `version` in the root `Cargo.toml`. (`npm/deepseek-tui/` still
# exists during the transition as a deprecation shim package; its
# version is also checked.)
# exists only as an unpublished compatibility notice and must stay
# private.)
# 3. Internal `codewhale-*` path dependency pins match the workspace version.
# 4. The TUI crate's packaged changelog copy matches root `CHANGELOG.md`.
# 5. The current release has a dated Keep a Changelog entry and compare link.
@@ -37,12 +37,15 @@ if [[ "${workspace_version}" != "${npm_version}" ]]; then
echo "::error::npm/codewhale/package.json version (${npm_version}) does not match workspace Cargo.toml (${workspace_version})." >&2
fail=1
fi
# Also pin the legacy deprecation shim package to the same workspace version
# so a stale `deepseek-tui` doesn't ship pointing at a different release.
if [[ -f npm/deepseek-tui/package.json ]]; then
legacy_npm_version="$(node -p "require('./npm/deepseek-tui/package.json').version")"
if [[ "${workspace_version}" != "${legacy_npm_version}" ]]; then
echo "::error::npm/deepseek-tui/package.json version (${legacy_npm_version}) does not match workspace Cargo.toml (${workspace_version})." >&2
legacy_private="$(node -p "Boolean(require('./npm/deepseek-tui/package.json').private)")"
legacy_publish_config="$(node -p "Boolean(require('./npm/deepseek-tui/package.json').publishConfig)")"
if [[ "${legacy_private}" != "true" ]]; then
echo "::error::npm/deepseek-tui/package.json must stay private so the legacy package is not republished." >&2
fail=1
fi
if [[ "${legacy_publish_config}" == "true" ]]; then
echo "::error::npm/deepseek-tui/package.json must not define publishConfig; the legacy package is deprecated." >&2
fail=1
fi
fi