summaryrefslogtreecommitdiff
path: root/.github/workflows/ci.yml
blob: 084fc4dd9cad1d1513855f7b8dd6d5cd83e66daa (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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# .github/workflows/build.yml
name: Build

on: [push, pull_request]

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: qml_plugin
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v4

      - name: Setup | Qt
        run: |
          sudo apt-get update
          sudo apt-get install -y qt6-base-dev qt6-declarative-dev

      - name: Setup | Rust
        uses: dtolnay/rust-toolchain@nightly

      - name: Check
        run: cargo check

  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup | Qt
        run: |
          sudo apt-get update
          sudo apt-get install -y qt6-base-dev qt6-declarative-dev
      - name: Setup | Rust
        uses: dtolnay/rust-toolchain@nightly
      - uses: giraffate/clippy-action@v1
        with:
          reporter: "github-pr-check"
          github_token: ${{ secrets.GITHUB_TOKEN }}
          clippy_flags: --all --lib --bins --examples
          workdir: qml_plugin

  fmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: qml_plugin
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v4

      - name: Setup | Rust
        uses: dtolnay/rust-toolchain@nightly

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

  semver:
    name: Semver Check
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: qml_plugin
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Setup | Qt
        run: |
          sudo apt-get update
          sudo apt-get install -y qt6-base-dev qt6-declarative-dev

      - name: Setup | Rust
        uses: dtolnay/rust-toolchain@nightly

      - name: Install cargo-semver-checks from git
        run: cargo install --git https://github.com/obi1kenobi/cargo-semver-checks cargo-semver-checks

      - name: Check semver
        run: cargo semver-checks --baseline-rev origin/main

  test:
    name: Test
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: qml_plugin
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v4
      - name: Setup | Qt
        run: |
          sudo apt-get update
          sudo apt-get install -y qt6-base-dev qt6-declarative-dev
      - name: Setup | Rust
        uses: dtolnay/rust-toolchain@nightly
      - name: Setup | Toolchain
        uses: taiki-e/install-action@v2
        with:
          tool: cargo-nextest
      - name: Test
        run: cargo nextest run --no-tests=pass

  mutants:
    name: Mutation Testing
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: qml_plugin
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v4
      - name: Setup | Qt
        run: |
          sudo apt-get update
          sudo apt-get install -y qt6-base-dev qt6-declarative-dev
      - name: Setup | Rust
        uses: dtolnay/rust-toolchain@nightly
      - name: Setup | Toolchain
        uses: taiki-e/install-action@v2
        with:
          tool: cargo-mutants
      - name: Mutation Testing
        run: cargo mutants -vV --in-place
      - name: Upload Mutation Testing Results
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: mutants-out
          path: qml_plugin/mutants.out

  audit:
    name: Dependency Audit
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: qml_plugin
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v4
      - name: Setup | Rust
        uses: dtolnay/rust-toolchain@nightly
      - name: Setup | Toolchain | Install cargo-audit
        run: cargo install cargo-audit
      - name: Audit
        run: cargo audit

  dep:
    name: Unused Dependencies
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: qml_plugin
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v4
      - name: Setup | Rust
        uses: dtolnay/rust-toolchain@nightly
      - name: Check Unused Dependencies
        uses: bnjbvr/cargo-machete@main

  ui:
    name: UI (QML/JS/Shell) Linting
    runs-on: ubuntu-latest
    steps:
      - name: Setup | Checkout
        uses: actions/checkout@v4

      - name: Setup | Qt & ShellCheck
        run: |
          sudo apt-get update
          sudo apt-get install -y qt6-declarative-dev-tools shellcheck

      - name: Setup | Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install Prettier
        run: npm install -g prettier

      - name: Format JS
        run: |
          cat <<EOF > .prettierignore
          utils/fuzzysort.js
          utils/fzf.js
          utils/levendist.js
          EOF
          prettier --check "utils/**/*.js"

      - name: Check QML/JS Format
        run: find . \( -name "*.qml" -o -name "*.js" \) -exec qmlformat -n {} +

      - name: Lint Shell
        run: shellcheck utils/*.sh