name: Build Check

on:
  push:
    branches: [ "master", "feat-*", "fix-*"]
  pull_request:
    branches: [ "master", "feat-*", "fix-*"]

jobs:
  # ensure the toolchain is cached
  ensure-toolchain:
    uses: ./.github/workflows/cache-toolchain.yml
  
  format-check:
    name: Format check ${{ matrix.arch }}
    runs-on: ubuntu-latest
    needs: [ensure-toolchain]
    continue-on-error: true

    strategy:
      matrix:
        arch: [x86_64, riscv64]

    steps:
    - uses: actions/checkout@v3

    - uses: ./.github/actions/import-toolchain

    - name: Format check
      env:
          ARCH: ${{ matrix.arch }}
      run: |
            printf "\n" >> kernel/src/include/bindings/bindings.rs
            FMT_CHECK=1 make fmt
  
  kernel-static-test:
    name: Kernel static test ${{ matrix.arch }}
    runs-on: ubuntu-latest
    needs: [ensure-toolchain]
    continue-on-error: true

    strategy:
      matrix:
        arch: [x86_64, riscv64]

    steps:
    - uses: actions/checkout@v3

    - uses: ./.github/actions/import-toolchain

    - name: Run kernel static test
      shell: bash -ileo pipefail {0}
      env:
          ARCH: ${{ matrix.arch }}
      run: bash -c "source ~/.cargo/env && cd kernel && make test"
    
  build-x86_64:

    runs-on: ubuntu-latest
    needs: [ensure-toolchain]

    steps:
    - uses: actions/checkout@v3

    - uses: ./.github/actions/import-toolchain

      
    - name: build the DragonOS
      env:
          ARCH: x86_64
      shell: bash -ileo pipefail {0}

      run: |
        source ~/.bashrc
        source ~/.cargo/env
        export DragonOS_GCC=$HOME/opt/dragonos-gcc/gcc-x86_64-unknown-none/bin
        
        make -j $(nproc)

  
  build-riscv64:

    runs-on: ubuntu-latest
    needs: [ensure-toolchain]

    steps:
    - uses: actions/checkout@v3
      with:
        submodules: 'recursive'

    - uses: ./.github/actions/import-toolchain

    - name: build the DragonOS
      shell: bash -ileo pipefail {0}
      env:
          ARCH: riscv64

      run: source ~/.bashrc && source ~/.cargo/env && make kernel -j $(nproc)

