Simplify workflow - single job, no matrix

This commit is contained in:
knight 2025-12-31 14:25:21 -05:00
parent 46207d23af
commit bab710b9f6

View File

@ -6,109 +6,56 @@ on:
paths:
- 'stacks/**'
workflow_dispatch:
inputs:
stack:
description: 'Stack to deploy (or "all")'
required: true
default: 'all'
env:
STACKS_DIR: /var/core
jobs:
detect-changes:
deploy:
runs-on: ubuntu-prod
outputs:
stacks: ${{ steps.changes.outputs.stacks }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Find changed stacks
id: changes
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
if [ "${{ github.event.inputs.stack }}" = "all" ]; then
STACKS=$(ls stacks/ | tr '\n' ' ')
else
STACKS="${{ github.event.inputs.stack }}"
fi
else
STACKS=$(git diff --name-only HEAD~1 HEAD | grep '^stacks/' | cut -d'/' -f2 | sort -u | tr '\n' ' ')
fi
echo "stacks=$STACKS" >> $GITHUB_OUTPUT
echo "Detected stacks to deploy: $STACKS"
deploy:
needs: detect-changes
if: needs.detect-changes.outputs.stacks != ''
runs-on: ubuntu-prod
strategy:
matrix:
stack: ${{ fromJson(format('["{0}"]', join(fromJson(format('["{0}"]', replace(needs.detect-changes.outputs.stacks, ' ', '","'))), '","'))) }}
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Create .env file
run: |
cd stacks/${{ matrix.stack }}
if [ -f ".env.template" ]; then
envsubst < .env.template > .env
fi
- name: Find and deploy changed stacks
env:
# Global
DOMAIN: ${{ secrets.DOMAIN }}
VOLUMES_ROOT: ${{ secrets.VOLUMES_ROOT }}
# Traefik
ACME_EMAIL: ${{ secrets.ACME_EMAIL }}
# Authentik
AUTHENTIK_SECRET_KEY: ${{ secrets.AUTHENTIK_SECRET_KEY }}
AUTHENTIK_PG_PASS: ${{ secrets.AUTHENTIK_PG_PASS }}
# Immich
IMMICH_DB_PASSWORD: ${{ secrets.IMMICH_DB_PASSWORD }}
# Planka
PLANKA_SECRET_KEY: ${{ secrets.PLANKA_SECRET_KEY }}
PLANKA_OIDC_CLIENT_ID: ${{ secrets.PLANKA_OIDC_CLIENT_ID }}
PLANKA_OIDC_CLIENT_SECRET: ${{ secrets.PLANKA_OIDC_CLIENT_SECRET }}
# Registry
REGISTRY_HTTP_SECRET: ${{ secrets.REGISTRY_HTTP_SECRET }}
REGISTRY_HTPASSWD: ${{ secrets.REGISTRY_HTPASSWD }}
# Memento
MEMENTO_AUTH_SECRET: ${{ secrets.MEMENTO_AUTH_SECRET }}
MEMENTO_AUTHENTIK_CLIENT_ID: ${{ secrets.MEMENTO_AUTHENTIK_CLIENT_ID }}
MEMENTO_AUTHENTIK_CLIENT_SECRET: ${{ secrets.MEMENTO_AUTHENTIK_CLIENT_SECRET }}
# Bookclub
BOOKCLUB_SMTP_HOST: ${{ secrets.BOOKCLUB_SMTP_HOST }}
BOOKCLUB_SMTP_USER: ${{ secrets.BOOKCLUB_SMTP_USER }}
BOOKCLUB_SMTP_PASS: ${{ secrets.BOOKCLUB_SMTP_PASS }}
BOOKCLUB_MAIL_FROM: ${{ secrets.BOOKCLUB_MAIL_FROM }}
BOOKCLUB_MAIL_TO: ${{ secrets.BOOKCLUB_MAIL_TO }}
BOOKCLUB_SECRET_PHRASE: ${{ secrets.BOOKCLUB_SECRET_PHRASE }}
# Perilous
PERILOUS_CODE_SERVER_PASSWORD: ${{ secrets.PERILOUS_CODE_SERVER_PASSWORD }}
- name: Deploy ${{ matrix.stack }}
run: |
STACK_DIR="${{ env.STACKS_DIR }}/${{ matrix.stack }}"
# Find changed stacks
STACKS=$(git diff --name-only HEAD~1 HEAD 2>/dev/null | grep '^stacks/' | cut -d'/' -f2 | sort -u || echo "")
# Create stack directory if needed
mkdir -p "$STACK_DIR"
if [ -z "$STACKS" ]; then
echo "No stacks changed, deploying all..."
STACKS=$(ls stacks/)
fi
# Copy files to stack directory
cp -r stacks/${{ matrix.stack }}/* "$STACK_DIR/"
echo "Deploying: $STACKS"
cd "$STACK_DIR"
for stack in $STACKS; do
echo "=========================================="
echo "Deploying $stack..."
echo "=========================================="
# Pull and deploy
docker compose pull --ignore-pull-failures || true
docker compose up -d --remove-orphans
STACK_DIR="${{ env.STACKS_DIR }}/$stack"
mkdir -p "$STACK_DIR"
echo "✅ Deployed ${{ matrix.stack }}"
# Copy files
cp -r stacks/$stack/* "$STACK_DIR/"
- name: Verify deployment
run: |
sleep 5
cd ${{ env.STACKS_DIR }}/${{ matrix.stack }}
docker compose ps
# 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