landlock 0.3.1

Landlock LSM helpers
Documentation
name: Rust checks

permissions: {}

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

env:
  CARGO_TERM_COLOR: always
  RUSTDOCFLAGS: -D warnings
  RUSTFLAGS: -D warnings
  LANDLOCK_TEST_TOOLS_COMMIT: ab616e087cffa4b6716ff026e589d0317e19aaa4 # v1.0.0

# Ubuntu versions: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources

jobs:
  commit_list:
    runs-on: ubuntu-22.04
    steps:

    - uses: actions/checkout@v3
      with:
        fetch-depth: 0

    - name: Get commit list (push)
      id: get_commit_list_push
      if: ${{ github.event_name == 'push' }}
      run: |
        echo "id0=$GITHUB_SHA" > $GITHUB_OUTPUT
        echo "List of tested commits:" > $GITHUB_STEP_SUMMARY
        sed -n 's,^id[0-9]\+=\(.*\),- https://github.com/landlock-lsm/rust-landlock/commit/\1,p' -- $GITHUB_OUTPUT >> $GITHUB_STEP_SUMMARY

    - name: Get commit list (PR)
      id: get_commit_list_pr
      if: ${{ github.event_name == 'pull_request' }}
      run: |
        git rev-list --reverse refs/remotes/origin/${{ github.base_ref }}..${{ github.event.pull_request.head.sha }} | awk '{ print "id" NR "=" $1 }' > $GITHUB_OUTPUT
        git diff --quiet ${{ github.event.pull_request.head.sha }} ${{ github.sha }} || echo "id0=$GITHUB_SHA" >> $GITHUB_OUTPUT
        echo "List of tested commits:" > $GITHUB_STEP_SUMMARY
        sed -n 's,^id[0-9]\+=\(.*\),- https://github.com/landlock-lsm/rust-landlock/commit/\1,p' -- $GITHUB_OUTPUT >> $GITHUB_STEP_SUMMARY

    outputs:
      commits: ${{ toJSON(steps.*.outputs.*) }}

  ubuntu_22_rust_msrv:
    runs-on: ubuntu-22.04
    needs: commit_list
    strategy:
      fail-fast: false
      matrix:
        commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
    env:
      LANDLOCK_CRATE_TEST_ABI: 3
    steps:

    - uses: actions/checkout@v3
      with:
        ref: ${{ matrix.commit }}

    - name: Clone Landlock test tools
      uses: actions/checkout@v3
      with:
        repository: landlock-lsm/landlock-test-tools
        fetch-depth: 0
        ref: ${{ env.LANDLOCK_TEST_TOOLS_COMMIT }}
        path: landlock-test-tools

    - name: Get MSRV
      run: sed -n 's/^rust-version = "\([0-9.]\+\)"$/RUST_TOOLCHAIN=\1/p' Cargo.toml >> $GITHUB_ENV

    - name: Install Rust MSRV
      run: |
        rm ~/.cargo/bin/{cargo-fmt,rustfmt} || :
        rustup default ${{ env.RUST_TOOLCHAIN }}
        rustup update ${{ env.RUST_TOOLCHAIN }}

    - name: Build
      run: rustup run ${{ env.RUST_TOOLCHAIN }} cargo build --verbose

    - name: Build tests
      run: rustup run ${{ env.RUST_TOOLCHAIN }} cargo build --tests --verbose

    - name: Run tests against the local kernel (Landlock ABI ${{ env.LANDLOCK_CRATE_TEST_ABI }})
      run: rustup run ${{ env.RUST_TOOLCHAIN }} cargo test --verbose

    - name: Run tests against Linux 6.1
      run: CARGO="rustup run ${{ env.RUST_TOOLCHAIN }} cargo" ./landlock-test-tools/test-rust.sh linux-6.1 2

  ubuntu_20_rust_stable:
    runs-on: ubuntu-20.04
    needs: commit_list
    strategy:
      fail-fast: false
      matrix:
        commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
    env:
      LANDLOCK_CRATE_TEST_ABI: 1
    steps:

    - name: Install Rust stable
      run: |
        rm ~/.cargo/bin/{cargo-fmt,rustfmt} || :
        rustup default stable
        rustup component add rustfmt clippy
        rustup update

    - uses: actions/checkout@v3
      with:
        ref: ${{ matrix.commit }}

    - name: Build
      run: rustup run stable cargo build --verbose

    - name: Run tests against the local kernel (Landlock ABI ${{ env.LANDLOCK_CRATE_TEST_ABI }})
      run: rustup run stable cargo test --verbose

    - name: Check format
      run: rustup run stable cargo fmt --all -- --check

    - name: Check source with Clippy
      run: rustup run stable cargo clippy -- --deny warnings

    - name: Check tests with Clippy
      run: rustup run stable cargo clippy --tests -- --deny warnings

    - name: Check documentation
      run: rustup run stable cargo doc --no-deps

  ubuntu_22_rust_stable:
    runs-on: ubuntu-22.04
    needs: commit_list
    strategy:
      fail-fast: false
      matrix:
        commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
    env:
      LANDLOCK_CRATE_TEST_ABI: 3
      # $CARGO is used by landlock-test-tools/test-rust.sh
      CARGO: rustup run stable cargo
    steps:

    - uses: actions/checkout@v3
      with:
        ref: ${{ matrix.commit }}

    - name: Clone Landlock test tools
      uses: actions/checkout@v3
      with:
        repository: landlock-lsm/landlock-test-tools
        fetch-depth: 0
        ref: ${{ env.LANDLOCK_TEST_TOOLS_COMMIT }}
        path: landlock-test-tools

    - name: Install Rust stable
      run: |
        rm ~/.cargo/bin/{cargo-fmt,rustfmt} || :
        rustup default stable
        rustup update

    - name: Run tests against the local kernel (Landlock ABI ${{ env.LANDLOCK_CRATE_TEST_ABI }})
      run: $CARGO test --verbose

    - name: Run tests against Linux 5.10
      run: ./landlock-test-tools/test-rust.sh linux-5.10 0

    - name: Run tests against Linux 5.15
      run: ./landlock-test-tools/test-rust.sh linux-5.15 1

    - name: Run tests against Linux 6.1
      run: ./landlock-test-tools/test-rust.sh linux-6.1 2

    - name: Run tests against Linux 6.4
      run: ./landlock-test-tools/test-rust.sh linux-6.4 3