Files
web-log/.gitea/workflows/build-and-push-image.yaml
T
nicholas 95ae165232
Build & Push Hugo Site Image / Build & Push Image (push) Successful in 26s
deploy web log with k3s
2026-08-04 16:39:50 -05:00

86 lines
2.7 KiB
YAML

name: Build & Push Hugo Site Image
on:
push:
branches:
- master
workflow_dispatch:
jobs:
build-and-push-image:
name: 'Build & Push Image'
env:
REGISTRY_USERNAME: nicholas
IMAGE_REGISTRY: git.uuard.com
IMAGE_NAME: nicholas/web-log
IMAGE_TAG: ${{ github.sha }}
runs-on: ubuntu-latest
steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: ⚙️ Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: '0.164.0'
extended: true
- name: 🏗️ Build Hugo site
working-directory: container/site
run: hugo --minify
- name: 🔐 Gitea Registry Login
uses: docker/login-action@v3
with:
registry: ${{ env.IMAGE_REGISTRY }}
username: ${{ env.REGISTRY_USERNAME }}
password: ${{ secrets.CD_CD_BUILD_PUSH }}
- name: 🐋 Build Docker image
run: docker build -t $IMAGE_REGISTRY/$IMAGE_NAME:$IMAGE_TAG ./container
- name: 🚀 Push Docker image
run: docker push $IMAGE_REGISTRY/$IMAGE_NAME:$IMAGE_TAG
- name: Install kubectl
env:
KUBECTL_VERSION: v1.36.2
run: |
set -euo pipefail
curl -fsSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl"
curl -fsSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl.sha256"
printf '%s %s\n' "$(cat kubectl.sha256)" kubectl | sha256sum --check
sudo install -m 0755 kubectl /usr/local/bin/kubectl
- name: Configure Kubernetes access
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
run: |
set -euo pipefail
mkdir -p ~/.kube
printf '%s' "$KUBE_CONFIG" | base64 --decode > ~/.kube/config
chmod 600 ~/.kube/config
kubectl auth can-i update deployments --namespace nicholas
- name: Deploy web log and files service
run: |
set -euo pipefail
sed -E -i "s#newTag: [0-9a-f]+#newTag: ${IMAGE_TAG}#" k8s/kustomization.yaml
grep -q "newTag: ${IMAGE_TAG}$" k8s/kustomization.yaml
kubectl apply --kustomize k8s
if ! kubectl rollout status deployment/web-log \
--namespace nicholas --timeout=180s; then
kubectl rollout undo deployment/web-log --namespace nicholas
kubectl rollout status deployment/web-log \
--namespace nicholas --timeout=180s
exit 1
fi
kubectl rollout status deployment/web-log-files \
--namespace nicholas --timeout=180s
- name: 🧹 Prune images
if: always()
run: docker image prune -f