From f2677e6c00d05f462ddd2e097da121561d258bf5 Mon Sep 17 00:00:00 2001 From: fithwum Date: Fri, 18 Jul 2025 05:51:01 -0700 Subject: [PATCH] test --- .gitea/workflows/pipeline.yml | 81 +++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/.gitea/workflows/pipeline.yml b/.gitea/workflows/pipeline.yml index e0d6ee8..deb6101 100644 --- a/.gitea/workflows/pipeline.yml +++ b/.gitea/workflows/pipeline.yml @@ -135,6 +135,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Login to Docker registry run: | @@ -157,6 +159,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Login to Docker registry run: | @@ -179,6 +183,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Login to Docker registry run: | @@ -208,16 +214,30 @@ jobs: with: fetch-depth: 0 - - name: Generate build-info.json only for updated variants + - name: Load digests from cache + id: base_digests + run: | + load_digest() { + file=".cache/$1-base.digest" + if [ -f "$file" ]; then + cat "$file" + else + echo "unknown" + fi + } + + echo "alpine=$(load_digest alpine)" >> $GITHUB_OUTPUT + echo "debian=$(load_digest debian)" >> $GITHUB_OUTPUT + echo "basic=$(load_digest basic)" >> $GITHUB_OUTPUT + + - name: Generate build-info.json for each variant env: IMAGE_REGISTRY: ${{ env.IMAGE_REGISTRY }} IMAGE_ORG: ${{ env.IMAGE_ORG }} IMAGE_REPO_TS: ${{ env.IMAGE_REPO_TS }} - ALPINE_DIGEST: ${{ needs.check-for-changes.outputs.alpine_digest }} - DEBIAN_DIGEST: ${{ needs.check-for-changes.outputs.debian_digest }} - BASIC_DIGEST: ${{ needs.check-for-changes.outputs.basic_digest }} - CACHE_DIR: ${{ env.CACHE_DIR }} run: | + variants=(alpine debian basic) + human_size() { local b=$1 local d='' @@ -231,39 +251,31 @@ jobs: printf "%s%s\n" "$b" "${S[$s]}" } - versions=() - if [[ "${{ needs.check-for-changes.outputs.should_build_alpine }}" == "true" ]]; then - versions+=("alpine") - fi - if [[ "${{ needs.check-for-changes.outputs.should_build_debian }}" == "true" ]]; then - versions+=("debian") - fi - if [[ "${{ needs.check-for-changes.outputs.should_build_basic }}" == "true" ]]; then - versions+=("basic") - fi + variants=() + [[ "${{ needs.build-alpine.outputs.built }}" == "true" ]] && variants+=("alpine") + [[ "${{ needs.build-debian.outputs.built }}" == "true" ]] && variants+=("debian") + [[ "${{ needs.build-basic.outputs.built }}" == "true" ]] && variants+=("basic") - for version in "${versions[@]}"; do - echo "[INFO] Generating build-info.json for $version" - mkdir -p "$version" - infofile="$version/build-info.json" - image="${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO_TS}:$version" + for variant in "${variants[@]}"; do + image_tag="${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO_TS}:${variant}" + digest=$(docker inspect --format='{{index .RepoDigests 0}}' "$image_tag" 2>/dev/null || echo "unknown") + size_bytes=$(docker image inspect "$image_tag" --format='{{.Size}}' 2>/dev/null || echo 0) + size_human=$(numfmt --to=iec --suffix=B $size_bytes 2>/dev/null || echo "${size_bytes}B") + commit_hash=$(git rev-parse HEAD) + build_time=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - echo "[DEBUG] Inspecting image: $image" - - docker pull "$image" || echo "[WARN] Failed to pull $image" - docker images --digests | grep "$version" || echo "[WARN] Image not listed locally" - digest=$(docker inspect --format='{{index .RepoDigests 0}}' "$(docker images --format '{{.Repository}}:{{.Tag}}' | grep "${IMAGE_REPO_TS}:$version" | head -n1)" 2>/dev/null || echo "unknown") - size_bytes=$(docker inspect --format='{{.Size}}' "$(docker images --format '{{.Repository}}:{{.Tag}}' | grep "${IMAGE_REPO_TS}:$version" | head -n1)" 2>/dev/null || echo "0") - size_human=$(human_size "$size_bytes") + base_digest="${{ steps.base_digests.outputs[$variant] }}" + mkdir -p "$variant" jq -n \ - --arg version "$version" \ - --arg commit "$(git rev-parse HEAD)" \ - --arg build_time "$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ - --arg image_tag "$image" \ + --arg version "$variant" \ + --arg commit "$commit_hash" \ + --arg build_time "$build_time" \ + --arg image_tag "$image_tag" \ --arg digest "$digest" \ --arg image_size "$size_human" \ --argjson image_size_bytes "$size_bytes" \ + --arg base_digest "$base_digest" \ '{ version: $version, commit: $commit, @@ -272,9 +284,14 @@ jobs: digest: $digest, image_size: $image_size, image_size_bytes: $image_size_bytes, - }' > "$infofile" + base_digest: $base_digest + }' > "$variant/build-info.json" done + - name: Show generated build-info.json + run: | + find . -name build-info.json -exec echo '--- {} ---' \; -exec cat {} \; + - name: Commit and push build-info if changed run: | git config user.name "${{ secrets.GIT_USERNAME }}"