From a14a86fecf5d79a0589f91ab8a94ce812577a134 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Thu, 2 Oct 2025 07:40:12 -0400 Subject: [PATCH] Docker image pre-pull. --- .gitea/actions/docker-img-pre-pull/action.yml | 47 ++++++++++++------- .../workflows/pr-cloudflare-docker-deploy.yml | 34 +++++++------- 2 files changed, 46 insertions(+), 35 deletions(-) diff --git a/.gitea/actions/docker-img-pre-pull/action.yml b/.gitea/actions/docker-img-pre-pull/action.yml index 2bc2f6fc..ed7ac175 100644 --- a/.gitea/actions/docker-img-pre-pull/action.yml +++ b/.gitea/actions/docker-img-pre-pull/action.yml @@ -1,10 +1,9 @@ -name: "Pre-pull or Build Docker images" -description: "Prepares all services for docker compose dry-run by pulling images or building them" +name: "Pre-pull/build Docker images in parallel with timing" +description: "Prepares all services for docker compose dry-run by pulling or building them concurrently with logs" inputs: services: description: "Space-separated list of docker-compose services" required: true - runs: using: "composite" steps: @@ -12,26 +11,38 @@ runs: shell: bash run: | if ! command -v yq >/dev/null 2>&1; then + echo "Installing yq..." sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v4.44.1/yq_linux_amd64 sudo chmod +x /usr/local/bin/yq fi - - name: Pre-pull/build images for services + - name: Pre-pull/build images in parallel shell: bash run: | - echo "Services to resolve: ${{ inputs.services }}" - for svc in ${{ inputs.services }}; do - echo "Resolving image for service: $svc" - image=$(docker compose config | yq -r ".services[\"$svc\"].image // empty") - build_dir=$(docker compose config | yq -r ".services[\"$svc\"].build.context // empty") + SERVICES="${{ inputs.services }}" + echo "Services to process: $SERVICES" + for svc in $SERVICES; do + ( + echo "🔹 Starting prep for service: $svc" + start_time=$(date +%s) - if [ -n "$image" ]; then - echo "Pulling image: $image" - docker pull "$image" - elif [ -n "$build_dir" ]; then - echo "Building image for service: $svc from context: $build_dir" - docker compose build "$svc" - else - echo "⚠️ No image or build context for $svc — skipping" - fi + image=$(docker compose config | yq -r ".services[\"$svc\"].image // empty") + build_dir=$(docker compose config | yq -r ".services[\"$svc\"].build.context // empty") + + if [ -n "$image" ]; then + echo "➡️ Pulling image: $image" + docker pull "$image" + elif [ -n "$build_dir" ]; then + echo "⚙️ Building service: $svc from context: $build_dir" + docker compose build "$svc" + else + echo "⚠️ No image or build context found 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 70ec2a07..0fd378a0 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -180,18 +180,18 @@ 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: Get env file - uses: Simporter/get-env-file-from-vault@v1.0.3 + - name: Install Vault (only if not cached) + uses: cpanato/vault-installer@main 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 + version: ${{ env.HC_VAULT_VERSION }} + + # - name: Get env file + # 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 @@ -201,13 +201,13 @@ jobs: notification_title: "GITEA: Docker Compose Dry Run @ Rinoa" notification_message: "Starting Docker Compose dry run..." - # - 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: 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 - uses: ./.gitea/actions/prepull-images + - name: Pre-pull/build service images in parallel + uses: ./.github/actions/docker-img-pre-pull with: services: ${{ env.DOCKER_SVC_LIST }}