name: Continuous Integration on: push: branches: - master pull_request: jobs: unit_tests: name: Unit tests runs-on: ${{ matrix.job.os }} strategy: matrix: job: - os: macos-latest target: x86_64-apple-darwin use-cross: false - os: windows-latest target: x86_64-pc-windows-msvc use-cross: false - os: ubuntu-latest target: x86_64-unknown-linux-gnu use-cross: false - os: ubuntu-latest target: x86_64-unknown-linux-musl use-cross: true - os: ubuntu-latest target: i686-unknown-linux-gnu use-cross: true - os: ubuntu-latest target: arm-unknown-linux-gnueabihf use-cross: true - os: ubuntu-latest target: aarch64-unknown-linux-gnu use-cross: true steps: - name: Checkout repository uses: actions/checkout@v3 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.job.target }} - name: Install cross if: matrix.job.use-cross uses: taiki-e/install-action@v2 with: tool: cross - name: Unit tests shell: bash run: | if [[ "${{ matrix.job.use-cross }}" == "true" ]]; then cross test --target ${{ matrix.job.target }} --verbose -- --nocapture else cargo test --target ${{ matrix.job.target }} --verbose -- --nocapture fi integration_tests: name: Integration tests runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, ubuntu-latest] include: - os: macos-latest target: x86_64-apple-darwin - os: ubuntu-latest target: x86_64-unknown-linux-gnu steps: - name: Checkout repository uses: actions/checkout@v3 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Build for release run: cargo build --target ${{ matrix.target }} --release - name: End to end tests run: | DELTA_BIN=target/${{ matrix.target }}/release/delta ./tests/test_raw_output_matches_git_on_full_repo_history $DELTA_BIN ./tests/test_deprecated_options $DELTA_BIN > /dev/null - name: Run executable run: cargo run --release --target ${{ matrix.target }} -- < /dev/null rustfmt: name: Rustfmt runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: components: rustfmt - name: Check formatting run: cargo fmt --all --check clippy: name: Clippy runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: components: clippy - name: Clippy Check run: cargo clippy -- -D warnings coverage: name: Code coverage runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Install stable toolchain uses: dtolnay/rust-toolchain@stable - name: Install cargo-tarpaulin uses: taiki-e/install-action@v2 with: tool: cargo-tarpaulin - name: Run cargo-tarpaulin run: cargo tarpaulin --ignore-tests --out Lcov --output-dir target/tarpaulin - name: Upload to Coveralls # upload only if push if: ${{ github.event_name == 'push' }} uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: './target/tarpaulin/lcov.info'