Skip to content

ci: split ShellCheck into its own path-gated job - #106

Merged
loss-and-quick merged 1 commit into
mainfrom
ci/split-shellcheck-job
Jun 22, 2026
Merged

ci: split ShellCheck into its own path-gated job#106
loss-and-quick merged 1 commit into
mainfrom
ci/split-shellcheck-job

Conversation

@loss-and-quick

Copy link
Copy Markdown
Owner

Summary

Splits the ShellCheck step out of the frontend CI job into its own path-gated job, so a scripts-only or module-only PR no longer runs the entire frontend pipeline just to lint a shell script.

Before: ShellCheck lived inside the frontend job, so the changes detector lumped scripts/ and module/ into the frontend bucket. A PR touching only scripts/foo.sh ran the full bun install + biome check + vite build + vitest — minutes of work — to reach a shellcheck that takes seconds. (This is exactly what made the frontend job run on the core-compat PR, which only added a shell script.)

After:

  • New top-level shellcheck job, gated on a new shell change output (module/ + scripts/). shellcheck ships on the ubuntu-latest runner, so the job is just checkout + lint.
  • The frontend filter is narrowed to the actual frontend inputs: frontend/, package.json, bun.lock, biome.json (biome only lints frontend/**, confirmed in biome.json, so dropping scripts//module/ is safe).
  • The ci aggregator gains shellcheck in its needs, so it stays the single required check (a skipped shell area is treated as pass, same as the others).

Net effect: a shell-only change runs ~seconds of shellcheck; a frontend-only change no longer pays for shellcheck; both still run when both areas change.

Affected layer

  • frontend/ — React Web UI
  • crates/ · src-tauri/ — Rust core / backend / Tauri desktop
  • module/
  • scripts/
  • CI / .github/
  • Docs only

Verification

  • actionlint .github/workflows/ci.yml clean
  • The moved ShellCheck commands pass locally (shellcheck -s sh module/*.sh, -s bash module/customize.sh scripts/*.sh)
  • All jobs are top-level; ci aggregator's needs updated

Checklist

  • Title is a scoped Conventional Commit
  • No build artifacts committed
  • No user-visible strings / project-id renames

Notes for reviewers

  • Independent of the test/fix/core-compat PRs — based on main, touches only ci.yml.
  • The aggregator's pass/skip logic is unchanged: shellcheck skipped (no shell change) → result skipped → treated as pass by the existing loop.

@github-actions github-actions Bot added the ci CI / workflows (.github/) label Jun 22, 2026
ShellCheck lived inside the frontend job, so the change detector lumped scripts/
and module/ into the frontend bucket — a scripts-only or module-only PR ran the
full bun install + biome + vite build + vitest just to lint a shell script.

Move ShellCheck to its own job gated on a new `shell` change output (module/ +
scripts/), and narrow the frontend filter to the actual frontend inputs
(frontend/, package.json, bun.lock, biome.json). A shell-only change now runs
seconds of shellcheck instead of the whole frontend pipeline; the ci aggregator
gains the new job in its needs.
@loss-and-quick
loss-and-quick force-pushed the ci/split-shellcheck-job branch from b36f4a4 to f3a4a74 Compare June 22, 2026 17:03
@loss-and-quick
loss-and-quick merged commit b6b24b4 into main Jun 22, 2026
9 checks passed
@loss-and-quick
loss-and-quick deleted the ci/split-shellcheck-job branch June 22, 2026 17:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI / workflows (.github/)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant