name: CI on: push: branches: [master] tags: ['v*.*.*'] pull_request: branches: [master] env: CARGO_TERM_COLOR: always permissions: contents: write jobs: fmt: name: Rust Format runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt - uses: Swatinem/rust-cache@v2 - run: cargo fmt --all -- --check clippy: name: Clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: clippy - uses: Swatinem/rust-cache@v2 - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y build-essential libsystemd-dev pkg-config libssl-dev - run: cargo clippy --all-targets --all-features -- -D warnings test: name: Tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y build-essential libsystemd-dev pkg-config libssl-dev - run: cargo test --all-features audit: name: Security Audit runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - run: cargo install cargo-audit && cargo audit --ignore RUSTSEC-2025-0134 enrollment-tests: name: Enrollment Tests needs: [fmt, clippy] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y build-essential libsystemd-dev pkg-config libssl-dev - run: cargo test --test enroll_identity - run: cargo test --test enrollment_test - run: cargo test --test enrollment_e2e build-deb: name: Build & Release needs: [fmt, clippy, test, enrollment-tests] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y build-essential libsystemd-dev pkg-config libssl-dev dpkg-dev debhelper - name: Build .deb package run: | . "$HOME/.cargo/env" sudo env "PATH=$PATH" dpkg-buildpackage -us -uc -b -d - name: Generate release notes if: startsWith(github.ref, 'refs/tags/v') id: release_notes run: | PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") if [ -n "$PREV_TAG" ]; then NOTES=$(git log ${PREV_TAG}..HEAD --pretty=format:"- %s (%h)" --no-merges) else NOTES=$(git log --pretty=format:"- %s (%h)" --no-merges) fi echo "notes<> $GITHUB_OUTPUT echo "$NOTES" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Upload to GitHub Release if: startsWith(github.ref, 'refs/tags/v') uses: softprops/action-gh-release@v2 with: body: ${{ steps.release_notes.outputs.notes }} files: ../linux-patch-api_*.deb