Skip to content

Publish Release

Michael Habinsky edited this page Jan 10, 2024 · 10 revisions

GitHub Actions

GitHub releases are automated using GitHub Actions. To publish a release to GitHub, tag a new version and push the new tag to GitHub:

git tag <release-version>
git push origin <release-version>

Of course, only code owners can push to the GitHub repo...

Local Builds

You can also generate release artifacts on your own machine, using Inno Setup to package a Windows installer, and GoReleaser for Linux packages. You can follow the GitHub Action workflow, but since that process is focused on building all of the release artifacts, it may be difficult to follow when you just want to build to a single target. Regardless of the target, the basic steps are:

  1. Build command-line program
  2. Build GUI stand-alone executable
  3. Bundle the two binaries into a package (along with other release files, e.g. LICENSE)

Linux

Build GUI Executable

To build the GUI stand-alone executable:

cd gui
pip install -r requirements.txt
./create_gui.sh

Build Command-line Program

Install prerequisites

sudo apt-get install libfuse-dev
go get .
go build .

Build Linux Package

git checkout <version-tag>
go install github.com/goreleaser/goreleaser@latest
goreleaser build --clean --single-target

Windows

Using git bash, you can compile both the command-line program and the GUI using the same commands as on Linux.

Windows Installer

To build the Windows installer, you need to install Inno Setup. This is a free installer available for commercial use for Windows by Jordan Russell and Martijn Laan. It only runs on Windows and can be downloaded here. Simply run the installer and open the ./build/windows_installer_build.iss file and then run the compiler. You will get the Windows installer as a .exe file in ./build/Ouptut/cloudfuse.exe.

A note on cross-compilation

The cloudfuse command-line program is written in Go, and can be easily cross-compiled. But the GUI is written in Python, and compiled with PyInstaller, which cannot cross-compile. So you can only build the GUI to target the architecture and platform which you are compiling on.