name: Deploy STEP3 Web Game on: push: branches: - main workflow_dispatch: {} jobs: deploy: runs-on: self-hosted env: IMAGE_TAR: /tmp/step3-web.tar NODES: "192.168.86.72 192.168.86.73 192.168.86.74" steps: - name: Checkout repo uses: actions/checkout@v4 - name: Set build identity run: | echo "BUILD_TAG=$(git rev-parse HEAD)" >> "$GITHUB_ENV" - name: Build Web game image run: | docker build -f web/Dockerfile -t "step3-web:${BUILD_TAG}" . - name: Save image run: | docker save "step3-web:${BUILD_TAG}" -o "${IMAGE_TAR}" - name: Import image on Kubernetes nodes run: | for node in ${NODES}; do scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/step3-web.tar ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/step3-web.tar && rm -f /tmp/step3-web.tar" done - name: Clean runner image archive if: always() run: rm -f "${IMAGE_TAR}" - name: Configure kubeconfig env: KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }} run: | if [ -n "$KUBECONFIG_CONTENT" ]; then mkdir -p /tmp/kube printf '%s\n' "$KUBECONFIG_CONTENT" > /tmp/kube/config echo "KUBECONFIG=/tmp/kube/config" >> "$GITHUB_ENV" fi - name: Deploy Web game run: | kubectl create namespace step3-web --dry-run=client -o yaml | kubectl apply -f - kubectl apply -f web/k8s/service.yaml -n step3-web sed "s|step3-web:latest|step3-web:${BUILD_TAG}|" web/k8s/deployment.yaml | kubectl apply -n step3-web -f - kubectl rollout status deployment/step3-web -n step3-web --timeout=180s