CI and GitHub Actions
Using wailsrel in CI
wailsrel is GitHub Actions aware:
buildandreleasewrite step outputs whenGITHUB_OUTPUTis availablereleasepublishes GitHub release assets withGITHUB_TOKENdeltareusesGITHUB_TOKENwhen it needs to fetch old artifacts from GitHub releases
To keep those GitHub Actions outputs enabled, leave this on in wailsrel.yaml:
ci:
provider: github
artifacts:
upload: true
Recommended workflow shape
wailsrel runs every target listed in the selected config file. In CI, keep each job aligned with the targets that runner can actually satisfy. For multi-platform releases, use one job or config file per runner instead of asking one runner to build every OS.
This example shows a Linux release job:
name: Release
on:
push:
tags:
- "v*"
permissions:
contents: write
jobs:
release-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-go@v5
with:
go-version: "1.25"
- name: Install wailsrel
run: go install github.com/Eriyc/wailsrel/cmd/wailsrel@latest
- name: Install Wails
run: go install github.com/wailsapp/wails/v3/cmd/wails3@latest
- name: Validate environment
run: wailsrel --config ci/linux.yaml doctor
- name: Publish release
id: release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: wailsrel --config ci/linux.yaml release
- name: Upload staged artifacts
if: ${{ steps.release.outputs.artifact_count != '0' }}
uses: actions/upload-artifact@v4
with:
name: wailsrel-linux-${{ steps.release.outputs.version }}
path: |
${{ steps.release.outputs.artifact_dir }}
${{ steps.release.outputs.manifest_path }}
Required env and secrets
wailsrel still expands ${NAME} placeholders from the environment when it loads YAML config, but native signing and packaging credentials now belong to your Wails project and its build/ tooling.
In practice:
wailsrelitself needsGITHUB_TOKENfor GitHub Releases publishing and fordelta.old_artifacts.source: github-release- your Wails tasks may need additional secrets, certificates, SDK paths, or signing credentials
- those native inputs must be provisioned before
doctor,build, orrelease, becausewailsrelnow invokes your configured Wails-owned hooks rather than signing or packaging itself
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GitHub Actions step outputs
When build or release runs inside GitHub Actions, wailsrel writes these outputs to the current step:
artifact_dir: directory containing the staged files foractions/upload-artifactartifact_count: number of staged artifactsversion: resolved release versionmanifest_path: generated release manifest path
release populates all four values. build mainly exposes artifact_dir and artifact_count; the version and manifest path may be empty.
CI notes
- Use
actions/checkoutwithfetch-depth: 0whenversion.source: gitdepends on local tags. - Set
GITHUB_TOKENforreleasejobs, otherwise publishing to GitHub releases will fail. - If you do not want GitHub Actions outputs or staged upload directories, set
ci.artifacts.upload: false. - Run
doctoron each runner beforebuildorreleaseso missing Wails toolchain requirements fail early.