Skip to content

Commit 3428471

Browse files
staging-devin-ai-integration[bot]streamkit-devinstreamer45
authored
ci: consolidate workflows, add path filtering, cover all plugins (#295)
* ci: consolidate workflows, add path filtering, cover all plugins - ci.yml: add dorny/paths-filter change detection so sub-workflows only run when relevant files change; fold REUSE compliance check inline; update all-checks gate to tolerate skipped jobs - plugins.yml: replace 5 separate jobs (format, lint-simple, lint-whisper, lint-nllb, lint-sherpa) with a single matrix job grouped by native dep profile (simple, sherpa, nllb); covers all 13 plugins (adds aac-encoder, helsinki, parakeet, pocket-tts, supertonic); uses shared CARGO_TARGET_DIR to deduplicate common crate compilation - ui.yml: merge 4 jobs (lint, test, build, knip) into 1, eliminating 3x redundant checkout + bun install - skit.yml: merge lint + test into lint-and-test, saving a full UI build + Rust toolchain setup; keep test-gpu and build separate - Delete standalone reuse.yml (now inline in ci.yml) Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * style(plugins): fix formatting in helsinki and parakeet These plugins were not previously covered by CI linting. Running cargo fmt to fix pre-existing formatting issues now caught by the expanded plugin matrix. Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * style(plugins): fix formatting in aac-encoder Pre-existing formatting issue now caught by the expanded plugin CI matrix. Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * fix(plugins): resolve pre-existing clippy and fmt issues in newly-covered plugins These plugins were not previously linted in CI. Fix issues now caught by the expanded plugin matrix: - helsinki: 42 clippy warnings (format string interpolation, unnecessary wraps, excessive bools, match_same_arms, significant drop tightening) - parakeet: 1 clippy warning (missing_const_for_fn on non-const method) - aac-encoder: 2 clippy warnings (cast lints on u64/u128 conversion) Also fix Devin Review finding: add 'changes' job to all-checks gate so a failure in the change-detection job correctly fails the gate instead of silently skipping all CI checks. Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * style(plugins): fix remaining formatting in helsinki after clippy --fix cargo clippy --fix left some lines that cargo fmt wants to reformat. Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * fix(ci): trigger plugins on rust changes, add ldconfig for nllb cache hits - ci.yml: add rust filter to plugins job condition so changes to plugin SDK (sdks/**) or core crates (crates/**) trigger plugin linting — prevents breaking SDK changes from going undetected - plugins.yml: add ldconfig step for CTranslate2 cache hits, matching the sherpa-onnx pattern for consistency Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * fix(ci): cache sherpa-onnx and CTranslate2 include headers alongside libs Expand cache paths to include headers so future plugins using bindgen or cc won't break on cache hits. Bump cache keys (v2) to invalidate stale caches that only contained lib files. Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * fix(ci): add root-level Rust config files to change detection filter Include rust-toolchain.toml, clippy.toml, and rustfmt.toml in the rust path filter so changes to toolchain version or lint/format config trigger Rust CI jobs. Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * refactor(ci): restore lint/test parallelism, add clarifying comments - skit.yml: restore separate lint and test jobs (parallel execution) to preserve wall-clock time. Reverts the merge that traded parallelism for fewer runner minutes. - plugins.yml: add comment explaining workflow_dispatch intent (standalone debugging) and CARGO_TARGET_DIR sharing tradeoff (potential feature-flag cross-contamination). Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> * fix(ci): restore contents:read permission, add .cargo/config.toml to filter - changes job: add contents:read to permissions block — job-level permissions replace defaults, so the checkout step needs this explicitly alongside pull-requests:read. - rust path filter: add .cargo/config.toml — this repo-wide Cargo config can alter how every Rust crate builds, so changes to it must trigger Rust CI. Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <cstcld91@gmail.com> --------- Signed-off-by: Claudio Costa <claudio.costa@partners.cognition.ai> Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-authored-by: StreamKit Devin <devin@streamkit.dev> Co-authored-by: Claudio Costa <cstcld91@gmail.com>
1 parent 70ade83 commit 3428471

File tree

12 files changed

+302
-456
lines changed

12 files changed

+302
-456
lines changed

.github/workflows/ci.yml

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,117 @@ concurrency:
1414
cancel-in-progress: true
1515

1616
jobs:
17+
# ---------- Change detection ----------
18+
changes:
19+
name: Detect Changes
20+
runs-on: ubuntu-22.04
21+
permissions:
22+
contents: read
23+
pull-requests: read
24+
outputs:
25+
ci: ${{ steps.filter.outputs.ci }}
26+
rust: ${{ steps.filter.outputs.rust }}
27+
ui: ${{ steps.filter.outputs.ui }}
28+
plugins: ${{ steps.filter.outputs.plugins }}
29+
e2e: ${{ steps.filter.outputs.e2e }}
30+
steps:
31+
- uses: actions/checkout@v5
32+
- uses: dorny/paths-filter@v3
33+
id: filter
34+
with:
35+
filters: |
36+
ci:
37+
- '.github/**'
38+
rust:
39+
- 'crates/**'
40+
- 'apps/**'
41+
- 'sdks/**'
42+
- 'Cargo.toml'
43+
- 'Cargo.lock'
44+
- 'deny.toml'
45+
- 'rust-toolchain.toml'
46+
- 'clippy.toml'
47+
- 'rustfmt.toml'
48+
- '.cargo/config.toml'
49+
ui:
50+
- 'ui/**'
51+
plugins:
52+
- 'plugins/native/**'
53+
e2e:
54+
- 'e2e/**'
55+
56+
# ---------- Sub-workflows ----------
1757
skit:
1858
name: Skit
59+
needs: changes
60+
if: >-
61+
github.event_name == 'workflow_dispatch' ||
62+
needs.changes.outputs.ci == 'true' ||
63+
needs.changes.outputs.rust == 'true' ||
64+
needs.changes.outputs.ui == 'true'
1965
uses: ./.github/workflows/skit.yml
2066

2167
ui:
2268
name: UI
69+
needs: changes
70+
if: >-
71+
github.event_name == 'workflow_dispatch' ||
72+
needs.changes.outputs.ci == 'true' ||
73+
needs.changes.outputs.ui == 'true'
2374
uses: ./.github/workflows/ui.yml
2475

2576
plugins:
2677
name: Plugins
78+
needs: changes
79+
if: >-
80+
github.event_name == 'workflow_dispatch' ||
81+
needs.changes.outputs.ci == 'true' ||
82+
needs.changes.outputs.plugins == 'true' ||
83+
needs.changes.outputs.rust == 'true'
2784
uses: ./.github/workflows/plugins.yml
2885

2986
e2e:
3087
name: E2E
88+
needs: changes
89+
if: >-
90+
github.event_name == 'workflow_dispatch' ||
91+
needs.changes.outputs.ci == 'true' ||
92+
needs.changes.outputs.rust == 'true' ||
93+
needs.changes.outputs.ui == 'true' ||
94+
needs.changes.outputs.e2e == 'true'
3195
uses: ./.github/workflows/e2e.yml
3296

97+
# ---------- Always-run checks ----------
98+
reuse:
99+
name: REUSE Compliance
100+
runs-on: ubuntu-22.04
101+
permissions:
102+
contents: read
103+
steps:
104+
- uses: actions/checkout@v5
105+
- uses: fsfe/reuse-action@v6
106+
107+
# ---------- Gate ----------
33108
all-checks:
34109
name: All Checks Passed
110+
if: always()
35111
runs-on: ubuntu-22.04
36-
needs: [skit, ui, plugins, e2e]
112+
needs: [changes, skit, ui, plugins, e2e, reuse]
37113
steps:
38-
- name: All checks passed
39-
run: echo "All CI checks passed successfully!"
114+
- name: Verify results
115+
run: |
116+
results=(
117+
"${{ needs.changes.result }}"
118+
"${{ needs.skit.result }}"
119+
"${{ needs.ui.result }}"
120+
"${{ needs.plugins.result }}"
121+
"${{ needs.e2e.result }}"
122+
"${{ needs.reuse.result }}"
123+
)
124+
for r in "${results[@]}"; do
125+
if [[ "$r" == "failure" || "$r" == "cancelled" ]]; then
126+
echo "::error::CI check failed or was cancelled ($r)"
127+
exit 1
128+
fi
129+
done
130+
echo "All checks passed or were appropriately skipped."

0 commit comments

Comments
 (0)