diff --git a/.gitea/actions/docker-img-pre-pull/action.yml b/.gitea/actions/docker-img-pre-pull/action.yml new file mode 100644 index 00000000..0f730afe --- /dev/null +++ b/.gitea/actions/docker-img-pre-pull/action.yml @@ -0,0 +1,76 @@ +name: "Pre-pull Docker Compose service images" +description: "Prepares Docker Compose services by pulling images in parallel before dry-run" +author: "Your Name " + +inputs: + services: + description: "Space-separated list of Docker Compose services" + required: true + compose_profile: + description: "Docker Compose profile to use (optional)" + required: false + default: "" + env_file: + description: "Path to .env file (optional)" + required: false + default: ".env" + +runs: + using: "composite" + steps: + - name: Install yq + shell: bash + run: | + if ! command -v yq >/dev/null; then + echo "Installing yq..." + wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 + chmod +x /usr/local/bin/yq + fi + + - name: Pre-pull/build services + shell: bash + run: | + set -euo pipefail + + SERVICES="${{ inputs.services }}" + PROFILE="${{ inputs.compose_profile }}" + ENV_FILE="${{ inputs.env_file }}" + + if [ -z "$SERVICES" ]; then + echo "❌ No services provided. Exiting." + exit 1 + fi + + echo "Services to process:" + echo "$SERVICES" + + CONFIG_CMD="docker compose" + if [ -n "$PROFILE" ]; then + CONFIG_CMD="$CONFIG_CMD --profile $PROFILE" + fi + CONFIG_CMD="$CONFIG_CMD --env-file $ENV_FILE config" + + for svc in $SERVICES; do + ( + echo "🔹 Starting prep for service: $svc" + start_time=$(date +%s) + + image=$(eval $CONFIG_CMD | yq -r ".services[\"$svc\"].image // \"\"") + + if [ -n "$image" ] && [ "$image" != "null" ]; then + echo "➡️ Pulling image for $svc: $image" + if ! docker pull "$image"; then + echo "⚠️ Failed to pull image $image for service $svc" + fi + else + echo "⚠️ No image defined for $svc — skipping" + fi + + end_time=$(date +%s) + duration=$((end_time - start_time)) + echo "✅ Finished $svc in ${duration}s" + ) & + done + + wait + echo "🎯 All services processed." diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 20570e82..7edcc9fd 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -160,10 +160,6 @@ jobs: - name: Checkout uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - # - name: Login to Gitea Container Registry - # run: | - # docker login -u gitea-sonarqube-bot -p ${RINOA_REGISTRY_PASSWORD} git.trez.wtf - - name: Login to Docker Hub uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 with: @@ -184,10 +180,13 @@ jobs: username: ${{ secrets.BOT_GITEA_USER }} password: ${{ secrets.BOT_GITEA_PASSWORD }} - - name: Install Vault (only if not cached) - uses: cpanato/vault-installer@main - with: - version: ${{ env.HC_VAULT_VERSION }} + # - name: Generate .env file from Hashicorp Vault + # uses: Simporter/get-env-file-from-vault@v1.0.3 + # with: + # VAULT_ADDR: ${{ secrets.TREZ_VAULT_ADDR }} + # VAULT_USERNAME: ${{ secrets.VAULT_GITEA_USER }} + # VAULT_PASSWORD: "${{ secrets.VAULT_GITEA_PASSWORD }}" + # VAULT_SECRETS_PATH: rinoa-docker/env - name: Gotify Notification uses: eikendev/gotify-action@master @@ -197,11 +196,23 @@ jobs: notification_title: "GITEA: Docker Compose Dry Run @ Rinoa" notification_message: "Starting Docker Compose dry run..." + - name: Install Vault (only if not cached) + uses: cpanato/vault-installer@main + with: + version: ${{ env.HC_VAULT_VERSION }} + - name: Generate .env file for Docker Compose run: | vault kv get -format=json rinoa-docker/env | jq -r '.data.data' | jq -r 'keys[] as $k | "\($k)='\''\(.[$k])'\''"' > .env echo ${DOCKER_SVC_LIST} + - name: Pre-pull/build service images in parallel + uses: ./.gitea/actions/docker-img-pre-pull + with: + services: ${{ env.DOCKER_SVC_LIST }} + compose_profile: "rinoa-apps" + env_file: ".env" + - name: Docker Compose Dry Run uses: hoverkraft-tech/compose-action@b716db5b717cb9b81e391fe638e5aceaa2299e43 # v2.4.0 env: diff --git a/README.md b/README.md index 2814e66a..f6ef63b6 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ | planka-pg-db | postgres:16-alpine@sha256:66266770619a23ab310c7fa60043b6d1fa041038cb232ced59d2c509fecd297b | | | plant-it | msdeluise/plant-it-server:latest@sha256:23ddf8660087d6b9f5dbdca2ca09817b84db45cb2d9d6e2e0176e70f514629e7 | 🪴 Self-hosted, open source gardening companion app | | plant-it-valkey | docker.io/valkey/valkey:8-alpine | | -| plantuml-server | plantuml/plantuml-server:jetty@sha256:cd55fe13c6645253fbeb52665fc88a8d7e5c660e2bbff9b9ac045b0c136a1426 | | +| plantuml-server | plantuml/plantuml-server:jetty@sha256:cd55fe13c6645253fbeb52665fc88a8d7e5c660e2bbff9b9ac045b0c136a1426 | Textual diagram generator for UML & other visualizations. | | portainer | portainer/portainer-ce:alpine@sha256:c6908c1a2d036668799d51fb4d5ba5a5b3905509c7ac1b832c0fc0ef4c152f0e | Service delivery platform for containerized applications | | portchecker-web | ghcr.io/dsgnr/portcheckerio-web:latest@sha256:8bea203e8785541c0acac7860de9f70849b05806e0c6db1d83dfc1b8407a6077 | Service delivery platform for containerized applications | | portchecker-api | ghcr.io/dsgnr/portcheckerio-api:latest@sha256:7783796d791c3e10aedba9d5f7fc2b934bb0e7afa75bc89054b70b886ed39e5c | | diff --git a/docker-compose.yml b/docker-compose.yml index 2a4429de..53987489 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2416,7 +2416,7 @@ services: swag_url: invid.${MY_TLD} swag_server_custom_directive: | location /companion { - proxy_pass http://invidious-companion:8282 + proxy_pass http://invidious-companion:8282; } swag.uptime-kuma.enabled: true swag.uptime-kuma.monitor.parent: Rinoa @@ -4097,9 +4097,7 @@ services: restart: unless-stopped volumes: - ${DOCKER_VOLUME_CONFIG}/mongodb/config:/etc/mongodb - - ${DOCKER_VOLUME_CONFIG}/mongodb/db:/data/mongodb/dbs - - ${DOCKER_VOLUME_CONFIG}/mongodb/logs:/data/mongodb/logs - - ${DOCKER_VOLUME_CONFIG}/mongodb/tmp:/data/mongodb/tmp + - ${DOCKER_VOLUME_CONFIG}/mongodb/db:/data/db multi-scrobbler: container_name: multi-scrobbler environment: @@ -4950,9 +4948,24 @@ services: - plant-it-valkey-data:/data/valkey plantuml-server: container_name: plantuml-server - expose: - - 8080 - image: "plantuml/plantuml-server:jetty@sha256:cd55fe13c6645253fbeb52665fc88a8d7e5c660e2bbff9b9ac045b0c136a1426" + image: plantuml/plantuml-server:jetty@sha256:cd55fe13c6645253fbeb52665fc88a8d7e5c660e2bbff9b9ac045b0c136a1426 + labels: + homepage.group: Personal Tools + homepage.name: PlantUML + homepage.href: https://plantuml.${MY_TLD} + homepage.icon: plantuml.svg + homepage.description: Textual diagram generator for UML & other visualizations. + swag: enable + swag_port: 8080 + swag_url: plantuml.${MY_TLD} + swag.uptime-kuma.enabled: true + swag.uptime-kuma.monitor.parent: Rinoa + swag.uptime-kuma.monitor.url: https://plantuml.${MY_TLD} + swag.uptime-kuma.monitor.interval: 300 + swag.uptime-kuma.monitor.retryInterval: 60 + swag.uptime-kuma.monitor.maxretries: 5 + ports: + - 42262:8080 profiles: ["rinoa-apps"] restart: unless-stopped portainer: