linux-keyutils 0.2.5

Rust interface to the Linux key-management facility. Provides a safe interface around the raw system calls allowing user-space programs to perform key manipulation.
Documentation
name: Checks

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

env:
  CARGO_TERM_COLOR: always

jobs:
  # Taken from rust-lang/libz-sys CI/CD example.
  #
  # This job downloads and stores `cross` as an artifact, so that it can be
  # redownloaded across all of the jobs.
  install-cross:
    runs-on: ubuntu-latest
    steps:
      - uses: XAMPPRocky/get-github-release@v1
        id: cross
        with:
          owner: cross-rs
          repo: cross
          matches: ${{ matrix.platform }}
          token: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/upload-artifact@v4
        with:
          name: cross-${{ matrix.platform }}
          path: ${{ steps.cross.outputs.install_path }}
    strategy:
      matrix:
        platform: [linux-musl]

  # Build and run unit tests
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions-rs/toolchain@v1
      with:
          profile: minimal
          toolchain: stable
          override: true
    - name: Build
      run: cargo build --verbose
    - name: Install request-key for Request/Instantiate flow
      run: |
        cargo build --example request-key --features std
        sudo mv ./target/debug/examples/request-key /sbin/request-key
    - name: Run tests
      run: cargo test --verbose -- --include-ignored

  # Ensure clippy and formatting pass
  clippy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions-rs/toolchain@v1
      with:
          profile: minimal
          toolchain: stable
          override: true
          components: clippy
    - name: Run Clippy
      run: cargo clippy --verbose -- --deny "warnings"
    - name: Run RustFmt
      run: cargo fmt -- --check

  # Cross compile for multiple architectures.
  #
  # Cannot run the unit tests until we can specify a seccomp profile for cross'
  # docker images. Since the default seccomp profile blocks keyctl calls.
  cross-linux:
    runs-on: ubuntu-latest
    needs: install-cross
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: 'recursive'
    - uses: dtolnay/rust-toolchain@stable
      with:
          toolchain: stable
    - name: Download Cross
      uses: actions/download-artifact@v4
      with:
        name: cross-linux-musl
        path: /tmp
    - run: rustup toolchain install ${{ matrix.channel }}
    - run: chmod +x /tmp/cross
    - name: Build
      run: /tmp/cross build --all-features --target ${{ matrix.target }}
    strategy:
      fail-fast: false
      matrix:
        channel: [stable]
        target:
          - aarch64-unknown-linux-musl
          - arm-unknown-linux-musleabihf
          - i686-unknown-linux-musl
          - x86_64-unknown-linux-musl
          - x86_64-unknown-linux-gnu


  # Run miri (commented out since miri doesn't support the keyctl
  # syscalls)
  #miri:
  #  name: "miri"
  #  runs-on: ubuntu-latest
  #  steps:
  #    - uses: actions/checkout@v3
  #    - uses: actions-rs/toolchain@v1
  #      with:
  #        profile: minimal
  #        toolchain: nightly
  #        override: true
  #        components: miri
  #    - name: Setup Miri
  #      run: cargo +nightly miri setup
  #    - name: Test with Miri
  #      run: cargo +nightly miri test