CI/CD
All automation lives in .github/workflows. Three workflows keep the project healthy and publish its artifacts and documentation.
Continuous integration - ci.yml
| Property | Value |
|---|---|
| Triggers | Push to master, pull requests, manual dispatch |
| Runner | windows-latest |
| Steps | Restore, build (Release), test, upload test results and coverage |
The build runs the Meziantou and Roslynator analyzers with warnings treated as errors, so a green CI run means zero compiler and analyzer warnings.
Test results (*.trx) and coverage output are uploaded as the test-results artifact.
Release - release.yml
| Property | Value |
|---|---|
| Triggers | Push of a release_* or v* tag, or manual dispatch with a tag input |
| Runner | windows-latest (verify + package), ubuntu-latest (publish) |
| Permissions | contents: write |
Flow:
- verify - builds and runs the full test suite.
- package - publishes
win-x64andwin-arm64builds as single-file, framework-dependent executables and creates:release_<version>_win-x64.ziprelease_<version>_win-arm64.zip- a
.sha256checksum file for each zip.
Every zip contains
RomValidator.exe, the bundled 7-Zip fallback executables (7za.exe/7za_arm64.exe), andLICENSE.txt,ReadMe.mdandWhatsNew.md. - release - checks out the repository history, then creates a GitHub release for the tag and attaches all zips and checksums, with automatically generated release notes.
Creating a release
git tag release_2.9.0
git push origin release_2.9.0
The version in the zip names comes from the tag (release_ or a leading v is stripped). This naming convention is compatible with the in-app update check, which parses tags such as release_2.9.0 and v2.9.0. Keep the tag in sync with AssemblyVersion / FileVersion in RomValidator.csproj.
A manual dispatch of the workflow with the tag input can be used to re-publish an existing tag.
Documentation - docs.yml
| Property | Value |
|---|---|
| Triggers | Push to master that changes docs/** or the workflow itself, manual dispatch |
| Permissions | contents: write, pages: write, id-token: write |
GitHub Pages
The pages job builds this documentation with Jekyll (using the just-the-docs theme) and deploys it with the official GitHub Pages actions:
actions/configure-pages- enables Pages with the “GitHub Actions” source when needed.actions/jekyll-build-pages- buildsdocs/into_site/.actions/upload-pages-artifact+actions/deploy-pages- publishes the site.
The site is available at https://purelogiccode.github.io/RomValidator/.
One-time setup
If the Pages site has never been enabled, open Settings > Pages and select GitHub Actions as the source, or let
configure-pagesenable it on the first run.
GitHub Wiki
The wiki job runs .github/scripts/publish-wiki.sh, which:
- clones
<repository>.wiki.git, - strips YAML front matter from every
docs/*.mdpage and copies the content to the wiki (index.mdbecomesHome.md), - generates
_Sidebar.mdfrom the page titles and sections, - commits and pushes only when something changed.
The wiki clone and push require a token that is allowed to write to the wiki repository. Create a repository secret named WIKI_TOKEN (classic personal access token with the repo scope) to guarantee this. If the secret is absent, the workflow falls back to GITHUB_TOKEN; on repositories where GITHUB_TOKEN cannot push to the wiki the job emits a warning and skips the sync instead of failing.
First wiki page
A wiki repository does not exist until the first page has been created in the GitHub UI. Open the Wiki tab once and save a page, then run the workflow again.