atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: xtask/src/main.rs

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
#![allow(unexpected_cfgs)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
mod ci;
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
mod fixup;
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
mod kotlin;
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
mod log;
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
mod release;
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
mod swift;
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
mod workspace;
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
use std::rc::Rc;
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
use ci::CiArgs;
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
use clap::{Parser, Subcommand};
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
use fixup::FixupArgs;
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
use kotlin::KotlinArgs;
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
use log::LogArgs;
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
use release::ReleaseArgs;
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
use swift::SwiftArgs;
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
use xshell::{Shell, cmd};
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
const NIGHTLY: &str = "nightly-2026-02-26";
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
type Result<T, E = Box<dyn std::error::Error>> = std::result::Result<T, E>;
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
#[derive(Parser)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
struct Xtask {
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
    #[clap(subcommand)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
    cmd: Command,
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
#[derive(Subcommand)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
enum Command {
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
    /// Run continuous integration checks
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
    Ci(CiArgs),
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
    /// Fix up automatic checks
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
    Fixup(FixupArgs),
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
    /// Build the SDKs documentation
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
    Doc {
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
        /// Opens the docs in a browser after the operation
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
        #[clap(long)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
        open: bool,
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
    },
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
    /// Prepare and publish a release of the matrix-sdk crates
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
    Release(ReleaseArgs),
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
    Swift(SwiftArgs),
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
    Kotlin(KotlinArgs),
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
    Log(LogArgs),
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
7ff8adafe9e4atagen2026-10-22 12:30 UTC51
fn main() -> Result<()> {
7ff8adafe9e4atagen2026-10-22 12:30 UTC52
    match Xtask::parse().cmd {
7ff8adafe9e4atagen2026-10-22 12:30 UTC53
        Command::Ci(ci) => ci.run(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC54
        Command::Fixup(cfg) => cfg.run(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC55
        Command::Doc { open } => build_docs(open.then_some("--open"), DenyWarnings::No),
7ff8adafe9e4atagen2026-10-22 12:30 UTC56
        Command::Swift(cfg) => cfg.run(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC57
        Command::Kotlin(cfg) => cfg.run(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC58
        Command::Release(cfg) => cfg.run(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC59
        Command::Log(cfg) => cfg.run(),
7ff8adafe9e4atagen2026-10-22 12:30 UTC60
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC61
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC62
7ff8adafe9e4atagen2026-10-22 12:30 UTC63
enum DenyWarnings {
7ff8adafe9e4atagen2026-10-22 12:30 UTC64
    Yes,
7ff8adafe9e4atagen2026-10-22 12:30 UTC65
    No,
7ff8adafe9e4atagen2026-10-22 12:30 UTC66
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC67
7ff8adafe9e4atagen2026-10-22 12:30 UTC68
fn build_docs(
7ff8adafe9e4atagen2026-10-22 12:30 UTC69
    extra_args: impl IntoIterator<Item = &'static str>,
7ff8adafe9e4atagen2026-10-22 12:30 UTC70
    deny_warnings: DenyWarnings,
7ff8adafe9e4atagen2026-10-22 12:30 UTC71
) -> Result<()> {
7ff8adafe9e4atagen2026-10-22 12:30 UTC72
    let mut rustdocflags = "--enable-index-page -Zunstable-options --cfg docsrs".to_owned();
7ff8adafe9e4atagen2026-10-22 12:30 UTC73
    if let DenyWarnings::Yes = deny_warnings {
7ff8adafe9e4atagen2026-10-22 12:30 UTC74
        rustdocflags += " -Dwarnings";
7ff8adafe9e4atagen2026-10-22 12:30 UTC75
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC76
7ff8adafe9e4atagen2026-10-22 12:30 UTC77
    let sh = sh();
7ff8adafe9e4atagen2026-10-22 12:30 UTC78
    // Keep in sync with .github/workflows/docs.yml
7ff8adafe9e4atagen2026-10-22 12:30 UTC79
    cmd!(sh, "rustup run {NIGHTLY} cargo doc --no-deps --workspace --features docsrs")
7ff8adafe9e4atagen2026-10-22 12:30 UTC80
        .env("RUSTDOCFLAGS", rustdocflags)
7ff8adafe9e4atagen2026-10-22 12:30 UTC81
        .args(extra_args)
7ff8adafe9e4atagen2026-10-22 12:30 UTC82
        .run()?;
7ff8adafe9e4atagen2026-10-22 12:30 UTC83
7ff8adafe9e4atagen2026-10-22 12:30 UTC84
    Ok(())
7ff8adafe9e4atagen2026-10-22 12:30 UTC85
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC86
7ff8adafe9e4atagen2026-10-22 12:30 UTC87
thread_local! {
7ff8adafe9e4atagen2026-10-22 12:30 UTC88
    /// The shared shell API.
7ff8adafe9e4atagen2026-10-22 12:30 UTC89
    static SH: Rc<Shell> = Rc::new(Shell::new().unwrap())
7ff8adafe9e4atagen2026-10-22 12:30 UTC90
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC91
7ff8adafe9e4atagen2026-10-22 12:30 UTC92
/// Get a reference to the shared shell API.
7ff8adafe9e4atagen2026-10-22 12:30 UTC93
fn sh() -> Rc<Shell> {
7ff8adafe9e4atagen2026-10-22 12:30 UTC94
    SH.with(|sh| sh.clone())
7ff8adafe9e4atagen2026-10-22 12:30 UTC95
}