From 0c743930df8ed05329632ab35b9b014755e6e701 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Tue, 9 Dec 2025 10:44:10 -0500 Subject: [PATCH 1/5] Setup Github Release automation --- .github/workflows/release.yml | 31 +++++++++++++++++++ .goreleaser.yaml | 56 +++++++++++++++++++++++++++++++++++ Makefile | 7 ++++- RELEASES.md | 33 +++++++++++++++++++++ 4 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/release.yml create mode 100644 .goreleaser.yaml create mode 100644 RELEASES.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..95405b9f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: Release Hypeman API + +on: + push: + tags: + - 'v*' + +permissions: + contents: write + +jobs: + release: + runs-on: [self-hosted, linux, x64, kvm] + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.25' + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 + with: + version: '~> v2' + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 00000000..da0311fc --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,56 @@ +# yaml-language-server: $schema=https://goreleaser.com/static/schema.json +version: 2 + +before: + hooks: + - make release-prep + +builds: + - id: hypeman-api + main: ./cmd/api + binary: hypeman-api + env: + - CGO_ENABLED=0 + goos: + - linux + goarch: + - amd64 + - arm64 + tags: + - containers_image_openpgp + ldflags: + - -s -w + - -X main.version={{.Version}} + - -X main.commit={{.Commit}} + - -X main.date={{.Date}} + +archives: + - id: default + format: tar.gz + name_template: >- + {{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }} + files: + - LICENSE + - README.md + - RELEASES.md + +checksum: + name_template: 'checksums.txt' + +changelog: + sort: asc + filters: + exclude: + - '^docs:' + - '^test:' + - '^ci:' + - '^chore:' + - Merge pull request + - Merge branch + +release: + github: + owner: onkernel + name: hypeman + prerelease: auto + draft: false diff --git a/Makefile b/Makefile index 7f2eb87a..eaf1fc8e 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ SHELL := /bin/bash -.PHONY: oapi-generate generate-vmm-client generate-wire generate-all dev build test install-tools gen-jwt download-ch-binaries download-ch-spec ensure-ch-binaries download-envoy-binaries ensure-envoy-binaries +.PHONY: oapi-generate generate-vmm-client generate-wire generate-all dev build test install-tools gen-jwt download-ch-binaries download-ch-spec ensure-ch-binaries download-envoy-binaries ensure-envoy-binaries release-prep # Directory where local binaries will be installed BIN_DIR ?= $(CURDIR)/bin @@ -186,3 +186,8 @@ clean: rm -f lib/exec/exec.pb.go rm -f lib/exec/exec_grpc.pb.go rm -f lib/system/exec_agent/exec-agent + +# Prepare for release build (called by GoReleaser) +# Downloads all embedded binaries and builds embedded components +release-prep: download-ch-binaries download-envoy-binaries lib/system/exec_agent/exec-agent + go mod tidy diff --git a/RELEASES.md b/RELEASES.md new file mode 100644 index 00000000..5d1281e1 --- /dev/null +++ b/RELEASES.md @@ -0,0 +1,33 @@ +# Releases + +## Versioning + +This project uses [Semantic Versioning](https://semver.org/). + +## Creating a Release + +1. Ensure `main` is in a releasable state (CI passing) +2. Tag the release: `git tag v1.0.0 && git push origin v1.0.0` +3. GitHub Actions builds binaries and creates the release automatically + +## Getting Binaries + +### Released Version +Download from the [Releases](https://github.com/onkernel/hypeman/releases) page. + +### Building from Source +```bash +git clone https://github.com/onkernel/hypeman +cd hypeman +make build +# Binary at ./bin/hypeman +``` + +## Prereleases + +For release candidates before major versions, use semver prerelease syntax: +``` +v2.0.0-rc.1 → v2.0.0-rc.2 → v2.0.0 +``` + +Prerelease tags are incremented, not replaced. From cac47a1c2eb86433f8565b89b146cf0325bc8860 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Tue, 9 Dec 2025 10:49:59 -0500 Subject: [PATCH 2/5] Fix config file --- .goreleaser.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index da0311fc..5f1b3148 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -26,7 +26,8 @@ builds: archives: - id: default - format: tar.gz + formats: + - tar.gz name_template: >- {{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }} files: From 606338dbb37f37100e5cbbbee35eed828fb7220c Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Tue, 9 Dec 2025 10:51:25 -0500 Subject: [PATCH 3/5] Add gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6f786cd9..96f94b55 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ lib/system/exec_agent/exec-agent # Envoy binaries lib/ingress/binaries/envoy/*/*/envoy +dist/** From 272dd404dca94970576855e06dec4a9dc77a1123 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Tue, 9 Dec 2025 11:00:54 -0500 Subject: [PATCH 4/5] Apply suggestion from @sjmiller609 --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 95405b9f..4237974e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,6 +25,8 @@ jobs: - name: Run GoReleaser uses: goreleaser/goreleaser-action@v6 with: + # gorelease-pro is not required + distribution: goreleaser version: '~> v2' args: release --clean env: From d58eaae6442614f78e7454c54c74d4affb97e91d Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Tue, 9 Dec 2025 11:41:53 -0500 Subject: [PATCH 5/5] Also publish helper script --- .goreleaser.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 5f1b3148..697b18b2 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -24,6 +24,19 @@ builds: - -X main.commit={{.Commit}} - -X main.date={{.Date}} + - id: hypeman-token + main: ./cmd/gen-jwt + binary: hypeman-token + env: + - CGO_ENABLED=0 + goos: + - linux + goarch: + - amd64 + - arm64 + ldflags: + - -s -w + archives: - id: default formats: