refactor(workspaces): finalize runtime package boundaries

Keep the daemon dependent only on the public runtime contract and helper, while optional runtime implementations remain external command registrations. Workspace setup continues asynchronously through the bound runtime without coupling production packages to an implementation.
This commit is contained in:
Mohamed Boudra
2026-08-14 12:48:35 +02:00
parent 36d8464068
commit 7c32fcda98
85 changed files with 2293 additions and 4664 deletions
+2 -1
View File
@@ -35,7 +35,8 @@ hub:
server:
- "packages/server/**"
- "packages/fixture-workspace-runtime/**"
- "runtimes/fixture/**"
- "packages/workspace-helper/**"
- "packages/workspace-runtime-contract/**"
- "packages/app/e2e/support/fixtures/recording.*"
+10 -1
View File
@@ -133,6 +133,7 @@ jobs:
run: |
npm pack --dry-run --ignore-scripts --workspace=@getpaseo/protocol
npm pack --dry-run --ignore-scripts --workspace=@getpaseo/workspace-runtime-contract
npm pack --dry-run --ignore-scripts --workspace=@getpaseo/workspace-helper
npm pack --dry-run --ignore-scripts --workspace=@getpaseo/client
npm pack --dry-run --ignore-scripts --workspace=@getpaseo/server
@@ -169,7 +170,15 @@ jobs:
- name: Test workspace runtime command contract package
if: ${{ needs.changes.outputs.full != 'false' || needs.changes.outputs.server != 'false' }}
run: npm test --workspace=@getpaseo/workspace-runtime-contract
run: npm test --workspace=@getpaseo/workspace-runtime-contract && npm test --workspace=@getpaseo/workspace-helper
- name: Prove the command runtime fixture is independently installable
if: ${{ runner.os == 'Linux' && (needs.changes.outputs.full != 'false' || needs.changes.outputs.server != 'false') }}
run: node --test scripts/workspace-runtime-standalone.test.mjs
- name: Prove clean server builds own public prerequisites
if: ${{ runner.os == 'Linux' && (needs.changes.outputs.full != 'false' || needs.changes.outputs.server != 'false') }}
run: node --test scripts/server-clean-build.test.mjs
- name: Run server tests
if: ${{ needs.changes.outputs.full != 'false' || needs.changes.outputs.server != 'false' }}
+1 -42
View File
@@ -16,9 +16,8 @@ on:
- "packages/app/**"
- "packages/cli/**"
- "packages/client/**"
- "packages/docker-workspace-runtime/**"
- "packages/desktop/**"
- "packages/fixture-workspace-runtime/**"
- "packages/workspace-helper/**"
- "packages/workspace-runtime-contract/**"
- "packages/expo-two-way-audio/**"
- "packages/highlight/**"
@@ -159,46 +158,6 @@ jobs:
cache-from: type=gha,scope=paseo
cache-to: type=gha,scope=paseo,mode=max
workspace-runtime-test:
needs: setup
if: needs.setup.outputs.publish != 'true'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install dependencies
run: node scripts/npm-retry.mjs ci
- name: Build server stack
run: npm run build:server
- name: Build Docker workspace runtime CLI
run: npm run build:docker-workspace-runtime
- name: Build Docker acceptance image
run: docker build --file packages/docker-workspace-runtime/Dockerfile --tag paseo-workspace-runtime-e2e:test .
- name: Test workspace runtime contract
run: npm run test:workspace-runtime:docker --workspace=@getpaseo/server
env:
E2E_DOCKER_WORKSPACE_IMAGE: paseo-workspace-runtime-e2e:test
- name: Install Playwright browser
run: npx playwright install chromium
- name: Test Docker Desktop acceptance journey
run: npm run test:e2e:renderer --workspace=@getpaseo/desktop -- e2e/new-workspace-docker.spec.ts --workers=1
env:
E2E_DOCKER_ACCEPTANCE: "1"
E2E_DOCKER_WORKSPACE_IMAGE: paseo-workspace-runtime-e2e:test
publish:
needs: setup
if: needs.setup.outputs.publish == 'true'