name: Build & Deploy on: push: branches: - master - main workflow_dispatch: env: REGISTRY: git.junggomoa.com IMAGE_NAME: chpark/insurance jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set short SHA run: echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - 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_USER }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Build and push image uses: docker/build-push-action@v5 with: context: . push: true tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.SHORT_SHA }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache,mode=max - name: Set up kubectl uses: azure/setup-kubectl@v4 with: version: "v1.29.0" - name: Configure kubeconfig run: | mkdir -p $HOME/.kube echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > $HOME/.kube/config chmod 600 $HOME/.kube/config - name: Ensure namespace & registry secret run: | kubectl apply -f deploy/k8s/namespace.yaml kubectl -n insurance create secret docker-registry gitea-registry \ --docker-server=${{ env.REGISTRY }} \ --docker-username=${{ secrets.REGISTRY_USER }} \ --docker-password=${{ secrets.REGISTRY_TOKEN }} \ --dry-run=client -o yaml | kubectl apply -f - - name: Apply manifests run: | kubectl apply -f deploy/k8s/deployment.yaml kubectl apply -f deploy/k8s/service.yaml if [ "${{ secrets.INGRESS_MODE }}" = "ingressroute" ]; then kubectl apply -f deploy/k8s/ingressroute-traefik.yaml else kubectl apply -f deploy/k8s/ingress.yaml fi - name: Update deployment image & restart run: | kubectl -n insurance set image deployment/insurance-web \ web=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.SHORT_SHA }} kubectl -n insurance rollout status deployment/insurance-web --timeout=180s - name: Show deployment info run: | kubectl -n insurance get deployment,svc,ingress echo "" echo "🚀 Deployed: https://insurance.junggomoa.com"