CI #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # hvisor Github Actions CI | |
| # wheatfox <[email protected]> | |
| name: CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| pull_request: | |
| branches: | |
| - main | |
| - dev | |
| workflow_dispatch: | |
| env: | |
| MODE: debug | |
| jobs: | |
| linter: | |
| name: linter | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust Toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: aarch64-unknown-none | |
| components: rust-src rustfmt | |
| - name: Install Dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y qemu-system-aarch64 qemu-system-riscv64 gdb-multiarch llvm-dev libclang-dev wget | |
| cargo install --version 0.3.0 --locked cargo-binutils | |
| cargo install cargo-xbuild | |
| - name: Format Check | |
| run: make fmt-test | |
| # this job uses `cargo test` semantics to run unit test exclusively in QEMU | |
| unittest: | |
| name: unittest | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false # continue to run all jobs even if some fail | |
| matrix: | |
| include: | |
| # aarch64 | |
| - arch: aarch64 | |
| board: "qemu-gicv3" | |
| rustc_target: aarch64-unknown-none | |
| - arch: aarch64 | |
| board: "qemu-gicv2" | |
| rustc_target: aarch64-unknown-none | |
| - arch: riscv64 | |
| board: "qemu-plic" | |
| rustc_target: riscv64gc-unknown-none-elf | |
| - arch: riscv64 | |
| board: "qemu-aia" | |
| rustc_target: riscv64gc-unknown-none-elf | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust Toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.rustc_target }} | |
| components: rust-src | |
| - name: Install Dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y qemu-system-aarch64 qemu-system-riscv64 gdb-multiarch llvm-dev libclang-dev wget | |
| cargo install --version 0.3.0 --locked cargo-binutils | |
| cargo install cargo-xbuild | |
| - name: Set up environment variables | |
| run: | | |
| echo "ARCH=${{ matrix.arch }}" >> $GITHUB_ENV | |
| echo "BOARD=${{ matrix.board }}" >> $GITHUB_ENV | |
| - name: Unit Test | |
| run: make test | |
| # this job is for compilation test, it will make sure all aarch64, riscv64, loongarch64 can be compiled successfully | |
| # there is no actual running in this job | |
| build: | |
| name: build | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # aarch64 | |
| - arch: aarch64 | |
| board: "qemu-gicv3" | |
| rustc_target: aarch64-unknown-none | |
| - arch: aarch64 | |
| board: "qemu-gicv2" | |
| rustc_target: aarch64-unknown-none | |
| - arch: aarch64 | |
| board: "zcu102" | |
| rustc_target: aarch64-unknown-none | |
| - arch: aarch64 | |
| board: "imx8mp" | |
| rustc_target: aarch64-unknown-none | |
| - arch: aarch64 | |
| board: "rk3568" | |
| rustc_target: aarch64-unknown-none | |
| - arch: aarch64 | |
| board: "rk3588" | |
| rustc_target: aarch64-unknown-none | |
| - arch: aarch64 | |
| board: "ok6254-c" | |
| rustc_target: aarch64-unknown-none | |
| # riscv64 | |
| - arch: riscv64 | |
| board: "qemu-aia" | |
| rustc_target: riscv64gc-unknown-none-elf | |
| - arch: riscv64 | |
| board: "qemu-plic" | |
| rustc_target: riscv64gc-unknown-none-elf | |
| # loongarch64 | |
| - arch: loongarch64 | |
| board: "ls3a5000" | |
| rustc_target: loongarch64-unknown-none | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust Toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.rustc_target }} | |
| components: rust-src | |
| - name: Install Dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y wget | |
| cargo install --version 0.3.0 --locked cargo-binutils | |
| cargo install cargo-xbuild | |
| wget -q https://github.com/sunhaiyong1978/CLFS-for-LoongArch/releases/download/8.0/loongarch64-clfs-8.0-cross-tools-gcc-full.tar.xz | |
| tar -xf loongarch64-clfs-8.0-cross-tools-gcc-full.tar.xz | |
| echo "$GITHUB_WORKSPACE/cross-tools/bin" >> $GITHUB_PATH | |
| - name: Set up environment variables | |
| run: | | |
| echo "ARCH=${{ matrix.arch }}" >> $GITHUB_ENV | |
| echo "BOARD=${{ matrix.board }}" >> $GITHUB_ENV | |
| - name: Build | |
| run: make | |
| # this job is for booting root and nonroot inside qemu for system test | |
| systemtest: | |
| # if: false # we need to update corresponding scripts for the new board abstraction | |
| name: systemtest | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # aarch64 | |
| - arch: aarch64 | |
| rustc_target: aarch64-unknown-none | |
| board: "qemu-gicv3" | |
| # riscv64 | |
| - arch: riscv64 | |
| rustc_target: riscv64gc-unknown-none-elf | |
| board: "qemu-plic" | |
| # Because other features need to be customized scripts | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust Toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.rustc_target }} | |
| components: rust-src | |
| - name: Setup QEMU from Source | |
| uses: ./.github/actions/setup-qemu | |
| with: | |
| qemu-version: '9.0.2' | |
| install-path: '/opt/qemu' | |
| - name: Setup ARM aarch64-none-linux-gnu | |
| if: matrix.arch == 'aarch64' | |
| uses: ./.github/actions/setup-aarch64-none-linux-gnu | |
| with: | |
| version: '10.3-2021.07' | |
| install-path: '/opt/aarch64-none-linux-gnu' | |
| - name: Setup RISCV riscv64-unknown-linux-gnu | |
| if: matrix.arch == 'riscv64' | |
| uses: ./.github/actions/setup-riscv64-unknown-linux-gnu | |
| with: | |
| version: '13.2.0' | |
| install-path: '/opt/riscv64-unknown-linux-gnu' | |
| - name: Install Dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y qemu-system-aarch64 qemu-system-riscv64 gdb-multiarch llvm-dev libclang-dev wget expect device-tree-compiler p7zip-full gcc-aarch64-linux-gnu gcc-riscv64-linux-gnu | |
| cargo install --version 0.3.0 --locked cargo-binutils | |
| cargo install cargo-xbuild | |
| - name: Set up environment variables | |
| run: | | |
| echo "ARCH=${{ matrix.arch }}" >> $GITHUB_ENV | |
| echo "BOARD=${{ matrix.board }}" >> $GITHUB_ENV | |
| - name: Run System Test | |
| run: make stest | |
| license-checker: | |
| name: license-checker | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: License Check | |
| run: | | |
| set -x | |
| ./tools/license_checker.sh |