feat: xtask: add test

This commit is contained in:
Paul Pan 2024-04-12 23:57:45 +08:00
parent 3b02a14aeb
commit 319c9db662
6 changed files with 51 additions and 15 deletions

View File

@ -1,2 +1,5 @@
[alias]
xtask = "run --package xtask --"
[target.'cfg(all(target_arch = "riscv64", target_os = "none"))']
runner = "qemu-system-riscv64 -nographic -machine virt -serial mon:stdio -smp 1 -kernel "

View File

@ -8,6 +8,13 @@ env:
jobs:
build:
strategy:
matrix:
include:
- arch: riscv64
qemu: qemu-system-misc
target: riscv64imac-unknown-none-elf
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@ -15,17 +22,20 @@ jobs:
- name: Install Qemu
uses: ConorMacBride/install-package@v1
with:
apt: qemu-system-misc
apt: ${{ matrix.qemu }}
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly
targets: riscv64imac-unknown-none-elf, riscv32imac-unknown-none-elf
targets: ${{ matrix.target }}
components: clippy, rust-src
- name: Run Clippy
run: cargo xtask clippy
- name: Build (RISCV64)
run: cargo xtask build --arch riscv64
- name: Build
run: cargo xtask build --arch ${{ matrix.arch }}
- name: Test
run: cargo xtask test --arch ${{ matrix.arch }}

View File

@ -22,8 +22,11 @@ impl Arch {
const FLAGS_RELOCATION: [&'static str; 3] =
["-Crelocation-model=static", "-Ccode-model=medium", "-Ctarget-feature=+relax"];
pub fn cargo_args(&self) -> Vec<String> {
let mut args = Self::ARGS_BUILD_STD.iter().map(|s| s.to_string()).collect::<Vec<_>>();
pub fn cargo_args(&self, test: bool) -> Vec<String> {
let mut args: Vec<String> = Vec::new();
if !test {
args.extend(Self::ARGS_BUILD_STD.iter().map(|s| s.to_string()).collect::<Vec<_>>());
}
args.push(format!("--target={}", self.triple()));
args
}
@ -84,7 +87,7 @@ pub struct Artifact {
}
impl Artifact {
pub fn cargo_args(&self) -> Result<Vec<String>> {
pub fn cargo_args(&self, test: bool) -> Result<Vec<String>> {
let mut args: Vec<String> = Vec::new();
let mut features: Vec<String> = Vec::new();
@ -94,7 +97,7 @@ impl Artifact {
}
// arch
args.extend(self.arch.cargo_args().iter().map(|s| s.to_string()));
args.extend(self.arch.cargo_args(test).iter().map(|s| s.to_string()));
// board
if let Some(board) = self.board {

View File

@ -16,15 +16,9 @@ impl Build {
cmd!(sh, "cargo build")
.env("CARGO_ENCODED_RUSTFLAGS", self.artifact.rust_flags()?.join("\x1f"))
.args(["--bin", "kernel"])
.args(self.artifact.cargo_args()?)
.args(self.artifact.cargo_args(false)?)
.run()?;
let a = cmd!(sh, "cargo build")
.env("CARGO_ENCODED_RUSTFLAGS", self.artifact.rust_flags()?.join("\x1f"))
.args(["--bin", "kernel"])
.args(self.artifact.cargo_args()?);
eprintln!("{:?}", a);
Ok(())
}
}

View File

@ -1,6 +1,7 @@
mod artifact;
mod build;
mod clippy;
mod test;
use anyhow::Result;
use clap::Parser;
@ -11,6 +12,7 @@ use xshell::Shell;
enum Cli {
Build(build::Build),
Clippy(clippy::Clippy),
Test(test::Test),
}
impl Cli {
@ -18,6 +20,7 @@ impl Cli {
match self {
Cli::Build(build) => build.run(),
Cli::Clippy(clippy) => clippy.run(),
Cli::Test(ci) => ci.run(),
}
}
}

23
xtask/src/test.rs Normal file
View File

@ -0,0 +1,23 @@
use crate::artifact::Artifact;
use clap::Args;
use xshell::cmd;
#[derive(Args)]
pub struct Test {
#[command(flatten)]
pub artifact: Artifact,
}
impl Test {
pub fn run(&self) -> anyhow::Result<()> {
let sh = crate::shell()?;
cmd!(sh, "cargo test")
.env("CARGO_ENCODED_RUSTFLAGS", self.artifact.rust_flags()?.join("\x1f"))
.args(["--bin", "kernel"])
.args(self.artifact.cargo_args(true)?)
.run()?;
Ok(())
}
}