From 743849db551c7e6ea0cbe542c36ad2f0f4469275 Mon Sep 17 00:00:00 2001 From: fithwum Date: Thu, 10 Jul 2025 07:22:17 -0700 Subject: [PATCH] test --- .gitea/workflows/base-build.yml | 109 ++++++++++++++++++++------------ 1 file changed, 68 insertions(+), 41 deletions(-) diff --git a/.gitea/workflows/base-build.yml b/.gitea/workflows/base-build.yml index e9ae801..bdcbb71 100644 --- a/.gitea/workflows/base-build.yml +++ b/.gitea/workflows/base-build.yml @@ -23,15 +23,10 @@ env: OUTPUT_DIR: ./output jobs: - build-rootfs-per-version: + build-and-push-rootfs-archives: runs-on: vm-docker-build2 - strategy: - matrix: - version: ${{ fromJson(env.VERSIONS_JSON) }} outputs: - archive_changed: ${{ steps.check_changed.outputs.archive_changed }} - env: - VERSION: ${{ matrix.version }} + archives_changed: ${{ steps.commit_archives.outputs.archives_changed }} steps: - name: Checkout source uses: actions/checkout@v3 @@ -39,57 +34,89 @@ jobs: - name: Create output directory run: mkdir -p ./output - - name: Build Debian ${{ env.VERSION }} rootfs + - name: Build all Debian rootfs versions into volumes and extract run: | - echo "[INFO] Building $VERSION..." - volume_name="build_output_$VERSION" - docker volume create "$volume_name" + versions=($VERSIONS) + for version in "${versions[@]}"; do + echo "[INFO] Building $version..." + volume_name="build_output_$version" + docker volume create "$volume_name" - docker build --build-arg VERSION=$VERSION -t fithwum/debian-$VERSION-base . + docker build --build-arg VERSION=$version -t fithwum/debian-$version-base . - docker run --rm --privileged \ - -v "$volume_name:/output" \ - -e VERSION="$VERSION" \ - fithwum/debian-$VERSION-base \ - bash -c "/scripts/bootstrap-rootfs.sh \"$VERSION\"" + docker run --rm --privileged \ + -v "$volume_name:/output" \ + -e VERSION="$version" \ + fithwum/debian-$version-base \ + bash -c "/scripts/bootstrap-rootfs.sh \"$version\"" - container_id=$(docker create -v "$volume_name:/output" debian) - mkdir -p ./output/$VERSION - docker cp "$container_id:/output/$VERSION/debian-$VERSION.tar.bz2" ./output/$VERSION/ - docker rm "$container_id" + # Extract the output file from the volume + container_id=$(docker create -v "$volume_name:/output" debian) + mkdir -p ./output/$version + docker cp "$container_id:/output/$version/debian-$version.tar.bz2" ./output/$version/ + docker rm "$container_id" + done + + - name: Validate that archives exist for each version + run: | + IFS=' ' read -r -a versions <<< "$VERSIONS" + for version in "${versions[@]}"; do + path="./output/$version/debian-$version.tar.bz2" + if [[ ! -f "$path" ]]; then + echo "[ERROR] Missing archive: $path" + exit 1 + else + echo "[OK] Found: $path" + fi + done - name: Clone upload repo run: | GIT_CREDENTIAL="${{ secrets.GIT_TOKEN || secrets.GIT_PASSWORD }}" git clone --depth=1 "https://${{ env.GIT_USERNAME }}:${GIT_CREDENTIAL}@gitea.fithwum.tech/fithwum/debian-base.git" upload-repo - - name: Check if archive changed - id: check_changed + - name: Clean old archives in upload-repo + run: rm -rfv upload-repo/*/*.tar.bz2 + + - name: Copy new archives to upload-repo run: | - mkdir -p upload-repo/${VERSION} - new="./output/${VERSION}/debian-${VERSION}.tar.bz2" - old="upload-repo/${VERSION}/debian-${VERSION}.tar.bz2" - cp "$new" "$old" - - checksum=$(sha256sum "$new" | awk '{print $1}') - echo "$checksum ${VERSION}/debian-${VERSION}.tar.bz2" >> upload-repo/sha256sums.txt + for filepath in ./output/*/debian-*.tar.bz2; do + version_dir=$(basename "$(dirname "$filepath")") + mkdir -p "upload-repo/$version_dir" + cp "$filepath" "upload-repo/$version_dir/" + done + - name: Calculate and store sha256sums in upload-repo + run: | cd upload-repo - git config user.name "${{ env.GIT_USERNAME }}" - git config user.email "${{ env.GIT_EMAIL }}" - git add ${VERSION}/debian-${VERSION}.tar.bz2 sha256sums.txt || true + rm -f sha256sums.txt + for tarball in */debian-*.tar.bz2; do + echo "[INFO] Processing: $tarball" + checksum=$(sha256sum "$tarball" | awk '{print $1}') + echo "$checksum $tarball" >> sha256sums.txt + done + echo "[INFO] SHA256 contents:" + cat sha256sums.txt - if git diff --cached --quiet; then - echo "[INFO] No changes to commit." - echo "archive_changed=false" >> $GITHUB_OUTPUT - else - git commit -m "Update rootfs for $VERSION" + - name: Commit and push files if changed + id: commit_archives + run: | + cd upload-repo + git config --global user.name "${{ env.GIT_USERNAME }}" + git config --global user.email "${{ env.GIT_EMAIL }}" + + if git status --porcelain | grep .; then + git add **/*.tar.bz2 sha256sums.txt || true + git commit -m "Update base images and checksum on $(date -u +'%Y-%m-%dT%H:%M:%SZ') [skip ci]" git push - echo "archive_changed=true" >> $GITHUB_OUTPUT + echo "archives_changed=true" >> $GITHUB_OUTPUT + else + echo "[INFO] No changes to commit." + echo "archives_changed=false" >> $GITHUB_OUTPUT fi build-and-push-docker-images: - needs: build-rootfs-per-version + needs: build-and-push-rootfs-archives if: always() runs-on: doc-docker-build steps: @@ -162,7 +189,7 @@ jobs: done generate-changelogs: - needs: build-rootfs-per-version + needs: build-and-push-rootfs-archives runs-on: doc-docker-build steps: - name: Checkout source