* xtask: Implement a new build system xtask is a cargo alias that is used to extend the cargo build system with custom commands. For an introduction to xtask, see here: https://github.com/matklad/cargo-xtask/ The idea is that instead of writing makefiles, xtask requires no additional dependencies except `cargo` and `rustc`, which must be available to build the project anyway. This commit provides a basic implementation of the `build` and `test` subcommands. * xtask/deps: Add 'which' * xtask/test: Handle error when cargo not found * xtask/flags: Add more commands to perform different useful tasks. Includes: - clippy - format - "make" (composite) - "install" (composite) Also add more options to `build` to selectively compile plugins or leave them out entirely. * xtask/main: Return error when cargo not found * xtask/build: Add more subtasks - `wasm_opt_plugins` and - `manpage` that perform other build commands. Add thorough documentation on what each of these does and also handle the new `build` cli flags appropriately. * xtask/clippy: Add job to run clippy * xtask/format: Add job to run rustfmt * xtask/pipeline: Add composite commands that perform multiple atomic xtask commands sequentially in a pipeline sort of fashion. * xtask/deps: Pin dependencies * xtask/main: Integrate new jobs and add documentation. * xtask: Implement 'dist' which performs an 'install' and copies the resulting zellij binary along with some other assets to a `target/dist` folder. * cargo: Update xflags version * xtask: Measure task time, update tty title * xtask: Update various tasks * xtask: wasm-opt plugins in release builds automatically. * xtask/build: Copy debug plugins to assets folder * xtask: Add 'run' subcommand * xtask: Add arbitrary args to test and run * xtask: Rearrange CLI commands in help * xtask: Add deprecation notice * docs: Replace `cargo make` with `xtask` * github: Use `xtask` in workflows. * xtask: Add support for CI commands * xtask: Streamline error handling * github: Use new xtask commands in CI * xtask: Add 'publish' job * xtask/publish: Add retry when publish fails * xtask: Apply rustfmt * xtask: Refine 'make' deprecation warning * xtask: add task to build manpage * contributing: Fix e2e commands * xtask/run: Add missing `--` to pass all arguments following `xtask run` directly to the zellij binary being run. * xtask: Stay in invocation dir and make all tasks that need it change to the project root dir themselves. * xtask/run: Add `--data-dir` flag which will allow very quick iterations when not changing the plugins between builds. * xtask/ci: Install dependencies without asking * utils: Allow including plugins from target folder * utils/assets: Reduce asset map complexity * utils/consts: Update asset map docs * xtask: Fix plugin includes * xtask/test: Build plugins first because the zellij binary needs to include the plugins. * xtask/test: Fix formatting * xtask: Add notice on how to disable it
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
//! Handle running `cargo fmt` on the sources.
|
|
use crate::flags;
|
|
use anyhow::Context;
|
|
use std::path::{Path, PathBuf};
|
|
use xshell::{cmd, Shell};
|
|
|
|
pub fn format(sh: &Shell, flags: flags::Format) -> anyhow::Result<()> {
|
|
let _pd = sh.push_dir(crate::project_root());
|
|
|
|
let cargo = check_rustfmt()
|
|
.and_then(|_| crate::cargo())
|
|
.context("failed to run task 'format'")?;
|
|
|
|
for subcrate in crate::WORKSPACE_MEMBERS.iter() {
|
|
let _pd = sh.push_dir(Path::new(subcrate));
|
|
// Tell the user where we are now
|
|
println!();
|
|
let msg = format!(">> Formatting '{subcrate}'");
|
|
crate::status(&msg);
|
|
println!("{}", msg);
|
|
|
|
let mut cmd = cmd!(sh, "{cargo} fmt");
|
|
if flags.check {
|
|
cmd = cmd.arg("--check");
|
|
}
|
|
cmd.run()
|
|
.with_context(|| format!("Failed to format '{subcrate}'"))?;
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
fn check_rustfmt() -> anyhow::Result<PathBuf> {
|
|
which::which("rustfmt").context(
|
|
"Couldn't find 'rustfmt' executable. Please install it with `cargo install rustfmt`",
|
|
)
|
|
}
|