Skip to content

ci: split the ci workflow so each side only runs on its own changes - #34

Merged
dlukt merged 1 commit into
mainfrom
ci/split-workflows-by-path
Sep 22, 2026
Merged

dlukt merged 1 commit into
mainfrom
ci/split-workflows-by-path

Conversation

@dlukt

@dlukt dlukt commented Sep 22, 2026

Copy link
Copy Markdown
Owner

The combined ci workflow ran both jobs on every PR, so a client-only change paid for a ~5 minute Rust build and a cargo-only change paid for the full npm suite. Across the 13 dependency PRs just processed, that was most of the Actions spend.

GitHub has no per-job paths filter, so one workflow per side is the only way to get this without pulling in a third-party changed-files action (dorny/paths-filter and a gating job would cost an extra runner start on every run, and a dependency this repo otherwise doesn't have).

workflow runs when
ci-server server/**, or its own workflow file
ci-client client/**, or its own workflow file

A change touching both sides still runs both — as this PR does, since it edits both workflow files.

Why the server job is safe to skip on client changes

server/build.rs requires client/dist/index.html only for release builds:

if env::var("PROFILE").is_ok_and(|p| p == "release") {

CI builds the dev profile (cargo test), so nothing under client/ can affect the server job. The release path is exercised by release.yml, which is manual and unchanged.

security.yml is deliberately left unfiltered — it audits both ecosystems on a cron, independent of what changed.

One thing to know

This is safe because main has no branch protection. Path-filtered workflows that correctly don't run leave their checks absent rather than passing, which would block merges if they were configured as required status checks. If you add branch protection later, mark these as required only via a job that always runs, or accept that a docs-only PR shows no checks.

Also updated: the stale ci-workflow references in dependabot.yml and security.yml comments.

🤖 Generated with Claude Code

The combined `ci` workflow ran both jobs on every PR, so a client-only
change paid for a ~5 minute Rust build and a cargo-only change paid for
the full npm suite. Across the 13 dependency PRs just processed that was
most of the Actions spend.

GitHub has no per-job `paths` filter, so one workflow per side is the
only way to get this without pulling in a third-party changed-files
action:

- ci-server.yml  <- server/** , its own workflow file
- ci-client.yml  <- client/** , its own workflow file

Nothing under client/ can affect the server job: server/build.rs only
requires client/dist/index.html for *release* builds, and CI builds the
dev profile. A change touching both still runs both.

security.yml is deliberately left unfiltered -- it audits both
ecosystems on a cron, independent of what changed.

Safe to do here because main has no branch protection, so there are no
required status checks to strand when a workflow correctly does not run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@dlukt
dlukt merged commit 8ed3e53 into main Sep 22, 2026
2 checks passed
@dlukt
dlukt deleted the ci/split-workflows-by-path branch September 22, 2026 16:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant