name: Build and Push Teamspeak Images on Base Image Update on: push: branches: - main schedule: - 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-base-images-and-build: runs-on: docker-build steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Gitea Registry run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ env.IMAGE_REGISTRY }} -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - name: Get alpine:latest digest id: alpine_digest run: | docker pull docker.io/library/alpine:latest DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' alpine:latest || echo "unknown") echo "digest=$DIGEST" >> $GITHUB_OUTPUT - name: Get debian-base:bookworm digest id: debian_digest run: | 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: Compare digests and update .cache id: compare_digests run: | 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 # name: Build and Push teamspeak-server Docker Images # on: # push: # branches: # - main # jobs: # build: # runs-on: docker-build # steps: # - name: Checkout code # uses: actions/checkout@v3 # - name: Set image tags and names # id: vars # run: | # IMAGE_REGISTRY=gitea.fithwum.tech # IMAGE_ORG=fithwum # IMAGE_REPO=teamspeak-server # # Set the tag based on the folder name (alpine, basic, debian) # IMAGE_TAG_ALPINE=alpine # IMAGE_TAG_BASIC=basic # IMAGE_TAG_DEBIAN=debian # echo "IMAGE_TAG_ALPINE=${IMAGE_TAG_ALPINE}" >> $GITHUB_ENV # echo "IMAGE_TAG_BASIC=${IMAGE_TAG_BASIC}" >> $GITHUB_ENV # echo "IMAGE_TAG_DEBIAN=${IMAGE_TAG_DEBIAN}" >> $GITHUB_ENV # # Set image names for each subfolder Dockerfile # IMAGE_ALPINE=${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO}:${IMAGE_TAG_ALPINE} # IMAGE_BASIC=${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO}:${IMAGE_TAG_BASIC} # IMAGE_DEBIAN=${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO}:${IMAGE_TAG_DEBIAN} # echo "IMAGE_ALPINE=${IMAGE_ALPINE}" >> $GITHUB_ENV # echo "IMAGE_BASIC=${IMAGE_BASIC}" >> $GITHUB_ENV # echo "IMAGE_DEBIAN=${IMAGE_DEBIAN}" >> $GITHUB_ENV # - name: Set up Docker Buildx # 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 # # Build and Push alpine Docker Image # - name: Build and Push alpine Docker Image # run: | # docker buildx build --platform linux/amd64 --push -t ${{ env.IMAGE_ALPINE }} ./alpine # # Build and Push basic Docker Image # - name: Build and Push basic Docker Image # run: | # docker buildx build --platform linux/amd64 --push -t ${{ env.IMAGE_BASIC }} ./basic # # Build and Push debian Docker Image # - name: Build and Push debian Docker Image # run: | # docker buildx build --platform linux/amd64 --push -t ${{ env.IMAGE_DEBIAN }} ./debian