diff --git a/.github/ISSUE_TEMPLATE/bug-report.yaml b/.github/ISSUE_TEMPLATE/bug-report.yaml index 4405aad1f..2ed7cf206 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/bug-report.yaml @@ -36,9 +36,9 @@ body: 3. Click Queue Prompt 4. See error value: | - 1. - 2. - 3. + 1. + 2. + 3. validations: required: true diff --git a/.github/workflows/api-update-manager-api-types.yaml b/.github/workflows/api-update-manager-api-types.yaml index 4961ae9d2..c6469326d 100644 --- a/.github/workflows/api-update-manager-api-types.yaml +++ b/.github/workflows/api-update-manager-api-types.yaml @@ -105,4 +105,4 @@ jobs: labels: Manager delete-branch: true add-paths: | - src/types/generatedManagerTypes.ts \ No newline at end of file + src/types/generatedManagerTypes.ts diff --git a/.github/workflows/ci-lint-format.yaml b/.github/workflows/ci-lint-format.yaml index 6ebfd8d38..4221d5174 100644 --- a/.github/workflows/ci-lint-format.yaml +++ b/.github/workflows/ci-lint-format.yaml @@ -51,7 +51,7 @@ jobs: if [ -n "$(git status --porcelain)" ]; then echo "changed=true" >> $GITHUB_OUTPUT else - echo "changed=false" >> $GITHUB_OUTPUT + echo "changed=false" >> $GITHUB_OUTPUT fi - name: Commit changes diff --git a/.github/workflows/ci-python-validation.yaml b/.github/workflows/ci-python-validation.yaml index 698f467bf..2b8279236 100644 --- a/.github/workflows/ci-python-validation.yaml +++ b/.github/workflows/ci-python-validation.yaml @@ -6,7 +6,7 @@ on: paths: - 'tools/devtools/**' push: - branches: [ main ] + branches: [main] paths: - 'tools/devtools/**' diff --git a/.github/workflows/ci-tests-e2e-forks.yaml b/.github/workflows/ci-tests-e2e-forks.yaml index 5d3767f8e..7eadfa63a 100644 --- a/.github/workflows/ci-tests-e2e-forks.yaml +++ b/.github/workflows/ci-tests-e2e-forks.yaml @@ -13,7 +13,7 @@ jobs: deploy-and-comment-forked-pr: runs-on: ubuntu-latest if: | - github.repository == 'Comfy-Org/ComfyUI_frontend' && + github.repository == 'Comfy-Org/ComfyUI_frontend' && github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.head_repository != null && github.event.workflow_run.repository != null && @@ -43,14 +43,14 @@ jobs: repo: context.repo.repo, state: 'open', }); - + const pr = prs.find(p => p.head.sha === context.payload.workflow_run.head_sha); - + if (!pr) { console.log('No PR found for SHA:', context.payload.workflow_run.head_sha); return null; } - + console.log(`Found PR #${pr.number} from fork: ${context.payload.workflow_run.head_repository.full_name}`); return pr.number; @@ -74,7 +74,7 @@ jobs: run-id: ${{ github.event.workflow_run.id }} pattern: playwright-report-* path: reports - + - name: Handle Test Completion if: steps.pr.outputs.result != 'null' && github.event.action == 'completed' env: @@ -85,9 +85,9 @@ jobs: # Rename merged report if exists [ -d "reports/playwright-report-chromium-merged" ] && \ mv reports/playwright-report-chromium-merged reports/playwright-report-chromium - + chmod +x scripts/cicd/pr-playwright-deploy-and-comment.sh ./scripts/cicd/pr-playwright-deploy-and-comment.sh \ "${{ steps.pr.outputs.result }}" \ "${{ github.event.workflow_run.head_branch }}" \ - "completed" \ No newline at end of file + "completed" diff --git a/.github/workflows/ci-tests-e2e.yaml b/.github/workflows/ci-tests-e2e.yaml index 690417a04..8d793e0fa 100644 --- a/.github/workflows/ci-tests-e2e.yaml +++ b/.github/workflows/ci-tests-e2e.yaml @@ -29,7 +29,7 @@ jobs: with: include_build_step: true - name: Setup Playwright - uses: ./.github/actions/setup-playwright # Setup Playwright and cache browsers + uses: ./.github/actions/setup-playwright # Setup Playwright and cache browsers # Save the entire workspace as cache for later test jobs to restore - name: Generate cache key diff --git a/.github/workflows/ci-tests-storybook-forks.yaml b/.github/workflows/ci-tests-storybook-forks.yaml index 083a85f1d..b6cad2060 100644 --- a/.github/workflows/ci-tests-storybook-forks.yaml +++ b/.github/workflows/ci-tests-storybook-forks.yaml @@ -13,7 +13,7 @@ jobs: deploy-and-comment-forked-pr: runs-on: ubuntu-latest if: | - github.repository == 'Comfy-Org/ComfyUI_frontend' && + github.repository == 'Comfy-Org/ComfyUI_frontend' && github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.head_repository != null && github.event.workflow_run.repository != null && @@ -43,14 +43,14 @@ jobs: repo: context.repo.repo, state: 'open', }); - + const pr = prs.find(p => p.head.sha === context.payload.workflow_run.head_sha); - + if (!pr) { console.log('No PR found for SHA:', context.payload.workflow_run.head_sha); return null; } - + console.log(`Found PR #${pr.number} from fork: ${context.payload.workflow_run.head_repository.full_name}`); return pr.number; @@ -74,7 +74,7 @@ jobs: run-id: ${{ github.event.workflow_run.id }} name: storybook-static path: storybook-static - + - name: Handle Storybook Completion if: steps.pr.outputs.result != 'null' && github.event.action == 'completed' env: @@ -88,4 +88,4 @@ jobs: ./scripts/cicd/pr-storybook-deploy-and-comment.sh \ "${{ steps.pr.outputs.result }}" \ "${{ github.event.workflow_run.head_branch }}" \ - "completed" \ No newline at end of file + "completed" diff --git a/.github/workflows/ci-tests-storybook.yaml b/.github/workflows/ci-tests-storybook.yaml index 77dcf5210..5734f9980 100644 --- a/.github/workflows/ci-tests-storybook.yaml +++ b/.github/workflows/ci-tests-storybook.yaml @@ -2,7 +2,7 @@ name: "CI: Tests Storybook" description: "Builds Storybook and runs visual regression testing via Chromatic, deploys previews to Cloudflare Pages" on: - workflow_dispatch: # Allow manual triggering + workflow_dispatch: # Allow manual triggering pull_request: branches: [main] @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v5 - + - name: Post starting comment env: GITHUB_TOKEN: ${{ github.token }} @@ -89,7 +89,7 @@ jobs: - name: Checkout code uses: actions/checkout@v5 with: - fetch-depth: 0 # Required for Chromatic baseline + fetch-depth: 0 # Required for Chromatic baseline - name: Install pnpm uses: pnpm/action-setup@v4 @@ -111,9 +111,9 @@ jobs: with: projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} buildScriptName: build-storybook - autoAcceptChanges: 'main' # Auto-accept changes on main branch - exitOnceUploaded: true # Don't wait for UI tests to complete - onlyChanged: true # Only capture changed stories + autoAcceptChanges: 'main' # Auto-accept changes on main branch + exitOnceUploaded: true # Don't wait for UI tests to complete + onlyChanged: true # Only capture changed stories - name: Set job status id: job-status @@ -138,17 +138,17 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v5 - + - name: Download Storybook build if: needs.storybook-build.outputs.conclusion == 'success' uses: actions/download-artifact@v4 with: name: storybook-static path: storybook-static - + - name: Make deployment script executable run: chmod +x scripts/cicd/pr-storybook-deploy-and-comment.sh - + - name: Deploy Storybook and comment on PR env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} @@ -176,25 +176,25 @@ jobs: script: | const buildUrl = '${{ needs.chromatic-deployment.outputs.chromatic-build-url }}'; const storybookUrl = '${{ needs.chromatic-deployment.outputs.chromatic-storybook-url }}'; - + // Find the existing Storybook comment const { data: comments } = await github.rest.issues.listComments({ owner: context.repo.owner, repo: context.repo.repo, issue_number: ${{ github.event.pull_request.number }} }); - - const storybookComment = comments.find(comment => + + const storybookComment = comments.find(comment => comment.body.includes('') ); - + if (storybookComment && buildUrl && storybookUrl) { // Append Chromatic info to existing comment const updatedBody = storybookComment.body.replace( /---\n(.*)$/s, `---\n### 🎨 Chromatic Visual Tests\n- 📊 [View Chromatic Build](${buildUrl})\n- 📚 [View Chromatic Storybook](${storybookUrl})\n\n$1` ); - + await github.rest.issues.updateComment({ owner: context.repo.owner, repo: context.repo.repo, diff --git a/.github/workflows/ci-yaml-validation.yaml b/.github/workflows/ci-yaml-validation.yaml new file mode 100644 index 000000000..41c88ae2c --- /dev/null +++ b/.github/workflows/ci-yaml-validation.yaml @@ -0,0 +1,33 @@ +name: "CI: YAML Validation" +description: "Validates YAML syntax and style using yamllint with relaxed rules" + +on: + push: + branches: + - main + paths: + - '**/*.yml' + - '**/*.yaml' + pull_request: + paths: + - '**/*.yml' + - '**/*.yaml' + +jobs: + yaml-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Install yamllint + run: | + python -m pip install --upgrade pip + python -m pip install yamllint + + - name: Validate YAML syntax and style + run: ./scripts/cicd/check-yaml.sh diff --git a/.github/workflows/i18n-update-core.yaml b/.github/workflows/i18n-update-core.yaml index 8a20af4c0..cb06e228a 100644 --- a/.github/workflows/i18n-update-core.yaml +++ b/.github/workflows/i18n-update-core.yaml @@ -2,11 +2,11 @@ name: "i18n: Update Core" description: "Generates and updates translations for core ComfyUI components using OpenAI" on: - # Manual dispatch for urgent translation updates + # Manual dispatch for urgent translation updates workflow_dispatch: # Only trigger on PRs to main/master - additional branch filtering in job condition pull_request: - branches: [ main ] + branches: [main] types: [opened, synchronize, reopened] jobs: @@ -15,45 +15,45 @@ jobs: if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.head.repo.full_name == github.repository && startsWith(github.head_ref, 'version-bump-')) runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v5 + - name: Checkout repository + uses: actions/checkout@v5 - # Setup playwright environment - - name: Setup ComfyUI Frontend - uses: ./.github/actions/setup-frontend - with: - include_build_step: true - - name: Setup ComfyUI Server - uses: ./.github/actions/setup-comfyui-server - with: - launch_server: true - - name: Setup Playwright - uses: ./.github/actions/setup-playwright + # Setup playwright environment + - name: Setup ComfyUI Frontend + uses: ./.github/actions/setup-frontend + with: + include_build_step: true + - name: Setup ComfyUI Server + uses: ./.github/actions/setup-comfyui-server + with: + launch_server: true + - name: Setup Playwright + uses: ./.github/actions/setup-playwright - - name: Start dev server - # Run electron dev server as it is a superset of the web dev server - # We do want electron specific UIs to be translated. - run: pnpm dev:electron & + - name: Start dev server + # Run electron dev server as it is a superset of the web dev server + # We do want electron specific UIs to be translated. + run: pnpm dev:electron & - # Update locales, collect new strings and update translations using OpenAI, then commit changes - - name: Update en.json - run: pnpm collect-i18n - env: - PLAYWRIGHT_TEST_URL: http://localhost:5173 - - name: Update translations - run: pnpm locale - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - - name: Commit updated locales - run: | - git config --global user.name 'github-actions' - git config --global user.email 'github-actions@github.com' - git fetch origin ${{ github.head_ref }} - # Stash any local changes before checkout - git stash -u - git checkout -B ${{ github.head_ref }} origin/${{ github.head_ref }} - # Apply the stashed changes if any - git stash pop || true - git add src/locales/ - git diff --staged --quiet || git commit -m "Update locales" - git push origin HEAD:${{ github.head_ref }} + # Update locales, collect new strings and update translations using OpenAI, then commit changes + - name: Update en.json + run: pnpm collect-i18n + env: + PLAYWRIGHT_TEST_URL: http://localhost:5173 + - name: Update translations + run: pnpm locale + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + - name: Commit updated locales + run: | + git config --global user.name 'github-actions' + git config --global user.email 'github-actions@github.com' + git fetch origin ${{ github.head_ref }} + # Stash any local changes before checkout + git stash -u + git checkout -B ${{ github.head_ref }} origin/${{ github.head_ref }} + # Apply the stashed changes if any + git stash pop || true + git add src/locales/ + git diff --staged --quiet || git commit -m "Update locales" + git push origin HEAD:${{ github.head_ref }} diff --git a/.github/workflows/i18n-update-custom-nodes.yaml b/.github/workflows/i18n-update-custom-nodes.yaml index 61076f031..5844065ad 100644 --- a/.github/workflows/i18n-update-custom-nodes.yaml +++ b/.github/workflows/i18n-update-custom-nodes.yaml @@ -21,116 +21,116 @@ jobs: update-locales: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v5 + - name: Checkout repository + uses: actions/checkout@v5 - # Setup playwright environment with custom node repository - - name: Setup ComfyUI Server (without launching) - uses: ./.github/actions/setup-comfyui-server - - name: Setup frontend - uses: ./.github/actions/setup-frontend - with: - include_build_step: 'true' - - name: Setup Playwright - uses: ./.github/actions/setup-playwright + # Setup playwright environment with custom node repository + - name: Setup ComfyUI Server (without launching) + uses: ./.github/actions/setup-comfyui-server + - name: Setup frontend + uses: ./.github/actions/setup-frontend + with: + include_build_step: 'true' + - name: Setup Playwright + uses: ./.github/actions/setup-playwright - # Install the custom node repository - - name: Checkout custom node repository - uses: actions/checkout@v5 - with: - repository: ${{ inputs.owner }}/${{ inputs.repository }} - path: 'ComfyUI/custom_nodes/${{ inputs.repository }}' - - name: Install custom node Python requirements - working-directory: ComfyUI/custom_nodes/${{ inputs.repository }} - run: | - if [ -f "requirements.txt" ]; then - pip install -r requirements.txt - fi + # Install the custom node repository + - name: Checkout custom node repository + uses: actions/checkout@v5 + with: + repository: ${{ inputs.owner }}/${{ inputs.repository }} + path: 'ComfyUI/custom_nodes/${{ inputs.repository }}' + - name: Install custom node Python requirements + working-directory: ComfyUI/custom_nodes/${{ inputs.repository }} + run: | + if [ -f "requirements.txt" ]; then + pip install -r requirements.txt + fi - # Start ComfyUI Server - - name: Start ComfyUI Server - shell: bash - working-directory: ComfyUI - run: | - python main.py --cpu --multi-user --front-end-root ../dist --custom-node-path ../ComfyUI/custom_nodes/${{ inputs.repository }} & - wait-for-it --service + # Start ComfyUI Server + - name: Start ComfyUI Server + shell: bash + working-directory: ComfyUI + run: | + python main.py --cpu --multi-user --front-end-root ../dist --custom-node-path ../ComfyUI/custom_nodes/${{ inputs.repository }} & + wait-for-it --service - - name: Start dev server - # Run electron dev server as it is a superset of the web dev server - # We do want electron specific UIs to be translated. - run: pnpm dev:electron & - - - name: Capture base i18n - run: pnpm exec tsx scripts/diff-i18n capture - - name: Update en.json - run: pnpm collect-i18n - env: - PLAYWRIGHT_TEST_URL: http://localhost:5173 - - name: Update translations - run: pnpm locale - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - - name: Diff base vs updated i18n - run: pnpm exec tsx scripts/diff-i18n diff - - name: Update i18n in custom node repository - run: | - LOCALE_DIR=ComfyUI/custom_nodes/${{ inputs.repository }}/locales/ - install -d "$LOCALE_DIR" - cp -rf ComfyUI_frontend/temp/diff/* "$LOCALE_DIR" - - # Git ops for pushing changes and creating PR - - name: Check and create fork of custom node repository - run: | - # Try to fork the repository - gh repo fork ${{ inputs.owner }}/${{ inputs.repository }} --clone=false || { - echo "Fork failed - repository might already be forked" - # Exit 0 to prevent the workflow from failing - exit 0 - } + - name: Start dev server + # Run electron dev server as it is a superset of the web dev server + # We do want electron specific UIs to be translated. + run: pnpm dev:electron & - # Enable workflows on the forked repository - gh api \ - --method PUT \ - -H "Accept: application/vnd.github+json" \ - "/repos/${{ inputs.fork_owner }}/${{ inputs.repository }}/actions/permissions/workflow" \ - -F can_approve_pull_request_reviews=true \ - -F default_workflow_permissions="write" \ - -F enabled=true - env: - GH_TOKEN: ${{ secrets.PR_GH_TOKEN }} + - name: Capture base i18n + run: pnpm exec tsx scripts/diff-i18n capture + - name: Update en.json + run: pnpm collect-i18n + env: + PLAYWRIGHT_TEST_URL: http://localhost:5173 + - name: Update translations + run: pnpm locale + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + - name: Diff base vs updated i18n + run: pnpm exec tsx scripts/diff-i18n diff + - name: Update i18n in custom node repository + run: | + LOCALE_DIR=ComfyUI/custom_nodes/${{ inputs.repository }}/locales/ + install -d "$LOCALE_DIR" + cp -rf ComfyUI_frontend/temp/diff/* "$LOCALE_DIR" - - name: Commit changes - working-directory: ComfyUI/custom_nodes/${{ inputs.repository }} - run: | - git config --global user.name 'github-actions' - git config --global user.email 'github-actions@github.com' + # Git ops for pushing changes and creating PR + - name: Check and create fork of custom node repository + run: | + # Try to fork the repository + gh repo fork ${{ inputs.owner }}/${{ inputs.repository }} --clone=false || { + echo "Fork failed - repository might already be forked" + # Exit 0 to prevent the workflow from failing + exit 0 + } - # Create and switch to new branch - git checkout -b update-locales + # Enable workflows on the forked repository + gh api \ + --method PUT \ + -H "Accept: application/vnd.github+json" \ + "/repos/${{ inputs.fork_owner }}/${{ inputs.repository }}/actions/permissions/workflow" \ + -F can_approve_pull_request_reviews=true \ + -F default_workflow_permissions="write" \ + -F enabled=true + env: + GH_TOKEN: ${{ secrets.PR_GH_TOKEN }} - # Stage and commit changes - git add -A - git commit -m "Update locales" + - name: Commit changes + working-directory: ComfyUI/custom_nodes/${{ inputs.repository }} + run: | + git config --global user.name 'github-actions' + git config --global user.email 'github-actions@github.com' - - name: Install SSH key For PUSH - uses: shimataro/ssh-key-action@d4fffb50872869abe2d9a9098a6d9c5aa7d16be4 - with: - # PR private key from action server - key: ${{ secrets.PR_SSH_PRIVATE_KEY }} - # github public key to confirm it's github server - known_hosts: github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== + # Create and switch to new branch + git checkout -b update-locales - - name: Push changes - working-directory: ComfyUI/custom_nodes/${{ inputs.repository }} - run: | - # Force push to create the branch - echo "Pushing changes to ${{ inputs.fork_owner }}/${{ inputs.repository }}" - git push -f git@github.com:${{ inputs.fork_owner }}/${{ inputs.repository }}.git update-locales + # Stage and commit changes + git add -A + git commit -m "Update locales" - - name: Create PR - working-directory: ComfyUI/custom_nodes/${{ inputs.repository }} - run: | - # Create PR using gh cli - gh pr create --title "Update locales for ${{ inputs.repository }}" --repo ${{ inputs.owner }}/${{ inputs.repository }} --head ${{ inputs.fork_owner }}:update-locales --body "Update locales for ${{ inputs.repository }}" - env: - GH_TOKEN: ${{ secrets.PR_GH_TOKEN }} + - name: Install SSH key For PUSH + uses: shimataro/ssh-key-action@d4fffb50872869abe2d9a9098a6d9c5aa7d16be4 + with: + # PR private key from action server + key: ${{ secrets.PR_SSH_PRIVATE_KEY }} + # github public key to confirm it's github server + known_hosts: github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== + + - name: Push changes + working-directory: ComfyUI/custom_nodes/${{ inputs.repository }} + run: | + # Force push to create the branch + echo "Pushing changes to ${{ inputs.fork_owner }}/${{ inputs.repository }}" + git push -f git@github.com:${{ inputs.fork_owner }}/${{ inputs.repository }}.git update-locales + + - name: Create PR + working-directory: ComfyUI/custom_nodes/${{ inputs.repository }} + run: | + # Create PR using gh cli + gh pr create --title "Update locales for ${{ inputs.repository }}" --repo ${{ inputs.owner }}/${{ inputs.repository }} --head ${{ inputs.fork_owner }}:update-locales --body "Update locales for ${{ inputs.repository }}" + env: + GH_TOKEN: ${{ secrets.PR_GH_TOKEN }} diff --git a/.github/workflows/i18n-update-nodes.yaml b/.github/workflows/i18n-update-nodes.yaml index 0b9f1534d..46db1661e 100644 --- a/.github/workflows/i18n-update-nodes.yaml +++ b/.github/workflows/i18n-update-nodes.yaml @@ -13,42 +13,42 @@ jobs: update-locales: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v5 - # Setup playwright environment - - name: Setup ComfyUI Server (and start) - uses: ./.github/actions/setup-comfyui-server - with: - launch_server: true - - name: Setup frontend - uses: ./.github/actions/setup-frontend - with: - include_build_step: true - - name: Setup Playwright - uses: ./.github/actions/setup-playwright + - name: Checkout repository + uses: actions/checkout@v5 + # Setup playwright environment + - name: Setup ComfyUI Server (and start) + uses: ./.github/actions/setup-comfyui-server + with: + launch_server: true + - name: Setup frontend + uses: ./.github/actions/setup-frontend + with: + include_build_step: true + - name: Setup Playwright + uses: ./.github/actions/setup-playwright - - name: Start dev server - # Run electron dev server as it is a superset of the web dev server - # We do want electron specific UIs to be translated. - run: pnpm dev:electron & - - name: Update en.json - run: pnpm collect-i18n -- scripts/collect-i18n-node-defs.ts - env: - PLAYWRIGHT_TEST_URL: http://localhost:5173 - - name: Update translations - run: pnpm locale - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - - name: Create Pull Request - uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e - with: - token: ${{ secrets.PR_GH_TOKEN }} - commit-message: "Update locales for node definitions" - title: "Update locales for node definitions" - body: | - Automated PR to update locales for node definitions + - name: Start dev server + # Run electron dev server as it is a superset of the web dev server + # We do want electron specific UIs to be translated. + run: pnpm dev:electron & + - name: Update en.json + run: pnpm collect-i18n -- scripts/collect-i18n-node-defs.ts + env: + PLAYWRIGHT_TEST_URL: http://localhost:5173 + - name: Update translations + run: pnpm locale + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + - name: Create Pull Request + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e + with: + token: ${{ secrets.PR_GH_TOKEN }} + commit-message: "Update locales for node definitions" + title: "Update locales for node definitions" + body: | + Automated PR to update locales for node definitions - This PR was created automatically by the frontend update workflow. - branch: update-locales-node-defs-${{ github.event.inputs.trigger_type }}-${{ github.run_id }} - base: main - labels: dependencies + This PR was created automatically by the frontend update workflow. + branch: update-locales-node-defs-${{ github.event.inputs.trigger_type }}-${{ github.run_id }} + base: main + labels: dependencies diff --git a/.github/workflows/pr-backport.yaml b/.github/workflows/pr-backport.yaml index 5b47a4dbb..c56126af4 100644 --- a/.github/workflows/pr-backport.yaml +++ b/.github/workflows/pr-backport.yaml @@ -19,8 +19,8 @@ on: jobs: backport: if: > - (github.event_name == 'pull_request_target' && - github.event.pull_request.merged == true && + (github.event_name == 'pull_request_target' && + github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'needs-backport')) || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest @@ -38,19 +38,19 @@ jobs: echo "::error::Invalid PR number format. Must be a positive integer." exit 1 fi - + # Validate PR exists and is merged if ! gh pr view "${{ inputs.pr_number }}" --json merged >/dev/null 2>&1; then echo "::error::PR #${{ inputs.pr_number }} not found or inaccessible." exit 1 fi - + MERGED=$(gh pr view "${{ inputs.pr_number }}" --json merged --jq '.merged') if [ "$MERGED" != "true" ]; then echo "::error::PR #${{ inputs.pr_number }} is not merged. Only merged PRs can be backported." exit 1 fi - + # Validate PR has needs-backport label if ! gh pr view "${{ inputs.pr_number }}" --json labels --jq '.labels[].name' | grep -q "needs-backport"; then echo "::error::PR #${{ inputs.pr_number }} does not have 'needs-backport' label." @@ -330,7 +330,7 @@ jobs: PR_TITLE="${{ github.event.pull_request.title }}" PR_AUTHOR="${{ github.event.pull_request.user.login }}" fi - + for backport in ${{ steps.backport.outputs.success }}; do IFS=':' read -r target branch <<< "${backport}" diff --git a/.github/workflows/pr-update-playwright-expectations.yaml b/.github/workflows/pr-update-playwright-expectations.yaml index a01362466..9f6fa56a5 100644 --- a/.github/workflows/pr-update-playwright-expectations.yaml +++ b/.github/workflows/pr-update-playwright-expectations.yaml @@ -127,26 +127,26 @@ jobs: echo "==========================================" echo "STAGING CHANGED SNAPSHOTS (Shard ${{ matrix.shardIndex }})" echo "==========================================" - + # Get list of changed snapshot files changed_files=$(git diff --name-only browser_tests/ 2>/dev/null | grep -E '\-snapshots/' || echo "") - + if [ -z "$changed_files" ]; then echo "No snapshot changes in this shard" echo "has-changes=false" >> $GITHUB_OUTPUT exit 0 fi - + echo "✓ Found changed files:" echo "$changed_files" file_count=$(echo "$changed_files" | wc -l) echo "Count: $file_count" echo "has-changes=true" >> $GITHUB_OUTPUT echo "" - + # Create staging directory mkdir -p /tmp/changed_snapshots_shard - + # Copy only changed files, preserving directory structure # Strip 'browser_tests/' prefix to avoid double nesting echo "Copying changed files to staging directory..." @@ -159,7 +159,7 @@ jobs: cp "$file" "/tmp/changed_snapshots_shard/$file_without_prefix" echo " → $file_without_prefix" done <<< "$changed_files" - + echo "" echo "Staged files for upload:" find /tmp/changed_snapshots_shard -type f @@ -233,18 +233,18 @@ jobs: shard_name=$(basename "$shard_dir") file_count=$(find "$shard_dir" -type f | wc -l) - + if [ "$file_count" -eq 0 ]; then echo " $shard_name: no files" continue fi echo "Processing $shard_name ($file_count file(s))..." - + # Copy files directly, preserving directory structure # Since files are already in correct structure (no browser_tests/ prefix), just copy them all cp -v -r "$shard_dir"* browser_tests/ 2>&1 | sed 's/^/ /' - + merged_count=$((merged_count + 1)) echo " ✓ Merged" echo "" @@ -272,25 +272,25 @@ jobs: run: | git config --global user.name 'github-actions' git config --global user.email 'github-actions@github.com' - + if git diff --quiet browser_tests/; then echo "No changes to commit" echo "has-changes=false" >> $GITHUB_OUTPUT exit 0 fi - + echo "==========================================" echo "COMMITTING CHANGES" echo "==========================================" - + echo "has-changes=true" >> $GITHUB_OUTPUT - + git add browser_tests/ git commit -m "[automated] Update test expectations" - + echo "Pushing to ${{ needs.setup.outputs.branch }}..." git push origin ${{ needs.setup.outputs.branch }} - + echo "✓ Commit and push successful" - name: Add Done Reaction @@ -306,4 +306,4 @@ jobs: if: always() && github.event_name == 'pull_request' run: gh pr edit ${{ needs.setup.outputs.pr-number }} --remove-label "New Browser Test Expectations" env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/version-bump-desktop-ui.yaml b/.github/workflows/version-bump-desktop-ui.yaml index 123cdbd9b..0a8aca1b7 100644 --- a/.github/workflows/version-bump-desktop-ui.yaml +++ b/.github/workflows/version-bump-desktop-ui.yaml @@ -92,4 +92,3 @@ jobs: base: ${{ github.event.inputs.branch }} labels: | Release - diff --git a/.yamllint b/.yamllint new file mode 100644 index 000000000..9108997d4 --- /dev/null +++ b/.yamllint @@ -0,0 +1,10 @@ +extends: default + +ignore: | + node_modules/ + dist/ + +rules: + line-length: disable + document-start: disable + truthy: disable diff --git a/scripts/cicd/check-yaml.sh b/scripts/cicd/check-yaml.sh new file mode 100755 index 000000000..fbb1da3b6 --- /dev/null +++ b/scripts/cicd/check-yaml.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(git rev-parse --show-toplevel)" +cd "$ROOT_DIR" + +mapfile -t yaml_files < <(git ls-files '*.yml' '*.yaml') + +if [[ ${#yaml_files[@]} -eq 0 ]]; then + echo "No YAML files found to lint" + exit 0 +fi + +yamllint --config-file .yamllint "${yaml_files[@]}"