summaryrefslogtreecommitdiffstats
path: root/.github/workflows/ci.yml
blob: e257f893b2c1908be52db7f7a13b851f4dfecaa6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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'