ci(workflows): add missing repo test coverage#111
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR
This adds the repo-level GitHub Actions coverage that was missing for Go packages, UI tests, e2e unit tests, and docs checks. It also fixes stale operator URL expectations so the new Go workflow runs green on the current code.
Summary
Review focus
Test plan
ok spritz.sh/api/cmd/shared-syncer (cached)
ok spritz.sh/operator/api/v1 (cached)
ok spritz.sh/operator/controllers (cached)
ok spritz.sh/operator/sharedmounts (cached)
✔ entrypoint renders null when presets are unset (257.84ms)
✔ nginx config disables caching for index and runtime config (1.254834ms)
✔ nginx config keeps hashed js and css cacheable (0.21425ms)
✔ ACP client does not report ready or send prompts before bootstrap completes (41.34025ms)
✔ ACP client surfaces missing sessions instead of recreating them client-side (6.147333ms)
✔ ACP chat shell uses viewport-bound layout with internal scrolling (2.329375ms)
✔ ACP page restores cached transcript when revisiting a conversation (80.146ms)
✔ ACP page purges pre-cutover cached transcripts after the namespace cutover (8.298291ms)
✔ ACP page drops cached transcripts that contain raw HTML error documents (13.5715ms)
✔ ACP page replaces cached transcript with backend replay during bootstrap (7.898292ms)
✔ ACP page clears cached transcript when backend replay returns no transcript updates (7.580917ms)
✔ ACP page drops cached HTML error documents during transcript restore (7.162125ms)
✔ ACP page renders a two-pane shell with a single sidebar rail (20.170334ms)
✔ ACP client dispose errors do not surface as global notices (79.159125ms)
✔ ACP page surfaces real startup errors as toasts (8.8065ms)
✔ ACP page keeps the requested workspace route and shows provisioning state while chat is unavailable (18.213084ms)
✔ ACP page shows a not found state instead of redirecting when the requested workspace is missing (6.196959ms)
✔ ACP page sanitizes raw HTML bootstrap failures before showing a toast (25.736333ms)
✔ ACP page surfaces HTML tool failures as toasts without dumping raw markup (7.742583ms)
✔ ACP page surfaces HTML assistant failures as toasts without restoring markup into chat (7.307917ms)
✔ ACP page rebinds the selected conversation before sending on a stale client (101.438833ms)
✔ ACP page repairs a missing session by bootstrapping once and reconnecting (24.402292ms)
✔ ACP render adapter keeps commands out of transcript and upserts tool cards (15.208209ms)
✔ ACP render adapter summarizes HTML error pages in tool results (6.119125ms)
✔ ACP render adapter drops HTML error pages from assistant text updates (2.165125ms)
✔ ACP render adapter sanitizes raw HTML error pages at render time (2.1425ms)
✔ ACP render adapter treats bootstrap replay chunks as historical messages (5.829125ms)
✔ ACP render adapter coalesces bootstrap replay chunks for the same historical message (1.617917ms)
✔ ACP render adapter hydrates legacy cached messages that used kind (1.242709ms)
✔ chat hash route initializes without throwing (67.085916ms)
✔ spritz list shows a transitional chat action while workspace chat is still starting (58.523583ms)
✔ resolveRepoSelection falls back to repo defaults for presets without repo ownership (3.417625ms)
✔ resolveRepoSelection preserves explicit blank repo settings owned by the preset (0.333ms)
✔ buildCreatePayload uses presetId and does not serialize preset env overrides (1.665375ms)
✔ buildCreatePayload falls back to explicit image when preset is no longer aligned (0.360292ms)
✔ buildCreateFormState keeps preset selection only when image still matches (2.9205ms)
✔ writeCreateFormState stores reusable form state without a name field (0.58675ms)
✔ parsePresets returns raw arrays directly (0.877916ms)
✔ parsePresets returns null for the runtime placeholder (0.126125ms)
✔ parsePresets fails closed for malformed values (0.613666ms)
✔ setupPresetPanel injects the preset selector and updates image fields (3.805042ms)
✔ setupPresetPanel restores a saved preset selection and falls back to custom (2.10475ms)
✔ setupPresetPanel clears hidden repo defaults when a preset explicitly owns blank repo fields (0.4155ms)
ℹ tests 44
ℹ suites 0
ℹ pass 44
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1011.873625
✔ connectACPWebSocket times out RPC calls without a response (1006.664541ms)
✔ withACPWorkspaceClient always closes the websocket client and stops the port-forward (3.342375ms)
✔ runACPWorkspacePrompt delegates the ACP flow through the workspace client owner (1.26375ms)
✔ resolveSpzCommand prefers explicit binary env override (1.382125ms)
✔ resolveSpzCommand prefers the checked-out CLI before any global spz on PATH (0.1545ms)
✔ parsePresetList normalizes comma-delimited values (0.3255ms)
✔ parseSmokeArgs requires explicit presets instead of assuming example ids (0.566208ms)
✔ parseSmokeArgs normalizes provided preset ids (0.173334ms)
✔ parseSmokeArgs prefers the smoke namespace env over the generic namespace env (0.210333ms)
✔ parseSmokeArgs requires an explicit smoke api url and bearer token (0.311917ms)
✔ buildSmokeSpzEnvironment strips ambient spritz auth and profile state (0.326667ms)
✔ extractACPText flattens nested content blocks (0.266916ms)
✔ joinACPTextChunks preserves chunked tokens without inserted separators (0.242583ms)
✔ buildIdempotencyKey and smoke token normalize preset names (0.283792ms)
✔ resolveACPEndpoint prefers discovered ACP port/path and normalizes the path (0.260958ms)
✔ resolveWebSocketConstructor returns a usable client constructor (23.938416ms)
✔ assertSmokeCreateResponse accepts canonicalized preset ids from the API (0.162875ms)
✔ isForbiddenFailure only accepts explicit forbidden command failures (0.236166ms)
✔ runCommand marks timed-out child processes (32.346375ms)
✔ runCommand escalates to SIGKILL when the child ignores SIGTERM (28.671209ms)
✔ waitForWebSocketOpen rejects and closes on handshake timeout (1001.187625ms)
✔ waitForWebSocketOpen resolves when the socket opens (8.797208ms)
✔ summarizeWorkspaceFailure prioritizes shared mount init failures (1.774084ms)
✔ summarizeWorkspaceFailure reports image pull failures distinctly (0.158042ms)
✔ waitForWorkspace returns the ready workspace payload and discovered ACP endpoint (4.134708ms)
✔ waitForWorkspace recovers from transient kubectl polling errors (2.345208ms)
✔ waitForWorkspace fails with the last staged failure summary on timeout (10.465833ms)
ℹ tests 28
ℹ suites 0
ℹ pass 28
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1241.181208