xtask: wire cargo xtask version (root() helper, run via $CARGO) so xtask builds again

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Brandon Thomas
2026-10-02 12:12:29 -04:00
co-authored by Claude Opus 5.5
parent b809240d2f
commit 7058004ecf
2 changed files with 16 additions and 7 deletions
+13 -1
View File
@@ -430,6 +430,11 @@ fn bench_playback() -> Result<(), String> {
run(Command::new(env!("CARGO")).args(["run", "--release", "-p", "filmcraft-ui-egui", "--example", "bench_playback", "--"]).args(&extra))
}
/// The workspace root (the parent of `xtask/`).
fn root() -> std::path::PathBuf {
std::path::Path::new(env!("CARGO_MANIFEST_DIR")).parent().expect("xtask lives in the workspace").to_path_buf()
}
fn main() -> ExitCode {
let task = std::env::args().nth(1).unwrap_or_default();
let r = match task.as_str() {
@@ -440,11 +445,18 @@ fn main() -> ExitCode {
"ci" => ci(),
"bench-playback" => bench_playback(),
"web" => web(&std::env::args().skip(2).collect::<Vec<_>>()),
"version" => {
let rest: Vec<String> = std::env::args().skip(2).collect();
version::run(&root(), &rest.iter().map(String::as_str).collect::<Vec<_>>())
}
"ico" => {
let rest: Vec<String> = std::env::args().skip(2).collect();
ico::run(&rest.iter().map(String::as_str).collect::<Vec<_>>())
}
_ => Err("usage: cargo xtask <layers|assets|wasm|web [--dev] [--serve PORT]|fixtures [crate…]|ico OUT IN…|ci|bench-playback [args]>".into()),
_ => {
Err("usage: cargo xtask <layers|assets|wasm|web [--dev] [--serve PORT]|fixtures [crate…]|ico OUT IN…|version [set X.Y.Z]|ci|bench-playback [args]>"
.into())
}
};
match r {
Ok(()) => ExitCode::SUCCESS,
+3 -6
View File
@@ -92,12 +92,9 @@ pub fn run(root: &Path, args: &[&str]) -> Result<(), String> {
std::fs::write(&tmp, updated).map_err(|e| format!("write {}: {e}", tmp.display()))?;
std::fs::rename(&tmp, &path).map_err(|e| format!("replace {}: {e}", path.display()))?;
// Refresh the workspace members' entries in Cargo.lock (no dependency upgrades).
let mut c = crate::cargo();
c.args(["update", "--workspace", "--offline"]);
if crate::run(c, "cargo update --workspace --offline").is_err() {
let mut c = crate::cargo();
c.args(["update", "--workspace"]);
crate::run(c, "cargo update --workspace")?;
let cargo = std::env::var("CARGO").unwrap_or_else(|_| "cargo".into());
if crate::run(std::process::Command::new(&cargo).args(["update", "--workspace", "--offline"])).is_err() {
crate::run(std::process::Command::new(&cargo).args(["update", "--workspace"]))?;
}
println!("version: {old} -> {new}");
Ok(())