chore: prepare 0.3.0-beta.1 release#158
Conversation
|
Thanks for the pull request. A maintainer will review it when available. Please keep the PR focused, explain the why in the description, and make sure local checks pass before requesting review. Contribution guide: https://github.com/AI-Shell-Team/aish/blob/main/CONTRIBUTING.md |
|
This pull request description looks incomplete. Please update the missing sections below before review. Missing items:
|
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe PR consolidates the installation and uninstallation workflow by removing the separate ChangesUnified Uninstallation Interface
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
README_ES.md (1)
129-129: 💤 Low valueConsider refining the Spanish phrasing.
The phrase "resuelve el último directorio de release" is understandable but could be more natural. Consider:
- "determina el último directorio de versión" (determines the latest version directory)
- "encuentra la última versión disponible" (finds the latest available version)
Also, "release" is an English word—consider translating it to "versión" or "lanzamiento", or formatting it as code/technical term.
Suggested refinement
-El instalador resuelve el último directorio de release en `https://www.aishell.ai/repo`, descarga el bundle correspondiente a tu arquitectura e instala `aish` en `/usr/local/bin`, junto con las unidades systemd del sandbox incluidas en el bundle. +El instalador determina la última versión disponible en `https://www.aishell.ai/repo`, descarga el bundle correspondiente a tu arquitectura e instala `aish` en `/usr/local/bin`, junto con las unidades systemd del sandbox incluidas en el bundle.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@README_ES.md` at line 129, Replace the phrase "resuelve el último directorio de release" with a more natural Spanish phrasing such as "determina el último directorio de versión" or "encuentra la última versión disponible", and replace the English word "release" with "versión" (or "lanzamiento") or format it as a technical term if you prefer; update the sentence that starts "El instalador resuelve el último directorio de release en `https://www.aishell.ai/repo`..." to use the chosen Spanish wording while keeping the rest of the line intact (the URL, action of downloading the bundle, installing `aish` to `/usr/local/bin`, and the mention of systemd units).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/aish-cli/src/uninstall.rs`:
- Around line 160-172: Add removal of the legacy "aish-uninstall" binary
alongside the existing "aish" removal: after creating archive_bin from
ARCHIVE_BIN_DIR and handling removal for "aish" (the block using archive_bin and
run_sudo), create another PathBuf for "aish-uninstall" (e.g., archive_uninstall
= PathBuf::from(ARCHIVE_BIN_DIR).join("aish-uninstall")), check its existence,
call run_sudo(&["rm", "-f", archive_uninstall.to_str().unwrap_or("")]) and
mirror the same error handling logic (building path_str, populating the args map
with "path" and "error", calling t_with_args("cli.uninstall.file_remove_failed",
&args), and setting success = false on error) so legacy uninstallers are cleaned
up consistently.
In `@packaging/scripts/uninstall-bundle.sh`:
- Line 89: Update the uninstall step that removes the aish binary to also remove
the legacy aish-uninstall binary; modify the invocation that calls target_path
with BIN_DIR and "aish" (the rm -f "$(target_path "${BIN_DIR}/aish")" call) so
it also runs rm -f against "$(target_path "${BIN_DIR}/aish-uninstall")" to
ensure stale /usr/local/bin/aish-uninstall is cleaned up during bundle
uninstall.
---
Nitpick comments:
In `@README_ES.md`:
- Line 129: Replace the phrase "resuelve el último directorio de release" with a
more natural Spanish phrasing such as "determina el último directorio de
versión" or "encuentra la última versión disponible", and replace the English
word "release" with "versión" (or "lanzamiento") or format it as a technical
term if you prefer; update the sentence that starts "El instalador resuelve el
último directorio de release en `https://www.aishell.ai/repo`..." to use the
chosen Spanish wording while keeping the rest of the line intact (the URL,
action of downloading the bundle, installing `aish` to `/usr/local/bin`, and the
mention of systemd units).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: afe59712-fe94-45da-a904-50b0d57d2a1d
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (17)
.github/workflows/release-preparation.yml.github/workflows/release.ymlCHANGELOG.mdCargo.tomlMakefileREADME.mdREADME_CN.mdREADME_DE.mdREADME_ES.mdREADME_FR.mdREADME_JA.mdcrates/aish-cli/src/uninstall.rscrates/aish-cli/src/update.rspackaging/scripts/install-bundle.shpackaging/scripts/uninstall-bundle.shpackaging/scripts/update_release_files.pypackaging/tests/release_scripts_smoke.sh
💤 Files with no reviewable changes (1)
- packaging/scripts/install-bundle.sh
| let archive_bin = PathBuf::from(ARCHIVE_BIN_DIR).join("aish"); | ||
| if archive_bin.exists() { | ||
| if let Err(e) = run_sudo(&["rm", "-f", archive_bin.to_str().unwrap_or("")]) { | ||
| let path_str = archive_bin.display().to_string(); | ||
| eprintln!("\x1b[31m{}\x1b[0m", { | ||
| let mut args = std::collections::HashMap::new(); | ||
| args.insert("path".to_string(), path_str); | ||
| args.insert("error".to_string(), e.to_string()); | ||
| t_with_args("cli.uninstall.file_remove_failed", &args) | ||
| }); | ||
| success = false; | ||
| } | ||
| } |
There was a problem hiding this comment.
Clean up legacy aish-uninstall binary during archive uninstall.
Line 160 now removes only aish; older installs can still leave /usr/local/bin/aish-uninstall behind, which creates stale-command confusion after uninstall.
Suggested patch
let archive_bin = PathBuf::from(ARCHIVE_BIN_DIR).join("aish");
- if archive_bin.exists() {
- if let Err(e) = run_sudo(&["rm", "-f", archive_bin.to_str().unwrap_or("")]) {
- let path_str = archive_bin.display().to_string();
- eprintln!("\x1b[31m{}\x1b[0m", {
- let mut args = std::collections::HashMap::new();
- args.insert("path".to_string(), path_str);
- args.insert("error".to_string(), e.to_string());
- t_with_args("cli.uninstall.file_remove_failed", &args)
- });
- success = false;
- }
- }
+ let legacy_uninstall_bin = PathBuf::from(ARCHIVE_BIN_DIR).join("aish-uninstall");
+ for bin in [&archive_bin, &legacy_uninstall_bin] {
+ if bin.exists() {
+ if let Err(e) = run_sudo(&["rm", "-f", bin.to_str().unwrap_or("")]) {
+ let path_str = bin.display().to_string();
+ eprintln!("\x1b[31m{}\x1b[0m", {
+ let mut args = std::collections::HashMap::new();
+ args.insert("path".to_string(), path_str);
+ args.insert("error".to_string(), e.to_string());
+ t_with_args("cli.uninstall.file_remove_failed", &args)
+ });
+ success = false;
+ }
+ }
+ }📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| let archive_bin = PathBuf::from(ARCHIVE_BIN_DIR).join("aish"); | |
| if archive_bin.exists() { | |
| if let Err(e) = run_sudo(&["rm", "-f", archive_bin.to_str().unwrap_or("")]) { | |
| let path_str = archive_bin.display().to_string(); | |
| eprintln!("\x1b[31m{}\x1b[0m", { | |
| let mut args = std::collections::HashMap::new(); | |
| args.insert("path".to_string(), path_str); | |
| args.insert("error".to_string(), e.to_string()); | |
| t_with_args("cli.uninstall.file_remove_failed", &args) | |
| }); | |
| success = false; | |
| } | |
| } | |
| let archive_bin = PathBuf::from(ARCHIVE_BIN_DIR).join("aish"); | |
| let legacy_uninstall_bin = PathBuf::from(ARCHIVE_BIN_DIR).join("aish-uninstall"); | |
| for bin in [&archive_bin, &legacy_uninstall_bin] { | |
| if bin.exists() { | |
| if let Err(e) = run_sudo(&["rm", "-f", bin.to_str().unwrap_or("")]) { | |
| let path_str = bin.display().to_string(); | |
| eprintln!("\x1b[31m{}\x1b[0m", { | |
| let mut args = std::collections::HashMap::new(); | |
| args.insert("path".to_string(), path_str); | |
| args.insert("error".to_string(), e.to_string()); | |
| t_with_args("cli.uninstall.file_remove_failed", &args) | |
| }); | |
| success = false; | |
| } | |
| } | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/aish-cli/src/uninstall.rs` around lines 160 - 172, Add removal of the
legacy "aish-uninstall" binary alongside the existing "aish" removal: after
creating archive_bin from ARCHIVE_BIN_DIR and handling removal for "aish" (the
block using archive_bin and run_sudo), create another PathBuf for
"aish-uninstall" (e.g., archive_uninstall =
PathBuf::from(ARCHIVE_BIN_DIR).join("aish-uninstall")), check its existence,
call run_sudo(&["rm", "-f", archive_uninstall.to_str().unwrap_or("")]) and
mirror the same error handling logic (building path_str, populating the args map
with "path" and "error", calling t_with_args("cli.uninstall.file_remove_failed",
&args), and setting success = false on error) so legacy uninstallers are cleaned
up consistently.
| remove_systemd_units | ||
|
|
||
| rm -f "$(target_path "${BIN_DIR}/aish")" "$(target_path "${BIN_DIR}/aish-uninstall")" | ||
| rm -f "$(target_path "${BIN_DIR}/aish")" |
There was a problem hiding this comment.
Also remove legacy aish-uninstall binary during uninstall.
On systems upgraded from older bundle layouts, this leaves a stale executable in /usr/local/bin. Clean it up for backward-safe uninstall behavior.
Suggested patch
-rm -f "$(target_path "${BIN_DIR}/aish")"
+rm -f \
+ "$(target_path "${BIN_DIR}/aish")" \
+ "$(target_path "${BIN_DIR}/aish-uninstall")"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| rm -f "$(target_path "${BIN_DIR}/aish")" | |
| rm -f \ | |
| "$(target_path "${BIN_DIR}/aish")" \ | |
| "$(target_path "${BIN_DIR}/aish-uninstall")" |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packaging/scripts/uninstall-bundle.sh` at line 89, Update the uninstall step
that removes the aish binary to also remove the legacy aish-uninstall binary;
modify the invocation that calls target_path with BIN_DIR and "aish" (the rm -f
"$(target_path "${BIN_DIR}/aish")" call) so it also runs rm -f against
"$(target_path "${BIN_DIR}/aish-uninstall")" to ensure stale
/usr/local/bin/aish-uninstall is cleaned up during bundle uninstall.
Background
Prepare the first Rust beta release on the
rustline so we can validate the 0.3 runtime and packaging path before the final0.3.0release moves tomain.Changes
0.3.0-beta.1and refresh release metadata0.3.0-beta.1changelog entry for the Rust beta linelinux-amd64assetsValidation
make packaging-testcargo test -p aish-cli compare_versions_prereleasecargo test -p aish-cli is_safe_purge_pathcargo build --release --target x86_64-unknown-linux-muslaish-0.3.0-beta.1-linux-amd64Risk
rustbranch onlyRelease Preparationworkflow againstrelease/v0.3.0-beta.1-prepbefore merge0.3.0release should be prepared separately onmainSummary by CodeRabbit
New Features
Documentation
aishbinary is installed with bundled sandbox systemd units.aish-uninstalltoaish uninstall --yes(or with--purgefor full removal).Chores