Spaces:
Running
Running
fix(ci): split deploy into separate steps, fix exit code handling
Browse filesThe heredoc+set-e combination caused false failures even when health
check passed. Split into discrete steps for clearer error reporting.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- .github/workflows/deploy.yml +17 -26
.github/workflows/deploy.yml
CHANGED
|
@@ -15,42 +15,33 @@ jobs:
|
|
| 15 |
runs-on: [self-hosted, local]
|
| 16 |
timeout-minutes: 10
|
| 17 |
steps:
|
| 18 |
-
- name:
|
| 19 |
-
run:
|
| 20 |
-
set -euo pipefail
|
| 21 |
-
echo "=== Rebuilding legal-intern container ==="
|
| 22 |
-
|
| 23 |
-
ssh prod bash -l <<'REMOTE'
|
| 24 |
-
set -euo pipefail
|
| 25 |
-
cd ~/SecondLayer
|
| 26 |
-
|
| 27 |
-
echo "=== Pulling latest deployment config ==="
|
| 28 |
-
git pull origin main
|
| 29 |
-
|
| 30 |
-
cd deployment
|
| 31 |
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
|
|
|
|
|
|
| 35 |
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
|
|
|
| 40 |
|
| 41 |
-
|
|
|
|
| 42 |
for i in $(seq 1 45); do
|
| 43 |
-
if docker exec legal-intern-prod python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/')" 2>/dev/null; then
|
| 44 |
echo "Container healthy after $((i*2))s"
|
| 45 |
exit 0
|
| 46 |
fi
|
| 47 |
sleep 2
|
| 48 |
done
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
docker logs --tail 30 legal-intern-prod
|
| 52 |
exit 1
|
| 53 |
-
REMOTE
|
| 54 |
|
| 55 |
sync-hf:
|
| 56 |
name: Sync to HuggingFace Space
|
|
|
|
| 15 |
runs-on: [self-hosted, local]
|
| 16 |
timeout-minutes: 10
|
| 17 |
steps:
|
| 18 |
+
- name: Pull deployment config
|
| 19 |
+
run: ssh prod "cd ~/SecondLayer && git pull origin main"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
+
- name: Build container
|
| 22 |
+
run: |
|
| 23 |
+
ssh prod "cd ~/SecondLayer/deployment && \
|
| 24 |
+
docker compose -f docker-compose.prod.yml --env-file .env.prod \
|
| 25 |
+
build --no-cache legal-intern-prod"
|
| 26 |
|
| 27 |
+
- name: Start container
|
| 28 |
+
run: |
|
| 29 |
+
ssh prod "cd ~/SecondLayer/deployment && \
|
| 30 |
+
docker compose -f docker-compose.prod.yml --env-file .env.prod \
|
| 31 |
+
up -d legal-intern-prod"
|
| 32 |
|
| 33 |
+
- name: Health check
|
| 34 |
+
run: |
|
| 35 |
for i in $(seq 1 45); do
|
| 36 |
+
if ssh prod "docker exec legal-intern-prod python -c \"import urllib.request; urllib.request.urlopen('http://localhost:7860/')\"" 2>/dev/null; then
|
| 37 |
echo "Container healthy after $((i*2))s"
|
| 38 |
exit 0
|
| 39 |
fi
|
| 40 |
sleep 2
|
| 41 |
done
|
| 42 |
+
echo "Health check failed"
|
| 43 |
+
ssh prod "docker logs --tail 30 legal-intern-prod" || true
|
|
|
|
| 44 |
exit 1
|
|
|
|
| 45 |
|
| 46 |
sync-hf:
|
| 47 |
name: Sync to HuggingFace Space
|