From 0ed9859bd1a0c7008b17bfcf0ab0474b4c8ced70 Mon Sep 17 00:00:00 2001 From: fithwum Date: Thu, 10 Jul 2025 13:00:22 -0700 Subject: [PATCH] test --- .gitea/workflows/pipeline.yml | 50 ++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/.gitea/workflows/pipeline.yml b/.gitea/workflows/pipeline.yml index 6e6628c..483e524 100644 --- a/.gitea/workflows/pipeline.yml +++ b/.gitea/workflows/pipeline.yml @@ -16,40 +16,54 @@ env: IMAGE_REPO_TS: foundry_vtt jobs: - check-base-images-and-build: + check-for-changes: runs-on: doc-docker-build outputs: - base_changed: ${{ steps.compare.outputs.base_changed }} + should_build: ${{ steps.check.outputs.should_build }} steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Pull latest alpine base run: docker pull alpine:latest - - name: Get current digest - id: check + - name: Get current base image digest + id: get_digest run: | - digest=$(docker inspect --format='{{index .RepoDigests 0}}' alpine:latest || echo "none") + digest=$(docker inspect --format='{{index .RepoDigests 0}}' alpine:latest || echo "unknown") echo "digest=$digest" >> $GITHUB_OUTPUT - - name: Compare with last known digest - id: compare + - name: Determine if base changed or alpine files changed + id: check run: | - last_digest_file=".alpine_digest" + base_changed=false + code_changed=false + + new_digest="${{ steps.get_digest.outputs.digest }}" + infofile="alpine/build-info.json" last_digest="" - if [ -f "$last_digest_file" ]; then - last_digest=$(cat "$last_digest_file") + if [ -f "$infofile" ]; then + last_digest=$(jq -r '.base_digest // empty' "$infofile") fi - if [ "$last_digest" != "${{ steps.check.outputs.digest }}" ]; then - echo "base_changed=true" >> $GITHUB_OUTPUT - echo "${{ steps.check.outputs.digest }}" > "$last_digest_file" + if [ "$last_digest" != "$new_digest" ]; then + base_changed=true + fi + + if git diff --name-only HEAD~1 HEAD | grep '^alpine/' > /dev/null; then + code_changed=true + fi + + if [ "$base_changed" = true ] || [ "$code_changed" = true ]; then + echo "should_build=true" >> $GITHUB_OUTPUT else - echo "base_changed=false" >> $GITHUB_OUTPUT + echo "should_build=false" >> $GITHUB_OUTPUT fi build: - needs: check-base-images-and-build - if: needs.check-base-images-and-build.outputs.base_changed == 'true' + needs: check-for-changes + if: needs.check-for-changes.outputs.should_build == 'true' runs-on: doc-docker-build steps: - name: Checkout code @@ -147,6 +161,8 @@ jobs: digest=$(docker inspect --format='{{if .RepoDigests}}{{index .RepoDigests 0}}{{else}}unknown{{end}}' "$image" 2>/dev/null || echo "unknown") size_bytes=$(docker image inspect "$image" --format='{{.Size}}' 2>/dev/null || echo "0") + base_digest=$(docker inspect --format='{{index .RepoDigests 0}}' alpine:latest || echo "unknown") + size_bytes=${size_bytes//[^0-9]/} if [[ -z "$size_bytes" ]]; then size_bytes=0; fi @@ -158,6 +174,7 @@ jobs: --arg build_time "$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ --arg image_tag "$image" \ --arg digest "$digest" \ + --arg base_digest "$base_digest" \ --arg image_size "$size_human" \ --argjson image_size_bytes "$size_bytes" \ '{ @@ -166,6 +183,7 @@ jobs: build_time: $build_time, image_tag: $image_tag, digest: $digest, + base_digest: $base_digest image_size: $image_size, image_size_bytes: $image_size_bytes }' > "$infofile"