Building from Source
Requirements
- Go 1.21+
- Node.js 18+
- Wails v2:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
Linux build dependencies
# Debian/Ubuntu 24.04+sudo apt install libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
# Fedora 38+sudo dnf install gtk3-devel webkit2gtk4.1-devel gcc-c++ pkgconf-pkg-configGetting the source
git clone https://github.com/michal-bartak/OSC-Voting.gitcd OSC-Votingmake build # build for the current platformOutput lands in build/bin/.
Make commands
The Makefile wraps the common Wails and docs workflows.
App
| Command | Description |
|---|---|
make dev | Hot-reload dev server (Go + Vite HMR). On Linux it sets GDK_BACKEND=x11 so WebKit2GTK gets GPU-accelerated CSS filters. |
make run | Run the already-built binary from build/bin/. |
make build | Production build for the current platform (wails build -clean). |
make build-linux | Cross-build for linux/amd64. |
make build-windows | Cross-build for windows/amd64. |
make build-all | Build for macOS, Linux, and Windows in one go. |
Documentation site
This site is an Astro Starlight project in docs/. These targets manage it (they auto-run npm ci on first use):
| Command | Description |
|---|---|
make docs | Hot-reload dev server for live editing. Served at http://localhost:4321/OSC-Voting/. |
make docs-build | Build the static site into docs/dist/ and stop — no server. Useful to confirm the build succeeds. |
make docs-preview | Build, then serve the result exactly as GitHub Pages will. Use this as a final check before pushing. |
Invoking Wails directly
If you’d rather skip the Makefile:
wails build -platform linux/amd64 # or: darwin/universal windows/amd64wails devOutput lands in build/bin/. The Makefile also provides make build-linux and make build-windows for cross-platform targets, though cross-compilation requires the matching toolchain and is best left to CI.
Cutting a release
Releases are produced by the Release GitHub Actions workflow
(.github/workflows/release.yml), triggered manually from the Actions tab. It
builds all three platforms (Windows .exe/.msi, macOS .dmg, Linux
.deb/.rpm) and publishes a GitHub release.
The release description is assembled from three parts: the matching
CHANGELOG.md section (top), the install instructions, and GitHub’s
auto-generated “What’s Changed” list.
To cut a release:
- Update
CHANGELOG.md— rename the## [Unreleased]heading to## [X.Y.Z] - YYYY-MM-DDand start a fresh empty## [Unreleased]above it. The heading must match theVERSIONfile exactly (that’s how the workflow finds the section to inject). - Bump
VERSIONtoX.Y.Z. - Commit, then create and push the tag:
git tag vX.Y.Z && git push origin vX.Y.Z(the workflow verifies the tag equalsv+VERSION). - Run the Release workflow, entering the tag. Use the draft option to review the generated release before publishing.