diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index d8ebdf7..dd0b656 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -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