Skip to content

building

github-actions[bot] edited this page Oct 11, 2026 · 3 revisions

Building

This page explains how to build, test and package RVZStudio from source.

Prerequisites

  • .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).

Clone and build

git clone https://github.com/purelogiccode/RVZStudio.git
cd RVZStudio
dotnet build RVZStudio.sln -c Release

The solution contains two projects:

Project Description
RVZStudio The Avalonia desktop application.
RVZStudio.Tests xUnit test suite for models and services.

Run

dotnet run --project RVZStudio/RVZStudio.csproj

The 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.

Test

dotnet test RVZStudio.sln

Or 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.

Publishing

Using the publish script

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.ps1

Results:

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).

Manual publish

dotnet publish RVZStudio/RVZStudio.csproj \
    -c Release \
    -r linux-x64 \
    --self-contained false \
    -p:PublishSingleFile=true \
    -p:IncludeNativeLibrariesForSelfExtract=true

Add --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.

Continuous integration

Three GitHub Actions workflows live in .github/workflows:

ci.yml — build and test

Runs on every push to master/main, on pull requests, and manually.

  1. Build & Test matrix on windows-latest, ubuntu-latest and macos-latest: restore, dotnet build -c Release, dotnet test, and upload of the TRX test results.
  2. Publish smoke test on Ubuntu for linux-x64 and linux-arm64 to catch packaging regressions.

release.yml — publish and release

Triggered by pushing a tag that starts with v (for example v2.5.1) or manually from the Actions tab.

  1. A six-entry matrix publishes every runtime identifier on a matching runner and uploads the RVZStudio/bin/Release/release_<version>_<rid>.zip bundles as artifacts.
  2. 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.
  3. After the release is created, the docs.yml workflow is called to publish the documentation site and the wiki.

docs.yml — publish the documentation

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).

Cutting a release

  1. Update AssemblyVersion/FileVersion in RVZStudio/RVZStudio.csproj (and the test project if desired).

  2. Commit the version bump.

  3. Tag and push:

    git tag v2.5.1
    git push origin v2.5.1
  4. The Release workflow builds and attaches the six ZIP archives, then publishes the documentation to GitHub Pages and the wiki.

Versioning

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.

Related pages

Clone this wiki locally