431e2c0a5f
The Docker-in-Docker limitation prevents creating containers with external networks from within the workflow container. Execute the deploy commands directly on the NAS host via SSH to avoid this issue. This is similar to how manual execution works - running docker compose directly on the host where all networks are accessible.
70 lines
2.7 KiB
YAML
70 lines
2.7 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:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
volumes:
|
|
- /var/packages/ContainerManager/target/usr/bin/docker:/usr/bin/docker
|
|
- /volume1/docker/nas-dashboard:/nas-dashboard
|
|
steps:
|
|
- name: Checkout exact commit
|
|
run: |
|
|
set -euo pipefail
|
|
git init .
|
|
git remote add origin http://gitea:3000/jimmy/nas-tools.git
|
|
git fetch --depth 1 origin "$GITHUB_SHA"
|
|
git checkout --detach FETCH_HEAD
|
|
- name: Warm mirror cache for base images
|
|
run: |
|
|
set -u
|
|
mirror_host="127.0.0.1:5501"
|
|
|
|
if command -v curl >/dev/null 2>&1; then
|
|
if curl -fsS "http://${mirror_host}/v2/" >/dev/null; then
|
|
echo "Registry mirror is healthy at ${mirror_host}"
|
|
else
|
|
echo "Warning: registry mirror health check failed at ${mirror_host}; continuing with normal pull path"
|
|
fi
|
|
else
|
|
echo "Warning: curl is unavailable; skipping explicit mirror health check"
|
|
fi
|
|
|
|
prewarm_base_image() {
|
|
image_ref="$1"
|
|
mirror_ref="${mirror_host}/library/${image_ref}"
|
|
echo "Attempting mirror pre-pull: ${mirror_ref}"
|
|
if timeout 60 docker pull "${mirror_ref}"; then
|
|
docker tag "${mirror_ref}" "${image_ref}"
|
|
echo "Mirror pre-pull succeeded for ${image_ref}"
|
|
else
|
|
echo "Warning: mirror pre-pull failed for ${image_ref}; continuing with normal pull during build"
|
|
fi
|
|
}
|
|
|
|
prewarm_base_image "node:20-alpine"
|
|
prewarm_base_image "python:3.12-slim"
|
|
|
|
- name: Build dev image
|
|
run: |
|
|
export DOCKER_API_VERSION=1.43
|
|
DOCKER_BUILDKIT=0 docker build --cache-from nas-dashboard-dev:latest -t nas-dashboard-dev:latest dashboard/
|
|
- name: Sync runtime compose file
|
|
run: cp dashboard/docker-compose.dev.yml /nas-dashboard/docker-compose.dev.yml
|
|
- name: Deploy dev
|
|
run: |
|
|
export DOCKER_API_VERSION=1.43
|
|
# Execute deploy script on NAS host directly (not from workflow container)
|
|
# This avoids Docker-in-Docker network connection issues
|
|
ssh -o StrictHostKeyChecking=no zjgump@host.docker.internal "cd /volume1/docker/nas-dashboard && /volume1/@appstore/ContainerManager/usr/bin/docker rm -f nas-dashboard-dev || true && /volume1/@appstore/ContainerManager/usr/bin/docker compose -f docker-compose.dev.yml up -d --pull never"
|