xtask: Add ci command
This commit is contained in:
parent
2803ee3721
commit
563e891a4a
85
xtask/src/ci.rs
Normal file
85
xtask/src/ci.rs
Normal file
@ -0,0 +1,85 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use crate::{cmd, Result};
|
||||
|
||||
const MSRV: &str = "1.45";
|
||||
|
||||
macro_rules! cmd_in {
|
||||
($dir:expr, $($c:tt),+ $(,)?) => {{
|
||||
let _p = xshell::pushd($dir)?;
|
||||
$(super::cmd!($c).run()?;)+
|
||||
}};
|
||||
}
|
||||
|
||||
/// Task to run CI tests.
|
||||
pub struct CiTask {
|
||||
/// Which version of Rust to test against.
|
||||
version: Option<String>,
|
||||
|
||||
/// The root of the workspace.
|
||||
project_root: PathBuf,
|
||||
}
|
||||
|
||||
impl CiTask {
|
||||
pub(crate) fn new(version: Option<String>, project_root: PathBuf) -> Self {
|
||||
Self { version, project_root }
|
||||
}
|
||||
|
||||
pub(crate) fn run(self) -> Result<()> {
|
||||
match self.version.as_deref() {
|
||||
Some("msrv") => self.build_msrv(),
|
||||
Some("stable") => self.build_stable(),
|
||||
Some("nightly") => self.build_nightly(),
|
||||
Some(_) => Err("Wrong Rust version specified.".into()),
|
||||
None => {
|
||||
self.build_msrv()?;
|
||||
self.build_stable()?;
|
||||
self.build_nightly()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn build_msrv(&self) -> Result<()> {
|
||||
cmd_in!(
|
||||
self.project_root.join("ruma"),
|
||||
"rustup run {MSRV} cargo build --features ruma-events,ruma-api,ruma-appservice-api,ruma-client-api,ruma-federation-api,ruma-identity-service-api,ruma-push-gateway-api --quiet",
|
||||
);
|
||||
cmd_in!(self.project_root.join("ruma-client"), "rustup run {MSRV} cargo build --quiet");
|
||||
cmd_in!(
|
||||
self.project_root.join("ruma-identifiers"),
|
||||
"rustup run {MSRV} cargo build --no-default-features --quiet"
|
||||
);
|
||||
cmd_in!(
|
||||
self.project_root.join("ruma-identifiers"),
|
||||
"rustup run {MSRV} cargo build --all-features --quiet"
|
||||
);
|
||||
cmd_in!(
|
||||
self.project_root.join("ruma-client-api"),
|
||||
"rustup run {MSRV} cargo build --all-features --quiet"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn build_stable(&self) -> Result<()> {
|
||||
cmd!("cargo test --all --quiet").run()?;
|
||||
{
|
||||
let _p = xshell::pushd(self.project_root.join("ruma-identifiers"))?;
|
||||
cmd!("cargo test --no-default-features --quiet").run()?;
|
||||
cmd!("cargo test --all-features --quiet").run()?;
|
||||
}
|
||||
{
|
||||
let _p = xshell::pushd(self.project_root.join("ruma-client-api"))?;
|
||||
cmd!("cargo check --no-default-features --features http1,http2 --quiet").run()?;
|
||||
cmd!("cargo check --no-default-features --features http1,http2,tls-rustls-native-roots --quiet").run()?;
|
||||
cmd!("cargo check --no-default-features --features http1,http2,tls-rustls-webpki-roots --quiet").run()?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn build_nightly(&self) -> Result<()> {
|
||||
cmd!("cargo fmt --all").run()?;
|
||||
cmd_in!("ruma", "cargo clippy --all-targets --all-features --quiet -- -D warnings");
|
||||
cmd_in!("ruma-client", "cargo clippy --all-targets --quiet -- -D warnings");
|
||||
Ok(())
|
||||
}
|
||||
}
|
@ -13,6 +13,11 @@ xflags::xflags! {
|
||||
/// The crate to release
|
||||
required name: String
|
||||
{}
|
||||
|
||||
/// Run CI tests.
|
||||
cmd ci
|
||||
optional version: String
|
||||
{}
|
||||
}
|
||||
}
|
||||
// generated start
|
||||
@ -27,6 +32,7 @@ pub struct Xtask {
|
||||
pub enum XtaskCmd {
|
||||
Help(Help),
|
||||
Release(Release),
|
||||
Ci(Ci),
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@ -39,11 +45,20 @@ pub struct Release {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Ci {
|
||||
pub version: Option<String>,
|
||||
}
|
||||
|
||||
impl Xtask {
|
||||
pub const HELP: &'static str = Self::HELP_;
|
||||
|
||||
pub fn from_env() -> xflags::Result<Self> {
|
||||
Self::from_env_()
|
||||
}
|
||||
|
||||
pub fn from_vec(args: Vec<std::ffi::OsString>) -> xflags::Result<Self> {
|
||||
Self::from_vec_(args)
|
||||
}
|
||||
}
|
||||
// generated end
|
||||
|
@ -13,10 +13,11 @@ use serde_json::from_str as from_json_str;
|
||||
use toml::from_str as from_toml_str;
|
||||
use xshell::read_file;
|
||||
|
||||
mod ci;
|
||||
mod flags;
|
||||
mod release;
|
||||
|
||||
use self::release::ReleaseTask;
|
||||
use self::{ci::CiTask, release::ReleaseTask};
|
||||
|
||||
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
|
||||
|
||||
@ -40,6 +41,10 @@ fn try_main() -> Result<()> {
|
||||
let task = ReleaseTask::new(cmd.name, project_root)?;
|
||||
task.run()
|
||||
}
|
||||
flags::XtaskCmd::Ci(ci) => {
|
||||
let task = CiTask::new(ci.version, project_root);
|
||||
task.run()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user