Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .github/workflows/goreleaser-snapshot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: GoReleaser Snapshot Release (dry run)

on:
workflow_dispatch:

permissions:
contents: read

jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: "~> v2"
args: release --clean --snapshot
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
82 changes: 82 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Release

on:
push:
tags:
- "v*"

permissions:
contents: write
packages: write

jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GitHub Container Registry (GHCR)
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version-file: "go.mod"

- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: "~> v2"
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

helm:
runs-on: ubuntu-latest
needs: goreleaser
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Set up Helm
uses: azure/setup-helm@v4

- name: Package Helm chart
run: |
# get tag and strip leading 'v' if present
TAG="${{ github.ref_name }}"
CLEAN_TAG=${TAG#v}
echo "Packaging chart with version/appVersion=${CLEAN_TAG}"
mkdir -p dist
helm package ./dist/chart --destination ./dist/chartrelease --version "${CLEAN_TAG}" --app-version "${CLEAN_TAG}"
Comment thread
idebeijer marked this conversation as resolved.
Comment thread
idebeijer marked this conversation as resolved.

- name: Login to GHCR (GitHub Container Registry)
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | helm registry login ghcr.io --username "${{ github.actor }}" --password-stdin

- name: Push chart to GHCR (OCI)
run: |
CHART_TGZ=$(ls ./dist/chartrelease/*.tgz | head -n1)
echo "pushing $CHART_TGZ to ghcr.io/${{ github.repository_owner }}/charts"
helm push "$CHART_TGZ" oci://ghcr.io/${{ github.repository_owner }}/charts
89 changes: 89 additions & 0 deletions .github/workflows/test-chart.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Test Chart

on:
workflow_dispatch:

jobs:
test-e2e:
name: Run on Ubuntu
runs-on: ubuntu-latest
steps:
- name: Clone the code
uses: actions/checkout@v4

- name: Setup Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Install the latest version of kind
run: |
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

- name: Verify kind installation
run: kind version

- name: Create kind cluster
run: kind create cluster

- name: Prepare gameserver-operator
run: |
go mod tidy
make docker-build IMG=gameserver-operator:v0.1.0
kind load docker-image gameserver-operator:v0.1.0

- name: Setup Helm
uses: azure/setup-helm@v4
with:
version: v3.14.4
- name: Verify Helm installation
run: helm version

- name: Lint Helm Chart
run: |
helm lint ./dist/chart
Comment thread
idebeijer marked this conversation as resolved.

# TODO: Uncomment if cert-manager is enabled
# - name: Install cert-manager via Helm
# run: |
# helm repo add jetstack https://charts.jetstack.io
# helm repo update
# helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set crds.enabled=true
#
# - name: Wait for cert-manager to be ready
# run: |
# kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager
# kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager-cainjector
# kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager-webhook

# TODO: Uncomment if Prometheus is enabled
# - name: Install Prometheus Operator CRDs
# run: |
# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# helm repo update
# helm install prometheus-crds prometheus-community/prometheus-operator-crds
#
# - name: Install Prometheus via Helm
# run: |
# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# helm repo update
# helm install prometheus prometheus-community/prometheus --namespace monitoring --create-namespace
#
# - name: Wait for Prometheus to be ready
# run: |
# kubectl wait --namespace monitoring --for=condition=available --timeout=300s deployment/prometheus-server

- name: Install Helm chart for project
run: |
helm install my-release ./dist/chart --create-namespace --namespace gameserver-operator-system
Comment thread
idebeijer marked this conversation as resolved.

- name: Check Helm release status
run: |
helm status my-release --namespace gameserver-operator-system

# TODO: Uncomment if prometheus.enabled is set to true to confirm that the ServiceMonitor gets created
# - name: Check Presence of ServiceMonitor
# run: |
# kubectl wait --namespace gameserver-operator-system --for=jsonpath='{.kind}'=ServiceMonitor servicemonitor/gameserver-operator-controller-manager-metrics-monitor
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
*.dylib
bin/*
Dockerfile.cross
dist/*
# keep generated Helm chart
!/dist/chart

# Test binary, built with `go test -c`
*.test
Expand Down
80 changes: 80 additions & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/goreleaser/goreleaser/v2.12.5/www/docs/static/schema.json

version: 2

dist: dist/goreleaser

builds:
- id: manager
main: cmd/main.go
binary: manager
goos:
- linux
goarch:
- amd64
- arm64
env:
- CGO_ENABLED=0
ldflags:
- "-s"
- "-w"
- "-X github.com/idebeijer/gameserver-operator/pkg/version.Version={{ .Version }}"
- "-X github.com/idebeijer/gameserver-operator/pkg/version.Commit={{ .ShortCommit }}"
- "-X github.com/idebeijer/gameserver-operator/pkg/version.Date={{ .Date }}"
- "-X github.com/idebeijer/gameserver-operator/pkg/version.BuiltBy=goreleaser"

dockers_v2:
- dockerfile: Dockerfile.goreleaser
ids:
- manager
images:
- "ghcr.io/idebeijer/gameserver-operator"
- "docker.io/idebeijer/gameserver-operator"
tags:
- "{{ .Version }}"
labels:
"org.opencontainers.image.created": "{{ .Date }}"
"org.opencontainers.image.url": "https://github.com/idebeijer/gameserver-operator"
"org.opencontainers.image.documentation": "https://github.com/idebeijer/gameserver-operator/blob/main/README.md"
"org.opencontainers.image.source": "{{ .GitURL }}"
"org.opencontainers.image.version": "{{ .Version }}"
"org.opencontainers.image.revision": "{{ .FullCommit }}"
"org.opencontainers.image.licenses": "MIT"
"org.opencontainers.image.title": "{{ .ProjectName }}"
"org.opencontainers.image.description": "Kubernetes operator for managing game servers"
platforms:
- linux/amd64
- linux/arm64
Comment thread
idebeijer marked this conversation as resolved.

snapshot:
version_template: "{{ incpatch .Version }}"

release:
footer: |
**Full Changelog**: https://github.com/idebeijer/gameserver-operator/compare/{{ .PreviousTag }}...{{ .Tag }}

changelog:
sort: asc
use: github
groups:
- title: "Breaking changes"
regexp: '^.*?\w+(\(.+\))?!:\s?.+$'
order: 0
- title: "Features"
regexp: '^.*?feat(\(.+\))??!?:.+$'
order: 1
- title: "Bug fixes"
regexp: '^.*?fix(\(.+\))??!?:.+$'
order: 2
- title: "Documentation"
regexp: '^.*?docs(\(.+\))??!?:.+$'
order: 3
- title: "Build system"
regexp: '^.*?(build|ci)(\(.+\))??!?:.+$'
order: 4
- title: "Others"
order: 999
filters:
exclude:
- '^.*?(test|style)(\(.+\))??!?:.+$'
- 'initial commit'
8 changes: 8 additions & 0 deletions Dockerfile.goreleaser
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FROM gcr.io/distroless/static:nonroot AS runtime
ARG TARGETPLATFORM

COPY --chown=65532:65532 ${TARGETPLATFORM}/manager /usr/local/bin/manager
WORKDIR /home/nonroot
USER 65532:65532

ENTRYPOINT ["/usr/local/bin/manager"]
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,10 @@ docker-buildx: ## Build and push docker image for the manager for cross-platform
- $(CONTAINER_TOOL) buildx rm gameserver-operator-builder
rm Dockerfile.cross

.PHONY: goreleaser-release-snapshot
goreleaser-release-snapshot: ## Build a snapshot release locally with goreleaser (does not publish).
goreleaser release --snapshot --clean

.PHONY: build-installer
build-installer: manifests generate kustomize ## Generate a consolidated YAML with CRDs and deployment.
mkdir -p dist
Expand Down
2 changes: 2 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ cliVersion: 4.9.0
domain: idebeijer.github.io
layout:
- go.kubebuilder.io/v4
plugins:
helm.kubebuilder.io/v1-alpha: {}
projectName: gameserver-operator
repo: github.com/idebeijer/gameserver-operator
resources:
Expand Down
25 changes: 25 additions & 0 deletions dist/chart/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Patterns to ignore when building Helm packages.
# Operating system files
.DS_Store

# Version control directories
.git/
.gitignore
.bzr/
.hg/
.hgignore
.svn/

# Backup and temporary files
*.swp
*.tmp
*.bak
*.orig
*~

# IDE and editor-related files
.idea/
.vscode/

# Helm chart artifacts
dist/chart/*.tgz
7 changes: 7 additions & 0 deletions dist/chart/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
apiVersion: v2
name: gameserver-operator
description: A Helm chart to distribute the project gameserver-operator
type: application
version: 0.1.0
appVersion: "0.1.0"
icon: "https://example.com/icon.png"
Loading