name: CI on: push: branches: - master pull_request: branches: - master env: CARGO_TERM_COLOR: always jobs: version-badge: name: Version Badge runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Check version badge matches Cargo.toml run: | CARGO_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') BADGE_VERSION=$(grep -oP 'badge/version-\K[0-9]+\.[0-9]+\.[0-9]+' README.md | head -1) if [ "$CARGO_VERSION" != "$BADGE_VERSION" ]; then echo "Version mismatch: Cargo.toml=$CARGO_VERSION README badge=$BADGE_VERSION" exit 1 fi echo "Version badge matches: $CARGO_VERSION" check: name: Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - run: cargo check --all-targets fmt: name: Format runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt - 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 - run: cargo clippy --all-targets --all-features -- -D warnings test-matrix: strategy: matrix: os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - run: cargo test --all-targets test: name: Test runs-on: ubuntu-latest needs: test-matrix if: always() steps: - run: | if [[ "${{ needs.test-matrix.result }}" != "success" ]]; then exit 1 fi integration: name: Integration Tests strategy: matrix: os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - name: Install expect (Linux) if: runner.os == 'Linux' run: sudo apt-get update && sudo apt-get install -y expect - name: Install expect (macOS) if: runner.os == 'macOS' run: command -v expect || brew install expect - run: cargo build - run: expect tests/integration.exp