Skip to content

Build: Simplify lint-staged formatting with '*' glob#34605

Closed
kasperpeulen wants to merge 3 commits into
nextfrom
maintenance/lintstaged-scripts-oxfmt
Closed

Build: Simplify lint-staged formatting with '*' glob#34605
kasperpeulen wants to merge 3 commits into
nextfrom
maintenance/lintstaged-scripts-oxfmt

Conversation

@kasperpeulen
Copy link
Copy Markdown
Member

@kasperpeulen kasperpeulen commented Apr 21, 2026

Closes #

What I did

CI enforces yarn fmt:check (root oxfmt --check .) on the whole repo, but pre-commit only ran oxfmt for code/** and docs/_snippets/**. Files like .lintstagedrc.mjs, nx.json, or anything under scripts/** could drift until CI failed.

Instead of enumerating every covered path, take advantage of oxfmt already:

  • respecting .oxfmtrc.json ignorePatterns when given explicit file paths, and
  • silently skipping unknown extensions.

That makes a single '*' glob safe and keeps pre-commit aligned with CI automatically, even for new files at the repo root or in new directories.

Also switch yarn lint-staged to --concurrent=false so overlapping globs (e.g. oxfmt from '*' and eslint --fix from code/**) don't race on the same file.

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

Caution

This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!

Verified locally:

  • yarn fmt:check passes on the whole repo.
  • Committing an intentionally unformatted .lintstagedrc.mjs triggers oxfmt via the * group and fixes it (with FIX_ON_COMMIT=1) / fails the commit (without), matching CI.
  • Staged files outside every named glob (e.g. .husky/pre-commit) are still picked up by the * group and either skipped (unknown extension) or formatted as appropriate.

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update
    MIGRATION.MD

Checklist for Maintainers

  • When this PR is ready for testing, make sure to add ci:normal, ci:merged or ci:daily GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found in code/lib/cli-storybook/src/sandbox-templates.ts

  • Make sure this PR contains one of the labels below:

    Available labels
    • bug: Internal changes that fixes incorrect behavior.
    • maintenance: User-facing maintenance tasks.
    • dependencies: Upgrading (sometimes downgrading) dependencies.
    • build: Internal-facing build tooling & test updates. Will not show up in release changelog.
    • cleanup: Minor cleanup style change. Will not show up in release changelog.
    • documentation: Documentation only changes. Will not show up in release changelog.
    • feature request: Introducing a new feature.
    • BREAKING CHANGE: Changes that break compatibility in some way with current major version.
    • other: Changes that don't fit in the above categories.

Canary release

This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the @storybookjs/core team here.

core team members can create a canary release here or locally with gh workflow run --repo storybookjs/storybook publish.yml --field pr=<PR_NUMBER>

Summary by CodeRabbit

  • Chores
    • Broadened pre-commit formatting to run the formatter on all staged files (previously targeted specific docs snippets), while keeping existing lint checks scoped to code files.
    • Pre-commit now runs the staged-lint step with concurrency disabled; formatting still runs in "check" mode when autofix is off.

Align pre-commit with CI, which runs yarn fmt:check (oxfmt) on the whole repo.
@kasperpeulen kasperpeulen added build Internal-facing build tooling & test updates ci:normal labels Apr 21, 2026
@kasperpeulen kasperpeulen marked this pull request as ready for review April 21, 2026 17:10
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 21, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2a978f20-8485-489d-b588-a2d28068e803

📥 Commits

Reviewing files that changed from the base of the PR and between 33f3543 and c2a2600.

📒 Files selected for processing (2)
  • .husky/pre-commit
  • .lintstagedrc.mjs
✅ Files skipped from review due to trivial changes (1)
  • .husky/pre-commit
🚧 Files skipped from review as they are similar to previous changes (1)
  • .lintstagedrc.mjs

📝 Walkthrough

Walkthrough

Updated lint-staged to run oxfmt for all staged files via a catch-all '*' entry, removed the dedicated docs/_snippets formatting glob, and retained the existing code/**/*.{js,jsx,mjs,ts,tsx,html,json} lint command. The pre-commit hook now runs yarn lint-staged --concurrent=false.

Changes

Cohort / File(s) Summary
Lint-staged config
./.lintstagedrc.mjs
Added a catch-all '*' entry to run oxfmt (or oxfmt --check when not autofixing); removed the docs/_snippets/**/*.{js,jsx,mjs,ts,tsx,html,json} formatting step; kept existing code/**/*.{js,jsx,mjs,ts,tsx,html,json} yarn --cwd code lint:js:cmd... lint command.
Pre-commit hook
./.husky/pre-commit
Changed invocation to yarn lint-staged --concurrent=false, preserving the same conditional behavior based on SKIP_STORYBOOK_GIT_HOOKS.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands and usage tips.

- Format .lintstagedrc.mjs (CI fmt:check)
- Match root files that oxfmt formats but sit outside code/scripts/docs_snippets
- oxfmt respects .oxfmtrc.json ignorePatterns and skips unknown
  extensions when given explicit file paths, so a single '*' entry
  keeps pre-commit aligned with CI (yarn fmt:check) without enumerating
  every root config path.
- Pass --concurrent=false to lint-staged to avoid races when multiple
  globs match the same file (e.g. oxfmt from '*' vs eslint --fix from
  'code/**').
@kasperpeulen kasperpeulen changed the title Build: Run oxfmt on staged scripts in lint-staged Build: Simplify lint-staged formatting with '*' glob Apr 21, 2026
@kasperpeulen
Copy link
Copy Markdown
Member Author

Closing — going to handle this via Cursor hooks instead of lint-staged changes.

@kasperpeulen kasperpeulen deleted the maintenance/lintstaged-scripts-oxfmt branch April 21, 2026 17:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build Internal-facing build tooling & test updates ci:normal

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant