Build binaries as part of the release process
Signed-off-by: Philip Laine <philip.laine@gmail.com>
This commit is contained in:
parent
8a745a48fc
commit
10da718e6b
4
.github/workflows/e2e.yaml
vendored
4
.github/workflows/e2e.yaml
vendored
@ -25,6 +25,10 @@ jobs:
|
|||||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b #v5.4.0
|
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b #v5.4.0
|
||||||
with:
|
with:
|
||||||
go-version-file: go.mod
|
go-version-file: go.mod
|
||||||
|
- name: Setup GoReleaser
|
||||||
|
uses: goreleaser/goreleaser-action@v6
|
||||||
|
with:
|
||||||
|
install-only: true
|
||||||
- name: Setup Kind
|
- name: Setup Kind
|
||||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 #v1.12.0
|
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 #v1.12.0
|
||||||
with:
|
with:
|
||||||
|
30
.github/workflows/release.yaml
vendored
30
.github/workflows/release.yaml
vendored
@ -1,9 +1,10 @@
|
|||||||
name: release
|
name: release
|
||||||
on:
|
on:
|
||||||
release:
|
push:
|
||||||
types: [published]
|
tags:
|
||||||
|
- 'v*'
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: write
|
||||||
packages: write
|
packages: write
|
||||||
id-token: write
|
id-token: write
|
||||||
defaults:
|
defaults:
|
||||||
@ -20,9 +21,7 @@ jobs:
|
|||||||
- name: Setup Helm
|
- name: Setup Helm
|
||||||
uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 #v4.3.0
|
uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 #v4.3.0
|
||||||
with:
|
with:
|
||||||
version: v3.12.1
|
version: v3.17.3
|
||||||
- name: Setup QEMU
|
|
||||||
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 #v3.6.0
|
|
||||||
- name: Setup Docker Buildx
|
- name: Setup Docker Buildx
|
||||||
id: buildx
|
id: buildx
|
||||||
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0
|
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0
|
||||||
@ -34,19 +33,26 @@ jobs:
|
|||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Prepare
|
- name: Prepare version
|
||||||
id: prep
|
id: prep
|
||||||
run: |
|
run: |
|
||||||
VERSION=sha-${GITHUB_SHA::8}
|
VERSION=sha-${GITHUB_SHA::8}
|
||||||
if [[ $GITHUB_REF == refs/tags/* ]]; then
|
if [[ $GITHUB_REF == refs/tags/* ]]; then
|
||||||
VERSION=${GITHUB_REF/refs\/tags\//}
|
VERSION=${GITHUB_REF/refs\/tags\//}
|
||||||
fi
|
fi
|
||||||
|
echo "Refer to the [Changelog](https://github.com/spegel-org/spegel/blob/main/CHANGELOG.md#${VERSION//.}) for list of changes." > ${{ runner.temp }}/NOTES.txt
|
||||||
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
|
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
|
||||||
|
- name: Run GoReleaser
|
||||||
|
uses: goreleaser/goreleaser-action@v6
|
||||||
|
with:
|
||||||
|
args: release --clean --release-notes ${{ runner.temp }}/NOTES.txt
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Generate images meta
|
- name: Generate images meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 #v5.7.0
|
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 #v5.7.0
|
||||||
with:
|
with:
|
||||||
images: ghcr.io/spegel-org/spegel
|
images: ghcr.io/${{ github.repository_owner }}/spegel
|
||||||
tags: type=raw,value=${{ steps.prep.outputs.VERSION }}
|
tags: type=raw,value=${{ steps.prep.outputs.VERSION }}
|
||||||
- name: Publish multi-arch image
|
- name: Publish multi-arch image
|
||||||
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 #v6.15.0
|
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 #v6.15.0
|
||||||
@ -57,11 +63,11 @@ jobs:
|
|||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||||
tags: ghcr.io/spegel-org/spegel:${{ steps.prep.outputs.VERSION }}
|
tags: ghcr.io/${{ github.repository_owner }}/spegel:${{ steps.prep.outputs.VERSION }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
- name: Sign the image with Cosign
|
- name: Sign the image with Cosign
|
||||||
run: |
|
run: |
|
||||||
cosign sign --yes ghcr.io/spegel-org/spegel@${{ steps.build.outputs.DIGEST }}
|
cosign sign --yes ghcr.io/${{ github.repository_owner }}/spegel@${{ steps.build.outputs.DIGEST }}
|
||||||
- name: Publish Helm chart to GHCR
|
- name: Publish Helm chart to GHCR
|
||||||
id: helm
|
id: helm
|
||||||
run: |
|
run: |
|
||||||
@ -70,9 +76,9 @@ jobs:
|
|||||||
rm charts/spegel/artifacthub-repo.yml
|
rm charts/spegel/artifacthub-repo.yml
|
||||||
yq -i '.image.digest = "${{ steps.build.outputs.DIGEST }}"' charts/spegel/values.yaml
|
yq -i '.image.digest = "${{ steps.build.outputs.DIGEST }}"' charts/spegel/values.yaml
|
||||||
helm package --app-version ${{ steps.prep.outputs.VERSION }} --version ${HELM_VERSION} charts/spegel
|
helm package --app-version ${{ steps.prep.outputs.VERSION }} --version ${HELM_VERSION} charts/spegel
|
||||||
helm push spegel-${HELM_VERSION}.tgz oci://ghcr.io/spegel-org/helm-charts 2> .digest
|
helm push spegel-${HELM_VERSION}.tgz oci://ghcr.io/${{ github.repository_owner }}/helm-charts 2> .digest
|
||||||
DIGEST=$(cat .digest | awk -F "[, ]+" '/Digest/{print $NF}')
|
DIGEST=$(cat .digest | awk -F "[, ]+" '/Digest/{print $NF}')
|
||||||
echo "DIGEST=${DIGEST}" >> $GITHUB_OUTPUT
|
echo "DIGEST=${DIGEST}" >> $GITHUB_OUTPUT
|
||||||
- name: Sign the Helm chart with Cosign
|
- name: Sign the Helm chart with Cosign
|
||||||
run: |
|
run: |
|
||||||
cosign sign --yes ghcr.io/spegel-org/helm-charts/spegel@${{ steps.helm.outputs.DIGEST }}
|
cosign sign --yes ghcr.io/${{ github.repository_owner }}/helm-charts/spegel@${{ steps.helm.outputs.DIGEST }}
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -19,3 +19,6 @@
|
|||||||
|
|
||||||
# Go workspace file
|
# Go workspace file
|
||||||
go.work
|
go.work
|
||||||
|
|
||||||
|
# Added by goreleaser init:
|
||||||
|
dist/
|
||||||
|
26
.goreleaser.yaml
Normal file
26
.goreleaser.yaml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
version: 2
|
||||||
|
project_name: spegel
|
||||||
|
before:
|
||||||
|
hooks:
|
||||||
|
- go mod tidy
|
||||||
|
builds:
|
||||||
|
- goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- amd64
|
||||||
|
- arm
|
||||||
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- 7
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
- -a
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
binary: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}/{{ .ProjectName }}"
|
||||||
|
archives:
|
||||||
|
- formats: [tar.gz]
|
||||||
|
name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}"
|
||||||
|
files:
|
||||||
|
- none*
|
@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Added
|
### Added
|
||||||
|
|
||||||
- [#832](https://github.com/spegel-org/spegel/pull/832) Add delete hook to cleanup configuration from host when chart is uninstalled.
|
- [#832](https://github.com/spegel-org/spegel/pull/832) Add delete hook to cleanup configuration from host when chart is uninstalled.
|
||||||
|
- [#846](https://github.com/spegel-org/spegel/pull/846) Build binaries as part of the release process.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
@ -7,8 +7,12 @@ Thank you for considering contributing to Spegel, hopefully this document will m
|
|||||||
The following tools are required to run the tests properly.
|
The following tools are required to run the tests properly.
|
||||||
|
|
||||||
* go
|
* go
|
||||||
* golangci-lint
|
* [golangci-lint](https://github.com/golangci/golangci-lint)
|
||||||
* kind
|
* [kind](https://github.com/kubernetes-sigs/kind)
|
||||||
|
* [goreleaser](https://github.com/goreleaser/goreleaser)
|
||||||
|
* [docker](https://docs.docker.com/get-started/get-docker/)
|
||||||
|
* [helm](https://github.com/helm/helm)
|
||||||
|
* [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)
|
||||||
|
|
||||||
Run the linter and the unit tests to quickly validate changes.
|
Run the linter and the unit tests to quickly validate changes.
|
||||||
|
|
||||||
@ -33,33 +37,32 @@ make test-e2e E2E_CNI=ipvs
|
|||||||
Build the Docker image locally.
|
Build the Docker image locally.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
make docker-build
|
make build-image
|
||||||
```
|
```
|
||||||
|
|
||||||
It is possible to specify a different image name and tag.
|
It is possible to specify a different image name and tag.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
make docker-build IMG=example.com/spegel TAG=feature
|
make build-image IMG=example.com/spegel TAG=feature
|
||||||
```
|
```
|
||||||
|
|
||||||
### Local testing
|
### Local debugging
|
||||||
|
|
||||||
In order to manually test or debug Spegel, you will need the following tools.
|
Run the `dev-deploy` recipe which will create a Kind cluster with the proper configuration and deploy Spegel into it. If you run this command a second time the cluster will be kept but Spegel will be updated.
|
||||||
|
|
||||||
* kind
|
|
||||||
* docker
|
|
||||||
* helm
|
|
||||||
* kubectl
|
|
||||||
|
|
||||||
First run dev deploy which will create a Kind cluster with the proper configuration and deploy Spegel into it. If you run this command a second time the cluster will be kept but Spegel will be updated.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
make dev-deploy
|
make dev-deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
After the command has run a Kind cluster named `spegel-dev` should be created.
|
After the command has run you can get a kubeconfig file to access the cluster and do any debugging.
|
||||||
|
|
||||||
## Generating documentation
|
```shell
|
||||||
|
kind get kubeconfig --name spegel-dev > kubeconfig
|
||||||
|
export KUBECOONFIG=$(pwd)/kubeconfig
|
||||||
|
kubectl -n spegel get pods
|
||||||
|
```
|
||||||
|
|
||||||
|
## Generate Helm documentation
|
||||||
|
|
||||||
Changes to the Helm chart values will require the documentation to be regenerated.
|
Changes to the Helm chart values will require the documentation to be regenerated.
|
||||||
|
|
||||||
|
18
Dockerfile
18
Dockerfile
@ -1,16 +1,6 @@
|
|||||||
FROM golang:1.24.1@sha256:52ff1b35ff8de185bf9fd26c70077190cd0bed1e9f16a2d498ce907e5c421268 AS builder
|
|
||||||
RUN mkdir /build
|
|
||||||
WORKDIR /build
|
|
||||||
COPY go.mod go.mod
|
|
||||||
COPY go.sum go.sum
|
|
||||||
RUN go mod download
|
|
||||||
COPY main.go main.go
|
|
||||||
COPY internal/ internal/
|
|
||||||
COPY pkg/ pkg/
|
|
||||||
RUN CGO_ENABLED=0 go build -installsuffix 'static' -o spegel .
|
|
||||||
|
|
||||||
FROM gcr.io/distroless/static:nonroot
|
FROM gcr.io/distroless/static:nonroot
|
||||||
COPY --from=builder /build/spegel /app/
|
ARG TARGETOS
|
||||||
WORKDIR /app
|
ARG TARGETARCH
|
||||||
|
COPY ./dist/spegel_${TARGETOS}_${TARGETARCH}/spegel /
|
||||||
USER root:root
|
USER root:root
|
||||||
ENTRYPOINT ["./spegel"]
|
ENTRYPOINT ["/spegel"]
|
||||||
|
9
Makefile
9
Makefile
@ -7,19 +7,22 @@ E2E_IP_FAMILY ?= ipv4
|
|||||||
lint:
|
lint:
|
||||||
golangci-lint run ./...
|
golangci-lint run ./...
|
||||||
|
|
||||||
docker-build:
|
build:
|
||||||
|
goreleaser build --snapshot --clean --single-target --skip before
|
||||||
|
|
||||||
|
build-image: build
|
||||||
docker build -t ${IMG_REF} .
|
docker build -t ${IMG_REF} .
|
||||||
|
|
||||||
test-unit:
|
test-unit:
|
||||||
go test ./...
|
go test ./...
|
||||||
|
|
||||||
test-e2e: docker-build
|
test-e2e: build-image
|
||||||
IMG_REF=${IMG_REF} \
|
IMG_REF=${IMG_REF} \
|
||||||
E2E_PROXY_MODE=${E2E_PROXY_MODE} \
|
E2E_PROXY_MODE=${E2E_PROXY_MODE} \
|
||||||
E2E_IP_FAMILY=${E2E_IP_FAMILY} \
|
E2E_IP_FAMILY=${E2E_IP_FAMILY} \
|
||||||
go test ./test/e2e -v -timeout 200s -tags e2e -count 1 -run TestE2E
|
go test ./test/e2e -v -timeout 200s -tags e2e -count 1 -run TestE2E
|
||||||
|
|
||||||
dev-deploy: docker-build
|
dev-deploy: build-image
|
||||||
IMG_REF=${IMG_REF} go test ./test/e2e -v -timeout 200s -tags e2e -count 1 -run TestDevDeploy
|
IMG_REF=${IMG_REF} go test ./test/e2e -v -timeout 200s -tags e2e -count 1 -run TestDevDeploy
|
||||||
|
|
||||||
tools:
|
tools:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user