From 2313a3ef73c60199b5491aae711f62c7df5b1f18 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 25 Mar 2026 18:06:26 -0700 Subject: [PATCH 1/4] Extract mise tasks for CI setup --- .github/workflows/ci-host.yaml | 33 ++-------------------- .github/workflows/ci.yaml | 40 +++++---------------------- mise-tasks/ci/serve-test-assets | 12 ++++++++ mise-tasks/test-services-host | 4 +-- mise-tasks/test-services-matrix | 4 +-- mise-tasks/test-services-realm-server | 20 ++++++++++++++ packages/realm-server/package.json | 2 ++ 7 files changed, 47 insertions(+), 68 deletions(-) create mode 100755 mise-tasks/ci/serve-test-assets create mode 100755 mise-tasks/test-services-realm-server diff --git a/.github/workflows/ci-host.yaml b/.github/workflows/ci-host.yaml index d684c52aa8..cc08c317c0 100644 --- a/.github/workflows/ci-host.yaml +++ b/.github/workflows/ci-host.yaml @@ -93,20 +93,9 @@ jobs: shopt -s dotglob cp -a .test-web-assets-artifact/. ./ - - name: Serve boxel-icons - run: pnpm serve &> /tmp/icon-server.log & - working-directory: packages/boxel-icons - - name: Disable TCP/UDP network offloading run: sudo ethtool -K eth0 tx off rx off - - name: Serve host dist (test assets) for realm server - uses: JarvusInnovations/background-action@2428e7b970a846423095c79d43f759abf979a635 # 1.0.7 - with: - run: pnpm serve:dist & - working-directory: packages/host - wait-for: 3m - wait-on: http-get://localhost:4200 - - name: Start realm servers + - name: Start test services (icons + host dist + realm servers) run: pnpm start:services-for-host-tests | tee -a /tmp/server.log & working-directory: packages/realm-server - name: Create realm users @@ -164,23 +153,12 @@ jobs: shopt -s dotglob cp -a .test-web-assets-artifact/. ./ - - name: Serve boxel-icons - run: pnpm serve &> /tmp/icon-server.log & - working-directory: packages/boxel-icons - # this is to hopefully address the CI network flakiness that we # occasionally see in host tests. # https://github.com/actions/runner-images/issues/1187#issuecomment-686735760 - name: Disable TCP/UDP network offloading run: sudo ethtool -K eth0 tx off rx off - - name: Serve host dist (test assets) for realm server - uses: JarvusInnovations/background-action@2428e7b970a846423095c79d43f759abf979a635 # 1.0.7 - with: - run: pnpm serve:dist & - working-directory: packages/host - wait-for: 3m - wait-on: http-get://localhost:4200 - - name: Start realm servers + - name: Start test services (icons + host dist + realm servers) run: pnpm start:services-for-host-tests | tee -a /tmp/server.log & working-directory: packages/realm-server env: @@ -294,13 +272,6 @@ jobs: name: testem-log-${{ matrix.shardIndex }} path: junit/host-testem.log retention-days: 30 - - name: Upload icon server log - uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # 4.6.1 - if: ${{ !cancelled() }} - with: - name: icon-server-log-${{ matrix.shardIndex }} - path: /tmp/icon-server.log - retention-days: 30 host-percy-finalize: name: Finalise Percy diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e0ff051a08..39bd47cd9f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -318,14 +318,7 @@ jobs: - name: Install Playwright Browsers run: pnpm exec playwright install working-directory: packages/matrix - - name: Serve host dist (test assets) for realm server - uses: JarvusInnovations/background-action@2428e7b970a846423095c79d43f759abf979a635 # 1.0.7 - with: - run: pnpm serve:dist & - working-directory: packages/host - wait-for: 3m - wait-on: http-get://localhost:4200 - - name: Start realm servers + - name: Start test services (icons + host dist + base realm) run: MATRIX_REGISTRATION_SHARED_SECRET='xxxx' pnpm start:services-for-matrix-tests | tee -a /tmp/server.log & working-directory: packages/realm-server - name: Run Playwright tests @@ -570,18 +563,8 @@ jobs: run: | shopt -s dotglob cp -a .test-web-assets-artifact/. ./ - - name: Serve boxel-icons - run: pnpm serve & - working-directory: packages/boxel-icons - - name: Serve host dist (test assets) for realm server - uses: JarvusInnovations/background-action@2428e7b970a846423095c79d43f759abf979a635 # 1.0.7 - with: - run: pnpm serve:dist & - working-directory: packages/host - wait-for: 3m - wait-on: http-get://localhost:4200 - - name: Start realm servers - run: pnpm start:skip-optional-realms | tee -a /tmp/server.log & + - name: Start test services (icons + host dist + realm servers) + run: pnpm start:services-for-realm-server-tests | tee -a /tmp/server.log & working-directory: packages/realm-server - name: create realm users run: pnpm register-realm-users @@ -678,20 +661,12 @@ jobs: - name: Run Node tests run: pnpm test:node working-directory: packages/software-factory - - name: Serve host dist (test assets) + - name: Serve test assets (icons + host dist) uses: JarvusInnovations/background-action@2428e7b970a846423095c79d43f759abf979a635 # 1.0.7 with: - run: pnpm serve:dist & - working-directory: packages/host + run: mise run ci:serve-test-assets & wait-for: 3m wait-on: http-get://localhost:4200 - - name: Serve boxel-icons - uses: JarvusInnovations/background-action@2428e7b970a846423095c79d43f759abf979a635 # 1.0.7 - with: - run: pnpm serve & - working-directory: packages/boxel-icons - wait-for: 3m - wait-on: http-get://localhost:4206/@cardstack/boxel-icons/v1/icons/code.js - name: Run Playwright tests run: pnpm test:playwright working-directory: packages/software-factory @@ -776,11 +751,10 @@ jobs: - name: Build workspace-sync-cli run: pnpm build working-directory: packages/workspace-sync-cli - - name: Serve host dist (test assets) + - name: Serve test assets (icons + host dist) uses: JarvusInnovations/background-action@2428e7b970a846423095c79d43f759abf979a635 # 1.0.7 with: - run: pnpm serve:dist & - working-directory: packages/host + run: mise run ci:serve-test-assets & wait-for: 3m wait-on: http-get://localhost:4200 - name: Start PostgreSQL for tests diff --git a/mise-tasks/ci/serve-test-assets b/mise-tasks/ci/serve-test-assets new file mode 100755 index 0000000000..069b96af25 --- /dev/null +++ b/mise-tasks/ci/serve-test-assets @@ -0,0 +1,12 @@ +#!/bin/sh +#MISE description="Serve test assets (boxel-icons + host dist) with readiness checks" +#MISE dir="packages/realm-server" + +# Start both static servers and wait for them to be ready. +# Useful for CI jobs that need icons + host-dist but not the full realm server stack. + +WAIT_ON_TIMEOUT=180000 NODE_NO_WARNINGS=1 \ + start-server-and-test \ + 'run-p -ln start:icons start:host-dist' \ + "${ICONS_URL}|${HOST_URL}" \ + 'wait' diff --git a/mise-tasks/test-services-host b/mise-tasks/test-services-host index 5effa70f65..1318ddec2b 100755 --- a/mise-tasks/test-services-host +++ b/mise-tasks/test-services-host @@ -47,8 +47,8 @@ WAIT_ON_TIMEOUT=900000 \ LOG_LEVELS="$HOST_TEST_LOG_LEVELS" \ NODE_NO_WARNINGS=1 \ start-server-and-test \ - 'run-p -ln start:pg start:prerender-dev start:prerender-manager-dev start:matrix start:smtp start:worker-development start:development' \ - "${BASE_REALM_READY}|${MATRIX_URL_VAL}|http://localhost:5001|${ICONS_URL}" \ + 'run-p -ln start:icons start:host-dist start:pg start:prerender-dev start:prerender-manager-dev start:matrix start:smtp start:worker-development start:development' \ + "${BASE_REALM_READY}|${MATRIX_URL_VAL}|http://localhost:5001|${ICONS_URL}|${HOST_URL}" \ 'run-p -ln start:worker-test start:test-realms' \ "${NODE_TEST_REALM_READY}" \ 'wait' diff --git a/mise-tasks/test-services-matrix b/mise-tasks/test-services-matrix index 3f8945eaa9..4edf8b3202 100755 --- a/mise-tasks/test-services-matrix +++ b/mise-tasks/test-services-matrix @@ -9,6 +9,6 @@ BASE_REALM_READY="http-get://${REALM_BASE_URL#http://}/base/${READY_PATH}" WAIT_ON_TIMEOUT=600000 NODE_NO_WARNINGS=1 SKIP_SUBMISSION=true \ start-server-and-test \ - 'run-p -ln start:pg start:icons start:prerender-dev start:prerender-manager-dev start:worker-base start:base' \ - "${BASE_REALM_READY}|${ICONS_URL}" \ + 'run-p -ln start:pg start:icons start:host-dist start:prerender-dev start:prerender-manager-dev start:worker-base start:base' \ + "${BASE_REALM_READY}|${ICONS_URL}|${HOST_URL}" \ 'wait' diff --git a/mise-tasks/test-services-realm-server b/mise-tasks/test-services-realm-server new file mode 100755 index 0000000000..e3fdc86310 --- /dev/null +++ b/mise-tasks/test-services-realm-server @@ -0,0 +1,20 @@ +#!/bin/sh +#MISE description="Start services for realm-server test suite (icons + host-dist + dev-minimal services)" +#MISE dir="packages/realm-server" + +READY_PATH="_readiness-check?acceptHeader=application%2Fvnd.api%2Bjson" +BASE_REALM_READY="http-get://${REALM_BASE_URL#http://}/base/${READY_PATH}" +NODE_TEST_REALM_READY="http-get://${REALM_TEST_URL#http://}/node-test/${READY_PATH}" + +WAIT_ON_TIMEOUT=900000 \ + SKIP_EXPERIMENTS=true \ + SKIP_CATALOG=true \ + SKIP_BOXEL_HOMEPAGE=true \ + SKIP_SUBMISSION=true \ + NODE_NO_WARNINGS=1 \ + start-server-and-test \ + 'run-p -ln start:icons start:host-dist start:pg start:prerender-dev start:prerender-manager-dev start:matrix start:smtp start:worker-development start:development' \ + "${BASE_REALM_READY}|http-get://${REALM_BASE_URL#http://}/software-factory/${READY_PATH}|${MATRIX_URL_VAL}|http://localhost:5001|${ICONS_URL}|${HOST_URL}" \ + 'run-p -ln start:worker-test start:test-realms' \ + "${NODE_TEST_REALM_READY}" \ + 'wait' diff --git a/packages/realm-server/package.json b/packages/realm-server/package.json index 3f22bc21d3..d77a44270d 100644 --- a/packages/realm-server/package.json +++ b/packages/realm-server/package.json @@ -95,6 +95,7 @@ "start:matrix": "./scripts/start-matrix.sh", "start:smtp": "cd ../matrix && pnpm assert-smtp-running", "start:icons": "mise run services:icons", + "start:host-dist": "pnpm --dir=../host serve:dist", "start:pg": "./scripts/start-pg.sh", "stop:pg": "./scripts/stop-pg.sh", "test:wait-for-servers": "WAIT_ON_TIMEOUT=900000 NODE_NO_WARNINGS=1 start-server-and-test 'pnpm run wait' 'http-get://localhost:4201/base/_readiness-check?acceptHeader=application%2Fvnd.api%2Bjson' 'pnpm run wait' 'http-get://localhost:4202/node-test/_readiness-check?acceptHeader=application%2Fvnd.api%2Bjson|http://localhost:8008|http://localhost:5001' 'test-module'", @@ -125,6 +126,7 @@ "start:worker-test": "mise run services:worker-test", "start:worker-staging": "./scripts/start-worker-staging.sh", "start:worker-production": "./scripts/start-worker-production.sh", + "start:services-for-realm-server-tests": "mise run test-services-realm-server", "start:services-for-matrix-tests": "mise run test-services-matrix", "wait": "sleep 10000000", "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"", From 56defbd0952615cbf0575e997fdd1286326210bb Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Wed, 25 Mar 2026 18:10:45 -0700 Subject: [PATCH 2/4] Extract build:ui script --- .github/workflows/build-host.yml | 9 ++------- .github/workflows/ci.yaml | 8 ++------ .github/workflows/deploy-ui.yml | 8 ++------ .github/workflows/manual-vscode-boxel-tools.yml | 8 ++------ .github/workflows/test-web-assets.yaml | 10 ++-------- mise-tasks/build/ui | 7 +++++++ 6 files changed, 17 insertions(+), 33 deletions(-) create mode 100755 mise-tasks/build/ui diff --git a/.github/workflows/build-host.yml b/.github/workflows/build-host.yml index 9980671007..0432837ccc 100644 --- a/.github/workflows/build-host.yml +++ b/.github/workflows/build-host.yml @@ -23,13 +23,8 @@ jobs: - name: Set up env run: cat packages/host/config/${{ inputs.environment }}.env >> $GITHUB_ENV - - name: Build boxel-icons - run: pnpm build - working-directory: packages/boxel-icons - - - name: Build boxel-ui - run: pnpm build - working-directory: packages/boxel-ui/addon + - name: Build boxel-icons and boxel-ui + run: mise run build:ui - name: Build host run: pnpm deploy:boxel-host build-only --verbose diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 39bd47cd9f..26b387b581 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -245,12 +245,8 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/actions/init - - name: Build boxel-icons - run: pnpm build - working-directory: packages/boxel-icons - - name: Build boxel-ui - run: pnpm build - working-directory: packages/boxel-ui/addon + - name: Build boxel-icons and boxel-ui + run: mise run build:ui - name: Run test suite run: pnpm test working-directory: packages/boxel-ui/test-app diff --git a/.github/workflows/deploy-ui.yml b/.github/workflows/deploy-ui.yml index 79b2e2aae4..62b72a0590 100644 --- a/.github/workflows/deploy-ui.yml +++ b/.github/workflows/deploy-ui.yml @@ -35,12 +35,8 @@ jobs: echo "unrecognized environment" exit 1; fi - - name: Build boxel-icons - run: pnpm build - working-directory: packages/boxel-icons - - name: Build boxel-ui addon - run: pnpm build - working-directory: packages/boxel-ui/addon + - name: Build boxel-icons and boxel-ui + run: mise run build:ui - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # 4.1.0 diff --git a/.github/workflows/manual-vscode-boxel-tools.yml b/.github/workflows/manual-vscode-boxel-tools.yml index ebd85261d0..1226fdc790 100644 --- a/.github/workflows/manual-vscode-boxel-tools.yml +++ b/.github/workflows/manual-vscode-boxel-tools.yml @@ -88,12 +88,8 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/actions/init - - name: Build boxel-icons - run: pnpm build - working-directory: packages/boxel-icons - - name: Build boxel-ui - run: pnpm build - working-directory: packages/boxel-ui/addon + - name: Build boxel-icons and boxel-ui + run: mise run build:ui - name: Package run: pnpm vscode:package working-directory: packages/vscode-boxel-tools diff --git a/.github/workflows/test-web-assets.yaml b/.github/workflows/test-web-assets.yaml index f2a1588e36..9de60e42ec 100644 --- a/.github/workflows/test-web-assets.yaml +++ b/.github/workflows/test-web-assets.yaml @@ -58,15 +58,9 @@ jobs: packages/host/dist .ci/test-web-assets/manifest.json - - name: Build boxel-icons + - name: Build boxel-icons and boxel-ui if: steps.restore.outputs.cache-hit != 'true' - run: pnpm build - working-directory: packages/boxel-icons - - - name: Build boxel-ui - if: steps.restore.outputs.cache-hit != 'true' - run: pnpm build - working-directory: packages/boxel-ui/addon + run: mise run build:ui - name: Build host dist (test assets) if: steps.restore.outputs.cache-hit != 'true' diff --git a/mise-tasks/build/ui b/mise-tasks/build/ui new file mode 100755 index 0000000000..46023b3b52 --- /dev/null +++ b/mise-tasks/build/ui @@ -0,0 +1,7 @@ +#!/bin/sh +#MISE description="Build boxel-icons and boxel-ui (in dependency order)" + +set -eu + +pnpm --dir packages/boxel-icons build +pnpm --dir packages/boxel-ui/addon build From a6cd4317043b0efbc43993b701393ecb874789ee Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 26 Mar 2026 09:37:39 -0700 Subject: [PATCH 3/4] Add missing PATH entry --- mise-tasks/ci/serve-test-assets | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mise-tasks/ci/serve-test-assets b/mise-tasks/ci/serve-test-assets index 069b96af25..14e41a1e99 100755 --- a/mise-tasks/ci/serve-test-assets +++ b/mise-tasks/ci/serve-test-assets @@ -2,6 +2,10 @@ #MISE description="Serve test assets (boxel-icons + host dist) with readiness checks" #MISE dir="packages/realm-server" +# start-server-and-test and run-p live in node_modules/.bin; ensure they're on +# PATH when this task is invoked directly via `mise run` (not through pnpm). +export PATH="./node_modules/.bin:$PATH" + # Start both static servers and wait for them to be ready. # Useful for CI jobs that need icons + host-dist but not the full realm server stack. From 8f5e09e008e343b74daf5f73e372145b5bd49a42 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 26 Mar 2026 12:54:02 -0700 Subject: [PATCH 4/4] Add test-services directory --- README.md | 8 +++++--- mise-tasks/{test-services-host => test-services/host} | 0 mise-tasks/{test-services-matrix => test-services/matrix} | 0 .../realm-server} | 0 packages/realm-server/package.json | 6 +++--- 5 files changed, 8 insertions(+), 6 deletions(-) rename mise-tasks/{test-services-host => test-services/host} (100%) rename mise-tasks/{test-services-matrix => test-services/matrix} (100%) rename mise-tasks/{test-services-realm-server => test-services/realm-server} (100%) diff --git a/README.md b/README.md index 9b9fb445f0..2560ad0eac 100644 --- a/README.md +++ b/README.md @@ -76,8 +76,10 @@ mise-tasks/ dev-all # Host app + full dev stack (single command) dev-minimal # Dev stack without optional realms dev-without-matrix # Dev stack (expects Matrix already running) - test-services-host # Services for host test suite - test-services-matrix # Services for matrix test suite + test-services:host # Services for host test suite + test-services:matrix # Services for matrix test suite + test-services:realm-server # Services for realm-server test suite + ci:serve-test-assets # Serve icons + host dist (CI only) stop-environment # Stop all services for an environment ``` @@ -483,7 +485,7 @@ pnpm start Then start the realm server for matrix tests (does not start the matrix server). From the repo root: ``` -MATRIX_REGISTRATION_SHARED_SECRET='xxxx' mise run test-services-matrix +MATRIX_REGISTRATION_SHARED_SECRET='xxxx' mise run test-services:matrix ``` Then to run the tests from the CLI execute the following from `packages/matrix`: diff --git a/mise-tasks/test-services-host b/mise-tasks/test-services/host similarity index 100% rename from mise-tasks/test-services-host rename to mise-tasks/test-services/host diff --git a/mise-tasks/test-services-matrix b/mise-tasks/test-services/matrix similarity index 100% rename from mise-tasks/test-services-matrix rename to mise-tasks/test-services/matrix diff --git a/mise-tasks/test-services-realm-server b/mise-tasks/test-services/realm-server similarity index 100% rename from mise-tasks/test-services-realm-server rename to mise-tasks/test-services/realm-server diff --git a/packages/realm-server/package.json b/packages/realm-server/package.json index d77a44270d..0ebaa00b6c 100644 --- a/packages/realm-server/package.json +++ b/packages/realm-server/package.json @@ -112,7 +112,7 @@ "start:test-realms": "mise run services:test-realms -- --workerManagerPort=4211", "start:all": "mise run dev", "start:skip-optional-realms": "mise run dev-minimal", - "start:services-for-host-tests": "mise run test-services-host", + "start:services-for-host-tests": "mise run test-services:host", "start:staging": "./scripts/start-staging.sh", "start:development": "mise run services:realm-server -- --workerManagerPort=4210", "start:production": "./scripts/start-production.sh", @@ -126,8 +126,8 @@ "start:worker-test": "mise run services:worker-test", "start:worker-staging": "./scripts/start-worker-staging.sh", "start:worker-production": "./scripts/start-worker-production.sh", - "start:services-for-realm-server-tests": "mise run test-services-realm-server", - "start:services-for-matrix-tests": "mise run test-services-matrix", + "start:services-for-realm-server-tests": "mise run test-services:realm-server", + "start:services-for-matrix-tests": "mise run test-services:matrix", "wait": "sleep 10000000", "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"", "lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\"",