Skip to content

Commit 902596f

Browse files
committed
isolate browser suite in ci
1 parent fe85e19 commit 902596f

File tree

5 files changed

+82
-7
lines changed

5 files changed

+82
-7
lines changed

.github/workflows/deploy-github-pages.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ concurrency:
1717

1818
env:
1919
APP_PROJECT: src/PrompterLive.App/PrompterLive.App.csproj
20+
APP_TEST_PROJECT: tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj
21+
CORE_TEST_PROJECT: tests/PrompterLive.Core.Tests/PrompterLive.Core.Tests.csproj
2022
PAGES_ARTIFACT_ROOT: .artifacts/prompterlive-pages
2123
PAGES_BASE_PATH: /
2224
PAGES_CNAME: prompter.managed-code.com
@@ -26,6 +28,7 @@ env:
2628
RELEASE_ARTIFACT_NAME: prompterlive-release-package
2729
RELEASE_ARTIFACT_ROOT: .artifacts/release-artifact
2830
SOLUTION_FILE: PrompterLive.slnx
31+
UI_TEST_PROJECT: tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj
2932

3033
jobs:
3134
validate_release:
@@ -50,8 +53,13 @@ jobs:
5053
- name: Install Playwright browser
5154
run: node "$PLAYWRIGHT_CLI" install chromium
5255

53-
- name: Test solution
54-
run: dotnet test "$SOLUTION_FILE" --no-build
56+
- name: Test supporting suites
57+
run: |
58+
dotnet test "$CORE_TEST_PROJECT" --no-build
59+
dotnet test "$APP_TEST_PROJECT" --no-build
60+
61+
- name: Test browser suite
62+
run: dotnet test "$UI_TEST_PROJECT" --no-build
5563

5664
prepare_release:
5765
name: Resolve Release Version

.github/workflows/pr-validation.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@ concurrency:
1414
cancel-in-progress: true
1515

1616
env:
17+
APP_TEST_PROJECT: tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj
18+
CORE_TEST_PROJECT: tests/PrompterLive.Core.Tests/PrompterLive.Core.Tests.csproj
1719
PLAYWRIGHT_CLI: tests/PrompterLive.App.UITests/bin/Debug/net10.0/.playwright/package/cli.js
1820
SOLUTION_FILE: PrompterLive.slnx
21+
UI_TEST_PROJECT: tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj
1922

2023
jobs:
2124
build_and_test:
@@ -37,5 +40,10 @@ jobs:
3740
- name: Install Playwright browser
3841
run: node "$PLAYWRIGHT_CLI" install chromium
3942

40-
- name: Test solution
41-
run: dotnet test "$SOLUTION_FILE" --no-build
43+
- name: Test supporting suites
44+
run: |
45+
dotnet test "$CORE_TEST_PROJECT" --no-build
46+
dotnet test "$APP_TEST_PROJECT" --no-build
47+
48+
- name: Test browser suite
49+
run: dotnet test "$UI_TEST_PROJECT" --no-build

ci-workflows-release-pr-validation.plan.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Reshape the repository CI/CD so `PrompterLive` has:
3030
- A dedicated PR validation workflow has been added locally but not pushed yet.
3131
- The release workflow has been expanded locally into build/test -> publish -> GitHub Release -> GitHub Pages stages, but GitHub has not run that shape yet.
3232
- Workflow naming is being normalized across repository automation.
33+
- GitHub run `23814159539` proved that `dotnet test PrompterLive.slnx --no-build` is not a safe CI test shape for this repo because it launches the UI browser suite alongside the supporting test assemblies.
3334

3435
## Constraints
3536

@@ -81,6 +82,48 @@ Quality bar:
8182
- Intended fix path: keep `PAGES_BASE_PATH` at `/`, preserve root-relative asset loading, and ship `CNAME` in the Pages artifact.
8283
- Fix status: implemented locally, pending GitHub deploy verification
8384

85+
- [ ] `CI browser-suite contention`: GitHub run `23814159539` failed while `dotnet test PrompterLive.slnx --no-build` launched the browser suite in parallel with the supporting test assemblies.
86+
- Root cause note: `PrompterLive.App.UITests` self-hosts shared WASM build assets and the repo rules require it to own those assets inside a dedicated `dotnet test` process.
87+
- Intended fix path: split CI validation into sequential project-scoped `dotnet test` steps and keep the browser suite isolated after the supporting suites pass.
88+
- Fix status: implemented locally, pending GitHub verification
89+
90+
## GitHub Run 23814159539 Failing Tests
91+
92+
- [ ] `PrompterLive.App.UITests.EditorFloatingToolbarLayoutTests.EditorScreen_FloatingToolbarKeepsFullHeightWhenSelectionIsActive`
93+
- [ ] `PrompterLive.App.UITests.EditorFloatingToolbarLayoutTests.EditorScreen_FloatingToolbarStaysAboveMultiLineSelection`
94+
- [ ] `PrompterLive.App.UITests.EditorFloatingToolbarLayoutTests.EditorScreen_FloatingToolbarStaysPinnedAfterFloatingFormatAction`
95+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_ClickableMenusAndAiButtonsApplyCommands`
96+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_FloatingEmotionMenuAppliesSelectedEmotion`
97+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_FloatingToolbarShowsAiAndPersistsSelectionFormatting`
98+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_FullToolbarSurfaceSupportsExtendedCommands`
99+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_HidesFrontMatterFromVisibleEditorBody`
100+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_MetadataDurationPersistsAfterReload`
101+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_ShowsFloatingBarAndAppliesFormattingToSelectedSourceText`
102+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_ToolbarDropdownsCloseCentrallyAcrossCommandsAndOutsideClicks`
103+
- [ ] `PrompterLive.App.UITests.EditorInteractionTests.EditorScreen_UndoAndRedoWorkFromToolbarAndKeyboard`
104+
- [ ] `PrompterLive.App.UITests.EditorLayoutTests.EditorScreen_MetadataRailStaysDockedToRightOfMainPanel`
105+
- [ ] `PrompterLive.App.UITests.EditorOverlayInteractionTests.EditorScreen_HidesFloatingBarWhileToolbarDropdownIsOpen`
106+
- [ ] `PrompterLive.App.UITests.EditorSourceSyncTests.EditorScreen_DirectSourceHeaderEditsRefreshStructureTree`
107+
- [ ] `PrompterLive.App.UITests.EditorTypingTests.EditorScreen_QuantumTypingKeepsStyledOverlayVisibleResponsive`
108+
- [ ] `PrompterLive.App.UITests.EditorTypingTests.EditorScreen_RapidTypingUpdatesStructureAndPersistsAfterReload`
109+
- [ ] `PrompterLive.App.UITests.EditorTypingTests.EditorScreen_SequentialTypingIntoSourceInputCompletesWithoutTimeout`
110+
- [ ] `PrompterLive.App.UITests.GoLiveFlowTests.GoLivePage_ArmsDestinationsAndPersistsValuesInBrowserStorage`
111+
- [ ] `PrompterLive.App.UITests.GoLiveFlowTests.GoLivePage_ShowsEmptyPreviewStateWhenSceneHasNoCamera`
112+
- [ ] `PrompterLive.App.UITests.GoLiveFlowTests.GoLivePage_ShowsLiveCameraPreviewForProgramFeed`
113+
- [ ] `PrompterLive.App.UITests.GoLiveFlowTests.GoLivePage_StartStream_WithLiveKitArmed_PublishesProgramVideoAndAudio`
114+
- [ ] `PrompterLive.App.UITests.GoLiveFlowTests.GoLivePage_StartStream_WithObsArmed_RoutesMicrophoneAudioForObsBrowserSource`
115+
- [ ] `PrompterLive.App.UITests.GoLiveFlowTests.GoLivePage_SwitchesStudioTabsAndCreatesRemoteRoom`
116+
- [ ] `PrompterLive.App.UITests.GoLiveFlowTests.GoLivePage_TogglesSceneCameraMembershipAndLinksBackToRead`
117+
- [ ] `PrompterLive.App.UITests.MediaRuntimeIntegrationTests.TeleprompterCameraToggle_AttachesSyntheticBackgroundVideoStream`
118+
- [ ] `PrompterLive.App.UITests.NavigationFlowTests.ScreenNavigation_UsesSpaRoutingWithoutReloadingBrowserContext`
119+
- [ ] `PrompterLive.App.UITests.StudioWorkflowScenarioTests.StudioWorkflow_LearnAndTeleprompterReader_CapturesArtifacts`
120+
- [ ] `PrompterLive.App.UITests.StudioWorkflowScenarioTests.StudioWorkflow_LibraryToEditorAuthoring_CapturesArtifacts`
121+
- [ ] `PrompterLive.App.UITests.StudioWorkflowScenarioTests.StudioWorkflow_NewScriptStartsEmpty_CapturesArtifacts`
122+
- [ ] `PrompterLive.App.UITests.TeleprompterSettingsFlowTests.TeleprompterAndSettingsScreens_RespondToCoreControls`
123+
124+
Root-cause note:
125+
- The failing list spans library, editor, teleprompter, navigation, media, and go-live flows, which points to shared browser-harness contention rather than a single routed feature regression.
126+
84127
## Ordered Implementation Plan
85128

86129
1. Baseline inventory
@@ -161,6 +204,19 @@ Quality bar:
161204
- `dotnet build /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx -warnaserror`
162205
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx`
163206
- `dotnet format /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx`
207+
- GitHub run `23814159539` failed in `Build And Test` because solution-level `dotnet test` launched `PrompterLive.App.UITests` alongside the supporting test assemblies; the next fix is to split CI test execution into sequential project-scoped steps.
208+
- Updated `.github/workflows/pr-validation.yml` and `.github/workflows/deploy-github-pages.yml` so CI now runs:
209+
- `dotnet test tests/PrompterLive.Core.Tests/PrompterLive.Core.Tests.csproj --no-build`
210+
- `dotnet test tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --no-build`
211+
- `dotnet test tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-build`
212+
- Local validation for the split test shape passed:
213+
- `actionlint .github/workflows/*.yml`
214+
- `dotnet build /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx -warnaserror`
215+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.Core.Tests/PrompterLive.Core.Tests.csproj --no-build`
216+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --no-build`
217+
- `node /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/bin/Debug/net10.0/.playwright/package/cli.js install chromium`
218+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-build`
219+
- `dotnet format /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx`
164220

165221
## Final Validation Skills And Commands
166222

docs/Architecture.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ flowchart LR
109109
- `Directory.Packages.props` is the canonical source for NuGet package versions.
110110
- `Directory.Build.props` is the canonical source for shared target framework, analyzer policy, and assembly/app version settings.
111111
- `global.json` pins the expected .NET SDK for local and CI builds.
112-
- `.github/workflows/pr-validation.yml` is the canonical pull-request validation flow for repo build and test gates.
113-
- `.github/workflows/deploy-github-pages.yml` is the canonical release pipeline for the standalone WASM app: build and test, resolve the release version from `Directory.Build.props`, publish the release artifact, publish the GitHub Release, and deploy GitHub Pages on the custom-domain root.
112+
- `.github/workflows/pr-validation.yml` is the canonical pull-request validation flow for repo build and test gates; it runs the browser-realistic Playwright suite in a dedicated `dotnet test` step after the non-browser test projects finish.
113+
- `.github/workflows/deploy-github-pages.yml` is the canonical release pipeline for the standalone WASM app: build and test, resolve the release version from `Directory.Build.props`, publish the release artifact, publish the GitHub Release, and deploy GitHub Pages on the custom-domain root. Its validation job isolates `PrompterLive.App.UITests` from the supporting test projects so the self-hosted browser harness owns the test assets during its run.
114114
- Vendored browser SDK release pins live in `vendored-streaming-sdks.json`, and the exact release sync or watch flow is documented in `docs/Features/VendoredStreamingSdkReleases.md`.
115115

116116
## Runtime Boundaries

docs/Features/AppVersioningAndGitHubPages.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,15 @@ flowchart LR
5555
- The workflow copies `index.html` to `404.html` so client-side routes keep working on repository Pages hosting.
5656
- `.nojekyll` must be present in the Pages artifact so framework and `_content` assets are served as-is.
5757
- The release workflow must run build and tests before it publishes the release asset, GitHub Release, and GitHub Pages deployment.
58+
- The Playwright browser suite must run in its own `dotnet test` step after the supporting test projects, not inside a solution-wide parallel test invocation, because the suite self-hosts shared WASM assets on a dynamic loopback origin.
5859

5960
## Verification
6061

6162
- `actionlint .github/workflows/*.yml`
6263
- `.github/workflows/pr-validation.yml` runs `dotnet build PrompterLive.slnx -warnaserror`
63-
- `.github/workflows/pr-validation.yml` runs `dotnet test PrompterLive.slnx --no-build`
64+
- `.github/workflows/pr-validation.yml` runs `dotnet test tests/PrompterLive.Core.Tests/PrompterLive.Core.Tests.csproj --no-build`
65+
- `.github/workflows/pr-validation.yml` runs `dotnet test tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --no-build`
66+
- `.github/workflows/pr-validation.yml` runs `dotnet test tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-build`
6467
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --filter "FullyQualifiedName~SettingsInteractionTests.AboutSection_RendersInjectedAppVersionMetadata"`
6568
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --filter "FullyQualifiedName~TeleprompterSettingsFlowTests.TeleprompterAndSettingsScreens_RespondToCoreControls"`
6669
- `.github/workflows/deploy-github-pages.yml` publish step passes `-p:PrompterLiveBuildNumber=${{ github.run_number }}`

0 commit comments

Comments
 (0)