name: Build and Push Docker Image on: push: branches: - master workflow_dispatch: jobs: build-and-push-image: name: 'Docker Build and Push' env: REGISTRY_USERNAME: nicholas IMAGE_REGISTRY: git.uuard.com IMAGE_NAME: nicholas/personal-website IMAGE_TAG: ${{ github.sha }} runs-on: ubuntu-latest steps: - name: โฌ‡๏ธ Checkout repo uses: actions/checkout@v4 - 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 personal website 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/personal-website \ --namespace nicholas --timeout=180s; then kubectl rollout undo deployment/personal-website --namespace nicholas kubectl rollout status deployment/personal-website \ --namespace nicholas --timeout=180s exit 1 fi - name: ๐Ÿงน Prune images if: always() run: docker image prune -f