135 lines
3.4 KiB
YAML
135 lines
3.4 KiB
YAML
name: CI Pipeline for the Go API
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
docker-test:
|
|
name: 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: 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: 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: Push Image to Gitea Registry
|
|
runs-on: docker-latest
|
|
needs: [docker-test, go-build]
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Docker login
|
|
env:
|
|
REGISTRY_HOST: git.petyaserver.uk
|
|
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
|
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
|
run: |
|
|
: "${REGISTRY_HOST:=git.petyaserver.uk}"
|
|
echo "$REGISTRY_PASSWORD" | docker login "$REGISTRY_HOST" -u "$REGISTRY_USER" --password-stdin
|
|
|
|
- name: Build & push
|
|
env:
|
|
REGISTRY_HOST: git.petyaserver.uk
|
|
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
|
run: |
|
|
: "${REGISTRY_HOST:=git.petyaserver.uk}"
|
|
IMAGE="$REGISTRY_HOST/$REGISTRY_USER/go-api:latest"
|
|
docker build -t "$IMAGE" .
|
|
docker push "$IMAGE"
|
|
|
|
k8s-some-test:
|
|
name: 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: Kubernetes Deployment
|
|
runs-on: docker-latest
|
|
needs: [go-build, k8s-some-test, docker-push]
|
|
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: Verify connection
|
|
run: kubectl get nodes -o wide
|
|
|
|
- name: Apply Deployment to Cluster
|
|
run: kubectl apply -f k8s/service.yaml
|
|
|
|
- name: Apply Service to Cluster
|
|
run: kubectl apply -f k8s/deployment.yaml
|
|
|
|
- name: Verify rollout
|
|
run: kubectl rollout status deployment/go-api
|