mirror of
https://github.com/openai/codex.git
synced 2026-10-19 17:28:46 +00:00
## Why Local daemon version warnings direct users to a shell command. Provide an update flow from the TUI with an explicit choice of package source and confirmation before exiting. ## What changed - Add `/daemon` with options to install the latest public stable release or use the current CLI package. Point local server version notices to the menu. - Default confirmation to Cancel and explain restart, interruption, and relaunch behavior. After confirmation, exit the TUI and run the update through the launching CLI executable, propagating failures. - Keep maintenance available when disconnected or using the embedded server. Disable updates for remote connections or a missing CLI executable, and disable copying the CLI build when no local package is available. ## Testing Add menu snapshots and interaction tests covering both update sources, cancellation, and unavailable actions. Add a Unix CLI handoff test verifying the selected executable, command arguments, and failure propagation. GitOrigin-RevId: 06b485feb5650673ec7dd00adda01fedb8909393
38 lines
1.2 KiB
Rust
38 lines
1.2 KiB
Rust
use super::*;
|
|
use codex_tui::DaemonUpdateSource;
|
|
use pretty_assertions::assert_eq;
|
|
use std::os::unix::fs::PermissionsExt;
|
|
|
|
#[test]
|
|
fn daemon_handoff_uses_selected_executable_and_propagates_failure() -> anyhow::Result<()> {
|
|
let dir = tempfile::tempdir()?;
|
|
let executable = dir.path().join("launching CLI");
|
|
let receipt = dir.path().join("launching CLI.args");
|
|
std::fs::write(
|
|
&executable,
|
|
"#!/bin/sh\nprintf '%s\\n' \"$@\" > \"$0.args\"\n",
|
|
)?;
|
|
std::fs::set_permissions(&executable, std::fs::Permissions::from_mode(/*mode*/ 0o700))?;
|
|
for (source, expected) in [
|
|
(
|
|
DaemonUpdateSource::PublicStable,
|
|
"app-server\ndaemon\nupdate\n",
|
|
),
|
|
(
|
|
DaemonUpdateSource::ThisCli,
|
|
"app-server\ndaemon\nupdate\n--from-cli\n--yes\n",
|
|
),
|
|
] {
|
|
run_update_action(UpdateAction::Daemon(source), Some(&executable))?;
|
|
assert_eq!(std::fs::read_to_string(&receipt)?, expected);
|
|
}
|
|
std::fs::write(&executable, "#!/bin/sh\nexit 7\n")?;
|
|
let error = run_update_action(
|
|
UpdateAction::Daemon(DaemonUpdateSource::ThisCli),
|
|
Some(&executable),
|
|
)
|
|
.unwrap_err();
|
|
assert!(error.to_string().contains("Daemon update failed"));
|
|
Ok(())
|
|
}
|