Files
Add-API/.gitea/workflows/main.yml
zomborip ba465a3f19
All checks were successful
CI Pipeline for the Go API / CD - Kubernetes Smoke Test (push) Successful in 6s
CI Pipeline for the Go API / CI - Go Vet (basic static check) (push) Successful in 10s
CI Pipeline for the Go API / CI - Docker Image Build Test (push) Successful in 18s
CI Pipeline for the Go API / CI - Go Build & Cross-Compile (push) Successful in 24s
CI Pipeline for the Go API / CD - Push Image to Gitea Registry (push) Successful in 17s
CI Pipeline for the Go API / CD - Kubernetes Deployment (push) Successful in 10s
tag Update
2025-10-05 22:49:07 +02:00

149 lines
3.9 KiB
YAML

name: CI Pipeline for the Go API
on:
push:
branches:
- master
jobs:
docker-test:
name: CI - Docker Image Build Test
runs-on: docker-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Build Docker image
run: |
docker build -t go-api-test .
go-test:
name: CI - Go Vet (basic static check)
runs-on: docker-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Check Go version
run: go version
- name: Go Vet (basic static check)
run: go vet ./...
go-build:
name: CI - Go Build & Cross-Compile
runs-on: docker-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Check Go version
run: go version
- name: Build Linux binary
run: |
mkdir -p build
go build -o build/go-api-linux main.go
- name: Build Windows binary
run: |
GOOS=windows GOARCH=amd64 go build -o build/go-api.exe main.go
- name: Show build output
run: ls -lh build
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: go-api-binaries
path: build/
docker-push:
name: CD - Push Image to Gitea Registry
runs-on: docker-latest
needs: [docker-test, go-build]
steps:
- uses: actions/checkout@v3
- name: Compute image tag
run: |
TAG="${GITHUB_SHA:-${{ github.sha }}}"
echo "TAG=$TAG" >> $GITHUB_ENV
echo "TAG_SHORT=${TAG:0:12}" >> $GITHUB_ENV
echo "BASE_IMAGE=git.petyaserver.uk/${{ secrets.REGISTRY_USER }}/go-api" >> $GITHUB_ENV
- name: Docker login
env:
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
run: |
echo "$REGISTRY_PASSWORD" | docker login git.petyaserver.uk -u "$REGISTRY_USER" --password-stdin
- name: Build (latest + sha)
run: |
docker build -t "$BASE_IMAGE:$TAG" -t "$BASE_IMAGE:latest" .
- name: Push (latest + sha)
run: |
docker push "$BASE_IMAGE:$TAG"
docker push "$BASE_IMAGE:latest"
k8s-some-test:
name: CD - Kubernetes Smoke Test
runs-on: docker-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Configure kubeconfig
run: |
mkdir -p ~/.kube
echo "$KUBECONFIG_GITEA" > ~/.kube/config
chmod 600 ~/.kube/config
env:
KUBECONFIG_GITEA: ${{ secrets.KUBECONFIG_GITEA }}
- name: Kubectl test
run: kubectl version --client
- name: K3S Cluster Connection Test
run: kubectl get nodes -o wide
k8s-deploy:
name: CD - Kubernetes Deployment
runs-on: docker-latest
needs: [go-build, k8s-some-test, docker-push]
steps:
- uses: actions/checkout@v3
- name: Configure kubeconfig
run: |
mkdir -p ~/.kube
echo "$KUBECONFIG_GITEA" > ~/.kube/config
chmod 600 ~/.kube/config
env:
KUBECONFIG_GITEA: ${{ secrets.KUBECONFIG_GITEA }}
- name: Compute image tag (again for this job)
run: |
TAG="${GITHUB_SHA:-${{ github.sha }}}"
echo "TAG=$TAG" >> $GITHUB_ENV
echo "BASE_IMAGE=git.petyaserver.uk/${{ secrets.REGISTRY_USER }}/go-api" >> $GITHUB_ENV
echo "Will deploy image: ${BASE_IMAGE}:${TAG}"
- name: Verify connection
run: kubectl get nodes -o wide
- name: Apply Deployment to Cluster
run: kubectl apply -f k8s/deployment.yaml
- name: Apply Service to Cluster
run: kubectl apply -f k8s/service.yaml
- name: Tag Image
run: |
kubectl set image deployment/go-api go-api="$BASE_IMAGE:$TAG" --record
- name: Verify Rollout
run: kubectl rollout status deployment/go-api --timeout=240s