PrompterLive exposes the running app version inside the Settings About screen and publishes the standalone WebAssembly build through a full GitHub release pipeline.
This flow keeps the version number automated:
- local builds default to
0.1.0 - release builds derive
0.1.<run_number>from the active release workflow run - the About screen reads the compiled assembly metadata instead of hardcoded copy
flowchart LR
Pr["pr-validation.yml<br/>build + test on PR"]
Run["Release Pipeline run_number<br/>or local default 0"]
BuildProps["Directory.Build.props<br/>Version = 0.1.build"]
Assembly["PrompterLive.App assembly metadata"]
Program["Program.cs<br/>IAppVersionProvider"]
About["Settings About card"]
Validate["deploy-github-pages.yml<br/>build + test on main"]
Publish["dotnet publish"]
Release["GitHub Release<br/>tag + release asset"]
PagesPrep["Pages artifact prep<br/>root base href + CNAME + 404.html"]
Pages["GitHub Pages<br/>prompter.managed-code.com"]
Pr --> Validate
Run --> BuildProps
Validate --> BuildProps
BuildProps --> Assembly
Assembly --> Program
Program --> About
BuildProps --> Publish
Publish --> Release
Publish --> PagesPrep
PagesPrep --> Pages
Directory.Build.propsis the only source of app version composition.PrompterLiveBuildNumbercomes fromGITHUB_RUN_NUMBERwhen CI provides it, or falls back to0locally..github/workflows/deploy-github-pages.ymlresolves the release version fromVersionPrefix, so the release tag and the compiled app version stay aligned.Program.cscreatesIAppVersionProviderfrom the compiledPrompterLive.Appassembly metadata.SettingsAboutSectionrenders that provider value in the About card subtitle.
- GitHub Pages publishes the standalone
src/PrompterLive.Appartifact only. prompter.managed-code.comis a custom-domain root deployment, so the Pages artifact must keep<base href="/">.- The workflow copies the published
wwwrootoutput, not the host wrapper files around it. - The workflow writes
CNAMEforprompter.managed-code.cominto the Pages artifact. - The workflow copies
index.htmlto404.htmlso client-side routes keep working on repository Pages hosting. .nojekyllmust be present in the Pages artifact so framework and_contentassets are served as-is.- The release workflow must run build and tests before it publishes the release asset, GitHub Release, and GitHub Pages deployment.
- The Playwright browser suite must run in its own
dotnet teststep 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.
actionlint .github/workflows/*.yml.github/workflows/pr-validation.ymlrunsdotnet build PrompterLive.slnx -warnaserror.github/workflows/pr-validation.ymlrunsdotnet test tests/PrompterLive.Core.Tests/PrompterLive.Core.Tests.csproj --no-build.github/workflows/pr-validation.ymlrunsdotnet test tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --no-build.github/workflows/pr-validation.ymlrunsdotnet test tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-builddotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --filter "FullyQualifiedName~SettingsInteractionTests.AboutSection_RendersInjectedAppVersionMetadata"dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --filter "FullyQualifiedName~TeleprompterSettingsFlowTests.TeleprompterAndSettingsScreens_RespondToCoreControls".github/workflows/deploy-github-pages.ymlpublish step passes-p:PrompterLiveBuildNumber=${{ github.run_number }}.github/workflows/deploy-github-pages.ymlpublishes both the GitHub Release asset and the GitHub Pages artifact from the same release build output