Simplify workflow - single job, no matrix
This commit is contained in:
parent
46207d23af
commit
bab710b9f6
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user