#!/bin/bash # Script to fix Woodpecker deployment from macmini7 echo "===== VERIFYING WE'RE ON MACMINI7 =====" HOSTNAME=$(hostname) if [[ "$HOSTNAME" != *"macmini7"* ]]; then echo "ERROR: This script should be run on macmini7, current host is $HOSTNAME" echo "Please run this script on macmini7" exit 1 fi echo "===== CHECKING SWARM ACCESS FROM MACMINI7 =====" docker node ls || { echo "ERROR: Cannot access Docker swarm from macmini7" echo "Make sure macmini7 is a swarm manager" exit 1 } echo "===== CHECKING IF MACMINI1 IS IN SWARM =====" docker node ls | grep macmini1 || { echo "WARNING: macmini1 node not found in swarm!" echo "The stack.yml has constraints requiring macmini1" } echo "===== REMOVING ANY EXISTING WOODPECKER STACK =====" docker stack rm woodpecker echo "Waiting for stack removal..." sleep 20 echo "===== CHECKING FOR ORPHANED SERVICES =====" docker service ls | grep woodpecker && echo "WARNING: Woodpecker services still exist after stack removal!" echo "===== ENSURING DIRECTORIES EXIST ON MACMINI1 =====" echo "Note: This requires SSH access to macmini1 or shared storage" echo "Creating directories for Woodpecker..." mkdir -p /mnt/data/nixc.us/woodpecker/production/db /mnt/data/nixc.us/woodpecker/production/data || { echo "WARNING: Could not create directories locally" echo "Attempting to create directories via SSH..." ssh macmini1 "mkdir -p /mnt/data/nixc.us/woodpecker/production/db /mnt/data/nixc.us/woodpecker/production/data" || { echo "ERROR: Could not create directories on macmini1 via SSH" echo "You may need to manually create these directories on macmini1" } } echo "===== ENSURING NETWORKS EXIST =====" docker network create --driver=overlay --attachable traefik || echo "traefik network already exists" echo "===== DEPLOYING WOODPECKER STACK FROM MACMINI7 =====" cd /mnt/tank/persist/nixc.us/woodpecker/production echo "Current directory: $(pwd)" ls -la stack.yml || { echo "ERROR: stack.yml not found in $(pwd)" echo "Please make sure the stack.yml file exists in this directory" exit 1 } echo "Deploying from stack.yml..." docker stack deploy -c stack.yml woodpecker echo "===== WAITING FOR SERVICES TO START =====" echo "Waiting 30 seconds for services to start..." sleep 30 echo "===== SERVICE STATUS =====" docker service ls | grep woodpecker echo "===== CHECKING SERVICE PLACEMENT =====" for service in $(docker service ls --format "{{.Name}}" | grep woodpecker); do echo "Checking placement for $service..." docker service ps $service --no-trunc --format "{{.Node}} {{.CurrentState}}" done echo "===== CHECKING LOGS =====" echo "Database logs:" docker service logs --tail 20 woodpecker_db || echo "Could not get database logs" echo "Server logs:" docker service logs --tail 20 woodpecker_server || echo "Could not get server logs" echo "===== DONE =====" echo "If services are not running, check the logs above for errors."