name: Build and Deploy Verso on: push: branches: - main workflow_dispatch: env: IMAGE: registry.alocoq.fr/verso:latest REPO_URL: https://git.alocoq.fr/alois/verso.git jobs: deploy: runs-on: native timeout-minutes: 90 steps: - name: Build and push image with BuildKit run: | kubectl -n ci delete job verso-buildkit --ignore-not-found=true cat <<'EOF' | kubectl apply -f - apiVersion: batch/v1 kind: Job metadata: name: verso-buildkit namespace: ci spec: backoffLimit: 0 template: spec: restartPolicy: Never initContainers: - name: prepare image: alpine/git:latest command: - sh - -c - | set -eux git clone --depth 1 https://git.alocoq.fr/alois/verso.git /workspace/repo volumeMounts: - name: workspace mountPath: /workspace containers: - name: buildkit image: moby/buildkit:latest securityContext: privileged: true command: - sh - -c - | set -eux buildctl-daemonless.sh build \ --frontend=dockerfile.v0 \ --local context=/workspace/repo \ --local dockerfile=/workspace/repo/server-ce \ --opt filename=Dockerfile \ --output type=image,name=registry.alocoq.fr/verso:latest,push=true volumeMounts: - name: workspace mountPath: /workspace volumes: - name: workspace emptyDir: {} EOF - name: Wait for build run: | kubectl -n ci wait --for=condition=complete job/verso-buildkit --timeout=5400s - name: Show logs if: always() run: | kubectl -n ci logs job/verso-buildkit -c prepare || true kubectl -n ci logs job/verso-buildkit -c buildkit || true - name: Deploy run: | kubectl -n test set image deployment/verso \ verso=registry.alocoq.fr/verso:latest kubectl -n test rollout restart deployment/verso kubectl -n test rollout status deployment/verso - name: Cleanup if: always() run: | kubectl -n ci delete job verso-buildkit --ignore-not-found=true