Add goreleaser setup for releasing the installer - #419
Conversation
There was a problem hiding this comment.
Code Review
This pull request adds a GoReleaser configuration, a Taskfile for task automation, and several helper scripts to build and package the installer across Windows, macOS, and Linux. Feedback on the changes focuses on improving the robustness of the build scripts, including handling leading 'v' prefixes in version parsing, ensuring atomic downloads of external tools, using safer delimiters in sed commands, and cleaning up generated Windows resource files (*.syso) during clean tasks.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
|
/gemini review latest changes |
There was a problem hiding this comment.
Code Review
This pull request introduces a comprehensive release and packaging pipeline using GoReleaser and Taskfile, adding build scripts for Linux (AppImage), Windows (winres), and macOS (.app bundles). It also updates the README, configures platform-specific behaviors (such as GDK_BACKEND on Linux and explicit dialog buttons for macOS), and updates frontend testing and linting configurations. The review feedback highlights three key improvement opportunities: correcting an invalid extends key in the ESLint flat config (v9) which causes a TypeError, explicitly handling the file Close() error in scripts/winres/main.go to prevent silent write failures, and pinning the appimagetool download in scripts/build-appimage.sh to a stable release instead of a continuous one to ensure build reproducibility.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
There was a problem hiding this comment.
Pull request overview
This PR modernizes the BetterDiscord Installer’s release process by switching to GoReleaser for cross-platform packaging/publishing, and aligns CI, scripts, and documentation to the new build/release flow.
Changes:
- Added a GoReleaser-based release configuration and updated GitHub Actions workflows to run release/snapshot builds via GoReleaser.
- Introduced helper scripts for frontend builds, macOS plist rendering, Windows resource generation, and Linux AppImage packaging.
- Updated developer tooling (Taskfile) and documentation to reflect new build/release and installation paths.
Reviewed changes
Copilot reviewed 17 out of 19 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| Taskfile.yml | Adds developer shortcuts for dev/build/check/snapshot workflows. |
| scripts/winres/main.go | Generates Windows .syso resources for GoReleaser go build releases. |
| scripts/render-plist.sh | Renders macOS Info.plist with the release version for bundling. |
| scripts/build-frontend.sh | Builds the frontend for embedding into the Go binary. |
| scripts/build-appimage.sh | Packages Linux builds into an AppImage and zips it for distribution. |
| README.md | Updates platform support, downloads, package manager install instructions, and build docs. |
| go.mod | Adds dependencies required for Windows resource generation (and related indirect deps). |
| go.sum | Updates module checksums corresponding to new/updated dependencies. |
| frontend/vite.config.ts | Updates Vite/Vitest integration for Svelte testing behavior. |
| frontend/src/setupTests.ts | Switches jest-dom setup to the Vitest-specific entrypoint. |
| frontend/eslint.config.js | Tweaks ESLint flat config to avoid flaky type-aware linting for JS config files. |
| build/darwin/Info.release.plist | Adds a release-friendly Info.plist template for GoReleaser bundling. |
| backend_linux.go | Forces a preferred GTK backend ordering on Linux to avoid double titlebars on KDE Wayland. |
| app.go | Ensures question dialogs have explicit buttons (notably for macOS behavior). |
| api/controller.go | Applies explicit dialog buttons consistently across controller dialogs. |
| .goreleaser.yaml | Introduces GoReleaser config for OS-specific builds, archives, Homebrew cask, and winget. |
| .gitignore | Ignores generated .syso files. |
| .github/workflows/release.yml | Replaces manual per-OS build/upload steps with GoReleaser-based release runs. |
| .github/workflows/ci.yml | Adds frontend tests + GoReleaser config validation and snapshot build coverage in CI. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This pull request introduces a comprehensive overhaul of the build and release pipeline for the BetterDiscord Installer. The project now uses GoReleaser for cross-platform packaging and publishing, with all workflows, documentation, and developer tooling updated to match. The frontend and backend build/test processes are unified and streamlined, and new developer conveniences are provided via a
Taskfile.yml. Documentation is updated to reflect new platform requirements, installation methods, and build instructions.Build and Release Pipeline Modernization
.goreleaser.yamlfor GoReleaser-based cross-platform builds, packaging, and publishing (Linux, macOS, Windows), including Homebrew and winget integration. Builds are simplified, universal macOS binaries are provided, and all artifacts are consistently named.ci.yml,release.yml) now use GoReleaser for all release and snapshot builds, replacing manual Wails build steps and custom artifact uploads. CI also now runs frontend tests and validates the GoReleaser config. [1] [2] [3] [4] [5]Developer Tooling and Automation
Taskfile.ymlproviding common build, test, check, and release tasks for local development, further simplifying cross-platform workflows and onboarding.Documentation Updates
README.mdto document new platform requirements, supported platforms, and installation methods (including Homebrew and winget). Build instructions and troubleshooting for unsigned/notarized binaries are clarified. [1] [2] [3] [4] [5]Platform and Dependency Adjustments
libgtk-3-dev(notlibgtk-3-0), and clarified minimum supported versions for each OS. [1] [2] [3]Repository Structure and Maintenance
These changes modernize and standardize the build and release process, making local development, CI, and end-user installation more robust and maintainable.