aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/ci.yml')
-rw-r--r--.github/workflows/ci.yml151
1 files changed, 151 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..2c2c790
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,151 @@
+name: ci
+on:
+ pull_request:
+ push:
+ branches:
+ - master
+ 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, TARGET is set to `--target matrix.target`.
+ TARGET:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ build:
+ - pinned
+ - stable
+ - stable-32
+ - stable-mips
+ - beta
+ - nightly
+ - macos
+ - win-msvc
+ - win-gnu
+ include:
+ - build: pinned
+ os: ubuntu-18.04
+ rust: 1.41.1
+ - build: stable
+ os: ubuntu-18.04
+ rust: stable
+ - build: stable-32
+ os: ubuntu-18.04
+ rust: stable
+ target: i686-unknown-linux-gnu
+ - build: stable-mips
+ os: ubuntu-18.04
+ rust: stable
+ target: mips64-unknown-linux-gnuabi64
+ - build: beta
+ os: ubuntu-18.04
+ rust: beta
+ - build: nightly
+ os: ubuntu-18.04
+ rust: nightly
+ - build: macos
+ os: macos-latest
+ rust: stable
+ - build: win-msvc
+ os: windows-2019
+ rust: stable
+ - build: win-gnu
+ os: windows-2019
+ rust: stable-x86_64-gnu
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.rust }}
+ profile: minimal
+ override: true
+
+ - name: Use Cross
+ if: matrix.target != ''
+ run: |
+ # FIXME: to work around bugs in latest cross release, install master.
+ # See: https://github.com/rust-embedded/cross/issues/357
+ cargo install --git https://github.com/rust-embedded/cross
+ echo "CARGO=cross" >> $GITHUB_ENV
+ echo "TARGET=--target ${{ matrix.target }}" >> $GITHUB_ENV
+
+ - name: Show command used for Cargo
+ run: |
+ echo "cargo command is: ${{ env.CARGO }}"
+ echo "target flag is: ${{ env.TARGET }}"
+
+ - name: Show CPU info for debugging
+ if: matrix.os == 'ubuntu-18.04'
+ run: lscpu
+
+ - name: Build
+ run: ${{ env.CARGO }} build --verbose $TARGET
+
+ - name: Build (no default)
+ run: ${{ env.CARGO }} build --verbose $TARGET --no-default-features
+
+ - name: Build docs
+ run: ${{ env.CARGO }} doc --verbose $TARGET
+
+ # Our dev dependencies evolve more rapidly than we'd like, so only run
+ # tests when we aren't pinning the Rust version.
+ - name: Tests
+ if: matrix.build != 'pinned'
+ run: ${{ env.CARGO }} test --verbose $TARGET
+
+ - name: Tests (no default, lib only)
+ if: matrix.build != 'pinned'
+ run: ${{ env.CARGO }} test --verbose --no-default-features --lib $TARGET
+
+ - name: Tests (i128)
+ if: matrix.build != 'pinned'
+ run: ${{ env.CARGO }} test --verbose --features i128 $TARGET
+
+ - name: Tests (no default, lib only, i128)
+ if: matrix.build != 'pinned'
+ run: ${{ env.CARGO }} test --verbose --no-default-features --features i128 --lib $TARGET
+
+ - name: Compile benchmarks
+ if: matrix.build == 'nightly'
+ run: cargo bench --verbose --no-run $TARGET
+
+ - name: Compile benchmarks (no default)
+ if: matrix.build == 'nightly'
+ run: cargo bench --verbose --no-run --no-default-features $TARGET
+
+ - name: Compile benchmarks (i128)
+ if: matrix.build == 'nightly'
+ run: cargo bench --verbose --no-run --features i128 $TARGET
+
+ - name: Compile benchmarks (no default, i128)
+ if: matrix.build == 'nightly'
+ run: cargo bench --verbose --no-run --no-default-features --features i128 $TARGET
+
+ rustfmt:
+ name: rustfmt
+ runs-on: ubuntu-18.04
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ override: true
+ profile: minimal
+ components: rustfmt
+ - name: Check formatting
+ run: cargo fmt -- --check