aboutsummaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorRaúl Benencia <id@rbenencia.name>2026-06-05 21:26:44 -0300
committerRaul Benencia <46945030+raul-te@users.noreply.github.com>2026-06-05 21:41:26 -0300
commit5de2065b0175e5f0d6aa28a0e03ecb5de05aa5a5 (patch)
tree77648c37b2b1f8200116185c4d5efb08353d2dd4 /.github
parent2396e27939f888c579f9540aa4d214f234599ad5 (diff)
Add release workflow with reproducible builds
Adds .github/workflows/release.yml triggered on v* tags. Builds linux/amd64 and linux/arm64 with -trimpath, CGO_ENABLED=0, and SOURCE_DATE_EPOCH set from the tag commit — the three flags required for Debian-compatible reproducible Go builds. Uploads binaries and a sha256sums.txt to the GitHub Release via softprops/action-gh-release. Wires a version variable in main.go (defaulting to "dev") that is stamped at build time via -ldflags "-X main.version=<tag>". The Makefile gains the same flags for local builds (VERSION ?= dev).
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/release.yml35
1 files changed, 35 insertions, 0 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..c5100f8
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,35 @@
+name: Release
+
+on:
+ push:
+ tags: ["v*"]
+
+jobs:
+ release:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-go@v5
+ with:
+ go-version-file: go.mod
+
+ - name: Build binaries
+ env:
+ VERSION: ${{ github.ref_name }}
+ run: |
+ SOURCE_DATE_EPOCH=$(git log -1 --format=%ct)
+ mkdir -p dist
+ for GOARCH in amd64 arm64; do
+ CGO_ENABLED=0 GOOS=linux GOARCH=$GOARCH SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH \
+ go build -trimpath \
+ -ldflags="-s -w -X main.version=${VERSION}" \
+ -o dist/shoelaces-linux-${GOARCH} .
+ done
+ cd dist && sha256sum * > sha256sums.txt
+
+ - uses: softprops/action-gh-release@v2
+ with:
+ files: dist/*
nihil fit ex nihilo