diff --git a/.gitea/workflows/base-build.yml b/.gitea/workflows/base-build.yml index 2984d8d..9859b82 100644 --- a/.gitea/workflows/base-build.yml +++ b/.gitea/workflows/base-build.yml @@ -3,9 +3,12 @@ name: Build and Push Minecraft Docker Images on Debian-base update on: push: branches: - - master + - main + paths-ignore: + - '**/CHANGES.md' + - '**/build-info.json' schedule: - - cron: '30 */6 * * *' # Every 6 hours at :30 UTC + - cron: '30 */6 * * *' # Every 6 hours env: IMAGE_REGISTRY: gitea.fithwum.tech @@ -89,87 +92,133 @@ jobs: docker buildx build --platform linux/amd64 --push -t "$IMAGE" "./$TAG" done + generate-changelogs: + # needs: build-minecraft-images + runs-on: docker-build + steps: + - name: Checkout source + uses: actions/checkout@v3 + - name: Clone Minecraft repo + run: | + git clone https://${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_TOKEN }}@gitea.fithwum.tech/fithwum/minecraft.git upload-repo + - name: Generate per-version changelogs + run: | + cd upload-repo + for version in vanilla testing fabric; do + echo "[INFO] Updating changelog for $version" + changelog="$version/CHANGES.md" + mkdir -p "$(dirname "$changelog")" + touch "$changelog" + infofile="$version/build-info.json" + last_commit="" + if [ -f "$infofile" ]; then + last_commit=$(jq -r '.commit' "$infofile") + fi + echo -e "\n## $(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> "$changelog" + if [ -n "$last_commit" ]; then + git log "${last_commit}..HEAD" --pretty=format:"- %s (%an)" | head -n 10 >> "$changelog" + else + git log -n 10 --pretty=format:"- %s (%an)" >> "$changelog" + fi + done + - name: Commit and push changelogs if changed + run: | + cd upload-repo + git config user.name "${{ secrets.GIT_USERNAME }}" + git config user.email "${{ secrets.GIT_EMAIL }}" + if git status --porcelain | grep .; then + git add */CHANGES.md + git commit -m "Update changelogs on $(date -u +'%Y-%m-%dT%H:%M:%SZ') [skip ci]" --no-verify + git push + else + echo "[INFO] No changelog changes to commit." + fi + generate-build-info: + needs: generate-changelogs + runs-on: docker-build + steps: + - name: Checkout source + uses: actions/checkout@v3 + - name: Clone Minecraft repo + run: | + git clone https://${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_TOKEN }}@gitea.fithwum.tech/fithwum/minecraft.git upload-repo + - name: Generate build-info.json per version + run: | + human_size() { + local b=$1 + local d='' + local s=0 + local S=(B KB MB GB TB) + while ((b >= 1024 && s < ${#S[@]}-1)); do + d=$((b % 1024)) + b=$((b / 1024)) + s=$((s + 1)) + done + printf "%s%s\n" "$b" "${S[$s]}" + } + cd upload-repo + for version in vanilla testing fabric; do + echo "[INFO] Generating build-info.json for $version" + mkdir -p "$version" + infofile="$version/build-info.json" + image="${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.IMAGE_REPO_MINECRAFT }}:$version" + 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") + size_bytes=${size_bytes//[^0-9]/} + if [[ -z "$size_bytes" ]]; then size_bytes=0; fi + size_human=$(human_size "$size_bytes") + 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 digest "$digest" \ + --arg image_size "$size_human" \ + --argjson image_size_bytes "$size_bytes" \ + '{ + version: $version, + commit: $commit, + build_time: $build_time, + image_tag: $image_tag, + digest: $digest, + image_size: $image_size, + image_size_bytes: $image_size_bytes + }' > "$infofile" + done + - name: Commit and push build-info if changed + run: | + cd upload-repo + git config user.name "${{ secrets.GIT_USERNAME }}" + git config user.email "${{ secrets.GIT_EMAIL }}" + if git status --porcelain | grep .; then + git add */build-info.json + git commit -m "Update build-info on $(date -u +'%Y-%m-%dT%H:%M:%SZ') [skip ci]" + git push - - - - - -# name: Build and Push Minecraft Docker Images - -# on: -# push: -# branches: -# - master - -# 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=minecraft - -# # Set the tag based on the folder name (vanilla, TESTING, fabric) -# IMAGE_TAG_VANILLA=vanilla -# IMAGE_TAG_TESTING=testing -# IMAGE_TAG_FABRIC=fabric - -# echo "IMAGE_TAG_VANILLA=${IMAGE_TAG_VANILLA}" >> $GITHUB_ENV -# echo "IMAGE_TAG_TESTING=${IMAGE_TAG_TESTING}" >> $GITHUB_ENV -# echo "IMAGE_TAG_FABRIC=${IMAGE_TAG_FABRIC}" >> $GITHUB_ENV - -# # Set image names for each subfolder Dockerfile -# IMAGE_VANILLA=${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO}:${IMAGE_TAG_VANILLA} -# IMAGE_TESTING=${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO}:${IMAGE_TAG_TESTING} -# IMAGE_FABRIC=${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO}:${IMAGE_TAG_FABRIC} - -# echo "IMAGE_VANILLA=${IMAGE_VANILLA}" >> $GITHUB_ENV -# echo "IMAGE_TESTING=${IMAGE_TESTING}" >> $GITHUB_ENV -# echo "IMAGE_FABRIC=${IMAGE_FABRIC}" >> $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 Vanilla Docker Image -# - name: Build and Push Vanilla Docker Image -# run: | -# docker buildx build --platform linux/amd64 --push -t ${{ env.IMAGE_VANILLA }} ./vanilla - -# # Build and Push Testing Docker Image -# - name: Build and Push Testing Docker Image -# run: | -# docker buildx build --platform linux/amd64 --push -t ${{ env.IMAGE_TESTING }} ./testing - -# # Build and Push Fabric Docker Image -# - name: Build and Push Fabric Docker Image -# run: | -# docker buildx build --platform linux/amd64 --push -t ${{ env.IMAGE_FABRIC }} ./fabric + for version in vanilla testing fabric; do + TAG="build-$version" + git tag -d "$TAG" 2>/dev/null || true + git tag "$TAG" + git push origin "$TAG" --force + done + else + echo "[INFO] No build-info changes to commit." + fi