name: Unit tests on: workflow_call: inputs: node_versions: description: JSON array of Node.js major versions to test. required: true type: string permissions: contents: read jobs: test: name: tests node ${{ matrix.node }} ${{ matrix.shard }}/${{ matrix.shard_total }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: node: ${{ fromJSON(inputs.node_versions) }} shard: [1, 2, 3, 4, 5, 6, 7, 8] shard_total: [8] steps: - name: Checkout uses: actions/checkout@v6 with: persist-credentials: false - uses: ./.github/actions/install-node-dependencies with: native-runtime: node node-version: ${{ matrix.node }} cache-electron-package: 'true' cache-dependency-path: | pnpm-lock.yaml cloud/pnpm-lock.yaml - name: Install Electron package binary for tests run: node config/scripts/install-electron-package-binary.mjs - name: Test shard env: ORCA_BALANCE_UNIT_SHARDS: '1' ORCA_BACKGROUND_LAUNCH: '1' run: | export ORCA_SHARD_SOURCE_SHA="$(git rev-parse HEAD)" pnpm exec vitest run --config config/vitest.config.ts \ --exclude=src/main/daemon/repro-13767-shell-ready-marker-lost-to-exec.test.ts \ --exclude=src/main/daemon/shell-ready.test.ts \ --exclude=src/main/daemon/node-pty-fd-leak.test.ts \ --exclude=src/main/providers/local-pty-shell-ready-zsh-launch-environment.test.ts \ --exclude=src/main/providers/__tests__/shell-ready-framework-example.test.ts \ --exclude=src/main/pty/omp-shell-wrapper-alias-safety.test.ts \ --exclude=src/main/pty/omp-shell-wrapper.node-pty.test.ts \ --exclude=src/main/shell-startup-feature-channel.test.ts \ --exclude=src/main/terminal-history-fish-session.node-pty.test.ts \ --exclude=src/main/zsh-scoped-histfile.live-shell.test.ts \ --exclude=src/main/zsh-startup-hook-user-config-equivalence.live-shell.test.ts \ --exclude=src/main/zsh-wrapper-version-mismatch.live-shell.test.ts \ --exclude=src/renderer/src/components/terminal-pane/fish-color-scheme-child-stdin.node-pty.test.ts \ --exclude=src/shared/fish-query-reply-child-stdin.node-pty.test.ts \ --exclude=src/shared/pty-reply-echo-shapes.node-pty.test.ts \ --exclude=src/shared/startup-shell-portability.live-shell.test.ts \ --exclude=src/shared/posix-command-path-lookup.test.ts \ --exclude=tests/e2e/relay-region-compatibility.unit.test.ts \ --exclude=tests/e2e/relay-region-correction.unit.test.ts \ --exclude=tests/e2e/cross-version-wire/** \ --shard=${{ matrix.shard }}/${{ matrix.shard_total }} - name: Upload unit shard assignment if: always() # Diagnostic upload outages must not change the test verdict. continue-on-error: true uses: actions/upload-artifact@v7 with: name: unit-shard-node-${{ matrix.node }}-${{ matrix.shard }}-attempt-${{ github.run_attempt }} path: ci-shards/ retention-days: 14 if-no-files-found: warn relay_integration: name: relay integration node ${{ fromJSON(inputs.node_versions)[0] }} runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 with: persist-credentials: false - uses: ./.github/actions/install-node-dependencies with: native-runtime: node node-version: ${{ fromJSON(inputs.node_versions)[0] }} cache-electron-package: 'true' cache-dependency-path: | pnpm-lock.yaml cloud/pnpm-lock.yaml # These two tests import the cloud relay workspace directly. Keeping them in one job # avoids installing and building the same workspace once per unit-test shard. - name: Install relay integration dependencies working-directory: cloud run: | npx --yes pnpm@10.24.0 --filter '@orca-cloud/relay...' install --frozen-lockfile --ignore-scripts npx --yes pnpm@10.24.0 --filter '@orca-cloud/relay^...' build - name: Test relay integration contracts env: ORCA_BACKGROUND_LAUNCH: '1' run: >- pnpm exec vitest run --config config/vitest.config.ts tests/e2e/relay-region-compatibility.unit.test.ts tests/e2e/relay-region-correction.unit.test.ts