Skip to content

Building and Releasing

Claude Sonnet 5 edited this page Aug 25, 2026 · 4 revisions

Building and Releasing

Build from source

Requirements: Windows 10/11 (64-bit) and the .NET 8 SDK.

# From Source_Code/
dotnet build                                   # build the solution
dotnet run --project src/GTAV_Mods_Manager.App # run the app
dotnet test                                    # run unit tests

The solution is split into:

  • GTAV_Mods_Manager.Core — logic services (game detection, install/uninstall, safety guard, conflict detection, the SP→FiveM converter, etc.), no external dependencies besides ClosedXML for the Excel export.
  • GTAV_Mods_Manager.App — the WPF UI (custom MVVM, no framework dependency).
  • GTAV_Mods_Manager.Tests — xUnit tests for the Core services.

CI/CD — everything runs on GitHub Actions

The full build/test/package/release pipeline is automated; there are no manual publish or upload steps.

.github/workflows/ci.yml — builds and runs the full test suite on every push and pull request to main. This is the quality gate for ordinary development.

.github/workflows/release.yml — triggered by pushing a tag matching v*.*.*. It:

  1. Builds and tests the solution (a release never ships if tests fail).
  2. Publishes a self-contained single-file build internally (win-x64) — this is not uploaded on its own; it only feeds the installer step and the smoke test below. Also publishes the framework-dependent GTAV_Mods_Manager_framework-dependent.zip (~5 MB, needs the .NET 8 Desktop Runtime), which is shipped.
  3. Stamps the version from the tag into the build (-p:Version=/-p:AssemblyVersion=/ -p:FileVersion=) and into app.manifest — the .csproj's <Version> no longer needs to be bumped by hand before a release.
  4. Smoke-tests the internal self-contained build (launches it, confirms it stays alive, checks for a crash log).
  5. Builds the installer, GTAV_Mods_Manager_V<version>_setup.exe, from installer/GTAV_Mods_Manager.iss using Inno Setup (ISCC.exe, preinstalled on the windows-latest runner). It packages the self-contained build from step 2, installs per-user under %LOCALAPPDATA% (no admin needed), and adds a Start Menu shortcut, optional desktop icon, and an uninstall entry.
  6. Generates release notes from the commit log since the previous tag.
  7. Publishes the GitHub Release with the installer and the framework-dependent zip (and their SHA-256 checksums) attached, using the workflow's own GITHUB_TOKEN — no personal access token is needed for this step.

Cutting a release

git tag v0.17.0
git push origin v0.17.0

That's the entire release process. Watch the run under the repository's Actions tab; when it finishes, the release is live with two files attached — the installer and the framework-dependent zip. (The raw portable GTAV_Mods_Manager.exe is no longer shipped as its own asset, by request — the installer is now the primary download.)

Clone this wiki locally