93 lines
3.0 KiB
YAML
93 lines
3.0 KiB
YAML
name: Deploy to TrueNAS
|
|
|
|
# Auto-deploy on push to main.
|
|
# Runs on the self-hosted Gitea Actions runner on TrueNAS.local
|
|
# (container: cannamanage-act-runner). The runner mounts the host Docker
|
|
# socket into the job container, so `docker compose` commands act on the
|
|
# TrueNAS Docker daemon and (re)build/restart the live cannamanage stack.
|
|
#
|
|
# The job checks the repo out into its own workspace and builds from there,
|
|
# so it always deploys exactly the pushed commit — it does NOT depend on the
|
|
# old /mnt/VM_SSD_Pool/cannamanage host checkout.
|
|
#
|
|
# Compose project name is pinned to "cannamanage" so it updates the existing
|
|
# containers and reuses the persistent "cannamanage_pgdata" volume on the host.
|
|
# Live ports: backend 8081->8080, frontend 3000, db 5432
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
|
|
# Avoid overlapping deploys if pushes land in quick succession.
|
|
concurrency:
|
|
group: truenas-deploy
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
COMPOSE: docker compose -f docker-compose.yml -f docker-compose.truenas.yml -p cannamanage
|
|
steps:
|
|
- name: Check out pushed commit
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Show toolchain
|
|
run: |
|
|
set -euo pipefail
|
|
docker version --format 'docker {{.Server.Version}}'
|
|
docker compose version
|
|
|
|
# NOTE: Backend tests (mvn test) and frontend lint (pnpm lint) are run locally
|
|
# before pushing. The self-hosted act runner uses Docker-in-Docker which doesn't
|
|
# support volume mounts for nested containers. Tests remain a local-only gate.
|
|
|
|
- name: Build images
|
|
run: |
|
|
set -euo pipefail
|
|
$COMPOSE build
|
|
|
|
- name: Roll out stack
|
|
run: |
|
|
set -euo pipefail
|
|
$COMPOSE up -d --remove-orphans
|
|
|
|
- name: Wait for backend health
|
|
run: |
|
|
set -euo pipefail
|
|
echo "Waiting for backend health on :8081 ..."
|
|
for i in $(seq 1 20); do
|
|
if wget -q -O /dev/null http://192.168.188.119:8081/actuator/health; then
|
|
echo "✅ Backend healthy after ${i} attempt(s)"
|
|
exit 0
|
|
fi
|
|
echo " attempt $i/20 — waiting 6s"
|
|
sleep 6
|
|
done
|
|
echo "❌ Backend did not become healthy — recent logs:"
|
|
$COMPOSE logs --tail=40 backend
|
|
exit 1
|
|
|
|
- name: Verify frontend
|
|
run: |
|
|
for i in $(seq 1 10); do
|
|
if wget -q -O /dev/null http://192.168.188.119:3000; then
|
|
echo "✅ Frontend responding on :3000"
|
|
exit 0
|
|
fi
|
|
echo " attempt $i/10 — waiting 5s"
|
|
sleep 5
|
|
done
|
|
echo "❌ Frontend did not respond"
|
|
exit 1
|
|
|
|
- name: Prune dangling images
|
|
run: docker image prune -f || true
|
|
|
|
- name: Deployment summary
|
|
run: |
|
|
echo "=== CannaManage deployed to TrueNAS ==="
|
|
echo "Commit: ${GITHUB_SHA}"
|
|
echo "Backend: http://192.168.188.119:8081"
|
|
echo "Frontend: http://192.168.188.119:3000"
|