1111 RUST_VERSION : ' 1.77'
1212
1313jobs :
14+ commitlint :
15+ name : Conventional Commit Check
16+ runs-on : ubuntu-latest
17+ if : github.event_name == 'pull_request'
18+ steps :
19+ - name : Checkout code
20+ uses : actions/checkout@v4
21+ with :
22+ fetch-depth : 0
23+
24+ - name : Setup Node.js
25+ uses : actions/setup-node@v4
26+ with :
27+ node-version : ${{ env.NODE_VERSION }}
28+ cache : ' npm'
29+
30+ - name : Install dependencies
31+ run : npm ci --legacy-peer-deps
32+
33+ - name : Validate PR commits
34+ run : npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.sha }} --verbose
35+
1436 # ─────────────────────────────────────────────────────────
1537 # TypeScript / React Native Checks
1638 # ─────────────────────────────────────────────────────────
@@ -111,7 +133,7 @@ jobs:
111133 - name : Install Rust toolchain
112134 uses : dtolnay/rust-toolchain@master
113135 with :
114- version : ${{ env.RUST_VERSION }}
136+ toolchain : ${{ env.RUST_VERSION }}
115137 components : rustfmt
116138
117139 - name : Check Rust formatting
@@ -127,7 +149,7 @@ jobs:
127149 - name : Install Rust toolchain
128150 uses : dtolnay/rust-toolchain@master
129151 with :
130- version : ${{ env.RUST_VERSION }}
152+ toolchain : ${{ env.RUST_VERSION }}
131153 components : clippy
132154
133155 - name : Cache Rust dependencies
@@ -149,7 +171,7 @@ jobs:
149171 - name : Install Rust toolchain
150172 uses : dtolnay/rust-toolchain@master
151173 with :
152- version : ${{ env.RUST_VERSION }}
174+ toolchain : ${{ env.RUST_VERSION }}
153175
154176 - name : Cache Rust dependencies
155177 uses : Swatinem/rust-cache@v2
@@ -170,7 +192,7 @@ jobs:
170192 - name : Install Rust toolchain
171193 uses : dtolnay/rust-toolchain@master
172194 with :
173- version : ${{ env.RUST_VERSION }}
195+ toolchain : ${{ env.RUST_VERSION }}
174196
175197 - name : Cache Rust dependencies
176198 uses : Swatinem/rust-cache@v2
@@ -188,7 +210,18 @@ jobs:
188210 name : Merge Protection Check
189211 runs-on : ubuntu-latest
190212 if : github.event_name == 'pull_request'
191- needs : [typescript-lint, typescript-typecheck, typescript-tests, typescript-build, rust-format, rust-clippy, rust-tests, rust-build]
213+ needs :
214+ [
215+ commitlint,
216+ typescript-lint,
217+ typescript-typecheck,
218+ typescript-tests,
219+ typescript-build,
220+ rust-format,
221+ rust-clippy,
222+ rust-tests,
223+ rust-build,
224+ ]
192225 steps :
193226 - name : All checks passed
194227 run : echo "All quality gates passed!"
@@ -200,10 +233,25 @@ jobs:
200233 name : CI Complete
201234 runs-on : ubuntu-latest
202235 if : always()
203- needs : [typescript-lint, typescript-typecheck, typescript-tests, typescript-build, rust-format, rust-clippy, rust-tests, rust-build]
236+ needs :
237+ [
238+ commitlint,
239+ typescript-lint,
240+ typescript-typecheck,
241+ typescript-tests,
242+ typescript-build,
243+ rust-format,
244+ rust-clippy,
245+ rust-tests,
246+ rust-build,
247+ ]
204248 steps :
205249 - name : Check for failures
206250 run : |
251+ if [ "${{ github.event_name }}" = "pull_request" ] && [ "${{ needs.commitlint.result }}" != "success" ]; then
252+ echo "Conventional commit check failed"
253+ exit 1
254+ fi
207255 if [ "${{ needs.typescript-lint.result }}" != "success" ] || \
208256 [ "${{ needs.typescript-typecheck.result }}" != "success" ] || \
209257 [ "${{ needs.typescript-tests.result }}" != "success" ] || \
0 commit comments