From c8977e577d16ff415f04c0f771369b40c6ceb85f Mon Sep 17 00:00:00 2001 From: fithwum Date: Sun, 6 Jul 2025 08:02:28 -0700 Subject: [PATCH] update --- .gitea/workflows/base-build.yml | 163 +++++++++++++++++++++++++++----- Dockerfile | 18 ++-- latest/Dockerfile | 4 + 3 files changed, 150 insertions(+), 35 deletions(-) create mode 100644 latest/Dockerfile diff --git a/.gitea/workflows/base-build.yml b/.gitea/workflows/base-build.yml index 04ae72c..7accf8a 100644 --- a/.gitea/workflows/base-build.yml +++ b/.gitea/workflows/base-build.yml @@ -1,40 +1,155 @@ -name: Build and Push Multi-Arch Docker Images +name: Build Alpine RootFS and Docker Image (latest) on: push: - branches: + branches: - main + paths-ignore: + - 'latest/CHANGES.md' + - 'latest/build-info.json' + schedule: + - cron: '0 12 * * 0' # Sunday at noon UTC + +env: + ALPINE_VERSION: v3.20 + TAG_NAME: latest + IMAGE_NAME: gitea.fithwum.tech/fithwum/alpine-base + OUTPUT_DIR: latest + OUTPUT_TAR: latest/alpine-base.tar.gz jobs: - build: - runs-on: docker-build + build-rootfs: + runs-on: self-hosted steps: - - name: Checkout code + - name: Checkout repo uses: actions/checkout@v3 - - name: Set image tags and names - id: vars + - name: Run Alpine build scripts run: | - IMAGE_REGISTRY=gitea.fithwum.tech - IMAGE_ORG=fithwum - IMAGE_REPO=alpine-base - - # Set the tags with new naming convention - IMAGE_TAG_LATEST=latest + mkdir -p latest + bash base-image-script/alpine-base_pt1.sh - # Set full image names - IMAGE_LATEST=${IMAGE_REGISTRY}/${IMAGE_ORG}/${IMAGE_REPO}:${IMAGE_TAG_LATEST} + - name: Show tarball + run: ls -lh ${{ env.OUTPUT_TAR }} - echo "IMAGE_LATEST=${IMAGE_LATEST}" >> $GITHUB_ENV + push-tarball: + needs: build-rootfs + runs-on: self-hosted - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + steps: + - name: Clone upload repo + run: git clone https://gitea.fithwum.tech/fithwum/alpine-base.git upload-repo - - 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 Docker Images for alpine - - name: Build and Push latest Docker Image + - name: Copy and push tarball run: | - docker buildx build --platform linux/amd64 --push -t ${IMAGE_LATEST} ./latest \ No newline at end of file + cp ${{ env.OUTPUT_TAR }} upload-repo/${{ env.OUTPUT_TAR }} + 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 ${{ env.OUTPUT_TAR }} + git commit -m "Update latest rootfs on $(date -u +'%Y-%m-%dT%H:%M:%SZ')" + git push + echo "tarball_updated=true" >> $GITHUB_ENV + else + echo "tarball_updated=false" >> $GITHUB_ENV + fi + + push-docker: + needs: push-tarball + if: env.tarball_updated == 'true' + runs-on: self-hosted + + steps: + - name: Build and push Docker image + run: | + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login gitea.fithwum.tech -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + docker buildx build --platform linux/amd64 \ + -t "${{ env.IMAGE_NAME }}:${{ env.TAG_NAME }}" \ + --push . + + update-changelog: + needs: push-docker + runs-on: self-hosted + + steps: + - name: Clone repo + run: git clone https://gitea.fithwum.tech/fithwum/alpine-base.git upload-repo + + - name: Update CHANGES.md + run: | + cd upload-repo + changelog="${{ env.OUTPUT_DIR }}/CHANGES.md" + mkdir -p "$(dirname "$changelog")" + touch "$changelog" + + last_commit="" + if [ -f "${{ env.OUTPUT_DIR }}/build-info.json" ]; then + last_commit=$(jq -r '.commit' "${{ env.OUTPUT_DIR }}/build-info.json") + 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 + + git config user.name "${{ secrets.GIT_USERNAME }}" + git config user.email "${{ secrets.GIT_EMAIL }}" + + if git status --porcelain | grep .; then + git add "$changelog" + git commit -m "Update changelog for latest" + git push + fi + + update-build-info: + needs: update-changelog + runs-on: self-hosted + + steps: + - name: Generate build-info.json + run: | + cd upload-repo + mkdir -p "${{ env.OUTPUT_DIR }}" + + image="${{ env.IMAGE_NAME }}:${{ env.TAG_NAME }}" + size_bytes=$(docker image inspect "$image" --format='{{.Size}}') + digest=$(docker inspect --format='{{index .RepoDigests 0}}' "$image") + + jq -n \ + --arg commit "$(git rev-parse HEAD)" \ + --arg tag "$image" \ + --arg digest "$digest" \ + --arg size "$(numfmt --to=iec-i --suffix=B $size_bytes)" \ + --argjson size_bytes "$size_bytes" \ + --arg time "$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ + '{ + commit: $commit, + image_tag: $tag, + digest: $digest, + image_size: $size, + image_size_bytes: $size_bytes, + build_time: $time + }' > "${{ env.OUTPUT_DIR }}/build-info.json" + + - name: Commit build-info.json + run: | + git config user.name "${{ secrets.GIT_USERNAME }}" + git config user.email "${{ secrets.GIT_EMAIL }}" + git add "${{ env.OUTPUT_DIR }}/build-info.json" + + if git status --porcelain | grep .; then + git commit -m "Update build-info for latest" + git push + + git tag -d "build-latest" 2>/dev/null || true + git tag "build-latest" + git push origin "build-latest" --force + fi diff --git a/Dockerfile b/Dockerfile index 997e8d3..8bd62c4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,17 @@ FROM alpine:latest +LABEL maintainer="fithwum" ARG VERSION -ENV DEBIAN_FRONTEND=noninteractive WORKDIR /builder -RUN apt-get update && apt-get install -y \ - debootstrap wget curl bash ftp-upload dirmngr locales sudo git \ - && apt-get clean - -# Setup locale -RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ - locale-gen && \ - update-locale LANG=en_US.UTF-8 +# Install needed Alpine build tools +RUN apk update && apk add --no-cache \ + bash curl wget git sudo jq util-linux coreutils \ + ca-certificates ftp-upload \ + && update-ca-certificates COPY base-image-script/ base-image-script/ - RUN chmod +x base-image-script/*.sh -# Default command overridden by workflow +# Default command (overridden by CI) CMD ["bash"] diff --git a/latest/Dockerfile b/latest/Dockerfile new file mode 100644 index 0000000..d64fd58 --- /dev/null +++ b/latest/Dockerfile @@ -0,0 +1,4 @@ +FROM scratch +LABEL maintainer="fithwum" +ADD /alpine-base.tar.gz / +CMD ["/bin/bash"] \ No newline at end of file