socktop-webterm/.gitea/workflows/build-and-deploy.yaml
jasonwitty 01c85cbb7a
Some checks failed
Build and Deploy to K3s / build-and-push (push) Successful in 34s
Build and Deploy to K3s / deploy (push) Failing after 5m9s
Add deployment creation if it doesn't exist
2025-11-28 12:41:34 -08:00

132 lines
4.4 KiB
YAML

name: Build and Deploy to K3s
on:
push:
branches:
- main
- master
pull_request:
branches:
- main
- master
env:
REGISTRY: gt.wittyoneoff.com
IMAGE_NAME: jason/socktop-webterm
jobs:
build-and-push:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get_version.outputs.version }}
image_tag: ${{ steps.get_version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get version from Cargo.toml
id: get_version
run: |
VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "Building version: ${VERSION}"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Gitea Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
platforms: linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.get_version.outputs.version }}
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache,mode=max
deploy:
needs: build-and-push
runs-on: ubuntu-latest
if: github.event_name != 'pull_request'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install kubectl
run: |
if ! command -v kubectl &> /dev/null; then
ARCH=$(uname -m)
if [ "$ARCH" = "aarch64" ]; then
ARCH="arm64"
elif [ "$ARCH" = "x86_64" ]; then
ARCH="amd64"
fi
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
fi
kubectl version --client
- name: Configure kubectl
run: |
mkdir -p $HOME/.kube
echo "${{ secrets.KUBECONFIG }}" | base64 -d > $HOME/.kube/config
chmod 600 $HOME/.kube/config
- name: Verify kubectl connection
run: |
kubectl get deployment socktop-webterm -n default || echo "Deployment will be created"
- name: Check and create/update deployment
run: |
VERSION="${{ needs.build-and-push.outputs.version }}"
# Check if deployment exists
if kubectl get deployment socktop-webterm -n default &> /dev/null; then
echo "Deployment exists, updating image..."
kubectl set image deployment/socktop-webterm \
webterm=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${VERSION} \
-n default
else
echo "Deployment does not exist, creating it..."
kubectl apply -f kubernetes/03-deployment.yaml
# Update the image to the correct version
kubectl set image deployment/socktop-webterm \
webterm=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${VERSION} \
-n default
fi
- name: Wait for rollout to complete
run: |
kubectl rollout status deployment/socktop-webterm -n default --timeout=5m
- name: Verify deployment
run: |
kubectl get deployment socktop-webterm -n default
kubectl get pods -l app=socktop-webterm -n default
- name: Deployment summary
if: always()
run: |
echo "## Deployment Summary" >> $GITHUB_STEP_SUMMARY
echo "**Version:** ${{ needs.build-and-push.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo "**Image:** ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.build-and-push.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Pods Status" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
kubectl get pods -l app=socktop-webterm -n default >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY