diff --git a/.changeset/skip-community-worlds-main.md b/.changeset/skip-community-worlds-main.md new file mode 100644 index 0000000000..1f83f96378 --- /dev/null +++ b/.changeset/skip-community-worlds-main.md @@ -0,0 +1,4 @@ +--- +--- + +Disable community world E2E jobs on `main` CI and drop them from the required checks. Community worlds target an older spec version and don't yet support the CBOR queue transport; they continue to run on `stable`. diff --git a/.github/actions/setup-workflow-dev/action.yml b/.github/actions/setup-workflow-dev/action.yml index 44da12c1bc..d12b3eff98 100644 --- a/.github/actions/setup-workflow-dev/action.yml +++ b/.github/actions/setup-workflow-dev/action.yml @@ -6,10 +6,6 @@ inputs: description: 'Node.js version to use' required: false default: '22.x' - pnpm-version: - description: 'pnpm version to use' - required: false - default: '10.14.0' setup-rust: description: 'Whether to setup Rust toolchain' required: false @@ -37,9 +33,7 @@ runs: toolchain: stable - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: ${{ inputs.pnpm-version }} + uses: pnpm/action-setup@v5 - name: Setup Node.js ${{ inputs.node-version }} uses: actions/setup-node@v4 diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index dc40001677..f26a345646 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -29,9 +29,7 @@ jobs: token: ${{ steps.app-token.outputs.token }} - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10.14.0 + uses: pnpm/action-setup@v5 - name: Setup Node.js uses: actions/setup-node@v4 @@ -49,12 +47,22 @@ jobs: echo "status=clean" >> "$GITHUB_OUTPUT" echo "cherry_pick_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" else - # The docs app is not maintained on the stable branch (only - # docs/content/ is kept for npm prepack scripts). Auto-resolve - # any non-content docs/ conflicts by deleting the files. + # The docs app on the stable branch is a minimal placeholder — + # only docs/content/ is actively maintained (markdown files + # bundled into npm packages via prepack scripts). Auto-resolve + # any non-content docs/ conflicts by keeping the stable branch + # version (discarding the incoming change from main). git diff --name-only --diff-filter=U | grep '^docs/' | grep -v '^docs/content/' | while IFS= read -r file; do - echo "Auto-resolving docs conflict (deleting): $file" - git rm -f -- "$file" + echo "Auto-resolving docs conflict (keeping stable version): $file" + # Check for a stage-2 ("ours") entry in the index, which means + # the file exists on the stable side of the conflict. Otherwise + # the file was newly added on main and we drop it. + if git show ":2:$file" >/dev/null 2>&1; then + git checkout --ours -- "$file" + git add -- "$file" + else + git rm -f -- "$file" + fi done || true # Lockfile conflicts can be resolved by re-running pnpm install, @@ -112,11 +120,14 @@ jobs: PR title: $PR_TITLE Commit message: $COMMIT_MSG - IMPORTANT: Only docs/content/ exists on the stable branch (the rest - of the docs app is removed). If any remaining conflicts involve files - under docs/ that are NOT in docs/content/, resolve them by deleting - the file with "git rm". Conflicts in docs/content/ should be resolved - normally (these are markdown files bundled into npm packages). + IMPORTANT: On the stable branch, only docs/content/ is actively + maintained (markdown files bundled into npm packages). The rest of + the docs app is a minimal placeholder. If any remaining conflicts + involve files under docs/ that are NOT in docs/content/, resolve + them by keeping the stable branch version (the <<<<<<< HEAD side) + and discarding the incoming change from main. If the file does not + exist on the stable side (HEAD side is empty), remove it with + "git rm". Conflicts in docs/content/ should be resolved normally. Resolve all merge conflicts in the working tree. The content between <<<<<<< HEAD and ======= is the current stable branch. The content between diff --git a/.github/workflows/debug-windows.yml b/.github/workflows/debug-windows.yml index 919886b3ba..82e4bcf09e 100644 --- a/.github/workflows/debug-windows.yml +++ b/.github/workflows/debug-windows.yml @@ -27,9 +27,7 @@ jobs: target: wasm32-unknown-unknown - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10.14.0 + uses: pnpm/action-setup@v5 - name: Setup Node.js 22.x uses: actions/setup-node@v4 diff --git a/.github/workflows/docs-checks.yml b/.github/workflows/docs-checks.yml index 3454e963d3..b062e6e335 100644 --- a/.github/workflows/docs-checks.yml +++ b/.github/workflows/docs-checks.yml @@ -26,9 +26,7 @@ jobs: uses: actions/checkout@v4 - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10.14.0 + uses: pnpm/action-setup@v5 - name: Setup Node.js 22.x uses: actions/setup-node@v4 @@ -57,9 +55,7 @@ jobs: uses: actions/checkout@v4 - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10.14.0 + uses: pnpm/action-setup@v5 - name: Setup Node.js 22.x uses: actions/setup-node@v4 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2948e2d3d5..7728dcc1c5 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -47,9 +47,7 @@ jobs: uses: actions/checkout@v4 - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10.14.0 + uses: pnpm/action-setup@v5 - name: Setup Node.js 22.x uses: actions/setup-node@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f908da9008..d514d22ec8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,9 +42,7 @@ jobs: git config user.email "${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com" - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10.14.0 + uses: pnpm/action-setup@v5 - name: Setup Node.js 24.x uses: actions/setup-node@v4 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 768e857a2f..b3ed5bf0a2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -160,9 +160,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10.14.0 + uses: pnpm/action-setup@v5 - name: Setup Node.js 22.x uses: actions/setup-node@v4 @@ -601,9 +599,7 @@ jobs: target: wasm32-unknown-unknown - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10.14.0 + uses: pnpm/action-setup@v5 - name: Setup Node.js 22.x uses: actions/setup-node@v4 @@ -671,10 +667,15 @@ jobs: if-no-files-found: ignore # Community World E2E Tests (dynamically generated from worlds-manifest.json) + # Disabled on main: community worlds target spec v2 and do not yet support the + # CBOR queue transport used by world-vercel (see #1627 / #1658). They continue + # to run on `stable`, where spec v2 is still the primary compat target. Once + # the community worlds (mizzle-dev/workflow-worlds) ship CBOR support we can + # re-enable these jobs here. getCommunityWorldsMatrix: name: Get Community Worlds Matrix runs-on: ubuntu-latest - if: ${{ !contains(github.event.pull_request.labels.*.name, 'workflow-server-test') }} + if: false outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: @@ -693,7 +694,7 @@ jobs: e2e-community: name: E2E Community World (${{ matrix.world.name }}) - if: ${{ !contains(github.event.pull_request.labels.*.name, 'workflow-server-test') }} + if: false needs: getCommunityWorldsMatrix strategy: fail-fast: false @@ -712,7 +713,7 @@ jobs: summary: name: E2E Summary runs-on: ubuntu-latest - needs: [e2e-vercel-prod, e2e-local-dev, e2e-local-prod, e2e-local-postgres, e2e-windows, e2e-community] + needs: [e2e-vercel-prod, e2e-local-dev, e2e-local-prod, e2e-local-postgres, e2e-windows] if: always() && !cancelled() timeout-minutes: 10 @@ -744,28 +745,19 @@ jobs: LOCAL_PROD_STATUS="${{ needs.e2e-local-prod.result }}" POSTGRES_STATUS="${{ needs.e2e-local-postgres.result }}" WINDOWS_STATUS="${{ needs.e2e-windows.result }}" - COMMUNITY_STATUS="${{ needs.e2e-community.result }}" echo "vercel=$VERCEL_STATUS" >> $GITHUB_OUTPUT echo "local-dev=$LOCAL_DEV_STATUS" >> $GITHUB_OUTPUT echo "local-prod=$LOCAL_PROD_STATUS" >> $GITHUB_OUTPUT echo "postgres=$POSTGRES_STATUS" >> $GITHUB_OUTPUT echo "windows=$WINDOWS_STATUS" >> $GITHUB_OUTPUT - echo "community=$COMMUNITY_STATUS" >> $GITHUB_OUTPUT - # Community world failures are warnings, not errors if [[ "$VERCEL_STATUS" == "failure" || "$LOCAL_DEV_STATUS" == "failure" || "$LOCAL_PROD_STATUS" == "failure" || "$POSTGRES_STATUS" == "failure" || "$WINDOWS_STATUS" == "failure" ]]; then echo "has_failures=true" >> $GITHUB_OUTPUT else echo "has_failures=false" >> $GITHUB_OUTPUT fi - if [[ "$COMMUNITY_STATUS" == "failure" ]]; then - echo "has_warnings=true" >> $GITHUB_OUTPUT - else - echo "has_warnings=false" >> $GITHUB_OUTPUT - fi - - name: Update PR comment with results if: github.event_name == 'pull_request' uses: marocchino/sticky-pull-request-comment@v2 @@ -791,25 +783,12 @@ jobs: Check the [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details. - - name: Append community warning to PR comment - if: github.event_name == 'pull_request' && steps.check-status.outputs.has_warnings == 'true' - uses: marocchino/sticky-pull-request-comment@v2 - with: - header: e2e-test-results - append: true - message: | - - --- - ⚠️ **Community world tests failed** (non-blocking): - - Community Worlds: ${{ needs.e2e-community.result }} - - Check the [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details. - - # Final required check: passes only when unit + all E2E jobs succeed + # Final required check: passes only when unit + all E2E jobs succeed. + # Community worlds are intentionally excluded — they are disabled on main. e2e-required-check: name: E2E Required Check runs-on: ubuntu-latest - needs: [unit, e2e-vercel-prod, e2e-local-dev, e2e-local-prod, e2e-local-postgres, e2e-windows, e2e-community] + needs: [unit, e2e-vercel-prod, e2e-local-dev, e2e-local-prod, e2e-local-postgres, e2e-windows] if: always() timeout-minutes: 5 @@ -822,7 +801,6 @@ jobs: LOCAL_PROD_STATUS: ${{ needs.e2e-local-prod.result }} POSTGRES_STATUS: ${{ needs.e2e-local-postgres.result }} WINDOWS_STATUS: ${{ needs.e2e-windows.result }} - COMMUNITY_STATUS: ${{ needs.e2e-community.result }} HAS_LABEL: ${{ contains(github.event.pull_request.labels.*.name, 'workflow-server-test') }} run: | FAILED_JOBS=() @@ -839,7 +817,6 @@ jobs: [[ "$LOCAL_PROD_STATUS" == "skipped" ]] || echo "Warning: e2e-local-prod was not skipped ($LOCAL_PROD_STATUS)" [[ "$POSTGRES_STATUS" == "skipped" ]] || echo "Warning: e2e-local-postgres was not skipped ($POSTGRES_STATUS)" [[ "$WINDOWS_STATUS" == "skipped" ]] || echo "Warning: e2e-windows was not skipped ($WINDOWS_STATUS)" - [[ "$COMMUNITY_STATUS" == "skipped" ]] || echo "Warning: e2e-community was not skipped ($COMMUNITY_STATUS)" else echo "Standard PR - checking all jobs" [[ "$UNIT_STATUS" == "success" ]] || FAILED_JOBS+=("unit ($UNIT_STATUS)") @@ -848,7 +825,6 @@ jobs: [[ "$LOCAL_PROD_STATUS" == "success" ]] || FAILED_JOBS+=("e2e-local-prod ($LOCAL_PROD_STATUS)") [[ "$POSTGRES_STATUS" == "success" ]] || FAILED_JOBS+=("e2e-local-postgres ($POSTGRES_STATUS)") [[ "$WINDOWS_STATUS" == "success" ]] || FAILED_JOBS+=("e2e-windows ($WINDOWS_STATUS)") - [[ "$COMMUNITY_STATUS" == "success" ]] || FAILED_JOBS+=("e2e-community ($COMMUNITY_STATUS)") fi if [[ ${#FAILED_JOBS[@]} -gt 0 ]]; then diff --git a/AGENTS.md b/AGENTS.md index dd19705673..21accc7d68 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -173,7 +173,7 @@ This repository uses a dual-branch release model with [changesets](https://githu Both branches trigger the release workflow (`.github/workflows/release.yml`) on push. The changesets action creates a "Version Packages" PR on each branch when there are pending changesets. -**Important:** The docs app (everything under `docs/` except `docs/content/`) is **not maintained on the `stable` branch**. Documentation is deployed only from `main`. The `docs/content/` directory is kept on `stable` because the markdown files are bundled into npm packages via `prepack` scripts. When backporting changes to `stable`, any conflicts involving docs app files (outside of `docs/content/`) should be resolved by deleting the conflicting files. Conflicts in `docs/content/` should be resolved normally. The backport GitHub Action handles this automatically. +**Important:** On the `stable` branch, only `docs/content/` is actively maintained — the rest of the docs app is a minimal placeholder. Documentation is deployed only from `main`. The `docs/content/` directory is kept on `stable` because the markdown files are bundled into npm packages via `prepack` scripts. When backporting changes to `stable`, any conflicts involving docs app files (outside of `docs/content/`) should be resolved by keeping the `stable` branch version (discarding the incoming change from `main`). Conflicts in `docs/content/` should be resolved normally. The backport GitHub Action handles this automatically. ### Changesets @@ -192,7 +192,7 @@ Both branches trigger the release workflow (`.github/workflows/release.yml`) on To backport a change from `main` to `stable`, add the `backport-stable` label to the PR on `main`. A GitHub Action (`.github/workflows/backport.yml`) will automatically cherry-pick the squashed commit to `stable`. The label can be added before or after merging — the action triggers on both merge and label events. The changeset file is included in the cherry-pick, so the correct semver bump type is preserved on `stable`. -If the cherry-pick fails due to conflicts, the action first auto-resolves any docs app conflicts (files under `docs/` except `docs/content/`, since the docs app is not maintained on `stable`) and `pnpm-lock.yaml` conflicts (by re-running `pnpm install`). If those resolve everything, the cherry-pick is pushed directly to `stable`. Otherwise, it attempts to resolve remaining conflicts using [opencode](https://opencode.ai) (AI-powered conflict resolution). If successful, it creates a PR targeting `stable` for human review instead of pushing directly. If the AI cannot resolve the conflicts, the action will comment on the original PR with instructions for manual resolution. +If the cherry-pick fails due to conflicts, the action first auto-resolves any docs app conflicts (files under `docs/` except `docs/content/`) by keeping the `stable` branch version, since the docs app is a minimal placeholder on `stable` and not actively maintained there. It also auto-resolves `pnpm-lock.yaml` conflicts by re-running `pnpm install`. If those resolve everything, the cherry-pick is pushed directly to `stable`. Otherwise, it attempts to resolve remaining conflicts using [opencode](https://opencode.ai) (AI-powered conflict resolution). If successful, it creates a PR targeting `stable` for human review instead of pushing directly. If the AI cannot resolve the conflicts, the action will comment on the original PR with instructions for manual resolution. ### Pre-release Lifecycle