This repository has been archived on 2026-05-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
tippspiel/.gitea/workflows/build.yml
T
Ronny 92b68a8b2e
Build & Deploy Tippspiel / build (push) Successful in 45s
ci: curl via apk installieren (Alpine runner hat kein curl)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 11:48:35 +02:00

77 lines
4.0 KiB
YAML

name: Build & Deploy Tippspiel
on:
push:
branches: [main]
jobs:
build:
runs-on: self-hosted
steps:
- name: Setup tools
run: apk add --no-cache curl
- name: Checkout
run: |
rm -rf workspace && mkdir workspace
GIT_TERMINAL_PROMPT=0 git clone \
--depth 1 \
--branch main \
http://x-token:${{ secrets.DEPLOY_TOKEN }}@gitea:3000/mwf975_git/tippspiel.git \
workspace
- name: Create build context
run: |
cd workspace
tar cf /tmp/tippspiel-ci.tar \
--exclude='.git' \
--exclude='node_modules' \
--exclude='*.docx' \
--exclude='prototyp_*.html' \
.
echo "Build context size: $(du -sh /tmp/tippspiel-ci.tar | cut -f1)"
- name: Build Docker Image via Portainer
run: |
echo "Starting Docker build on NAS..."
curl -s -k -X POST \
"https://192.168.1.60:9444/api/endpoints/2/docker/build?t=wm2026-tippspiel:latest&dockerfile=./Dockerfile" \
-H "X-API-Key: ${{ secrets.PORTAINER_TOKEN }}" \
-H "Content-Type: application/x-tar" \
--data-binary @/tmp/tippspiel-ci.tar \
--max-time 600 \
| grep -E '(Successfully built|Successfully tagged|error|Error)' || true
echo "Build completed."
- name: Redeploy Stack via Portainer
run: |
echo "Redeploying stack wm2026-tippspiel..."
curl -s -k -X PUT \
"https://192.168.1.60:9444/api/stacks/115?endpointId=2" \
-H "X-API-Key: ${{ secrets.PORTAINER_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"stackFileContent": "services:\n tippspiel:\n image: wm2026-tippspiel:latest\n container_name: wm2026-tippspiel\n restart: unless-stopped\n ports:\n - \"3301:3001\"\n environment:\n - NODE_ENV=development\n - PORT=3001\n - DATABASE_URL=postgresql://postgres.ggqsfnlqezgxcfqkytrr:mPlkB1cVWWHexzcgMk@aws-0-eu-west-1.pooler.supabase.com:6543/postgres\n - SUPABASE_URL=https://ggqsfnlqezgxcfqkytrr.supabase.co\n - SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImdncXNmbmxxZXpneGNmcWt5dHJyIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc3NTIzNjc4NiwiZXhwIjoyMDkwODEyNzg2fQ.WVT_M73ZTs7u-MMoeodTwFMH8u5G4wq1aQw5n8ZpZ2A\n - ANTHROPIC_API_KEY=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\n - FOOTBALL_API_KEY=15ae56716ff341a6b5ee977a38727915\n - FOOTBALL_API_BASE_URL=https://api.football-data.org/v4\n - ELEVENLABS_API_KEY=sk_8eaa1dfa56d58265c08cea57b2a72b65b355c97f43f85483\n - CORS_ORIGIN=*\n - STAFFBASE_PUBLIC_KEY=dev-mode-no-key-needed\n - STAFFBASE_PLUGIN_ID=\n healthcheck:\n test: [\"CMD\", \"wget\", \"-qO-\", \"http://localhost:3001/health\"]\n interval: 30s\n timeout: 5s\n start_period: 10s\n retries: 3\n networks:\n - main-network\n\nnetworks:\n main-network:\n external: true",
"env": [],
"prune": true,
"pullImage": false
}' \
| python3 -c "import sys,json; d=json.load(sys.stdin); print('Stack redeployed:', d.get('Name'), '| Status:', d.get('Status'))" 2>/dev/null \
|| echo "Stack redeploy triggered."
echo "Deployment complete!"
- name: Verify deployment
run: |
sleep 15
STATUS=$(curl -s http://192.168.1.60:3301/health | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('status'))" 2>/dev/null || echo "unreachable")
echo "Health check: $STATUS"
if [ "$STATUS" = "ok" ]; then
echo "✅ Deployment successful! App running at http://192.168.1.60:3301"
else
echo "⚠️ Health check inconclusive (container may be restarting)"
fi
- name: Cleanup
if: always()
run: rm -rf workspace /tmp/tippspiel-ci.tar