diff --git a/.github/workflows/ci-multiplatform.yml b/.github/workflows/ci-multiplatform.yml new file mode 100644 index 0000000..6ed1ae8 --- /dev/null +++ b/.github/workflows/ci-multiplatform.yml @@ -0,0 +1,111 @@ +name: ci-multi-platform +on: + pull_request: + push: + branches: + - main + schedule: + - cron: '00 01 * * *' +jobs: + test: + name: test + env: + # For some builds, we use cross to test on 32-bit and big-endian + # systems. + CARGO: cargo + # When CARGO is set to CROSS, this is set to `--target matrix.target`. + TARGET_FLAGS: "" + # When CARGO is set to CROSS, TARGET_DIR includes matrix.target. + TARGET_DIR: ./target + # Emit backtraces on panics. + RUST_BACKTRACE: 1 + runs-on: ${{ matrix.os }} + strategy: + matrix: + build: + - pinned + - stable + - beta + - nightly + - nightly-musl + - nightly-32 + - nightly-mips + - nightly-arm + - macos + - win-msvc + - win-gnu + include: + - build: pinned + os: ubuntu-22.04 + rust: 1.65.0 + - build: stable + os: ubuntu-22.04 + rust: stable + - build: beta + os: ubuntu-22.04 + rust: beta + - build: nightly + os: ubuntu-22.04 + rust: nightly + - build: nightly-musl + os: ubuntu-22.04 + rust: nightly + target: x86_64-unknown-linux-musl + - build: nightly-32 + os: ubuntu-22.04 + rust: nightly + target: i686-unknown-linux-gnu + - build: nightly-mips + os: ubuntu-22.04 + rust: nightly + target: mips64-unknown-linux-gnuabi64 + - build: nightly-arm + os: ubuntu-22.04 + rust: nightly + target: arm-unknown-linux-gnueabihf + - build: macos + os: macos-12 + rust: nightly + - build: win-msvc + os: windows-2022 + rust: nightly + - build: win-gnu + os: windows-2022 + rust: nightly-x86_64-gnu + steps: + - name: Checkout repository + uses: actions/checkout@v3 + #- name: Install packages (Ubuntu) + # if: matrix.os == 'ubuntu-22.04' + # run: | + # ci/ubuntu-install-packages + #- name: Install packages (macOS) + # if: matrix.os == 'macos-12' + # run: | + # ci/macos-install-packages + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ matrix.rust }} + - name: Use Cross + if: matrix.target != '' + run: | + cargo install cross + echo "CARGO=cross" >> $GITHUB_ENV + echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV + echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV + - name: Show command used for Cargo + run: | + echo "cargo command is: ${{ env.CARGO }}" + echo "target flag is: ${{ env.TARGET_FLAGS }}" + - name: Build all crates + run: ${{ env.CARGO }} build --verbose --workspace ${{ env.TARGET_FLAGS }} + # This is useful for debugging problems when the expected build artifacts + # (like shell completions and man pages) aren't generated. + - name: Run tests + # These tests should actually work, but they almost double the runtime. + # Every integration test spins up qemu to run 'rg', and when PCRE2 is + # enabled, every integration test is run twice: one with the default + # regex engine and once with PCRE2. + if: matrix.target != '' + run: ${{ env.CARGO }} test --verbose --workspace ${{ env.TARGET_FLAGS }}