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
 | 
					            /// The crate to release
 | 
				
			||||||
            required name: String
 | 
					            required name: String
 | 
				
			||||||
        {}
 | 
					        {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// Run CI tests.
 | 
				
			||||||
 | 
					        cmd ci
 | 
				
			||||||
 | 
					            optional version: String
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// generated start
 | 
					// generated start
 | 
				
			||||||
@ -27,6 +32,7 @@ pub struct Xtask {
 | 
				
			|||||||
pub enum XtaskCmd {
 | 
					pub enum XtaskCmd {
 | 
				
			||||||
    Help(Help),
 | 
					    Help(Help),
 | 
				
			||||||
    Release(Release),
 | 
					    Release(Release),
 | 
				
			||||||
 | 
					    Ci(Ci),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug)]
 | 
					#[derive(Debug)]
 | 
				
			||||||
@ -39,11 +45,20 @@ pub struct Release {
 | 
				
			|||||||
    pub name: String,
 | 
					    pub name: String,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug)]
 | 
				
			||||||
 | 
					pub struct Ci {
 | 
				
			||||||
 | 
					    pub version: Option<String>,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Xtask {
 | 
					impl Xtask {
 | 
				
			||||||
    pub const HELP: &'static str = Self::HELP_;
 | 
					    pub const HELP: &'static str = Self::HELP_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn from_env() -> xflags::Result<Self> {
 | 
					    pub fn from_env() -> xflags::Result<Self> {
 | 
				
			||||||
        Self::from_env_()
 | 
					        Self::from_env_()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn from_vec(args: Vec<std::ffi::OsString>) -> xflags::Result<Self> {
 | 
				
			||||||
 | 
					        Self::from_vec_(args)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// generated end
 | 
					// generated end
 | 
				
			||||||
 | 
				
			|||||||
@ -13,10 +13,11 @@ use serde_json::from_str as from_json_str;
 | 
				
			|||||||
use toml::from_str as from_toml_str;
 | 
					use toml::from_str as from_toml_str;
 | 
				
			||||||
use xshell::read_file;
 | 
					use xshell::read_file;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mod ci;
 | 
				
			||||||
mod flags;
 | 
					mod flags;
 | 
				
			||||||
mod release;
 | 
					mod release;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use self::release::ReleaseTask;
 | 
					use self::{ci::CiTask, release::ReleaseTask};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
 | 
					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)?;
 | 
					            let task = ReleaseTask::new(cmd.name, project_root)?;
 | 
				
			||||||
            task.run()
 | 
					            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