aboutsummaryrefslogtreecommitdiffstats
path: root/xtask/src
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2026-07-30 16:50:12 +0200
committerGitHub <noreply@github.com>2026-07-30 16:50:12 +0200
commit0ed2edea0cabf1ca7ce0983d7a0ec0430a33d621 (patch)
tree34e49d9df43c3ca16b3fc305aab2dd391ad5bc46 /xtask/src
parentEven more debian upgrades (#5424) (diff)
downloadsl0ppij-0ed2edea0cabf1ca7ce0983d7a0ec0430a33d621.tar.gz
sl0ppij-0ed2edea0cabf1ca7ce0983d7a0ec0430a33d621.tar.xz
sl0ppij-0ed2edea0cabf1ca7ce0983d7a0ec0430a33d621.zip
fix(build): remove manpage, honor CARGO_TARGET_DIR, add cargo argument passthrough, remove clippy (#5426)
* fix(build): remove manpage, honor CARGO_TARGET_DIR, add cargo argument passthrough, remove clippy * add pr
Diffstat (limited to 'xtask/src')
-rw-r--r--xtask/src/build.rs54
-rw-r--r--xtask/src/ci.rs10
-rw-r--r--xtask/src/clippy.rs44
-rw-r--r--xtask/src/dist.rs1
-rw-r--r--xtask/src/flags.rs34
-rw-r--r--xtask/src/main.rs15
-rw-r--r--xtask/src/pipelines.rs52
-rw-r--r--xtask/src/test.rs1
8 files changed, 42 insertions, 169 deletions
diff --git a/xtask/src/build.rs b/xtask/src/build.rs
index 210b8e4b..61f5edde 100644
--- a/xtask/src/build.rs
+++ b/xtask/src/build.rs
@@ -3,7 +3,6 @@
//! Currently has the following functions:
//!
//! - [`build`]: Builds general cargo projects (i.e. zellij components) with `cargo build`
-//! - [`manpage`]: Builds the manpage with `mandown`
use crate::{flags, metadata, WorkspaceMember};
use anyhow::Context;
use std::path::{Path, PathBuf};
@@ -99,6 +98,7 @@ pub fn build(sh: &Shell, flags: flags::Build) -> anyhow::Result<()> {
},
}
}
+ base_cmd = base_cmd.args(&flags.args);
base_cmd.run().with_context(err_context)?;
}
}
@@ -218,11 +218,7 @@ fn plugin_name_of(member: &WorkspaceMember) -> anyhow::Result<&'static str> {
}
fn plugin_stamp_path() -> PathBuf {
- PathBuf::from(
- std::env::var_os("CARGO_TARGET_DIR")
- .unwrap_or(crate::project_root().join("target").into_os_string()),
- )
- .join(".xtask-plugins-stamp")
+ crate::target_dir().join(".xtask-plugins-stamp")
}
fn write_plugin_stamp(sh: &Shell) {
@@ -322,14 +318,11 @@ fn move_plugin_to_assets(sh: &Shell, plugin_name: &str) -> anyhow::Result<()> {
.with_extension("wasm");
// Get plugin path
- let plugin = PathBuf::from(
- std::env::var_os("CARGO_TARGET_DIR")
- .unwrap_or(crate::project_root().join("target").into_os_string()),
- )
- .join("wasm32-wasip1")
- .join("release")
- .join(plugin_name)
- .with_extension("wasm");
+ let plugin = crate::target_dir()
+ .join("wasm32-wasip1")
+ .join("release")
+ .join(plugin_name)
+ .with_extension("wasm");
if !plugin.is_file() {
return Err(anyhow::anyhow!("No plugin found at '{}'", plugin.display()))
@@ -341,36 +334,3 @@ fn move_plugin_to_assets(sh: &Shell, plugin_name: &str) -> anyhow::Result<()> {
let to = asset_name.as_path();
sh.copy_file(from, to).with_context(err_context)
}
-
-/// Build the manpage with `mandown`.
-// mkdir -p ${root_dir}/assets/man
-// mandown ${root_dir}/docs/MANPAGE.md 1 > ${root_dir}/assets/man/zellij.1
-pub fn manpage(sh: &Shell) -> anyhow::Result<()> {
- let err_context = "failed to generate manpage";
-
- let mandown = mandown(sh).context(err_context)?;
-
- let project_root = crate::project_root();
- let asset_dir = &project_root.join("assets").join("man");
- sh.create_dir(asset_dir).context(err_context)?;
- let _pd = sh.push_dir(asset_dir);
-
- cmd!(sh, "{mandown} {project_root}/docs/MANPAGE.md 1")
- .read()
- .and_then(|text| sh.write_file("zellij.1", text))
- .context(err_context)
-}
-
-/// Get the path to a `mandown` executable.
-///
-/// If the executable isn't found, an error is returned instead.
-fn mandown(_sh: &Shell) -> anyhow::Result<PathBuf> {
- match which::which("mandown") {
- Ok(path) => Ok(path),
- Err(e) => {
- eprintln!("!! 'mandown' wasn't found but is needed for this build step.");
- eprintln!("!! Please install it with: `cargo install mandown`");
- Err(e).context("Couldn't find 'mandown' executable")
- },
- }
-}
diff --git a/xtask/src/ci.rs b/xtask/src/ci.rs
index c7348ed0..e2655c2e 100644
--- a/xtask/src/ci.rs
+++ b/xtask/src/ci.rs
@@ -55,6 +55,7 @@ fn e2e_build(sh: &Shell) -> anyhow::Result<()> {
no_plugins: false,
plugins_only: true,
no_web: false,
+ args: vec![],
},
)
.context(err_context)?;
@@ -62,7 +63,7 @@ fn e2e_build(sh: &Shell) -> anyhow::Result<()> {
// Copy plugins to e2e data-dir
let plugin_dir = crate::asset_dir().join("plugins");
let project_root = crate::project_root();
- let data_dir = project_root.join("target").join("e2e-data");
+ let data_dir = crate::target_dir().join("e2e-data");
let plugins: Vec<_> = std::fs::read_dir(plugin_dir)
.context(err_context)?
.filter_map(|dir_entry| {
@@ -153,6 +154,7 @@ fn build_release(sh: &Shell, no_web: bool) -> anyhow::Result<()> {
no_plugins: false,
plugins_only: true,
no_web,
+ args: vec![],
},
)
.context(err_context)?;
@@ -228,10 +230,6 @@ fn cross_compile(sh: &Shell, target: &OsString, no_web: bool) -> anyhow::Result<
crate::cargo()
.and_then(|cargo| {
- cmd!(sh, "{cargo} install mandown").run()?;
- Ok(cargo)
- })
- .and_then(|cargo| {
cmd!(sh, "{cargo} install cross")
.run()
.map_err(anyhow::Error::new)
@@ -245,9 +243,9 @@ fn cross_compile(sh: &Shell, target: &OsString, no_web: bool) -> anyhow::Result<
no_plugins: false,
plugins_only: true,
no_web,
+ args: vec![],
},
)
- .and_then(|_| build::manpage(sh))
.with_context(err_context)?;
cross()
diff --git a/xtask/src/clippy.rs b/xtask/src/clippy.rs
deleted file mode 100644
index 77f965b9..00000000
--- a/xtask/src/clippy.rs
+++ /dev/null
@@ -1,44 +0,0 @@
-//! Handle running `cargo clippy` on the sources.
-use crate::{build, flags, WorkspaceMember};
-use anyhow::Context;
-use std::path::{Path, PathBuf};
-use xshell::{cmd, Shell};
-
-pub fn clippy(sh: &Shell, _flags: flags::Clippy) -> anyhow::Result<()> {
- let _pd = sh.push_dir(crate::project_root());
-
- build::build(
- sh,
- flags::Build {
- release: false,
- no_plugins: false,
- plugins_only: true,
- no_web: false,
- },
- )
- .context("failed to run task 'clippy'")?;
-
- let cargo = check_clippy()
- .and_then(|_| crate::cargo())
- .context("failed to run task 'clippy'")?;
-
- for WorkspaceMember { crate_name, .. } in crate::workspace_members().iter() {
- let _pd = sh.push_dir(Path::new(crate_name));
- // Tell the user where we are now
- println!();
- let msg = format!(">> Running clippy on '{crate_name}'");
- crate::status(&msg);
- println!("{}", msg);
-
- cmd!(sh, "{cargo} clippy --all-targets --all-features")
- .run()
- .with_context(|| format!("failed to run task 'clippy' on '{crate_name}'"))?;
- }
- Ok(())
-}
-
-fn check_clippy() -> anyhow::Result<PathBuf> {
- which::which("cargo-clippy").context(
- "Couldn't find 'clippy' executable. Please install it with `rustup component add clippy`",
- )
-}
diff --git a/xtask/src/dist.rs b/xtask/src/dist.rs
deleted file mode 100644
index 8b137891..00000000
--- a/xtask/src/dist.rs
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/xtask/src/flags.rs b/xtask/src/flags.rs
index bd963770..788e1234 100644
--- a/xtask/src/flags.rs
+++ b/xtask/src/flags.rs
@@ -39,9 +39,6 @@ xflags::xflags! {
}
}
- /// Build the manpage
- cmd manpage {}
-
cmd proto {}
/// Publish zellij and all the sub-crates
@@ -56,13 +53,7 @@ xflags::xflags! {
optional --cargo-registry registry: OsString
}
- /// Package zellij for distribution (result found in ./target/dist)
- cmd dist {}
-
- /// Run `cargo clippy` on all crates
- cmd clippy {}
-
- /// Sequentially call: format, build, test, clippy
+ /// Sequentially call: format, build, test
cmd make {
/// Build in release mode without debug symbols
optional -r, --release
@@ -77,6 +68,10 @@ xflags::xflags! {
required destination: PathBuf
/// Compile without web server support
optional --no-web
+ /// Extra arguments appended to the native `cargo build` invocation
+ /// (e.g. `--no-default-features`, `--features ...`, `--offline`, `--locked`, `-j N`).
+ /// Not applied to the wasm plugin build.
+ repeated args: OsString
}
/// Run debug version of zellij
@@ -128,6 +123,10 @@ xflags::xflags! {
optional --no-plugins
/// Compile without web support
optional --no-web
+ /// Extra arguments appended to the native `cargo build` invocation
+ /// (e.g. `--no-default-features`, `--features ...`, `--offline`, `--locked`, `-j N`).
+ /// Not applied to the wasm plugin build.
+ repeated args: OsString
}
}
}
@@ -143,11 +142,8 @@ pub struct Xtask {
pub enum XtaskCmd {
Deprecated(Deprecated),
Ci(Ci),
- Manpage(Manpage),
Proto(Proto),
Publish(Publish),
- Dist(Dist),
- Clippy(Clippy),
Make(Make),
Install(Install),
Run(Run),
@@ -195,9 +191,6 @@ pub struct BuildRelease {
}
#[derive(Debug)]
-pub struct Manpage;
-
-#[derive(Debug)]
pub struct Proto;
#[derive(Debug)]
@@ -209,12 +202,6 @@ pub struct Publish {
}
#[derive(Debug)]
-pub struct Dist;
-
-#[derive(Debug)]
-pub struct Clippy;
-
-#[derive(Debug)]
pub struct Make {
pub release: bool,
pub clean: bool,
@@ -224,6 +211,7 @@ pub struct Make {
#[derive(Debug)]
pub struct Install {
pub destination: PathBuf,
+ pub args: Vec<OsString>,
pub no_web: bool,
}
@@ -260,6 +248,8 @@ pub struct IntegrationTest {
#[derive(Debug)]
pub struct Build {
+ pub args: Vec<OsString>,
+
pub release: bool,
pub plugins_only: bool,
pub no_plugins: bool,
diff --git a/xtask/src/main.rs b/xtask/src/main.rs
index 3f442872..ed513133 100644
--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -8,8 +8,6 @@
mod build;
mod ci;
-mod clippy;
-mod dist;
mod flags;
mod format;
mod integration_test;
@@ -127,13 +125,10 @@ fn main() -> anyhow::Result<()> {
match flags.subcommand {
flags::XtaskCmd::Deprecated(_flags) => deprecation_notice(),
- flags::XtaskCmd::Dist(flags) => pipelines::dist(shell, flags),
flags::XtaskCmd::Build(flags) => build::build(shell, flags),
- flags::XtaskCmd::Clippy(flags) => clippy::clippy(shell, flags),
flags::XtaskCmd::Format(flags) => format::format(shell, flags),
flags::XtaskCmd::Test(flags) => test::test(shell, flags),
flags::XtaskCmd::IntegrationTest(flags) => integration_test::integration_test(shell, flags),
- flags::XtaskCmd::Manpage(_flags) => build::manpage(shell),
flags::XtaskCmd::Proto(_flags) => build::proto(shell),
// Pipelines
// These are composite commands, made up of multiple "stages" defined above.
@@ -164,6 +159,13 @@ fn asset_dir() -> PathBuf {
crate::project_root().join("zellij-utils").join("assets")
}
+pub fn target_dir() -> PathBuf {
+ match env::var_os("CARGO_TARGET_DIR") {
+ Some(dir) => PathBuf::from(dir),
+ None => crate::project_root().join("target"),
+ }
+}
+
pub fn cargo() -> anyhow::Result<PathBuf> {
std::env::var_os("CARGO")
.map_or_else(|| which::which("cargo"), |exe| Ok(PathBuf::from(exe)))
@@ -193,11 +195,8 @@ anything!
| make test | xtask test |
| make run | xtask run |
| make run -l strider | xtask run -- -l strider |
-| make clippy | xtask clippy |
-| make clippy -W clippy::pedantic | N/A |
| make install /path/to/binary | xtask install /path/to/binary |
| make publish | xtask publish |
-| make manpage | xtask manpage |
In order to disable xtask during the transitioning period: Delete/comment the
diff --git a/xtask/src/pipelines.rs b/xtask/src/pipelines.rs
index 3c81a3f4..39869926 100644
--- a/xtask/src/pipelines.rs
+++ b/xtask/src/pipelines.rs
@@ -1,7 +1,7 @@
//! Composite pipelines for the build system.
//!
//! Defines multiple "pipelines" that run specific individual steps in sequence.
-use crate::{build, clippy, format, metadata, test};
+use crate::{build, format, metadata, test};
use crate::{flags, WorkspaceMember};
use anyhow::Context;
use xshell::{cmd, Shell};
@@ -13,7 +13,6 @@ use xshell::{cmd, Shell};
/// - format
/// - build
/// - test
-/// - clippy
pub fn make(sh: &Shell, flags: flags::Make) -> anyhow::Result<()> {
let err_context = || format!("failed to run pipeline 'make' with args {flags:?}");
@@ -32,6 +31,7 @@ pub fn make(sh: &Shell, flags: flags::Make) -> anyhow::Result<()> {
no_plugins: false,
plugins_only: false,
no_web: flags.no_web,
+ args: vec![],
},
)
})
@@ -44,7 +44,6 @@ pub fn make(sh: &Shell, flags: flags::Make) -> anyhow::Result<()> {
},
)
})
- .and_then(|_| clippy::clippy(sh, flags::Clippy {}))
.with_context(err_context)
}
@@ -54,7 +53,6 @@ pub fn make(sh: &Shell, flags: flags::Make) -> anyhow::Result<()> {
///
/// - [`build`](build::build) (release, plugins only)
/// - [`build`](build::build) (release, without plugins)
-/// - [`manpage`](build::manpage)
/// - Copy the executable to [target file](flags::Install::destination)
pub fn install(sh: &Shell, flags: flags::Install) -> anyhow::Result<()> {
let err_context = || format!("failed to run pipeline 'install' with args {flags:?}");
@@ -67,6 +65,7 @@ pub fn install(sh: &Shell, flags: flags::Install) -> anyhow::Result<()> {
no_plugins: false,
plugins_only: true,
no_web: flags.no_web,
+ args: vec![],
},
)
.and_then(|_| {
@@ -78,13 +77,10 @@ pub fn install(sh: &Shell, flags: flags::Install) -> anyhow::Result<()> {
no_plugins: true,
plugins_only: false,
no_web: flags.no_web,
+ args: flags.args.clone(),
},
)
})
- .and_then(|_| {
- // Generate man page
- build::manpage(sh)
- })
.with_context(err_context)?;
// Copy binary to destination
@@ -96,8 +92,11 @@ pub fn install(sh: &Shell, flags: flags::Install) -> anyhow::Result<()> {
.join(&flags.destination)
};
sh.change_dir(crate::project_root());
- sh.copy_file("target/release/zellij", &destination)
- .with_context(err_context)
+ sh.copy_file(
+ crate::target_dir().join("release").join("zellij"),
+ &destination,
+ )
+ .with_context(err_context)
}
/// Run zellij debug build.
@@ -148,6 +147,7 @@ pub fn run(sh: &Shell, mut flags: flags::Run) -> anyhow::Result<()> {
no_plugins: false,
plugins_only: true,
no_web: flags.no_web,
+ args: vec![],
},
)
.and_then(|_| crate::cargo())
@@ -193,37 +193,6 @@ pub fn run(sh: &Shell, mut flags: flags::Run) -> anyhow::Result<()> {
}
}
-/// Bundle all distributable content to `target/dist`.
-///
-/// This includes the optimized zellij executable from the [`install`] pipeline, the man page, the
-/// `.desktop` file and the application logo.
-pub fn dist(sh: &Shell, _flags: flags::Dist) -> anyhow::Result<()> {
- let err_context = || "failed to run pipeline 'dist'";
-
- sh.change_dir(crate::project_root());
- if sh.path_exists("target/dist") {
- sh.remove_path("target/dist").with_context(err_context)?;
- }
- sh.create_dir("target/dist")
- .map_err(anyhow::Error::new)
- .and_then(|_| {
- install(
- sh,
- flags::Install {
- destination: crate::project_root().join("./target/dist/zellij"),
- no_web: false,
- },
- )
- })
- .with_context(err_context)?;
-
- sh.create_dir("target/dist/man")
- .and_then(|_| sh.copy_file("assets/man/zellij.1", "target/dist/man/zellij.1"))
- .and_then(|_| sh.copy_file("assets/zellij.desktop", "target/dist/zellij.desktop"))
- .and_then(|_| sh.copy_file("assets/logo.png", "target/dist/logo.png"))
- .with_context(err_context)
-}
-
/// Actions for the user to choose from to resolve publishing errors/conflicts.
enum UserAction {
Retry,
@@ -323,6 +292,7 @@ pub fn publish(sh: &Shell, flags: flags::Publish) -> anyhow::Result<()> {
no_plugins: false,
plugins_only: true,
no_web: false,
+ args: vec![],
},
)
.context(err_context)?;
diff --git a/xtask/src/test.rs b/xtask/src/test.rs
index 49e079d8..64cba7e1 100644
--- a/xtask/src/test.rs
+++ b/xtask/src/test.rs
@@ -17,6 +17,7 @@ pub fn test(sh: &Shell, flags: flags::Test) -> anyhow::Result<()> {
no_plugins: false,
plugins_only: true,
no_web: flags.no_web,
+ args: vec![],
},
)
.context(err_context)?;