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

> Automate CI/CD for Wand Enhancer using GitHub Actions. Compile Windows executables and publish releases automatically. Get your complete configuration now.

- Repository: [k1tbyte/Wand-Enhancer](https://github.com/k1tbyte/Wand-Enhancer)
- Tags: how-to-guide
- Published: 2026-07-13

---

**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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/.github/workflows/build.yml) and [`.github/workflows/release.yml`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/.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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/build.yml)) handles continuous integration by compiling the application on demand, while the **Release workflow** ([`release.yml`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/.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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/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:

```powershell
./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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/.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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/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:

```powershell

# 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:
  ```yaml
  - 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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/build.yml)) compiles unsigned executables on manual triggers using pnpm 10 and Node 22
- The **release workflow** ([`release.yml`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/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`](https://github.com/k1tbyte/Wand-Enhancer/blob/main/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.