mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-14 09:27:41 +00:00
## Problem The lint/format CI workflow was broken for fork PRs in two ways: ### 1. Node version mismatch in setup-frontend action The `setup-frontend` shared action (created in #8377) was missed when Node version was standardized to `.nvmrc` in #9521. It still used `node-version: 'lts/*'` instead of `node-version-file: '.nvmrc'`. ### 2. Fork PRs with lint issues silently passed CI Fork PRs with auto-fixable lint/format issues got a **green checkmark** despite having unfixed issues: 1. Auto-fix steps (`lint:fix`, `format`) fix issues in the workspace 2. `Commit changes` is correctly skipped for forks (can't push to fork branches) 3. `Final validation` passes because it runs on the already-fixed workspace 4. The `Comment on PR about manual fix needed` step tries to post a comment via `actions/github-script`, but fork PRs have a read-only `GITHUB_TOKEN` — the comment silently fails (`continue-on-error: true`) 5. **Result**: workflow reports success, contributor thinks their code is clean ## Fix - **setup-frontend**: Use `node-version-file: '.nvmrc'` instead of `node-version: 'lts/*'` - **ci-lint-format**: Replace the broken fork comment step with an explicit `exit 1` that fails CI and prints clear fix instructions in the log. This follows the principle from `.github/AGENTS.md`: fork PRs can't post comments, so don't try. ## Testing - [ ] Verify fork PRs with clean code still pass - [ ] Verify fork PRs with lint issues now properly fail (instead of silently passing) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9846-fix-restore-fork-PR-lint-format-CI-workflow-3226d73d3650811cb5bfe9f1f989cc0c) by [Unito](https://www.unito.io)
103 lines
3.6 KiB
YAML
103 lines
3.6 KiB
YAML
# Description: Linting and code formatting validation for pull requests
|
|
name: 'CI: Lint Format'
|
|
|
|
on:
|
|
pull_request:
|
|
branches-ignore: [wip/*, draft/*, temp/*]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
|
|
jobs:
|
|
lint-and-format:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout PR
|
|
uses: actions/checkout@v6
|
|
with:
|
|
ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || github.ref }}
|
|
token: ${{ !github.event.pull_request.head.repo.fork && secrets.PR_GH_TOKEN || github.token }}
|
|
|
|
- name: Setup frontend
|
|
uses: ./.github/actions/setup-frontend
|
|
|
|
- name: Detect browser_tests changes
|
|
id: changed-paths
|
|
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
|
with:
|
|
filters: |
|
|
browser_tests:
|
|
- 'browser_tests/**'
|
|
|
|
- name: Run ESLint with auto-fix
|
|
run: pnpm lint:fix
|
|
|
|
- name: Run Stylelint with auto-fix
|
|
run: pnpm stylelint:fix
|
|
|
|
- name: Run oxfmt with auto-format
|
|
run: pnpm format
|
|
|
|
- name: Check for changes
|
|
id: verify-changed-files
|
|
run: |
|
|
if [ -n "$(git status --porcelain)" ]; then
|
|
echo "changed=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "changed=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Commit changes
|
|
if: steps.verify-changed-files.outputs.changed == 'true' && github.event.pull_request.head.repo.full_name == github.repository
|
|
run: |
|
|
git config --local user.email "action@github.com"
|
|
git config --local user.name "GitHub Action"
|
|
git add .
|
|
git commit -m "[automated] Apply ESLint and Oxfmt fixes"
|
|
git push
|
|
|
|
- name: Fail for fork PRs with unfixed lint/format issues
|
|
if: steps.verify-changed-files.outputs.changed == 'true' && github.event.pull_request.head.repo.full_name != github.repository
|
|
run: |
|
|
echo "::error::Linting/formatting issues found. Since this PR is from a fork, auto-fix cannot be applied automatically."
|
|
echo ""
|
|
echo "Please run these commands locally and push the changes:"
|
|
echo " pnpm lint:fix"
|
|
echo " pnpm stylelint:fix"
|
|
echo " pnpm format"
|
|
echo ""
|
|
echo "Or set up pre-commit hooks to automatically format on every commit:"
|
|
echo " pnpm prepare"
|
|
echo ""
|
|
echo "See CONTRIBUTING.md for more details."
|
|
exit 1
|
|
|
|
- name: Final validation
|
|
run: |
|
|
pnpm lint
|
|
pnpm stylelint
|
|
pnpm format:check
|
|
pnpm knip
|
|
|
|
- name: Typecheck browser tests
|
|
if: steps.changed-paths.outputs.browser_tests == 'true'
|
|
run: pnpm typecheck:browser
|
|
|
|
- name: Comment on PR about auto-fix
|
|
if: steps.verify-changed-files.outputs.changed == 'true' && github.event.pull_request.head.repo.full_name == github.repository
|
|
continue-on-error: true
|
|
uses: actions/github-script@v8
|
|
with:
|
|
script: |
|
|
github.rest.issues.createComment({
|
|
issue_number: context.issue.number,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
body: '## 🔧 Auto-fixes Applied\n\nThis PR has been automatically updated to fix linting and formatting issues.\n\n**⚠️ Important**: Your local branch is now behind. Run `git pull` before making additional changes to avoid conflicts.\n\n### Changes made:\n- ESLint auto-fixes\n- Oxfmt formatting'
|
|
})
|