on: [push, pull_request] name: Continuous integration jobs: build: name: Test ${{ matrix.job.target }} runs-on: ${{ matrix.job.os }} strategy: fail-fast: false matrix: job: # Operating systems available: https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories - { target: x86_64-unknown-linux-gnu, os: ubuntu-20.04 } # mac-latest (currently mac-14) is an ARM device, so use macos-12 to get Intel. # Update annoucement: https://github.blog/changelog/2024-04-01-macos-14-sonoma-is-generally-available-and-the-latest-macos-runner-image/ - { target: x86_64-apple-darwin, os: macos-12 } - { target: x86_64-pc-windows-msvc, os: windows-latest } - { target: aarch64-unknown-linux-gnu, os: ubuntu-20.04, use-cross: true } # mac-14 is an M1 ARM device. - { target: aarch64-apple-darwin, os: macos-14 } # musl binaries produced by GitHub actions segfault when run, see # https://github.com/Wilfred/difftastic/issues/563 # # musl builds seem to work fine elsewhere, so just verify # that compilation works for now. - { target: x86_64-unknown-linux-musl, os: ubuntu-20.04, use-cross: true, build-only: true } env: BUILD_CMD: cargo SUBCOMMAND: test steps: - name: Checkout source code uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@1.74.1 with: targets: ${{ matrix.job.target }} - name: Install cross if: matrix.job.use-cross uses: taiki-e/install-action@v2 with: tool: cross@0.2.5 - name: Overwrite build command env variable if: matrix.job.use-cross shell: bash run: echo "BUILD_CMD=cross" >> $GITHUB_ENV - name: Overwrite build subcommand env variable if: matrix.job.build-only shell: bash run: echo "SUBCOMMAND=build" >> $GITHUB_ENV - name: Test shell: bash run: $BUILD_CMD $SUBCOMMAND --target ${{ matrix.job.target }} test_mime_db: name: Test with MIME database runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.74.1 # This runs tests that rely on the MIME database being present. - run: cargo test -- --ignored test_linux_latest_stable: name: Test Linux (latest stable Rust) runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - run: cargo +stable test regression_test: name: Output Regression Test runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.74.1 - name: Generate output for all sample files run: ./sample_files/compare_all.sh - name: Verify output is unchanged run: diff -C2 sample_files/compare.result sample_files/compare.expected package: name: Check Linux Packaging runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.74.1 - run: cargo package --allow-dirty fmt: name: Rustfmt runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.74.1 - run: cargo fmt --all -- --check actionlint: name: Actionlint runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - uses: raven-actions/actionlint@v2 with: shellcheck: false