From 2b0a21e565714bd03c4befe59c647df0d8ba4e5f Mon Sep 17 00:00:00 2001 From: fithwum Date: Sun, 6 Jul 2025 06:23:38 -0700 Subject: [PATCH] build check and test --- .gitea/workflows/base-build.yml | 147 +++++++++++++++++--------------- 1 file changed, 77 insertions(+), 70 deletions(-) diff --git a/.gitea/workflows/base-build.yml b/.gitea/workflows/base-build.yml index f48a86c..404ce8e 100644 --- a/.gitea/workflows/base-build.yml +++ b/.gitea/workflows/base-build.yml @@ -1,71 +1,23 @@ -name: Build and Push teamspeak-server Docker Images +name: Build and Push Teamspeak Images on Base Image Update on: push: branches: - main schedule: - - cron: '30 */6 * * *' + - cron: '30 */6 * * *' # Every 6 hours + +env: + IMAGE_REGISTRY: gitea.fithwum.tech + IMAGE_ORG: fithwum + IMAGE_REPO_TS: teamspeak-server + IMAGE_REPO_DEBIAN: debian-base + IMAGE_TAG_DEBIAN: bookworm + ALPINE_IMAGE: alpine:latest + CACHE_DIR: .cache jobs: - check-digests: - runs-on: docker-build - outputs: - alpine_changed: ${{ steps.set_output.outputs.alpine_changed }} - debian_changed: ${{ steps.set_output.outputs.debian_changed }} - - steps: - - name: Checkout repo - uses: actions/checkout@v3 - - - name: Get current base image digests - id: get_digests - run: | - mkdir -p .cache - - alpine_digest=$(docker pull alpine:latest > /dev/null && docker inspect --format='{{index .RepoDigests 0}}' alpine:latest) - debian_digest=$(docker pull gitea.fithwum.tech/fithwum/debian-base:bookworm > /dev/null && docker inspect --format='{{index .RepoDigests 0}}' gitea.fithwum.tech/fithwum/debian-base:bookworm) - - echo "alpine_digest=$alpine_digest" >> $GITHUB_ENV - echo "debian_digest=$debian_digest" >> $GITHUB_ENV - - echo "$alpine_digest" > .cache/alpine.digest.new - echo "$debian_digest" > .cache/debian.digest.new - - echo "::set-output name=alpine_digest::$alpine_digest" - echo "::set-output name=debian_digest::$debian_digest" - - - name: Compare with previous digests - id: set_output - run: | - alpine_changed=false - debian_changed=false - - if [ ! -f .cache/alpine.digest.old ] || [ "$(cat .cache/alpine.digest.old)" != "$(cat .cache/alpine.digest.new)" ]; then - alpine_changed=true - fi - - if [ ! -f .cache/debian.digest.old ] || [ "$(cat .cache/debian.digest.old)" != "$(cat .cache/debian.digest.new)" ]; then - debian_changed=true - fi - - echo "alpine_changed=$alpine_changed" >> $GITHUB_OUTPUT - echo "debian_changed=$debian_changed" >> $GITHUB_OUTPUT - - - name: Save new digests - run: | - mv .cache/alpine.digest.new .cache/alpine.digest.old - mv .cache/debian.digest.new .cache/debian.digest.old - - git config user.name "${{ secrets.GIT_USERNAME }}" - git config user.email "${{ secrets.GIT_EMAIL }}" - git add .cache/*.digest.old - git commit -m "Update digest cache" || echo "No changes to commit" - git push - - build: - needs: check-digests - if: needs.check-digests.outputs.alpine_changed == 'true' || needs.check-digests.outputs.debian_changed == 'true' + check-base-images-and-build: runs-on: docker-build steps: @@ -76,24 +28,79 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Log in to Gitea Registry - run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login gitea.fithwum.tech -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ env.IMAGE_REGISTRY }} -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - - name: Build and Push alpine image - if: needs.check-digests.outputs.alpine_changed == 'true' + - name: Get alpine:latest digest + id: alpine_digest run: | - docker buildx build --platform linux/amd64 --push -t gitea.fithwum.tech/fithwum/teamspeak-server:alpine ./alpine + docker pull docker.io/library/alpine:latest + DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' alpine:latest || echo "unknown") + echo "digest=$DIGEST" >> $GITHUB_OUTPUT - - name: Build and Push basic image - if: needs.check-digests.outputs.debian_changed == 'true' + - name: Get debian-base:bookworm digest + id: debian_digest run: | - docker buildx build --platform linux/amd64 --push -t gitea.fithwum.tech/fithwum/teamspeak-server:basic ./basic + IMAGE="${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.IMAGE_REPO_DEBIAN }}:${{ env.IMAGE_TAG_DEBIAN }}" + docker pull "$IMAGE" + DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "$IMAGE" || echo "unknown") + echo "digest=$DIGEST" >> $GITHUB_OUTPUT - - name: Build and Push debian image - if: needs.check-digests.outputs.debian_changed == 'true' + - name: Compare digests and update .cache + id: compare_digests run: | - docker buildx build --platform linux/amd64 --push -t gitea.fithwum.tech/fithwum/teamspeak-server:debian ./debian + mkdir -p $CACHE_DIR + check_digest() { + local name=$1 + local new_digest=$2 + local file="$CACHE_DIR/$name.digest" + echo "[INFO] Checking $name..." + if [[ -f $file ]]; then + old_digest=$(cat "$file") + else + old_digest="" + fi + + if [[ "$old_digest" == "$new_digest" ]]; then + echo "$name_changed=false" >> $GITHUB_OUTPUT + echo "[INFO] $name unchanged." + else + echo "$new_digest" > "$file" + echo "$name_changed=true" >> $GITHUB_OUTPUT + echo "[INFO] $name changed." + fi + } + + check_digest "alpine" "${{ steps.alpine_digest.outputs.digest }}" + check_digest "debian-base" "${{ steps.debian_digest.outputs.digest }}" + + git config user.name "${{ secrets.GIT_USERNAME }}" + git config user.email "${{ secrets.GIT_EMAIL }}" + git add $CACHE_DIR + git commit -m "Update base image digests" || echo "[INFO] No cache changes to commit" + git push || true + + - name: Build and Push Alpine Image + if: steps.compare_digests.outputs.alpine_changed == 'true' + run: | + IMAGE="${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.IMAGE_REPO_TS }}:alpine" + echo "[INFO] Building $IMAGE" + docker buildx build --platform linux/amd64 --push -t "$IMAGE" ./alpine + + - name: Build and Push Debian Image + if: steps.compare_digests.outputs.debian-base_changed == 'true' + run: | + IMAGE="${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.IMAGE_REPO_TS }}:debian" + echo "[INFO] Building $IMAGE" + docker buildx build --platform linux/amd64 --push -t "$IMAGE" ./debian + + - name: Build and Push Basic Image (depends on debian) + if: steps.compare_digests.outputs.debian-base_changed == 'true' + run: | + IMAGE="${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.IMAGE_REPO_TS }}:basic" + echo "[INFO] Building $IMAGE" + docker buildx build --platform linux/amd64 --push -t "$IMAGE" ./basic