linux-kernel-cmdline 0.1.0

A parser for the Linux kernel command line (/proc/cmdline), supporting both byte-level and UTF-8 parsing with proper quote handling and dash/underscore equivalence for parameter keys.
Documentation
name: CI

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

env:
  CARGO_TERM_COLOR: always

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  test:
    name: Test (${{ matrix.build }})
    runs-on: ${{ matrix.os }}
    timeout-minutes: 20
    strategy:
      fail-fast: false
      matrix:
        build: [stable, beta, nightly]
        include:
          - build: stable
            os: ubuntu-latest
            rust: stable
          - build: beta
            os: ubuntu-latest
            rust: beta
          - build: nightly
            os: ubuntu-latest
            rust: nightly
    steps:
    - uses: actions/checkout@v6
    - name: Install Rust
      run: rustup update ${{ matrix.rust }} --no-self-update && rustup default ${{ matrix.rust }}
      shell: bash
    - run: cargo test
    - run: cargo test --features serde

  rustfmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
    - uses: actions/checkout@v6
    - uses: dtolnay/rust-toolchain@stable
      with:
        components: rustfmt
    - run: cargo fmt -- --check

  semver-checks:
    # TODO: Re-enable after initial crates.io publish
    if: false
    name: Semver Checks
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
    - uses: actions/checkout@v6
    - uses: obi1kenobi/cargo-semver-checks-action@v2

  # Sentinel job for required checks - configure this job name in
  # repository settings as the single required status check.
  required-checks:
    if: always()
    needs: [test, rustfmt]
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - run: exit 1
        if: >-
          needs.test.result != 'success' ||
          needs.rustfmt.result != 'success'