mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: xtask: add test
This commit is contained in:
parent
3b02a14aeb
commit
319c9db662
@ -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 "
|
||||
|
18
.github/workflows/rust.yml
vendored
18
.github/workflows/rust.yml
vendored
@ -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 }}
|
||||
|
@ -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 {
|
||||
|
@ -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(())
|
||||
}
|
||||
}
|
||||
|
@ -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
23
xtask/src/test.rs
Normal 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(())
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user