summaryrefslogtreecommitdiffstats
path: root/.github/workflows/workflow.yml
blob: 487fe23569742aaf0461e41187f00c99f925495f (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
name: Main workflow
on:
  push:
    paths-ignore:
      - "docs/**"
      - "**.md"
  pull_request:
    paths-ignore:
      - "docs/**"
      - "**.md"

jobs:
  # Run the `rustfmt` code formatter
  rustfmt:
    name: Rustfmt [Formatter]
    runs-on: ubuntu-latest
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v2.3.4

      - name: Setup | Rust
        uses: actions-rs/toolchain@v1.0.7
        with:
          toolchain: stable
          override: true
          profile: minimal
          components: rustfmt

      - name: Setup | libdbus (ubuntu)
        run: sudo apt-get install libdbus-1-dev

      - name: Build | Format
        run: cargo fmt --all -- --check

  # Run the `clippy` linting tool
  clippy:
    name: Clippy [Linter]
    strategy:
      matrix:
        os: [ubuntu-latest, macOS-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v2.3.4

      # Cache files between builds
      # - name: Setup | Cache Cargo
      #   uses: actions/cache@v2
      #   with:
      #     path: |
      #       ~/.cargo/registry
      #       ~/.cargo/git
      #       target
      #     key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Setup | libdbus (ubuntu)
        if: matrix.os == 'ubuntu-latest'
        run: sudo apt-get install libdbus-1-dev

      - name: Setup | Rust
        uses: actions-rs/toolchain@v1.0.7
        with:
          toolchain: stable
          override: true
          profile: minimal
          components: clippy

      - name: Build | Lint
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --workspace --locked --all-targets --all-features -- -D clippy::all

  # Ensure that the project could be successfully compiled
  cargo_check:
    name: Compile
    runs-on: ubuntu-latest
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v2.3.4

      # Cache files between builds
      # - name: Setup | Cache Cargo
      #   uses: actions/cache@v2
      #   with:
      #     path: |
      #       ~/.cargo/registry
      #       ~/.cargo/git
      #       target
      #     key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Setup | Rust
        uses: actions-rs/toolchain@v1.0.7
        with:
          toolchain: stable
          profile: minimal
          override: true

      - name: Build | Check
        run: cargo check --workspace --locked

  # Run tests on Linux, macOS, and Windows
  # On both Rust stable and Rust nightly
  test:
    name: Test Suite
    runs-on: ${{ matrix.os }}
    needs: cargo_check # First check then run expansive tests
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macOS-latest, windows-latest]
        rust: [stable, nightly]
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v2.3.4

      - name: Setup | libdbus (ubuntu)
        if: matrix.os == 'ubuntu-latest'
        run: sudo apt-get install libdbus-1-dev

      # Cache files between builds
      # - name: Setup | Cache Cargo
      #   uses: actions/cache@v2
      #   with:
      #     path: |
      #       ~/.cargo/registry
      #       ~/.cargo/git
      #       target
      #     key: ${{ runner.os }}-${{ matrix.rust }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      # Install all the required dependencies for testing
      - name: Setup | Rust
        uses: actions-rs/toolchain@v1.0.7
        with:
          toolchain: ${{ matrix.rust }}
          profile: minimal
          override: true

      # Install Mercurial (pre-installed on Linux and windows)
      - name: Setup | Mercurial (macos)
        if: matrix.os == 'macOS-latest'
        run: brew install mercurial

      # Run the ignored tests that expect the above setup
      - name: Build | Test
        run: cargo test --workspace --locked --all-features -- -Z unstable-options --include-ignored