FindRomCover uses GitHub Actions for continuous integration, documentation publishing, and releases. Three workflows live in .github/workflows.
ci.yml runs on every push to master, every pull request targeting master, and manually via workflow_dispatch.
| Step | Detail |
|---|---|
| Runner | windows-latest |
| SDK | .NET 10.0.x |
| Restore | dotnet restore CSharp_FindRomCover.sln |
| Build | dotnet build --configuration Release --no-restore |
| Test | dotnet test --configuration Release --no-build --verbosity normal |
Concurrency is configured with cancel-in-progress, so a new push cancels an in-progress run for the same branch.
docs.yml publishes the documentation site and synchronizes the GitHub wiki. It runs on pushes to master that touch any of these paths, and can be triggered manually:
docs/**mkdocs.ymlscripts/Sync-Wiki.ps1.github/workflows/docs.yml
- Checks out the repository and installs Python 3.13.
- Installs MkDocs Material from
docs/requirements.txt. - Builds the site with
mkdocs build --strict. - Uploads the
site/artifact. - Deploys it with the official
actions/deploy-pagesaction.
Required repository setting:
- Open Settings > Pages.
- Set Source to GitHub Actions.
After the first successful run the site is available at:
https://purelogiccode.github.io/FindRomCover/
The left-hand navigation is generated from the nav section of mkdocs.yml.
- Checks whether the
WIKI_TOKENsecret is configured; if not, the job stops with a clear message instead of failing. - Runs
scripts/Sync-Wiki.ps1, which convertsdocs/into wiki pages. - Clones
<owner>/<repo>.wiki.gitusing the token. - Copies the generated pages,
_Sidebar.md, and_Footer.mdinto the wiki repository. - Commits and pushes only when something changed.
The sidebar is generated by the same script, so the wiki gets the same section-based side menu as the site.
- Open the repository's Wiki tab and create the first page (for example
Home). GitHub only creates the wiki Git repository after the first page exists. - Create a fine-grained personal access token or a classic token with the
reposcope that can push to the wiki. - Add it as an Actions secret named
WIKI_TOKENunder Settings > Secrets and variables > Actions.
Note: The default
GITHUB_TOKENcannot push to wiki repositories, which is why a personal access token is required.
pwsh ./scripts/Sync-Wiki.ps1 -OutputPath wiki-outThen copy the contents of wiki-out into a clone of the wiki repository and push.
Releases are produced automatically by release.yml, which runs when a tag named release_* (for example release_3.3.0) is pushed:
-
Update the version in
FindRomCover/FindRomCover.csproj(Version,AssemblyVersion, andFileVersion) and inFindRomCover.Tests/FindRomCover.Tests.csproj(AssemblyVersionandFileVersion) — keep both in sync. -
Update
README.md,WhatsNew.md, anddocs/release-notes.md. -
Build and test locally, then push to
masterand confirm CI is green. This push also redeploys the documentation site and the wiki throughdocs.yml. -
Create and push the tag:
git tag release_3.3.0 git push origin release_3.3.0
-
release.ymlbuilds five framework-dependent single-file bundles and creates the GitHub release with them attached:Runner Bundles windows-latestrelease_<version>_win-x64.zip,release_<version>_win-arm64.zipubuntu-latestrelease_<version>_linux-x64.zip,release_<version>_linux-arm64.zipmacos-latestrelease_<version>_osx-arm64.zipThere is no Intel-Mac (
osx-x64) bundle because Magick.NET 15 no longer ships a macOS x64 native library.Each archive contains the published application plus
LICENSE.txt,README.md, andWhatsNew.md. The release notes link to the full changelog inWhatsNew.mdat the tagged commit. -
The in-app update checker picks up the new release automatically: it reads the latest release's
tag_namefrom the GitHub API and parses the version after therelease_prefix, so tags must keep therelease_<major>.<minor>.<patch>format.
Note: The release job needs
contents: writepermission (already declared inrelease.yml) to create the GitHub release. No extra secrets are required.
Versions follow a major.minor.patch scheme. Tags use the release_ prefix (for example release_3.3.0). The application version lives in the project file, and the documentation release notes mirror the GitHub releases.