diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9c90702..109c4a6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,7 +58,7 @@ jobs: fail-fast: false matrix: include: - - os: macos-13 + - os: macos-15-intel target: x86_64-apple-darwin - os: macos-latest target: aarch64-apple-darwin diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3ea1faa..d79daab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,7 +9,7 @@ jobs: fail-fast: false matrix: include: - - os: macos-latest + - os: macos-15-intel target: x86_64-apple-darwin - os: macos-latest target: aarch64-apple-darwin @@ -17,24 +17,24 @@ jobs: target: x86_64-unknown-linux-gnu - os: ubuntu-latest target: i686-unknown-linux-gnu + - os: ubuntu-latest + target: x86_64-unknown-linux-musl - os: windows-latest target: x86_64-pc-windows-msvc - os: windows-latest target: i686-pc-windows-msvc - # - i686-pc-windows-gnu - # - x86_64-pc-windows-gnu runs-on: ${{ matrix.os }} steps: - - name: Checkout - uses: actions/checkout@v4 - name: Install rust uses: dtolnay/rust-toolchain@1.88.0 with: target: ${{ matrix.target }} - name: Install linker - if: matrix.target == 'i686-unknown-linux-gnu' + if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update - sudo apt-get install gcc-multilib + sudo apt-get install musl-tools gcc-multilib + - name: Checkout + uses: actions/checkout@v4 - name: Test run: cargo test --target ${{ matrix.target }} diff --git a/README.md b/README.md index d5dcbf0..ea4e3d1 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ Please see [CHANGELOG.md](CHANGELOG.md). ## Contributing -Contributions and feedback are welcome! Feel free to open an issue or submit a pull request. See [CONTRIBUTING.md](CONTRIBUTING.md) for more details. Here is a list of [Contributors](http://github.com/automa/cli/contributors). +Contributions and feedback are welcome! Feel free to open an issue or submit a pull request. See [CONTRIBUTING.md](CONTRIBUTING.md) for more details. Here is a list of [Contributors](https://github.com/automa/cli/contributors). ## License @@ -81,4 +81,4 @@ MIT ## Bug Reports -Report [here](http://github.com/automa/cli/issues). +Report [here](https://github.com/automa/cli/issues). diff --git a/src/dev.rs b/src/commands/dev.rs similarity index 84% rename from src/dev.rs rename to src/commands/dev.rs index 581e364..94af417 100644 --- a/src/dev.rs +++ b/src/commands/dev.rs @@ -9,7 +9,7 @@ pub struct Dev {} impl Dev { #[instrument(name = "dev", skip_all)] - pub fn run(self) -> Result { + pub(crate) fn run(&self) -> Result { Ok(()) } } diff --git a/src/commands/mod.rs b/src/commands/mod.rs new file mode 100644 index 0000000..68a3664 --- /dev/null +++ b/src/commands/mod.rs @@ -0,0 +1,18 @@ +use clap::Parser; + +use crate::error::Result; + +pub mod dev; + +#[derive(Debug, Parser)] +pub enum Subcommands { + Dev(dev::Dev), +} + +impl Subcommands { + pub(crate) fn run(&self) -> Result { + match self { + Self::Dev(x) => x.run(), + } + } +} diff --git a/src/error.rs b/src/error.rs index 90ad1d0..4baf861 100644 --- a/src/error.rs +++ b/src/error.rs @@ -22,7 +22,7 @@ pub fn finish(result: Result) { exit(code); } -pub fn exit(code: Code) { +pub fn exit(code: Code) -> ! { stdout().flush().unwrap(); stderr().flush().unwrap(); diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..8ddb7e2 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,51 @@ +use clap::Parser; +use clap_verbosity_flag::{InfoLevel, Verbosity}; +use colorchoice_clap::Color; + +use crate::{commands::Subcommands, error::Result}; + +pub mod error; +mod styles; + +pub mod commands; + +/// CLI for Automa +#[derive(Debug, Parser)] +#[clap(name = "automa", version)] +#[command(styles = styles::styles())] +pub struct App { + #[command(subcommand)] + pub cmd: Subcommands, + + #[command(flatten)] + pub color: Color, + + #[command(flatten)] + pub verbose: Verbosity, +} + +impl App { + pub fn run(self) -> Result { + self.cmd.run() + } + + pub fn new(cmd: Subcommands) -> Self { + App { + cmd, + color: Color::default(), + verbose: Verbosity::default(), + } + } +} + +#[cfg(test)] +mod test { + use super::*; + + use clap::CommandFactory; + + #[test] + fn verify_app() { + App::command().debug_assert(); + } +} diff --git a/src/main.rs b/src/main.rs index d820bff..0c58e99 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,36 +1,10 @@ use std::io::stdout; use anstream::{AutoStream, ColorChoice}; +use automa_cli::{App, error}; use clap::Parser; -use clap_verbosity_flag::{InfoLevel, Verbosity}; -use colorchoice_clap::Color; use tracing_subscriber::prelude::*; -mod error; -mod styles; - -mod dev; - -/// CLI for Automa -#[derive(Debug, Parser)] -#[clap(name = "automa", version)] -#[command(styles = styles::styles())] -struct App { - #[command(subcommand)] - cmd: Subcommands, - - #[command(flatten)] - color: Color, - - #[command(flatten)] - verbose: Verbosity, -} - -#[derive(Debug, Parser)] -enum Subcommands { - Dev(dev::Dev), -} - fn main() { let program = App::parse(); @@ -46,21 +20,7 @@ fn main() { ) .init(); - let result = match program.cmd { - Subcommands::Dev(x) => x.run(), - }; + let result = program.run(); error::finish(result); } - -#[cfg(test)] -mod test { - use super::*; - - use clap::CommandFactory; - - #[test] - fn verify_app() { - App::command().debug_assert(); - } -} diff --git a/src/styles.rs b/src/styles.rs index 2038c92..3d213d8 100644 --- a/src/styles.rs +++ b/src/styles.rs @@ -1,6 +1,6 @@ use clap::builder::{Styles, styling::AnsiColor}; -pub fn styles() -> Styles { +pub(crate) fn styles() -> Styles { Styles::styled() .header(AnsiColor::BrightYellow.on_default()) .usage(AnsiColor::BrightYellow.on_default())