Skip to content

Commit

Permalink
Add xtask crate
Browse files Browse the repository at this point in the history
Replaces only the cargo_deny.sh script for now. Can be expanded over to
replace the other shell and python scripts, so only Rust is needed to
work with the repository.

Closes emilk#2887
  • Loading branch information
YgorSouza committed Apr 17, 2024
1 parent 78d95f4 commit 5361981
Show file tree
Hide file tree
Showing 8 changed files with 124 additions and 19 deletions.
3 changes: 3 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@
# we don't use `[build]` because of rust analyzer's build cache invalidation https://github.com/emilk/eframe_template/issues/93
[target.wasm32-unknown-unknown]
rustflags = ["--cfg=web_sys_unstable_apis"]

[alias]
xtask = "run --quiet --package xtask --"
4 changes: 4 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ members = [
"crates/epaint",

"examples/*",

"xtask",
]

[workspace.package]
Expand Down
20 changes: 1 addition & 19 deletions scripts/cargo_deny.sh
Original file line number Diff line number Diff line change
@@ -1,21 +1,3 @@
#!/usr/bin/env bash

set -eu
script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd "$script_path/.."
set -x

cargo install --quiet cargo-deny

cargo deny --all-features --log-level error --target aarch64-apple-darwin check
cargo deny --all-features --log-level error --target aarch64-linux-android check
cargo deny --all-features --log-level error --target i686-pc-windows-gnu check
cargo deny --all-features --log-level error --target i686-pc-windows-msvc check
cargo deny --all-features --log-level error --target i686-unknown-linux-gnu check
cargo deny --all-features --log-level error --target wasm32-unknown-unknown check
cargo deny --all-features --log-level error --target x86_64-apple-darwin check
cargo deny --all-features --log-level error --target x86_64-pc-windows-gnu check
cargo deny --all-features --log-level error --target x86_64-pc-windows-msvc check
cargo deny --all-features --log-level error --target x86_64-unknown-linux-gnu check
cargo deny --all-features --log-level error --target x86_64-unknown-linux-musl check
cargo deny --all-features --log-level error --target x86_64-unknown-redox check
cargo xtask deny
8 changes: 8 additions & 0 deletions xtask/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
name = "xtask"
edition.workspace = true
license.workspace = true
rust-version.workspace = true
version.workspace = true

[dependencies]
12 changes: 12 additions & 0 deletions xtask/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## xtask - Task automation

This crate is meant to automate common tasks on the repository. It serves as a
replacement for shell scripts that is more portable across host operating
systems (namely Windows) and hopefully also easier to work with for
contributors who are already familiar with Rust (and not necessarily with shell
scripting).

The executable can be invoked via the subcommand `cargo xtask`, thanks to an
alias defined in `.cargo/config.toml`.

For more information, see <https://github.com/matklad/cargo-xtask>.
55 changes: 55 additions & 0 deletions xtask/src/deny.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
//! Run `cargo deny`
//!
//! Also installs the subcommand if it is not already installed.

use std::process::Command;

use super::DynError;

pub fn deny(args: &[&str]) -> Result<(), DynError> {
if !args.is_empty() {
eprintln!("Warning: arguments ignored: {args:?}");
}
install_cargo_deny()?;
let targets = [
"aarch64-apple-darwin",
"aarch64-linux-android",
"i686-pc-windows-gnu",
"i686-pc-windows-msvc",
"i686-unknown-linux-gnu",
"wasm32-unknown-unknown",
"x86_64-apple-darwin",
"x86_64-pc-windows-gnu",
"x86_64-pc-windows-msvc",
"x86_64-unknown-linux-gnu",
"x86_64-unknown-linux-musl",
"x86_64-unknown-redox",
];
for target in targets {
let status = Command::new("cargo")
.args([
"deny",
"--all-features",
"--log-level",
"error",
"--target",
target,
"check",
])
.status()?;
if !status.success() {
return Err(status.to_string().into());
}
}
Ok(())
}

fn install_cargo_deny() -> Result<(), DynError> {
let status = Command::new("cargo")
.args(["+stable", "install", "--quiet", "--locked", "cargo-deny"])
.status()?;
if !status.success() {
return Err(status.to_string().into());
}
Ok(())
}
39 changes: 39 additions & 0 deletions xtask/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#![allow(clippy::print_stdout)]
#![allow(clippy::print_stderr)]
#![allow(clippy::exit)]

mod deny;

type DynError = Box<dyn std::error::Error>;

fn main() {
if let Err(e) = try_main() {
eprintln!("{e}");
std::process::exit(-1);
}
}

fn try_main() -> Result<(), DynError> {
let arg_strings: Vec<_> = std::env::args().skip(1).collect();
let args: Vec<_> = arg_strings.iter().map(String::as_str).collect();

match args.as_slice() {
&[] | &["-h"] | &["--help"] => print_help(),
&["deny", ..] => deny::deny(&args[1..])?,
c => Err(format!("Invalid arguments {c:?}"))?,
}
Ok(())
}

fn print_help() {
let help = "
xtask help
Subcommands
deny: Run cargo-deny for all targets
Options
-h, --help: print help and exit
";
println!("{help}");
}

0 comments on commit 5361981

Please sign in to comment.