How to Set Up CI/CD for Wand Enhancer: Complete GitHub Actions Configuration

The Wand Enhancer project automates continuous integration and delivery through two GitHub Actions workflows that compile Windows executables on manual triggers and publish GitHub releases automatically when tags are pushed.

The k1tbyte/Wand-Enhancer repository streamlines its development process using GitHub Actions to handle both continuous integration (CI) and continuous delivery (CD). This setup ensures that every code change can be built into a Windows executable and that releases are generated consistently with proper validation and changelog generation. Whether you are maintaining the project or contributing to it, understanding how to set up CI/CD for Wand Enhancer helps you leverage the automated pipeline defined in .github/workflows/build.yml and .github/workflows/release.yml.

Understanding the CI/CD Architecture

The pipeline consists of two distinct workflows that share a common build foundation. The Build workflow (build.yml) handles continuous integration by compiling the application on demand, while the Release workflow (release.yml) manages continuous delivery by creating GitHub releases when version tags are pushed. Both workflows rely on the central build.ps1 PowerShell script located in the repository root to drive the compilation process.

The Continuous Integration Workflow (build.yml)

Located at .github/workflows/build.yml, this workflow defines the CI process for manual builds.

Manual Trigger and Environment Setup

The workflow uses the workflow_dispatch event, allowing developers to trigger builds manually from the GitHub Actions tab. When executed, the workflow performs the following environment setup:

  1. Checks out the code using actions/checkout@v5
  2. Installs pnpm v10 via pnpm/action-setup@v5
  3. Sets up Node.js 22 with actions/setup-node@v5, caching dependencies based on web-panel/pnpm-lock.yaml

This configuration ensures reproducible front-end builds across different runs by locking both the package manager and Node.js versions.

Build Execution and Artifact Generation

After environment setup, the workflow executes the build command:

./build.ps1 -Configuration Release

The build.ps1 script orchestrates the entire compilation process:

  • Restores NuGet packages for the WPF solution

  • Compiles the C# WPF application

  • Builds the native C++ helper components using CMake

  • Runs the Vite build for the web panel (pnpm run build)

Following successful compilation, the workflow uploads the resulting WandEnhancer.exe as an artifact named WandEnhancer-unsigned, making it available for download from the Actions run page.

The Continuous Delivery Workflow (release.yml)

The CD workflow, defined in .github/workflows/release.yml, automates the creation of GitHub releases when tags are pushed.

Automated Release Triggers

This workflow activates on any tag push (push event with *), allowing you to create releases by simply pushing a version tag. The workflow checks out the full repository history to ensure proper changelog extraction.

Validation and Changelog Generation

Before building, the workflow runs two critical validation scripts:

  • scripts/validate-release-metadata.ps1: Verifies that the tag version matches the project metadata, preventing version mismatches
  • scripts/get-changelog-section.ps1: Extracts the appropriate release notes from CHANGELOG.md based on the current version

These scripts ensure that every release contains accurate version information and properly formatted documentation.

Publishing the GitHub Release

After validation, the workflow builds the executable using the same ./build.ps1 -Configuration Release command as the CI workflow. It then publishes the release using softprops/action-gh-release, which includes:

  • The built executable from WandEnhancer/bin/Release
  • The extracted changelog section
  • The full CHANGELOG.md file

The Central Build Script (build.ps1)

The build.ps1 script serves as the single source of truth for compilation logic across both CI and CD workflows. This PowerShell script handles the complex multi-language build process:


# Example: Custom signing step inside build.ps1

# After the usual build commands:

$exePath = "WandEnhancer/bin/Release/WandEnhancer.exe"
& "signtool.exe" sign /f MyCert.pfx /p password /tr http://timestamp.digicert.com /td sha256 $exePath

By centralizing the build logic in this script, the project ensures consistency between manually triggered CI builds and automated CD releases.

Extending the CI/CD Pipeline

You can customize the existing workflows to add additional quality gates or deployment steps:

  • Adding Tests: Insert a step before the build that runs unit or integration tests (e.g., pnpm test)

  • Code Linting: Add a linting step after Node.js setup:

    - name: Lint Frontend
      run: pnpm lint
  • Executable Signing: Modify build.ps1 to sign the executable using signtool.exe before artifact upload

  • Web Panel Deployment: After the Vite build completes, deploy the web-panel/dist folder to a static hosting service like GitHub Pages or Azure Static Web Apps

Summary

Setting up CI/CD for Wand Enhancer involves configuring two GitHub Actions workflows that work together to automate builds and releases:

  • The build workflow (build.yml) compiles unsigned executables on manual triggers using pnpm 10 and Node 22
  • The release workflow (release.yml) validates version metadata, extracts changelog sections, and publishes GitHub releases automatically when tags are pushed
  • Both workflows rely on build.ps1 to compile the WPF solution, native C++ helpers, and web panel components
  • Key supporting scripts include scripts/validate-release-metadata.ps1 and scripts/get-changelog-section.ps1 for release management

Frequently Asked Questions

How do I manually trigger a CI build in Wand Enhancer?

Navigate to the Actions tab in the k1tbyte/Wand-Enhancer repository, select the Build workflow, and click Run workflow. This triggers the workflow_dispatch event in build.yml, which compiles the executable and uploads it as an artifact without creating a release.

What Node.js version does the Wand Enhancer CI/CD pipeline use?

The workflows explicitly use Node.js 22 via actions/setup-node@v5, combined with pnpm v10 installed through pnpm/action-setup@v5. The setup-node action caches dependencies based on web-panel/pnpm-lock.yaml to ensure consistent builds.

How does the release workflow validate version numbers?

Before creating a release, the workflow executes scripts/validate-release-metadata.ps1, which compares the pushed tag version against the version defined in the project metadata. This prevents accidental releases with mismatched version strings.

Can I add automated testing to the existing CI/CD setup?

Yes. You can extend either workflow by adding a step after the Node.js setup that runs pnpm test or any other test command. For the build workflow, place test execution before the PowerShell build script to ensure tests pass before compilation.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →