Simplify workflow - single job, no matrix
This commit is contained in:
parent
46207d23af
commit
bab710b9f6
@ -6,109 +6,56 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'stacks/**'
|
- 'stacks/**'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
|
||||||
stack:
|
|
||||||
description: 'Stack to deploy (or "all")'
|
|
||||||
required: true
|
|
||||||
default: 'all'
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
STACKS_DIR: /var/core
|
STACKS_DIR: /var/core
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
detect-changes:
|
deploy:
|
||||||
runs-on: ubuntu-prod
|
runs-on: ubuntu-prod
|
||||||
outputs:
|
|
||||||
stacks: ${{ steps.changes.outputs.stacks }}
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
|
|
||||||
- name: Find changed stacks
|
- name: Find and deploy 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
|
|
||||||
env:
|
env:
|
||||||
# Global
|
|
||||||
DOMAIN: ${{ secrets.DOMAIN }}
|
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: |
|
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
|
if [ -z "$STACKS" ]; then
|
||||||
mkdir -p "$STACK_DIR"
|
echo "No stacks changed, deploying all..."
|
||||||
|
STACKS=$(ls stacks/)
|
||||||
|
fi
|
||||||
|
|
||||||
# Copy files to stack directory
|
echo "Deploying: $STACKS"
|
||||||
cp -r stacks/${{ matrix.stack }}/* "$STACK_DIR/"
|
|
||||||
|
|
||||||
cd "$STACK_DIR"
|
for stack in $STACKS; do
|
||||||
|
echo "=========================================="
|
||||||
|
echo "Deploying $stack..."
|
||||||
|
echo "=========================================="
|
||||||
|
|
||||||
# Pull and deploy
|
STACK_DIR="${{ env.STACKS_DIR }}/$stack"
|
||||||
docker compose pull --ignore-pull-failures || true
|
mkdir -p "$STACK_DIR"
|
||||||
docker compose up -d --remove-orphans
|
|
||||||
|
|
||||||
echo "✅ Deployed ${{ matrix.stack }}"
|
# Copy files
|
||||||
|
cp -r stacks/$stack/* "$STACK_DIR/"
|
||||||
|
|
||||||
- name: Verify deployment
|
# Create .env from template if exists
|
||||||
run: |
|
if [ -f "$STACK_DIR/.env.template" ]; then
|
||||||
sleep 5
|
envsubst < "$STACK_DIR/.env.template" > "$STACK_DIR/.env"
|
||||||
cd ${{ env.STACKS_DIR }}/${{ matrix.stack }}
|
fi
|
||||||
docker compose ps
|
|
||||||
|
# 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