From ee530e79e96f00acd406ac0bec2151a6e387f53e Mon Sep 17 00:00:00 2001 From: fithwum Date: Sun, 6 Jul 2025 07:04:20 -0700 Subject: [PATCH] test --- .gitea/workflows/pipeline.yml | 175 +++++++++++++++++++++++++++++++++- 1 file changed, 173 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/pipeline.yml b/.gitea/workflows/pipeline.yml index 02bf759..38bb229 100644 --- a/.gitea/workflows/pipeline.yml +++ b/.gitea/workflows/pipeline.yml @@ -4,15 +4,59 @@ on: push: branches: - master + paths-ignore: + - '**/CHANGES.md' + - '**/build-info.json' + schedule: + - cron: '30 */6 * * *' # Every 6 hours + +env: + IMAGE_REGISTRY: gitea.fithwum.tech + IMAGE_ORG: ${{ secrets.GIT_USERNAME }} + IMAGE_REPO_TS: foundry_vtt jobs: + check-base-images-and-build: + runs-on: docker-build + outputs: + base_changed: ${{ steps.compare.outputs.base_changed }} + + steps: + - name: Pull latest alpine base + run: docker pull alpine:latest + + - name: Get current digest + id: check + run: | + digest=$(docker inspect --format='{{index .RepoDigests 0}}' alpine:latest || echo "none") + echo "digest=$digest" >> $GITHUB_OUTPUT + + - name: Compare with last known digest + id: compare + run: | + last_digest_file=".alpine_digest" + last_digest="" + + if [ -f "$last_digest_file" ]; then + last_digest=$(cat "$last_digest_file") + fi + + if [ "$last_digest" != "${{ steps.check.outputs.digest }}" ]; then + echo "base_changed=true" >> $GITHUB_OUTPUT + echo "${{ steps.check.outputs.digest }}" > "$last_digest_file" + else + echo "base_changed=false" >> $GITHUB_OUTPUT + fi + build: + needs: check-base-images-and-build + if: needs.check-base-images-and-build.outputs.base_changed == 'true' runs-on: docker-build steps: - name: Checkout code uses: actions/checkout@v3 - + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -21,4 +65,131 @@ jobs: - name: Build Docker image run: | - docker buildx build --platform linux/amd64 --push -t gitea.fithwum.tech/${{ secrets.DOCKER_USERNAME }}/foundry_vtt:alpine ./alpine \ No newline at end of file + docker buildx build --platform linux/amd64 --push -t gitea.fithwum.tech/fithwum/foundry_vtt:alpine ./alpine + + generate-changelogs: + needs: build + runs-on: docker-build + + steps: + - name: Checkout source + uses: actions/checkout@v3 + + - name: Clone FoundryVTT repo + run: | + git clone https://${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_TOKEN }}@gitea.fithwum.tech/fithwum/foundryvtt.git upload-repo + + - name: Generate changelog for alpine + run: | + cd upload-repo + version="alpine" + 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 + + - 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 alpine/CHANGES.md + git commit -m "Update changelog on $(date -u +'%Y-%m-%dT%H:%M:%SZ')" --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 FoundryVTT repo + run: | + git clone https://${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_TOKEN }}@gitea.fithwum.tech/fithwum/foundryvtt.git upload-repo + + - name: Generate build-info.json for alpine + 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 + version="alpine" + mkdir -p "$version" + infofile="$version/build-info.json" + + image="gitea.fithwum.tech/fithwum/foundry_vtt:$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" + + - 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 alpine/build-info.json + git commit -m "Update build-info on $(date -u +'%Y-%m-%dT%H:%M:%SZ')" + git push + + # Tag the commit + TAG="build-alpine" + git tag -d "$TAG" 2>/dev/null || true + git tag "$TAG" + git push origin "$TAG" --force + else + echo "[INFO] No build-info changes to commit." + fi