name: Deploy on: workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest # hits the host runner (vps-runner) already on this box env: KUBECONFIG: /etc/rancher/k3s/k3s.yaml steps: - name: Checkout uses: actions/checkout@v4 - name: Build backend image run: docker build -t realtime-collab-backend:latest ./backend - name: Import image into k3s containerd # docker build only populates the Docker daemon's store; k3s runs its # own containerd (imagePullPolicy: Never, never pulls a registry), so # the image must be explicitly imported or the pod keeps running # whatever was last imported. run: docker save realtime-collab-backend:latest | k3s ctr -n k8s.io images import - - name: Roll out backend run: | kubectl rollout restart deployment/realtime-collab-backend kubectl rollout status deployment/realtime-collab-backend --timeout=90s - name: Build frontend working-directory: frontend env: # frontend/.env.local holds these for the manually-maintained # /root/realtime-collab checkout, but it's gitignored, so this # actions/checkout-based workspace never has it — without setting # them here, Vite silently falls back to the localhost dev # defaults and bakes a broken API URL into the production bundle. VITE_API_URL: https://collab.m1ngdaxie.com/api VITE_WS_URL: wss://collab.m1ngdaxie.com/ws run: | npm ci npm run build - name: Deploy frontend run: rsync -a --delete frontend/dist/ /var/www/realtime-collab/