diff --git a/.gitea/workflows/pipeline.yml b/.gitea/workflows/pipeline.yml index b3d7585..8a43b54 100644 --- a/.gitea/workflows/pipeline.yml +++ b/.gitea/workflows/pipeline.yml @@ -55,42 +55,42 @@ jobs: echo "debian_digest=$debian_digest" >> $GITHUB_OUTPUT echo "basic_digest=$basic_digest" >> $GITHUB_OUTPUT - - name: Commit and push updated base digests if changed - run: | - git config user.name "${{ secrets.GIT_USERNAME }}" - git config user.email "${{ secrets.GIT_EMAIL }}" + # - name: Commit and push updated base digests if changed + # run: | + # git config user.name "${{ secrets.GIT_USERNAME }}" + # git config user.email "${{ secrets.GIT_EMAIL }}" - changed=false + # changed=false - check_and_update() { - name="$1" - digest="$2" - file=".cache/${name}-base.digest" - if [[ ! -f "$file" ]] || [[ "$(cat "$file")" != "$digest" ]]; then - echo "$digest" > "$file" - echo "[INFO] $name digest changed" - changed=true - else - echo "[INFO] $name digest unchanged" - fi - } + # check_and_update() { + # name="$1" + # digest="$2" + # file=".cache/${name}-base.digest" + # if [[ ! -f "$file" ]] || [[ "$(cat "$file")" != "$digest" ]]; then + # echo "$digest" > "$file" + # echo "[INFO] $name digest changed" + # changed=true + # else + # echo "[INFO] $name digest unchanged" + # fi + # } - check_and_update alpine "${{ steps.get_digest.outputs.alpine_digest }}" - check_and_update debian "${{ steps.get_digest.outputs.debian_digest }}" - check_and_update basic "${{ steps.get_digest.outputs.basic_digest }}" + # check_and_update alpine "${{ steps.get_digest.outputs.alpine_digest }}" + # check_and_update debian "${{ steps.get_digest.outputs.debian_digest }}" + # check_and_update basic "${{ steps.get_digest.outputs.basic_digest }}" - if [ "$changed" = true ]; then - git stash push --include-untracked -m "temp-stash-before-rebase" - git fetch origin main - git rebase origin/main - git stash pop || true + # if [ "$changed" = true ]; then + # git stash push --include-untracked -m "temp-stash-before-rebase" + # git fetch origin main + # git rebase origin/main + # git stash pop || true - git add .cache/*-base.digest - git commit -m "Update base image digests ($(date -u +'%Y-%m-%dT%H:%M:%SZ'))" - git push origin HEAD:main - else - echo "[INFO] No base digest changes to commit." - fi + # git add .cache/*-base.digest + # git commit -m "Update base image digests ($(date -u +'%Y-%m-%dT%H:%M:%SZ'))" + # git push origin HEAD:main + # else + # echo "[INFO] No base digest changes to commit." + # fi - name: Compare digests and detect changes id: check @@ -99,39 +99,67 @@ jobs: variant=$1 new_digest=$2 digest_file=".cache/${variant}-base.digest" - last_digest="" - base_changed=false - code_changed=false + last_digest="" if [ -f "$digest_file" ]; then last_digest=$(cat "$digest_file") fi if [ "$last_digest" != "$new_digest" ]; then - base_changed=true - echo "[INFO] $variant base image changed: $last_digest -> $new_digest" + echo "[INFO] $variant base image changed" + echo "should_build_${variant}=true" >> $GITHUB_OUTPUT + else + echo "[INFO] $variant base image unchanged" + echo "should_build_${variant}=false" >> $GITHUB_OUTPUT fi - # Check if code in the variant directory changed - git fetch origin main - code_diff=$(git diff --name-only origin/main...HEAD | grep "^$variant/" || true) - if [[ -n "$code_diff" ]]; then - code_changed=true - echo "[INFO] $variant code changed: $code_diff" - fi - - should_build=false - if [ "$base_changed" = true ] || [ "$code_changed" = true ]; then - should_build=true - fi - - echo "should_build_${variant}=$should_build" >> $GITHUB_OUTPUT echo "${variant}_digest=$new_digest" >> $GITHUB_OUTPUT } - check_variant "alpine" "${{ steps.get_digest.outputs.alpine_digest }}" - check_variant "debian" "${{ steps.get_digest.outputs.debian_digest }}" - check_variant "basic" "${{ steps.get_digest.outputs.basic_digest }}" + check_variant alpine "${{ steps.get_digest.outputs.alpine_digest }}" + check_variant debian "${{ steps.get_digest.outputs.debian_digest }}" + check_variant basic "${{ steps.get_digest.outputs.basic_digest }}" + + # - name: Compare digests and detect changes + # id: check + # run: | + # check_variant() { + # variant=$1 + # new_digest=$2 + # digest_file=".cache/${variant}-base.digest" + # last_digest="" + # base_changed=false + # code_changed=false + + # if [ -f "$digest_file" ]; then + # last_digest=$(cat "$digest_file") + # fi + + # if [ "$last_digest" != "$new_digest" ]; then + # base_changed=true + # echo "[INFO] $variant base image changed: $last_digest -> $new_digest" + # fi + + # # Check if code in the variant directory changed + # git fetch origin main + # code_diff=$(git diff --name-only origin/main...HEAD | grep "^$variant/" || true) + # if [[ -n "$code_diff" ]]; then + # code_changed=true + # echo "[INFO] $variant code changed: $code_diff" + # fi + + # should_build=false + # if [ "$base_changed" = true ] || [ "$code_changed" = true ]; then + # should_build=true + # fi + + # echo "should_build_${variant}=$should_build" >> $GITHUB_OUTPUT + # echo "${variant}_digest=$new_digest" >> $GITHUB_OUTPUT + # } + + # check_variant "alpine" "${{ steps.get_digest.outputs.alpine_digest }}" + # check_variant "debian" "${{ steps.get_digest.outputs.debian_digest }}" + # check_variant "basic" "${{ steps.get_digest.outputs.basic_digest }}" build-alpine: needs: check-for-changes @@ -205,6 +233,45 @@ jobs: echo "[INFO] Building $IMAGE" docker buildx build --platform linux/amd64 --push -t "$IMAGE" --metadata-file "$METAFILE2" ./basic + update-base-digest-cache: + needs: + - build-alpine + - build-debian + - build-basic + runs-on: vm-docker-build2 + if: | + needs.build-alpine.outputs.built == 'true' || + needs.build-debian.outputs.built == 'true' || + needs.build-basic.outputs.built == 'true' + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Update base digest cache + run: | + git config user.name "${{ secrets.GIT_USERNAME }}" + git config user.email "${{ secrets.GIT_EMAIL }}" + + mkdir -p .cache + + [[ "${{ needs.build-alpine.outputs.built }}" == "true" ]] && \ + echo "${{ needs.check-for-changes.outputs.alpine_digest }}" > .cache/alpine-base.digest + + [[ "${{ needs.build-debian.outputs.built }}" == "true" ]] && \ + echo "${{ needs.check-for-changes.outputs.debian_digest }}" > .cache/debian-base.digest + + [[ "${{ needs.build-basic.outputs.built }}" == "true" ]] && \ + echo "${{ needs.check-for-changes.outputs.basic_digest }}" > .cache/basic-base.digest + + if git status --porcelain | grep .; then + git add .cache/*-base.digest + git commit -m "Update base image digests ($(date -u +'%Y-%m-%dT%H:%M:%SZ'))" + git push + else + echo "[INFO] No digest updates to commit" + fi + generate-build-info: needs: - build-alpine