2025-12-31 19:34:43 -05:00

113 lines
3.2 KiB
YAML

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:host
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