Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
652a8a4
fix(omp): preserve native thinking launch preferences
NarryG Oct 19, 2026
f7ce68f
fix(ssh): relinking a stopped managed server keeps the project groups…
nwparker Oct 19, 2026
f6cc8f6
fix(layout): a pane main closed stays closed when its terminal starts…
Jinwoo-H Oct 19, 2026
503d919
feat(native-chat): + menu shows chat, disabled chat and CLI rows (#29…
brennanb2025 Oct 19, 2026
d893cf5
chore(docs): move site runtime and Node types to 24 (#30615)
nwparker Oct 19, 2026
9ea5434
fix(mobile): faster relay recovery after an app switch and on a late …
Jinwoo-H Oct 19, 2026
add1ecc
fix(codex): a Codex chat keeps its Orca identity when the user's Code…
brennanb2025 Oct 19, 2026
978b207
fix(agent-status): never drop a running helper for lack of room (#30416)
brennanb2025 Oct 19, 2026
7dcb7d4
Sleep stops a workspace's native chat agents (#28445)
brennanb2025 Oct 19, 2026
cb82bc8
fix(relay): never call a reserve cell's hosts stranded when it goes e…
Jinwoo-H Oct 19, 2026
36ed236
fix(persistence): repo writes take the row's identity, never a bare i…
nwparker Oct 19, 2026
5be871e
refactor(plugins): name shared catalog and manifest schema parts (#30…
nwparker Oct 19, 2026
f184c13
Align root Node types with the supported Node 24 runtime (#30617)
nwparker Oct 19, 2026
4aba685
fix(browser): let a local HTML page follow its own file:// links (#30…
Jinwoo-H Oct 19, 2026
5f2bb93
fix(sidebar): Hide sleeping keeps a paired server's active workspaces…
Jinwoo-H Oct 19, 2026
2db7d5a
Refuse chat resume until terminal writers have exited (#29242)
brennanb2025 Oct 19, 2026
da58ee0
Session History: the Workspace tab stops re-reading every transcript …
brennanb2025 Oct 19, 2026
cf13e0c
fix(sidebar): phone feed list leftovers before the flip (dark) (#30631)
Jinwoo-H Oct 19, 2026
699b9a0
feat(files): guarded file writes that refuse to overwrite a changed f…
nwparker Oct 19, 2026
a451f47
fix(ssh): make room for the pre-activation snapshot on remote hosts, …
nwparker Oct 19, 2026
7ce58ec
refactor(terminal): one PTY attribution for teardown, close and ident…
nwparker Oct 19, 2026
c18cb91
fix(relay-ops): let the incident monitor sample a reserve-mode cell (…
Jinwoo-H Oct 19, 2026
fa0bd69
refactor(ssh): derive a host-key policy from the target owner (#30627)
nwparker Oct 19, 2026
a85c176
refactor(process-host): let runProcess callers observe stderr as it a…
nwparker Oct 19, 2026
94c858c
fix(ssh): a cancelled or revoked host's browser command stops on the …
nwparker Oct 19, 2026
f6e9e64
fix(projects): a project added from the CLI, web or a paired desktop …
nwparker Oct 19, 2026
79b7d70
test(managed-server): 6 KB wire-size budget for every POSIX host-op c…
nwparker Oct 19, 2026
d600658
fix(ssh): closing a bridged relay tab stops its shell, even across a …
nwparker Oct 19, 2026
77195a1
fix(session-history): cached results keep every session the scan foun…
brennanb2025 Oct 19, 2026
7a1b533
fix(relay-ops): judge a reserve cell's connections against its config…
Jinwoo-H Oct 19, 2026
0c3807e
test(e2e): reveal specs create workspaces through main so they pass w…
Jinwoo-H Oct 19, 2026
9294b0a
fix(sidebar): the window raises the unread flag exactly when its host…
Jinwoo-H Oct 19, 2026
0e1d0ad
A CLI split that times out leaves no pane (dark, layout-owner build o…
Jinwoo-H Oct 19, 2026
912cb06
fix(managed-server): repair main typecheck after the byte-budget and …
nwparker Oct 19, 2026
a12c592
feat(relay): add the per-cell phonePath switch, effective only in res…
Jinwoo-H Oct 19, 2026
da6d823
fix(crash-reporting): renderer crash reports say whether the window w…
OrcaWin Oct 19, 2026
00d1545
fix(diagnostics): crash bundles always keep the terminal daemon's new…
OrcaWin Oct 19, 2026
83c768d
fix(crash-reporting): Windows native crash reports say what the fault…
OrcaWin Oct 19, 2026
cb0b152
test(relay): census every activity-lease reader for phones without le…
Jinwoo-H Oct 19, 2026
9f37fcd
fix(persistence): a commit that runs out of disk no longer stops all …
nwparker Oct 19, 2026
1a41a23
feat(relay): resume paired phones from one device read on memory cell…
Jinwoo-H Oct 19, 2026
90236c3
refactor(browser): one page gate and one owner for a host command's h…
nwparker Oct 19, 2026
b509299
feat(relay-ops): watch a memory phone cell and turn its phone path of…
Jinwoo-H Oct 19, 2026
4f425a2
fix(cli): refuse server names --environment cannot tell apart, and sa…
nwparker Oct 19, 2026
224d126
refactor(composer): split run-target rows and worktree-creation steps…
nwparker Oct 19, 2026
aa739f3
refactor(renderer): one FileTypeIcon component for file icons (#30695)
nwparker Oct 19, 2026
e590699
refactor: round-3 pass-1 follow-ups (#30699)
nwparker Oct 19, 2026
b8f7ece
feat(relay): keep a memory resume's basis in the cell and confirm it …
Jinwoo-H Oct 19, 2026
73553b1
fix(omp): refuse unsupported paired thinking launches
NarryG Oct 19, 2026
78bad24
test(e2e): nine sidebar specs create workspaces and links through mai…
Jinwoo-H Oct 19, 2026
1cf7472
feat(relay): batch a memory cell's resume-confirmed audit rows (#30655)
Jinwoo-H Oct 19, 2026
9def13d
ci: run the layout-owner switch-on specs as an advisory PR check (dar…
Jinwoo-H Oct 19, 2026
218b9a7
The layout drift log names the values that differ (dark, layout-owner…
Jinwoo-H Oct 19, 2026
ec89fa6
feat(orcad-migration): host applies a signed editor-drafts blob insid…
nwparker Oct 19, 2026
cffcef7
fix(projects): setup edits and removals name the host, so the twin on…
nwparker Oct 19, 2026
41fdd7e
fix(ssh): keep SFTP uploads pipelined so a high-latency link doesn't …
nwparker Oct 19, 2026
dff2ad9
fix(omp): recheck thinking before paired create retries
NarryG Oct 19, 2026
7cc2859
fix(relay-ops): let same-cap rolls run while another cell is reserve;…
Jinwoo-H Oct 19, 2026
148944c
refactor: de-barrel remote-runtime-client, runtime-terminal-stream an…
nwparker Oct 19, 2026
92ed331
refactor(plugins): extract the shared content-pack registry and list …
nwparker Oct 19, 2026
8f04f20
fix(omp): preserve uncertain legacy launch replay
NarryG Oct 19, 2026
e72d8f9
fix(ssh): say the host's disk is full when a managed-server install r…
nwparker Oct 19, 2026
25e53f4
fix(security): put every trust decision on a host-owned token surface…
nwparker Oct 19, 2026
6599428
fix(omp): distinguish launch preflight from create dispatch
NarryG Oct 19, 2026
346f602
fix(git): stage and discard files in WSL repos opened by UNC path (#3…
s-stefanov Oct 19, 2026
ec0c1f1
fix(github): accept SSH certificate org remotes (org-<id>@github.com)…
Yi-111-a Oct 19, 2026
162e07c
fix(browser): refuse agent clicks while the user is mid-IME compositi…
AmoabaKelvin Oct 19, 2026
f22aecf
fix(runtime): one teardown policy per kind; removal closes host brows…
nwparker Oct 19, 2026
037994d
fix(omp): preserve promptless web launch command
NarryG Oct 19, 2026
a9011d0
fix(projects): refuse to file a folder under a project its own GitHub…
nwparker Oct 19, 2026
4bc3971
fix(sidebar): key folder workspace rows by host so the phone matches …
Jinwoo-H Oct 19, 2026
2b60778
fix(native-chat): show the model picker in a new OMP or Antigravity c…
AmoabaKelvin Oct 19, 2026
d4379a8
fix(omp): preserve complete prepared web launch settings
NarryG Oct 19, 2026
5a9e26e
fix(ssh): say a noexec home can't run Orca's server, instead of "inst…
nwparker Oct 19, 2026
1bfebad
fix(runtime): a new terminal the host can't confirm says why, instead…
nwparker Oct 19, 2026
90e99c4
refactor(pty): every PTY retirement names its exit proof; ratchet the…
nwparker Oct 19, 2026
36913fd
test(e2e): a phone lists the desktop's managed SSH workspace as the d…
Jinwoo-H Oct 19, 2026
9a46695
test(e2e): mount-authority spec polls through the host's "can't answe…
nwparker Oct 19, 2026
b358328
test(e2e): pane-close specs close panes the way the user does and che…
Jinwoo-H Oct 19, 2026
8ff19bc
perf(sidebar): announce a burst of sort-stamp writes once (dark switc…
Jinwoo-H Oct 19, 2026
43abe32
refactor(orcad): every snapshot state op fits the gateway exec budget…
nwparker Oct 19, 2026
3d91e9a
fix(projects): removing a project on this computer stops its chats, p…
nwparker Oct 19, 2026
59a9da2
refactor(pane-layout): retire the unread intent tag; renamedLeafIds i…
nwparker Oct 19, 2026
084226c
Merge current main into OMP thinking preferences
NarryG Oct 19, 2026
cb490bd
Keep main refresh free of unrelated formatter changes
NarryG Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 8 additions & 2 deletions .github/workflows/cloud-deploy-relay-production-same-cap-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -441,9 +441,15 @@ jobs:
if .regionalRehomeProtocol == null then "regionalRehomeProtocol" else empty end
] | if length > 0 then "runtime predecessor normalized legacy fields=" + join(",") else empty end' \
<<< "${CURRENT_RUNTIME}"
CURRENT_DIRECTOR_STATUS="$(admin_post current-cell-status \
if ! CURRENT_DIRECTOR_STATUS="$(admin_post current-cell-status \
"${DIRECTOR_ORIGIN}/v1/admin/cell-status" \
"$(jq -cn --arg cell "${TARGET_CELL_ID}" '{v:1,cellId:$cell}')")"
"$(jq -cn --arg cell "${TARGET_CELL_ID}" '{v:1,cellId:$cell}')")"; then
if jq -e '.error == "cell_in_reserve_mode"' \
"${RUNNER_TEMP}/current-cell-status.json" >/dev/null 2>&1; then
echo "${TARGET_CELL_ID} is in reserve mode: flip it to admitMode=db with the cell-flags workflow and wait for it to record db before rolling it, then flip it back to reserve" >&2
fi
exit 1
fi
SOURCE_INCARNATION="$(jq -er '.status.runtime.cellIncarnation' \
<<< "${CURRENT_DIRECTOR_STATUS}")"
if test "${ROLLBACK_RESUME}" = true && ! jq -e \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ on:
Switches to change, e.g. readinessLocal=true,admitMode=reserve (key=default removes a
key). Every other switch keeps its current value. Known: readinessLocal, ticketCheck,
admitMode, intakePerSec, reserveDryRun, rejectionFence, readTimeoutMarginMs,
reregisterInFlight
reregisterInFlight, phonePath (memory only takes effect in reserve; a reserve flip
must name phonePath)
required: true
type: string
expected-generation:
Expand Down
27 changes: 19 additions & 8 deletions .github/workflows/cloud-operate-relay-production-reserve-watch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ on:
type: string
flipped-at:
description: >-
When the reserve write applied, ISO with a zone, e.g. 2026-10-14T12:00:00Z. The non-drain
503 background is the median of the 10 minutes before it
When the reserve (or phonePath=memory) write applied, ISO with a zone, e.g.
2026-10-14T12:00:00Z. The non-drain 503 background and the phone rules' background are
the 10 minutes before it
required: false
default: ''
type: string
Expand Down Expand Up @@ -79,6 +80,8 @@ jobs:
outputs:
state: ${{ steps.outcome.outputs.state }}
verdict: ${{ steps.outcome.outputs.verdict }}
# phonePath when a step-6 phone rule tripped; anything else flips the cell back whole.
flip: ${{ steps.outcome.outputs.flip }}
env:
DURATION_MINUTES: ${{ inputs.duration-minutes }}
FLIPPED_AT: ${{ inputs.flipped-at }}
Expand All @@ -89,6 +92,10 @@ jobs:
set -euo pipefail
[[ "${CELL_ID}" =~ ^production-gce-c[0-9]{1,3}$ ]]
node -e "if (!/^[^.]+[.][^.]+[.][^.]+$/.test(process.env.ORCA_RELAY_ADMIN_ID_TOKEN ?? '')) process.exit(1)"
# A phone-rule trip writes phonePath=db mid-watch, through the flag tool.
ORCA_RELAY_CONTROL_ACCESS_TOKEN="$(gcloud auth print-access-token)"
echo "::add-mask::${ORCA_RELAY_CONTROL_ACCESS_TOKEN}"
export ORCA_RELAY_CONTROL_ACCESS_TOKEN
node dev/scripts/watch-relay-reserve-cell.mjs watch \
--mode "${MODE}" --cell-id "${CELL_ID}" \
--cell-origin "https://${CELL_ID#production-gce-}.relay.onorca.dev" \
Expand Down Expand Up @@ -258,6 +265,7 @@ jobs:
# lease wait can still kill the process before Postgres records db: the file says db, Postgres reserve.
env:
VERDICT: ${{ needs.watch.outputs.verdict || format('the watch ended {0} without a verdict', needs.watch.result) }}
FLIP: ${{ needs.watch.outputs.flip || 'admitMode' }}
steps:
- uses: actions/checkout@v4
if: ${{ always() }}
Expand Down Expand Up @@ -297,7 +305,7 @@ jobs:
--mode "${MODE}" --cell-id "${CELL_ID}" \
--cell-origin "https://${CELL_ID#production-gce-}.relay.onorca.dev" \
--project-id "${GCP_PROJECT_ID}" --director-origin "https://relay.onorca.dev" \
--confirmation "${CONFIRMATION}" --verdict "${VERDICT}" \
--confirmation "${CONFIRMATION}" --verdict "${VERDICT}" --flip "${FLIP}" \
| tee "${RUNNER_TEMP}/relay-reserve-flip-back.jsonl"

# The flip-back line is logged only once the write (or its dry-run plan) finished; without
Expand All @@ -308,12 +316,15 @@ jobs:
if grep -qs '"event":"orca_relay_reserve_watch_flip_back"' "${RUNNER_TEMP}/relay-reserve-flip-back.jsonl"; then
exit 0
fi
{
echo "## FLIP BACK FAILED: ${CELL_ID} may still be in reserve mode"
echo "Flip it to db by hand with Operate Relay Production Cell Flags."
} >> "${GITHUB_STEP_SUMMARY}"
if [[ "${FLIP}" == phonePath ]]; then
echo "## FLIP BACK FAILED: ${CELL_ID} may still have phonePath=memory" >> "${GITHUB_STEP_SUMMARY}"
echo "Set phonePath=default by hand with Operate Relay Production Cell Flags." >> "${GITHUB_STEP_SUMMARY}"
else
echo "## FLIP BACK FAILED: ${CELL_ID} may still be in reserve mode" >> "${GITHUB_STEP_SUMMARY}"
echo "Flip it to db by hand with Operate Relay Production Cell Flags." >> "${GITHUB_STEP_SUMMARY}"
fi
node dev/scripts/watch-relay-reserve-cell.mjs alarm --kind flip-back-failed \
--mode "${MODE}" --cell-id "${CELL_ID}" --project-id "${GCP_PROJECT_ID}" --verdict "${VERDICT}"
--mode "${MODE}" --cell-id "${CELL_ID}" --project-id "${GCP_PROJECT_ID}" --verdict "${VERDICT}" --flip "${FLIP}"

- name: Audit summary
if: ${{ always() }}
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/cloud-operate-relay-staging-cell-flags.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ on:
Switches to change, e.g. readinessLocal=true,admitMode=reserve (key=default removes a
key). Every other switch keeps its current value. Known: readinessLocal, ticketCheck,
admitMode, intakePerSec, reserveDryRun, rejectionFence, readTimeoutMarginMs,
reregisterInFlight
reregisterInFlight, phonePath (memory only takes effect in reserve; a reserve flip
must name phonePath)
required: true
type: string
expected-generation:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version-file: docs/site/package.json
# setup-node probes the store from the repository root, not this app.
package-manager-cache: false

Expand Down Expand Up @@ -227,7 +227,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version-file: docs/site/package.json
package-manager-cache: false

- name: Install site dependencies
Expand Down
109 changes: 105 additions & 4 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ on:
required: false
type: string
default: ''
# Why only the app builds read it: the orcad template build refuses a dark switch.
layout_owner:
description: Set to main to build with ORCA_LAYOUT_OWNER=main and record save-divergence reports
required: false
type: string
default: ''
workflow_dispatch:
inputs:
ref:
Expand Down Expand Up @@ -107,7 +113,12 @@ jobs:
env:
VITE_EXPOSE_STORE: 'true'
ORCA_CI_MAIN_SOURCEMAPS: '0'
run: pnpm run build:electron-vite:parallel --mode e2e
LAYOUT_OWNER: ${{ inputs.layout_owner }}
run: |
if [ -n "$LAYOUT_OWNER" ]; then
export ORCA_LAYOUT_OWNER="$LAYOUT_OWNER"
fi
pnpm run build:electron-vite:parallel --mode e2e

# The CLI emits into out/main too; start only after Electron finishes clearing that tree.
- name: Build shared E2E CLI
Expand All @@ -125,6 +136,11 @@ jobs:

- wait: e2e-cli

# The switch-on specs skip, rather than fail, when the build left no marker.
- name: Check layout-owner build marker
if: inputs.layout_owner == 'main'
run: test -f out/main/ORCA_LAYOUT_OWNER_MAIN

- name: Check shared native runtime action
id: native-runtime-action
run: |
Expand Down Expand Up @@ -325,6 +341,7 @@ jobs:
- name: Run changed E2E specs
env:
TEST_FILES_JSON: ${{ inputs.test_files }}
LAYOUT_OWNER: ${{ inputs.layout_owner }}
run: |
if [ -f config/scripts/ci-e2e-job-selection.mjs ]; then
printf '%s\n' "$TEST_FILES_JSON" | node config/scripts/ci-e2e-job-selection.mjs > "$RUNNER_TEMP/general-e2e-specs"
Expand All @@ -347,12 +364,43 @@ jobs:
fi
E2E_ENV=(SKIP_BUILD=1 ORCA_E2E_FORWARD_APP_LOGS=1 ORCA_E2E_WEB_CLIENT=1)
E2E_PROJECT_ARGS=()
if [ -n "$LAYOUT_OWNER" ]; then
test -f out/main/ORCA_LAYOUT_OWNER_MAIN
mkdir -p layout-divergence
E2E_ENV+=(ORCA_LAYOUT_SAVE_DIVERGENCE_LOG="$PWD/layout-divergence/window-specs.jsonl")
E2E_ENV+=(PLAYWRIGHT_JSON_OUTPUT_FILE="$PWD/layout-divergence/window-specs-results.json")
E2E_PROJECT_ARGS+=('--reporter=list,json')
fi
if grep -l '@headful' "${TEST_FILES[@]}" >/dev/null; then
E2E_PROJECT_ARGS+=(--project=electron-headful)
fi
xvfb-run --auto-servernum bash .github/scripts/e2e-with-window-manager.sh env "${E2E_ENV[@]}" \
pnpm run test:e2e "${TEST_FILES[@]}" --workers=1 "${E2E_PROJECT_ARGS[@]}"

- name: Summarize layout save divergence
if: always() && inputs.layout_owner == 'main'
continue-on-error: true
run: &summarize_layout_divergence |
# Either file names a run: a log with no report is unattributed, a report with no log is zero.
shopt -s nullglob
runs=(layout-divergence/*.jsonl layout-divergence/*-results.json)
for run in $(printf '%s\n' "${runs[@]%.jsonl}" | sed 's/-results\.json$//' | sort -u); do
node config/scripts/layout-save-divergence-summary.mjs "$run.jsonl" "$run-summary.json" "$run-results.json"
if [ -f "$run-results.json" ]; then
node config/scripts/ci-e2e-failure-summary.mjs "$run-results.json"
fi
done

- name: Upload layout save divergence report
if: always() && inputs.layout_owner == 'main'
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: layout-divergence-changed${{ inputs.artifact_suffix }}-attempt-${{ github.run_attempt }}
path: layout-divergence/
retention-days: 14
if-no-files-found: warn

- name: Upload Playwright traces
if: failure() || cancelled()
uses: actions/upload-artifact@v7
Expand Down Expand Up @@ -410,11 +458,18 @@ jobs:
# The packaged orcad slot the T6-11 launcher runs: its own node-pty under the pinned Node.
# The template is what `orca serve`'s default selection materializes that slot from.
- name: Build this runner's orcad slot and template
env:
LAYOUT_OWNER: ${{ inputs.layout_owner }}
run: |
slot="$(node config/scripts/build-orcad-prebuilds.mjs --print-slot)"
pnpm build:orcad-prebuilds
pnpm build:orcad-prebuilds --require-slots "$slot"
pnpm build:orcad
# The headless oracle's orcad host must hold the same layout owner as the Electron host.
if [ -n "$LAYOUT_OWNER" ]; then
ORCA_LAYOUT_OWNER="$LAYOUT_OWNER" pnpm build:orcad
else
pnpm build:orcad
fi
node config/scripts/build-orcad-template.mjs --targets "$slot"
- name: Switch serve hosts on one profile
if: inputs.test_files == '' || contains(inputs.test_files, 'tests/e2e/orcad-serve-mode-switch.spec.ts')
Expand All @@ -431,7 +486,30 @@ jobs:
env:
SKIP_BUILD: '1'
ORCA_E2E_FORWARD_APP_LOGS: '1'
run: xvfb-run --auto-servernum bash .github/scripts/e2e-with-window-manager.sh pnpm exec playwright test --config tests/playwright.config.ts tests/e2e/workspace-layout-oracle-headless.spec.ts --project=electron-headless --workers=1
LAYOUT_OWNER: ${{ inputs.layout_owner }}
run: |
REPORT_ARGS=()
if [ -n "$LAYOUT_OWNER" ]; then
test -f out/main/ORCA_LAYOUT_OWNER_MAIN
mkdir -p layout-divergence
export ORCA_LAYOUT_SAVE_DIVERGENCE_LOG="$PWD/layout-divergence/headless-oracle.jsonl"
export PLAYWRIGHT_JSON_OUTPUT_FILE="$PWD/layout-divergence/headless-oracle-results.json"
REPORT_ARGS=('--reporter=list,json')
fi
xvfb-run --auto-servernum bash .github/scripts/e2e-with-window-manager.sh pnpm exec playwright test --config tests/playwright.config.ts tests/e2e/workspace-layout-oracle-headless.spec.ts --project=electron-headless --workers=1 "${REPORT_ARGS[@]}"
- name: Summarize layout save divergence
if: always() && inputs.layout_owner == 'main'
continue-on-error: true
run: *summarize_layout_divergence
- name: Upload layout save divergence report
if: always() && inputs.layout_owner == 'main'
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: layout-divergence-headless${{ inputs.artifact_suffix }}-attempt-${{ github.run_attempt }}
path: layout-divergence/
retention-days: 14
if-no-files-found: warn
- uses: actions/upload-artifact@v7
if: failure()
with:
Expand Down Expand Up @@ -486,9 +564,32 @@ jobs:
ORCA_E2E_ORCAD_CONVERT_HOST: docker
ORCA_E2E_FORWARD_APP_LOGS: '1'
SHARD: ${{ matrix.shard }}
LAYOUT_OWNER: ${{ inputs.layout_owner }}
SHARD_INDEX: ${{ strategy.job-index }}
run: |
export ORCA_E2E_ORCAD_CONVERT_TEMPLATE="$RUNNER_TEMP/orcad-convert-template"
xvfb-run --auto-servernum bash .github/scripts/e2e-with-window-manager.sh pnpm exec playwright test --config tests/playwright.config.ts tests/e2e/ssh-orcad- --project=electron-headless --workers=1 --shard="$SHARD"
REPORT_ARGS=()
if [ -n "$LAYOUT_OWNER" ]; then
test -f out/main/ORCA_LAYOUT_OWNER_MAIN
mkdir -p layout-divergence
export ORCA_LAYOUT_SAVE_DIVERGENCE_LOG="$PWD/layout-divergence/managed-ssh-$SHARD_INDEX.jsonl"
export PLAYWRIGHT_JSON_OUTPUT_FILE="$PWD/layout-divergence/managed-ssh-$SHARD_INDEX-results.json"
REPORT_ARGS=('--reporter=list,json')
fi
xvfb-run --auto-servernum bash .github/scripts/e2e-with-window-manager.sh pnpm exec playwright test --config tests/playwright.config.ts tests/e2e/ssh-orcad- --project=electron-headless --workers=1 --shard="$SHARD" "${REPORT_ARGS[@]}"
- name: Summarize layout save divergence
if: always() && inputs.layout_owner == 'main'
continue-on-error: true
run: *summarize_layout_divergence
- name: Upload layout save divergence report
if: always() && inputs.layout_owner == 'main'
continue-on-error: true
uses: actions/upload-artifact@v7
with:
name: layout-divergence-managed-ssh-${{ strategy.job-index }}${{ inputs.artifact_suffix }}-attempt-${{ github.run_attempt }}
path: layout-divergence/
retention-days: 14
if-no-files-found: warn
- uses: actions/upload-artifact@v7
if: failure()
with:
Expand Down
Loading
Loading