Repository navigation
building
This page explains how to build, test and package RVZStudio from source.
- .NET 10.0 SDK
- Git
- Optional: Visual Studio 2022+, JetBrains Rider or Visual Studio Code with the C# extension
The repository pins the SDK through global.json (10.0.0, rolling forward to the latest major).
git clone https://github.com/purelogiccode/RVZStudio.git
cd RVZStudio
dotnet build RVZStudio.sln -c ReleaseThe solution contains two projects:
| Project | Description |
|---|---|
RVZStudio |
The Avalonia desktop application. |
RVZStudio.Tests |
xUnit test suite for models and services. |
dotnet run --project RVZStudio/RVZStudio.csprojThe optional fallback executables (DolphinTool*, 7za*) are copied automatically to the output
directory by the build; 7za binaries live in tools/<rid>/ and only the one matching the target
runtime (or the host OS for RID-less builds) is copied. The application runs without them using the
built-in RVZSharp engine.
dotnet test RVZStudio.slnOr run the test project directly with a detailed logger:
dotnet test RVZStudio.Tests/RVZStudio.Tests.csproj --logger "console;verbosity=normal"The test suite is platform-aware and runs on Windows, Linux and macOS.
publish.ps1 produces framework-dependent, single-file builds for every supported platform and
creates one ZIP per runtime identifier. Each bundle contains the single application binary, the
helper executables (kept outside the single-file bundle so they can be launched as child
processes), LICENSE.txt, LICENSE-7zip.txt, ReadMe.md and WhatsNew.md. The .NET 10 runtime
must be installed on the target machine; pass -SelfContained for standalone bundles that embed
the runtime.
./publish.ps1Results:
RVZStudio/bin/Release/ # release path: history is kept, never cleaned
├── release_<version>_win-x64.zip
├── release_<version>_win-arm64.zip
├── release_<version>_linux-x64.zip
├── release_<version>_linux-arm64.zip
├── release_<version>_osx-x64.zip
└── release_<version>_osx-arm64.zip
publish/ # scratch staging output (safe to delete)
├── win-x64/ # RVZStudio.exe + helper tools + license/readme/notes
├── win-arm64/
├── linux-x64/
├── linux-arm64/
├── osx-x64/
└── osx-arm64/
The bundle name follows the release convention release_<version>_<rid>.zip used by every
historical release and linked from the update check. The release path keeps older bundles, so a
new publish only refreshes the ZIP for the current version.
Useful switches:
| Switch | Effect |
|---|---|
-Rids win-x64,linux-x64 |
Publish only the listed runtime identifiers. |
-Configuration Debug |
Publish a debug build. |
-SelfContained |
Embed the .NET runtime (larger bundles, no runtime required). |
-OutputPath <dir> |
Write the bundles somewhere other than RVZStudio/bin/Release. |
-NoZip |
Skip ZIP creation (staging output in publish/<rid> only). |
dotnet publish RVZStudio/RVZStudio.csproj \
-c Release \
-r linux-x64 \
--self-contained false \
-p:PublishSingleFile=true \
-p:IncludeNativeLibrariesForSelfExtract=trueAdd --self-contained true to embed the .NET runtime instead. The bundle name follows the release
convention release_<version>_<rid>.zip, and the 7za archive fallback (plus DolphinTool on
Windows) is copied automatically by the build.
Supported runtime identifiers: win-x64, win-arm64, linux-x64, linux-arm64, osx-x64,
osx-arm64.
Three GitHub Actions workflows live in .github/workflows:
Runs on every push to master/main, on pull requests, and manually.
-
Build & Test matrix on
windows-latest,ubuntu-latestandmacos-latest: restore,dotnet build -c Release,dotnet test, and upload of the TRX test results. -
Publish smoke test on Ubuntu for
linux-x64andlinux-arm64to catch packaging regressions.
Triggered by pushing a tag that starts with v (for example v2.5.1) or manually from the
Actions tab.
- A six-entry matrix publishes every runtime identifier on a matching runner and uploads the
RVZStudio/bin/Release/release_<version>_<rid>.zipbundles as artifacts. - A final job downloads all artifacts and creates a GitHub Release with auto-generated release notes and the ZIP files attached. The release job only runs for tag builds.
- After the release is created, the
docs.ymlworkflow is called to publish the documentation site and the wiki.
Publishes the docs/ folder to GitHub Pages and mirrors it into the repository wiki. It runs
manually from the Actions tab, when called by the Release workflow, or (once the push trigger
is uncommented in the workflow) on every change under docs/.
Prerequisites, configured once in the repository settings:
| Requirement | Where |
|---|---|
| Pages enabled with Source: GitHub Actions | Settings → Pages |
| Wiki enabled and at least one page created (the wiki git repository only exists after that) | Settings → Features → Wikis |
WIKI_TOKEN secret — a classic PAT with the repo scope (recommended; the default GITHUB_TOKEN may not be allowed to push to wikis) |
Settings → Secrets and variables → Actions |
The Pages job builds the docs with Jekyll (docs/_config.yml enables the relative-link and
README-index plugins) and deploys the generated site; its side menu lives in
docs/_layouts/default.html. The wiki job copies docs/*.md into the wiki repository, maps
README.md to Home, rewrites relative links to wiki page names and uses the checked-in
docs/_Sidebar.md as the wiki side menu (a default sidebar is created if the file is ever
missing).
-
Update
AssemblyVersion/FileVersioninRVZStudio/RVZStudio.csproj(and the test project if desired). -
Commit the version bump.
-
Tag and push:
git tag v2.5.1 git push origin v2.5.1
-
The Release workflow builds and attaches the six ZIP archives, then publishes the documentation to GitHub Pages and the wiki.
The application version is read from the assembly and compared against GitHub release tags
(v1.2.3 style) by UpdateService. The publish script reads FileVersion from the project file
to name the archives.
- Architecture — how the code is organized.
- Contributing — development workflow and conventions.
Documentation
Development
Project