name: CI on: pull_request: push: branches: - master - staging - trying paths-ignore: - 'docs/**' - 'documentation/**' env: RUST_BACKTRACE: 1 jobs: test-package: name: Test Package ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [macOS-latest, windows-latest, ubuntu-latest] include: - os: ubuntu-latest sccache-path: /home/runner/.cache/sccache - os: macos-latest sccache-path: /Users/runner/Library/Caches/Mozilla.sccache - os: windows-latest sccache-path: "C:\\Users\\runneradmin\\AppData\\Local\\Mozilla\\sccache" env: RUSTC_WRAPPER: sccache SCCACHE_CACHE_SIZE: 2G SCCACHE_DIR: ${{ matrix.sccache-path }} # SCCACHE_RECACHE: 1 # Uncomment this to clear cache, then comment it back out steps: - name: Checkout uses: actions/checkout@v2 - name: Install sccache Ubuntu if: matrix.os == 'ubuntu-latest' env: LINK: https://github.com/mozilla/sccache/releases/download SCCACHE_VERSION: v0.2.15 run: | SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl mkdir -p $HOME/.local/bin curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache chmod +x $HOME/.local/bin/sccache echo "$HOME/.local/bin" >> $GITHUB_PATH - name: Install sccache Macos if: matrix.os == 'macos-latest' run: | brew update brew install sccache - name: Install sccache Windows if: matrix.os == 'windows-latest' run: | iwr -useb get.scoop.sh | iex Set-ExecutionPolicy RemoteSigned -scope CurrentUser scoop install sccache Get-ChildItem C:\Users\runneradmin\scoop\shims echo "C:\Users\runneradmin\scoop\shims" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo "$GITHUB_PATH" - name: Install Rust Stable uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Cache cargo registry uses: actions/cache@v2 continue-on-error: false with: path: | ~/.cargo/registry ~/.cargo/git key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo- - name: Save sccache uses: actions/cache@v2 continue-on-error: false with: path: ${{ matrix.sccache-path }} key: ${{ runner.os }}-sccache-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-sccache- - name: Start sccache server run: | echo "$GITHUB_PATH" sccache --start-server - name: Install cargo-all-features run: | cargo install cargo-all-features - name: Test run: | cd package cargo test-all-features - name: Print sccache stats run: sccache --show-stats - name: Stop sccache server run: sccache --stop-server || true test-package-macos_m1: name: Test Package macOS M1 runs-on: macos-latest steps: - name: Xcode Select uses: devbotsxyz/xcode-select@v1.1.0 - name: Checkout uses: actions/checkout@v2 - name: Install Rust uses: actions-rs/toolchain@v1 with: profile: minimal target: aarch64-apple-darwin toolchain: stable override: true components: rustfmt - name: Install cargo-all-features run: | SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path) \ MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version) \ cargo install cargo-all-features - name: Test run: | SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path) \ MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version) \ cd package && cargo test-all-features codecov: name: Code Coverage runs-on: ubuntu-latest env: RUSTC_BOOTSTRAP: 1 steps: - name: Checkout uses: actions/checkout@v1 - name: Install Rust uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true components: rustfmt - name: Test uses: actions-rs/cargo@v1 with: command: test args: --all --features ci_skip env: CARGO_INCREMENTAL: "0" - name: Install dependencies for code coverage run: | sudo apt-get update sudo apt-get -y install binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev - name: Generate coverage report run: | wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz tar xzf master.tar.gz cd kcov-master mkdir build && cd build cmake .. && make make install DESTDIR=../../kcov-build cd ../.. rm -rf kcov-master for file in target/debug/deps/*-*; do if [[ "$file" != *\.* ]]; then mkdir -p "target/cov/$(basename $file)"; ./kcov-build/usr/local/bin/kcov --exclude-pattern=/.cargo,/usr/lib --exclude-region='@kcov_skip(start):@kcov_skip(end)' --verify "target/cov/$(basename $file)" "$file"; fi done - name: Upload coverage to Codecov uses: codecov/codecov-action@v1 with: github-token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}