CI: stand up Gitea Actions (TST-03) + fix the defects it caught #123

Merged
dohertj2 merged 9 commits from fix/ci-selfhosted-tooling into main 2026-07-10 05:11:03 -04:00

9 Commits

Author SHA1 Message Date
Joseph Doherty 843f5fe868 ci(tst-03): disable Windows jobs (act host-mode broken); gate on WINDOWS_CI_ENABLED
ci / live-mxaccess (push) Waiting to run
ci / live-mxaccess (pull_request) Waiting to run
ci / windows (push) Has been skipped
ci / windows (pull_request) Has been skipped
ci / java (push) Successful in 1m57s
ci / portable (push) Successful in 7m8s
ci / java (pull_request) Successful in 2m3s
ci / portable (pull_request) Successful in 8m15s
act_runner v0.6.1 host-mode on Windows cannot run steps (unresolvable step-script
path) or stage JS actions; Windows containers are impractical for net48/x86/MXAccess.
Skip the windows + live-mxaccess jobs until a working Windows runner exists, so
push/PR checks are the green portable + java jobs. x86 Worker verification stays on
the manual windev worktree process. Re-enable via repo var WINDOWS_CI_ENABLED=true.

Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 04:56:29 -04:00
Joseph Doherty 7b223d8f39 ci(tst-03): run Windows host-mode jobs via cmd (act pwsh shim is broken)
ci / live-mxaccess (push) Waiting to run
ci / live-mxaccess (pull_request) Waiting to run
ci / windows (push) Failing after 1s
ci / windows (pull_request) Failing after 0s
ci / java (push) Successful in 2m3s
ci / portable (push) Successful in 7m25s
ci / java (pull_request) Successful in 1m53s
ci / portable (pull_request) Successful in 6m51s
Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 04:54:07 -04:00
Joseph Doherty 4af2a6b859 ci(tst-03): manual checkout for Windows host-mode jobs (act can't stage JS actions)
ci / live-mxaccess (push) Waiting to run
ci / live-mxaccess (pull_request) Waiting to run
ci / windows (push) Failing after 5s
ci / windows (pull_request) Failing after 3s
ci / java (push) Successful in 1m56s
ci / portable (push) Successful in 7m3s
ci / java (pull_request) Successful in 1m57s
ci / portable (pull_request) Successful in 6m56s
act host-mode on Windows does not materialize a JS action's dist/ (actions/checkout
fails with "Cannot find module .../dist/index.js"), so the windows + live-mxaccess
jobs check the repo out with plain git instead (public repo, anonymous https clone
of GITHUB_SHA). The self-hosted windev runner otherwise works (host mode, persistent).

Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 04:52:04 -04:00
Joseph Doherty c58a593cc6 ci: re-trigger to exercise windev windows runner
ci / live-mxaccess (push) Waiting to run
ci / live-mxaccess (pull_request) Waiting to run
ci / windows (push) Failing after 39s
ci / windows (pull_request) Failing after 8s
ci / java (push) Successful in 1m52s
ci / portable (push) Successful in 9m33s
ci / portable (pull_request) Successful in 8m37s
ci / java (pull_request) Successful in 1m51s
Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 04:49:21 -04:00
Joseph Doherty 18f6905eab docs(archreview): TST-03 -> Done (CI live and green on the co-located runner)
ci / live-mxaccess (push) Waiting to run
ci / java (push) Successful in 1m54s
ci / live-mxaccess (pull_request) Waiting to run
ci / portable (push) Successful in 7m7s
ci / java (pull_request) Successful in 1m51s
ci / portable (pull_request) Successful in 6m51s
ci / windows (push) Failing after 9s
ci / windows (pull_request) Failing after 8s
CI now runs end-to-end: portable + java jobs green on fix/ci-selfhosted-tooling.
Flip the tracker status and record the root cause (runner container.network) and
the five real defects the run surfaced and fixed. windows/live-mxaccess jobs
remain queued pending a self-hosted windev runner.

Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 04:22:01 -04:00
Joseph Doherty 70ef87aea2 ci(tst-03): ensure a current event loop for sync python tests (py3.12)
ci / live-mxaccess (push) Waiting to run
ci / java (push) Successful in 1m50s
ci / portable (push) Successful in 7m9s
ci / windows (push) Failing after 8s
The last portable failure: pytest-asyncio 1.x does not install a current event
loop for synchronous tests and clears it after each async test, so a later sync
test that builds a grpc.aio.Channel (create_channel) hit
"RuntimeError: There is no current event loop" on Python 3.12 depending on test
order (CI hit it; local order did not). Add an autouse conftest fixture that
ensures a usable current loop per test. Local: 127 passed, 1 skipped.

Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 04:11:45 -04:00
Joseph Doherty 576179bd3f ci(tst-03): fix orphan-terminator test on Linux + refresh stale java worker codegen
ci / live-mxaccess (push) Waiting to run
ci / java (push) Successful in 1m56s
ci / portable (push) Failing after 7m32s
ci / windows (push) Failing after 8s
Two real defects the CI run surfaced (driving to fully green):

- OrphanWorkerTerminatorTests hard-coded a Windows path (C:\...); on the Linux
  runner Path.GetFullPath does not root it, so the terminator's exact-path match
  found nothing (Expected 2/1 kills, Actual 0). Use an OS-appropriate normalized
  path so the matching logic is validated on every platform (5/5 pass locally).
- clients/java generated MxaccessWorker.java was stale — missing the canonical
  max_frame_bytes field. Refreshed via `gradle generateProto` (protobuf 4.33.1,
  the pinned version — the diff is purely the field, no version churn). Broaden
  the ci.yml churn-revert to both generated aggregates so verify-clean still
  guards real drift elsewhere.

Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 04:01:33 -04:00
Joseph Doherty 866d053ec2 ci(tst-03): fix codegen-check null bug, refresh rust proto, gradle direct install
ci / live-mxaccess (push) Waiting to run
ci / java (push) Failing after 1m57s
ci / portable (push) Failing after 3m36s
ci / windows (push) Failing after 8s
Surfaced by the first real CI run on the self-hosted runner:

- scripts/check-codegen.ps1: `git status --porcelain` returns $null on a clean
  tree, so `.Trim()` threw "cannot call a method on a null-valued expression" —
  i.e. Check 2 could never report success. Pipe through Out-String (null -> '').
- clients/rust/protos/mxaccess_worker.proto: genuinely stale — missing the
  canonical `max_frame_bytes` field. Refreshed from
  src/ZB.MOM.WW.MxGateway.Contracts/Protos (Check 3 drift guard, added in P1).
- ci.yml java job: act cannot resolve the gradle/actions monorepo action
  (`unsupported object type` on the v4 tag); install Gradle 9.5.1 directly instead
  (matches the local build) since the repo has no gradle wrapper.

Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 03:49:09 -04:00
Joseph Doherty a36844d59d ci(tst-03): provision pwsh + gradle for the self-hosted act runner
ci / live-mxaccess (push) Waiting to run
ci / portable (push) Failing after 4m46s
ci / java (push) Failing after 10m43s
ci / windows (push) Failing after 8s
The portable and java jobs assumed tools GitHub-hosted runners preinstall but the
self-hosted catthehacker act image lacks: `pwsh` (the codegen freshness check uses
`shell: pwsh`) and `gradle` (the java job runs `gradle test`; the repo has no
wrapper). Install PowerShell as a .NET global tool (the SDK is already set up) and
provision gradle via gradle/actions/setup-gradle. No behavior change on
GitHub-hosted runners, which already have both.

Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
2026-07-10 03:34:10 -04:00