name: deploy # Build + deploy na tym samym hoście: runner ma zamontowany docker.sock, # więc `docker compose` operuje na demonie serwera (naurecki.pl). on: push: branches: [main, master] workflow_dispatch: concurrency: group: deploy-videodownloader cancel-in-progress: false jobs: deploy: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Sanity — docker dostępny run: docker version && docker compose version - name: Build obrazów run: docker compose -f docker-compose.prod.yml build - name: Start stacka env: PUBLIC_BASE_URL: https://videodownloader.naurecki.pl run: docker compose -f docker-compose.prod.yml up -d - name: Czekaj na gotowość API run: | ok=0 for i in $(seq 1 40); do if docker compose -f docker-compose.prod.yml exec -T api \ node -e "fetch('http://localhost:3000/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"; then echo "API gotowe"; ok=1; break fi echo "czekam na API ($i)..."; sleep 2 done [ "$ok" = "1" ] || { echo "API nie wstało"; docker compose -f docker-compose.prod.yml logs --tail=80 api; exit 1; } - name: Sprzątanie nieużywanych obrazów run: docker image prune -f