name: Deploy Stacks on: push: branches: [master] paths: - 'stacks/**' workflow_dispatch: env: STACKS_DIR: /var/core jobs: deploy: runs-on: ubuntu-prod steps: - uses: actions/checkout@v4 with: fetch-depth: 2 - name: Find and deploy changed stacks env: DOMAIN: ${{ secrets.DOMAIN }} run: | # Find changed stacks STACKS=$(git diff --name-only HEAD~1 HEAD 2>/dev/null | grep '^stacks/' | cut -d'/' -f2 | sort -u || echo "") if [ -z "$STACKS" ]; then echo "No stacks changed, deploying all..." STACKS=$(ls stacks/) fi echo "Deploying: $STACKS" for stack in $STACKS; do echo "==========================================" echo "Deploying $stack..." echo "==========================================" STACK_DIR="${{ env.STACKS_DIR }}/$stack" mkdir -p "$STACK_DIR" # Copy files cp -r stacks/$stack/* "$STACK_DIR/" # Create .env from template if exists if [ -f "$STACK_DIR/.env.template" ]; then envsubst < "$STACK_DIR/.env.template" > "$STACK_DIR/.env" fi # Deploy cd "$STACK_DIR" docker compose pull --ignore-pull-failures 2>/dev/null || true docker compose up -d --remove-orphans echo "✅ Deployed $stack" echo "" done - name: Show running containers run: docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | head -20