name: Deploy Seedbox on: push: branches: [main] paths: - 'seedbox/**' pull_request: branches: [main] paths: - 'seedbox/**' workflow_dispatch: jobs: deploy: name: Deploy Seedbox Stacks runs-on: self-hosted container: image: alpine:latest steps: - name: Install dependencies run: apk add --no-cache openssh-client git - name: Checkout repository run: | git clone --depth 1 --branch main https://gitea.arnodo.fr/Damien/infra-scripts.git . - name: Setup SSH key run: | mkdir -p ~/.ssh echo "${{ secrets.SEEDBOX_SSH_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keyscan -H seedbox.taila5ad8.ts.net >> ~/.ssh/known_hosts 2>/dev/null || true - name: Validate compose files (PR only) if: github.event_name == 'pull_request' run: | echo "Validating docker-compose files..." for stack in seedbox/stacks/*/; do if [ -f "${stack}docker-compose.yml" ]; then echo "✓ ${stack}docker-compose.yml exists" fi done echo "Validation complete." - name: Deploy to seedbox if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' run: | ssh -o StrictHostKeyChecking=accept-new debian@seedbox.taila5ad8.ts.net << 'ENDSSH' set -e cd /srv/seedbox echo "=== Syncing stacks from repository ===" # Clone to temp directory and sync only seedbox/ content TEMP_DIR=$(mktemp -d) git clone --depth 1 --branch main https://gitea.arnodo.fr/Damien/infra-scripts.git "$TEMP_DIR" # Sync stacks directory (preserve .env and volumes) rsync -av --delete \ --exclude='.env' \ --exclude='*/data/' \ --exclude='*/state/' \ "$TEMP_DIR/seedbox/stacks/" /srv/seedbox/stacks/ # Clean up temp directory rm -rf "$TEMP_DIR" echo "=== Creating .env file ===" cat > .env << 'ENVEOF' TS_AUTHKEY=${{ secrets.TS_AUTHKEY }} TRANSMISSION_USER=${{ secrets.TRANSMISSION_USER }} TRANSMISSION_PASS=${{ secrets.TRANSMISSION_PASS }} ENVEOF chmod 600 .env echo "=== Deploying stacks ===" for stack in stacks/*/; do if [ -f "${stack}docker-compose.yml" ]; then stack_name=$(basename "$stack") echo "Deploying ${stack_name}..." docker compose -f "${stack}docker-compose.yml" --env-file .env pull docker compose -f "${stack}docker-compose.yml" --env-file .env up -d --remove-orphans fi done echo "=== Cleanup unused images ===" docker image prune -f echo "=== Current status ===" docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' ENDSSH - name: Deployment summary if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' run: | echo "✅ Deployment complete!" echo "" echo "Services should be available at:" echo " • transmission.taila5ad8.ts.net" echo " • portainer.taila5ad8.ts.net" echo " • prowlarr.taila5ad8.ts.net" echo " • sonarr.taila5ad8.ts.net"