Building and releasing
Build and run
dotnet test tests/SEBlueprint.Core.Tests # all tests
dotnet run --project src/SEBlueprint.App # Windows app
dotnet run --project src/SEBlueprint.Web # website on localhost
dotnet publish src/SEBlueprint.App -c Release -o out/portable # single portable exe
./tools/publish-site.ps1 # build the website into docs/
dotnet run --project tools/SEBlueprint.Export # refresh the website's vanilla data snapshot
Tests
tests/SEBlueprint.Core.Tests covers the engine with small fixture files — no game install needed:
number parsing (game files and typed-in limits), path detection, definition parsing, mods and WeaponCore, cache, blueprint analysis, cost math,
limits, profiles, SE2 metadata and gzip files.
The offline guard
OfflineGuardTests scans all source in src/ and fails the build if it finds network code
(HttpClient, WebClient, sockets, fetch(…) anywhere except Services/Updater.cs, native calls
(DllImport, LibraryImport) anywhere, or any URL other than this repository and its release API. It also checks that
the updater has no URLs of its own, verifies checksums, and that update checks are off by default. That keeps the
privacy promise enforceable instead of just written down.
In-app updates
The update check is off by default. Settings → Check now, or Check for updates on start:
GET https://api.github.com/repos/Rathio12/SE_BlueprintEditor/releases/latest— drafts and pre-releases are ignored.ReleaseFeed(in Core, unit-tested) reads the version, notes, theSEBlueprintInspector.exeasset and itssha256digest. Download links outsidegithub.com/Rathio12/SE_BlueprintEditor/releases/download/are rejected.- Install and restart streams the exe to
SEBlueprintInspector.exe.downloadnext to the app, hashing as it goes. Wrong size or checksum → the download is deleted and nothing changes. - The running exe is renamed to
.old, the new one takes its name, the new version starts and the old one exits. The new version deletes.oldon start.
Copies that can't replace themselves (read-only folder, dotnet run) get a Release page button instead.
Versions
1.x.y — x is the build, y the fixes on that build. The single source is <Version> in Directory.Build.props.
Releasing
./tools/release.ps1 # next build: 1.1.0 -> 1.2.0
./tools/release.ps1 -Fix # next fix: 1.2.0 -> 1.2.1
The script runs the release checklist (below), bumps the version and pushes. GitHub Actions then:
- runs the tests,
- regenerates the Unreleased part of
CHANGELOG.mdfrom commit messages, - for a new version: dates the changelog section, builds the exe, rebuilds the website in
docs/, tags the commit and publishes a release with onlySEBlueprintInspector.exeattached.
Release checklist (enforced by tools/release.ps1)
- README up to date — if features were added since the last release,
README.mdmust have changed too. - Changelog up to date — the Unreleased section must contain the changes going out.
- No known bugs — all tests pass, the app, website and tools build with zero warnings, and every relative link in the README and wiki points to a file that exists.
Commit messages
Conventional Commits feed the changelog:
feat: → Added, fix: → Fixed, perf / refactor / docs → Changed; chore, ci, test, build are left out.
The website
GitHub Pages serves the docs/ folder of main (Settings → Pages → Deploy from a branch, main, /docs).
tools/publish-site.ps1 builds src/SEBlueprint.Web into docs/ and only replaces the files it owns;
docs/wiki and docs/images are never touched. A .nojekyll file makes GitHub serve the files unchanged.
The GitHub wiki
docs/wiki is the single source. On every push that changes it, the Wiki workflow
(wiki.yml) runs
tools/sync-wiki.ps1, which rewrites links for the wiki (Page.md → Page, repository files → full links), adds a
sidebar and footer, and pushes the result to the GitHub wiki.
Edit the files in docs/wiki, not the wiki itself — manual wiki edits are overwritten.
Next: FAQ