name: Deploy Stacks on: push: branches: [master, dev] paths: - 'stacks/**' workflow_dispatch: env: STACKS_DIR: /var/core jobs: deploy-prod: if: ${{ github.ref == 'refs/heads/master' }} 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" sudo mkdir -p "$STACK_DIR" # Copy files sudo cp -r stacks/$stack/* "$STACK_DIR/" # Create .env from template if exists if [ -f "$STACK_DIR/.env.template" ]; then sudo envsubst < "$STACK_DIR/.env.template" > "$STACK_DIR/.env" fi # Deploy cd "$STACK_DIR" sudo docker compose pull --ignore-pull-failures 2>/dev/null || true sudo docker compose up -d --remove-orphans echo "✅ Deployed $stack" echo "" done - name: Show running containers run: sudo docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | head -20 deploy-dev: if: ${{ github.ref == 'refs/heads/dev' }} runs-on: ubuntu-dev 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" sudo mkdir -p "$STACK_DIR" # Copy files sudo cp -r stacks/$stack/* "$STACK_DIR/" # Create .env from template if exists if [ -f "$STACK_DIR/.env.template" ]; then sudo envsubst < "$STACK_DIR/.env.template" > "$STACK_DIR/.env" fi # Deploy cd "$STACK_DIR" sudo docker compose pull --ignore-pull-failures 2>/dev/null || true sudo docker compose up -d --remove-orphans echo "✅ Deployed $stack" echo "" done - name: Show running containers run: sudo docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | head -20