Merge branch 'main' into dev
Deploy Dashboard (Main) / Backend Tests (push) Failing after 32s
Deploy Dashboard (Main) / Build Main Image (push) Has been skipped
Deploy Dashboard (Dev) / Backend Tests (push) Successful in 1m8s
Deploy Dashboard (Dev) / Frontend Tests (push) Successful in 53s
Deploy Dashboard (Main) / Frontend Tests (push) Failing after 5s
Deploy Dashboard (Main) / Deploy to Production (push) Has been skipped
Deploy Dashboard (Dev) / Build Dev Image (push) Successful in 1m34s
Deploy Dashboard (Dev) / Deploy to Dev (push) Failing after 0s

# Conflicts:
#	.gitea/workflows/deploy-dev.yml
#	.gitea/workflows/deploy.yml
This commit is contained in:
Gan, Jimmy
2026-07-07 15:50:38 +08:00
86 changed files with 39 additions and 47746 deletions
+17 -15
View File
@@ -169,11 +169,8 @@ jobs:
run: |
set -e
echo "Building on VPS (SSD)..."
CACHE_ARG=""
if podman image exists nas-dashboard-dev:latest 2>/dev/null; then
CACHE_ARG="--cache-from nas-dashboard-dev:latest"
fi
podman build $CACHE_ARG -t nas-dashboard-dev:latest dashboard/
# Podman caches layers automatically; no --cache-from needed
podman build -t nas-dashboard-dev:latest dashboard/
- name: Transfer image to NAS
run: |
@@ -190,6 +187,12 @@ jobs:
needs: [build-image-dev, frontend-tests]
env:
SECRET_KEY: test-secret-key-for-ci-environment-32chars-minimum
container:
volumes:
- /var/packages/ContainerManager/target/usr/bin/docker:/usr/bin/docker
- /var/packages/ContainerManager/target/usr/bin/docker-compose:/usr/lib/docker/cli-plugins/docker-compose
- /volume1/docker/nas-dashboard:/volume1/docker/nas-dashboard
steps:
- name: Checkout repository
run: |
@@ -210,24 +213,23 @@ jobs:
GITEA_DB_PASSWORD: ${{ secrets.GITEA_DB_PASSWORD }}
run: |
set -u
DOCKER="ssh nasts /volume1/@appstore/ContainerManager/usr/bin/docker"
COMPOSE="ssh nasts /volume1/@appstore/ContainerManager/usr/bin/docker-compose"
DOCKER="/volume1/@appstore/ContainerManager/usr/bin/docker"
COMPOSE="/usr/lib/docker/cli-plugins/docker-compose"
NAS_VOL="/volume1/docker/nas-dashboard"
# Sync compose file to NAS
ssh nasts "mkdir -p $NAS_VOL"
scp dashboard/docker-compose.dev.yml "nasts:$NAS_VOL/docker-compose.dev.yml"
# Sync compose file to NAS (already done in previous step, just in case)
mkdir -p $NAS_VOL
# Stop existing container if running
$COMPOSE -f docker-compose.dev.yml -p nas-dashboard-dev down 2>/dev/null || true
$COMPOSE -f $NAS_VOL/docker-compose.dev.yml -p nas-dashboard-dev down 2>/dev/null || true
# Ensure network exists (create only if it doesn't exist)
# Ensure network exists
if ! $DOCKER network inspect nas-dashboard_internal >/dev/null 2>&1; then
$DOCKER network create nas-dashboard_internal
fi
# Deploy
ssh nasts "cd $NAS_VOL && GITEA_TOKEN=$GITEA_TOKEN SECRET_KEY=$SECRET_KEY /volume1/@appstore/ContainerManager/usr/bin/docker-compose -f docker-compose.dev.yml -p nas-dashboard-dev up -d --pull never" 2>&1 || true
cd $NAS_VOL && GITEA_TOKEN=$GITEA_TOKEN SECRET_KEY=$SECRET_KEY $COMPOSE -f docker-compose.dev.yml -p nas-dashboard-dev up -d --pull never 2>&1 || true
if ! $DOCKER container inspect nas-dashboard-dev >/dev/null 2>&1; then
echo "Compose failed to create container..."
@@ -244,7 +246,7 @@ jobs:
- name: Wait for container to be healthy
run: |
DOCKER="ssh nasts /volume1/@appstore/ContainerManager/usr/bin/docker"
DOCKER="/volume1/@appstore/ContainerManager/usr/bin/docker"
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")
@@ -264,7 +266,7 @@ jobs:
- name: Run smoke tests
run: |
DOCKER="ssh nasts /volume1/@appstore/ContainerManager/usr/bin/docker"
DOCKER="/volume1/@appstore/ContainerManager/usr/bin/docker"
echo "=== Running smoke tests via docker exec ==="
# Test 1: Health check
+21 -14
View File
@@ -14,7 +14,7 @@ concurrency:
jobs:
backend-tests:
name: Backend Tests
runs-on: vps
runs-on: ubuntu-latest
env:
SECRET_KEY: test-secret-key-for-ci-environment-32chars-minimum
@@ -22,7 +22,7 @@ jobs:
- name: Checkout repository
run: |
if [ ! -d .git ]; then
git clone --depth=1 "http://100.78.131.124:3300/${GITHUB_REPOSITORY}.git" .
git clone --depth=1 "http://172.21.0.1:3300/${GITHUB_REPOSITORY}.git" .
fi
- name: Setup Python
@@ -172,39 +172,40 @@ jobs:
name: Build Main Image
runs-on: vps
needs: [backend-tests]
steps:
- name: Checkout repository
run: |
if [ ! -d .git ]; then
git clone --depth=1 "http://100.78.131.124:3300/${GITHUB_REPOSITORY}.git" .
fi
- name: Build main Docker image
- name: Build Docker image
run: |
set -e
echo "Building on VPS (SSD)..."
CACHE_ARG=""
if podman image exists nas-dashboard:latest 2>/dev/null; then
CACHE_ARG="--cache-from nas-dashboard:latest"
fi
podman build $CACHE_ARG -t nas-dashboard:latest dashboard/
# Podman caches layers automatically; no --cache-from needed
podman build -t nas-dashboard:latest dashboard/
- name: Transfer image to NAS
run: |
set -e
echo "Streaming main image to NAS..."
echo "Streaming image to NAS..."
podman save nas-dashboard:latest | ssh nasts "/volume1/@appstore/ContainerManager/usr/bin/docker load 2>&1"
echo "Main image transferred successfully"
echo "Retagging image..."
ssh nasts "/volume1/@appstore/ContainerManager/usr/bin/docker tag localhost/nas-dashboard:latest nas-dashboard:latest 2>&1 && /volume1/@appstore/ContainerManager/usr/bin/docker image rm localhost/nas-dashboard:latest 2>&1"
echo "Image transferred and retagged successfully"
deploy:
name: Deploy to Production
runs-on: nas
if: always()
if: always() && needs.build-image-main.result == 'success'
needs: [build-image-main, frontend-tests]
env:
SECRET_KEY: test-secret-key-for-ci-environment-32chars-minimum
GITEA_DB_PASSWORD: nyM3P4v1aYAsT7zfUtdguImNVHgFltCKCY/OjzWZVRE=
container:
network: gitea_gitea
options: --add-host=host.docker.internal:host-gateway --dns 192.168.31.1 --dns 8.8.8.8
volumes:
- /var/packages/ContainerManager/target/usr/bin/docker:/usr/bin/docker
- /volume1/docker/nas-dashboard:/nas-dashboard
@@ -241,7 +242,7 @@ jobs:
if ! docker container inspect nas-dashboard >/dev/null 2>&1; then
echo "Compose failed, stripping networks and retrying..."
docker rm -f docker-socket-proxy nas-dashboard 2>/dev/null || true
# ... (python script for stripping networks) ...
sed '/^networks:/,$d' /nas-dashboard/docker-compose.yml > /nas-dashboard/prod-ci.yml
docker compose -f /nas-dashboard/prod-ci.yml up -d --pull never 2>&1 || true
fi
@@ -304,7 +305,13 @@ jobs:
# Verify network connections
echo "=== Network connections ==="
docker inspect nas-dashboard --format '{{json .NetworkSettings.Networks}}' | python3 -c 'import json,sys;nets=json.load(sys.stdin);[print(f" Connected to {n}") for n in nets];assert "nas-dashboard_internal" in nets, "Missing nas-dashboard_internal";print("All network connections established")'
if docker inspect nas-dashboard --format '{{json .NetworkSettings.Networks}}' | grep -q 'nas-dashboard_internal'; then
echo " Connected to nas-dashboard_internal"
echo "All network connections established"
else
echo "❌ Missing nas-dashboard_internal network"
exit 1
fi
# Wait for container to be healthy
echo "Waiting for container to be healthy..."