c3a05719f5
Deploy Dashboard (Dev) / Deploy to Dev (push) Failing after 43s
The dev workflow now focuses on fast deployment iteration. Use test.yml workflow for comprehensive testing before merging to main.
117 lines
4.1 KiB
YAML
117 lines
4.1 KiB
YAML
name: Deploy Dashboard (Dev)
|
|
on:
|
|
push:
|
|
branches: [dev]
|
|
paths:
|
|
- 'dashboard/**'
|
|
- '.gitea/workflows/deploy-dev.yml'
|
|
|
|
concurrency:
|
|
group: deploy-dashboard-dev
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
deploy-dev:
|
|
name: Deploy to Dev
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: Warm mirror cache for base images
|
|
run: |
|
|
set -u
|
|
mirror_host="100.78.131.124:5501"
|
|
|
|
prewarm_base_image() {
|
|
image_ref="$1"
|
|
# Skip if image already exists locally
|
|
if docker image inspect "${image_ref}" >/dev/null 2>&1; then
|
|
echo "Image ${image_ref} already exists locally, skipping pre-pull"
|
|
return 0
|
|
fi
|
|
|
|
mirror_ref="${mirror_host}/library/${image_ref}"
|
|
echo "Attempting mirror pre-pull: ${mirror_ref}"
|
|
if timeout 30 docker pull "${mirror_ref}" 2>/dev/null; then
|
|
docker tag "${mirror_ref}" "${image_ref}"
|
|
echo "Mirror pre-pull succeeded for ${image_ref}"
|
|
else
|
|
echo "Mirror pre-pull failed for ${image_ref}, will pull during build"
|
|
fi
|
|
}
|
|
|
|
prewarm_base_image "node:20-alpine"
|
|
prewarm_base_image "python:3.12-slim"
|
|
|
|
- name: Build dev image
|
|
run: |
|
|
set -e
|
|
export DOCKER_API_VERSION=1.43
|
|
if ! DOCKER_BUILDKIT=0 docker build --cache-from nas-dashboard-dev:latest -t nas-dashboard-dev:latest dashboard/; then
|
|
echo "Build failed. Checking for network issues..."
|
|
curl -I https://registry.npmmirror.com || echo "npmmirror unreachable"
|
|
curl -I https://pypi.tuna.tsinghua.edu.cn || echo "Tsinghua PyPI unreachable"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Sync runtime compose file
|
|
run: |
|
|
mkdir -p /volume1/docker/nas-dashboard
|
|
cp dashboard/docker-compose.dev.yml /volume1/docker/nas-dashboard/docker-compose.dev.yml
|
|
|
|
- name: Deploy dev
|
|
run: |
|
|
set -euo pipefail
|
|
export DOCKER_API_VERSION=1.43
|
|
|
|
cd /volume1/docker/nas-dashboard
|
|
|
|
# Stop existing container if running
|
|
docker compose -f docker-compose.dev.yml -p nas-dashboard-dev down || true
|
|
|
|
# Ensure network exists (create only if it doesn't exist)
|
|
if ! docker network inspect nas-dashboard_internal >/dev/null 2>&1; then
|
|
docker network create nas-dashboard_internal
|
|
fi
|
|
|
|
# Deploy with compose (without --build since we already built the image)
|
|
docker compose -f docker-compose.dev.yml -p nas-dashboard-dev up -d --pull never
|
|
|
|
# Manually connect to networks after container is created
|
|
docker network connect nas-dashboard_internal nas-dashboard-dev || true
|
|
docker network connect gitea_gitea nas-dashboard-dev || true
|
|
|
|
- name: Wait for container to be healthy
|
|
run: |
|
|
echo "Waiting for container to be healthy..."
|
|
for i in {1..30}; do
|
|
STATUS=$(docker inspect --format='{{.State.Health.Status}}' nas-dashboard-dev 2>/dev/null || echo "starting")
|
|
if [ "$STATUS" = "healthy" ]; then
|
|
echo "✅ Container is healthy"
|
|
break
|
|
fi
|
|
echo "Waiting... ($i/30) Status: $STATUS"
|
|
sleep 2
|
|
done
|
|
# Final check
|
|
STATUS=$(docker inspect --format='{{.State.Health.Status}}' nas-dashboard-dev 2>/dev/null || echo "unknown")
|
|
if [ "$STATUS" != "healthy" ]; then
|
|
echo "❌ Container failed to become healthy: $STATUS"
|
|
docker logs nas-dashboard-dev --tail 50
|
|
exit 1
|
|
fi
|
|
|
|
- name: Run smoke tests
|
|
run: |
|
|
cd /volume1/repos/nas-tools
|
|
bash scripts/smoke-test-dashboard.sh dev
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Smoke tests failed! Check logs above."
|
|
docker logs nas-dashboard-dev --tail 100
|
|
exit 1
|
|
fi
|
|
echo "✅ Smoke tests passed"
|