Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .changeset/skip-community-worlds-main.md
Original file line number Diff line number Diff line change
@@ -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`.
8 changes: 1 addition & 7 deletions .github/actions/setup-workflow-dev/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
37 changes: 24 additions & 13 deletions .github/workflows/backport.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand Down Expand Up @@ -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
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/debug-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 2 additions & 6 deletions .github/workflows/docs-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
50 changes: 13 additions & 37 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand All @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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
Expand All @@ -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

Expand All @@ -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=()
Expand All @@ -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)")
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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

Expand Down
Loading