Luxoria Desktop Deployments & CI/CD

Overview

This document describes how the Luxoria Desktop application (WinUI 3) is built, validated, signed, and released through GitHub Actions. It covers:

  • Desktop application build process

  • GitHub Actions CI/CD workflow

  • Code signing for Windows SmartScreen

  • Release creation and distribution

  • Quality gates and testing


Desktop Deployment Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Developer Creates Feature Branch                                β”‚
β”‚  (feat/*, fix/*, or chore/*)                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
                          ↓
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚  Push to Remote & Create PR     β”‚
        β”‚  βœ“ Commit Linting               β”‚
        β”‚  βœ“ Unit Tests (xUnit)           β”‚
        β”‚  βœ“ Code Quality (SonarCloud)    β”‚
        β”‚  βœ“ Build Verification           β”‚
        β”‚  βœ— NO RELEASE                   β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚ PR Approved
                   ↓
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  Merge to DEVELOP Branch         β”‚
    β”‚  βœ“ Semantic Release              β”‚
    β”‚  βœ“ Generate changelog            β”‚
    β”‚  βœ“ Create git tag (v1.2.0)       β”‚
    β”‚  βœ“ Mark as pre-release           β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
               ↓
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  Manual Testing on Windows          β”‚
    β”‚  βœ“ QA validation                    β”‚
    β”‚  βœ“ User acceptance testing          β”‚
    β”‚  βœ“ Performance benchmarks           β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ Release Sign-Off
               ↓
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    │  Create Release PR (develop→main)  │
    β”‚  Update version & changelog        β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ PR Review & Approve
               ↓
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  Merge to MAIN Branch            β”‚
    β”‚  βœ“ Semantic Release (stable)     β”‚
    β”‚  βœ“ Generate release notes        β”‚
    β”‚  βœ“ Create git tag (v1.2.0)       β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ Tag triggers GitHub Actions
               ↓
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  GitHub Actions Workflow           β”‚
    β”‚  βœ“ Build for x86, x64, ARM64       β”‚
    β”‚  βœ“ Run all unit tests              β”‚
    β”‚  βœ“ Sign binaries with certificate  β”‚
    β”‚  βœ“ Create Inno Setup installer     β”‚
    β”‚  βœ“ Create portable ZIP             β”‚
    β”‚  βœ“ Upload to GitHub Release        β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
               ↓
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚  Release Published                 β”‚
    β”‚  βœ“ GitHub Release with assets      β”‚
    β”‚  βœ“ luxoria.bluepelicansoft.com     β”‚
    β”‚  βœ“ WinGet package manager          β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Branching & Release Model

Git Workflow for Desktop

Key Points:

  • Branches: Short-lived feat/* and fix/* merge into develop

  • Semantic Release: Runs on develop (marked as pre-release) and on main (marked as stable), both use same version format (e.g., 1.2.0)

  • Release Trigger: GitHub Actions workflow triggers on tag push (v*)

  • Testing: Manual QA and automated tests before stable release


Desktop Application Architecture

Luxoria Desktop (WinUI 3) - Build Pipeline

Build Details:

  • Target Framework: net9.0-windows10.0.26100.0 (Windows 11 SDK)

  • Self-Contained: Includes .NET runtime (no installation required)

  • Single File: All dependencies bundled into one executable

  • Signing: Required for Windows SmartScreen compatibility


GitHub Actions Workflow

Complete Desktop Release Pipeline


GitHub Actions Workflow YAML

Complete Desktop Release Workflow


Quality Gates & Testing

Desktop Testing Strategy

Test Execution:


Local Build Instructions

Building Desktop Locally

Creating Installer Locally

Prerequisites:

  • Inno Setup installed

  • Code signing certificate (for signed builds)

  • Windows 10/11 with .NET 9 SDK

Build Steps:


Distribution & Release

Release Channels

Installation Methods:

  1. GitHub Releases (Manual Download)

  2. Windows Package Manager (WinGet)

  3. Portable Version


Troubleshooting & Common Issues

Build Failures

Issue: .NET SDK Not Found

Issue: Missing Windows SDK

Issue: Test Failures

Signing Issues

Issue: Certificate Not Found

  • Verify CODE_SIGN_CERT secret is set in GitHub

  • Ensure certificate is base64-encoded

  • Check certificate expiration date

Issue: Timestamp Server Unreachable

  • Use alternative timestamp server: http://timestamp.comodoca.com

  • Add retry logic in signing script

  • Check network connectivity

Issue: SmartScreen Still Shows Warning

  • EV certificates provide immediate reputation

  • OV certificates require reputation building (time + downloads)

  • Submit binary to Microsoft for analysis


Required Secrets & Configuration

GitHub Actions Secrets


Version Management

Semantic Versioning

Version Sources:

  • Git tags (v*..)

  • AssemblyInfo.cs (auto-updated by semantic-release)

  • Package manifests (.csproj)


Release Checklist

Pre-Release Validation

Post-Release Verification


Document Version: 1.0 Last Updated: January 2026 Owner: Desktop Team Status: Production Ready

Last updated