From 34e4d76ca71f856e5d64ce86f1d7a656d0200f59 Mon Sep 17 00:00:00 2001 From: test Date: Tue, 25 Aug 2026 12:11:45 +0000 Subject: [PATCH] Upload each package to Forgejo immediately after build --- .forgejo/workflows/build-rpms.yml | 25 ++++--------------------- ci/build-tiered.sh | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/.forgejo/workflows/build-rpms.yml b/.forgejo/workflows/build-rpms.yml index d3c9acf..aca90b8 100644 --- a/.forgejo/workflows/build-rpms.yml +++ b/.forgejo/workflows/build-rpms.yml @@ -91,31 +91,14 @@ jobs: - name: Build packages tier by tier if: steps.plan.outputs.total != '0' + env: + FORGEJO_URL: ${{ github.server_url }} + FORGEJO_OWNER: ${{ github.repository_owner }} + FORGEJO_TOKEN: ${{ secrets.PACKAGE_TOKEN }} run: | echo "Building ${{ steps.plan.outputs.total }} packages..." bash ci/build-tiered.sh /tmp/build-plan.json - - name: Upload RPMs to Forgejo Package Registry - if: always() && steps.plan.outputs.total != '0' - run: | - FORGEJO_URL="${{ github.server_url }}" - OWNER="${{ github.repository_owner }}" - TOKEN="${{ secrets.PACKAGE_TOKEN }}" - - if [ -z "$TOKEN" ]; then - echo "PACKAGE_TOKEN secret not set, skipping upload" - exit 0 - fi - - find ~/mock-results -name "*.rpm" ! -name "*.src.rpm" | while read rpm; do - FILENAME=$(basename "$rpm") - echo "Uploading $FILENAME ..." - curl --fail-with-body \ - --user "${OWNER}:${TOKEN}" \ - --upload-file "$rpm" \ - "${FORGEJO_URL}/api/packages/${OWNER}/rpm/upload" || echo " upload failed for $FILENAME" - done - - name: Clean up if: always() run: | diff --git a/ci/build-tiered.sh b/ci/build-tiered.sh index 9e3ae05..e661f6a 100755 --- a/ci/build-tiered.sh +++ b/ci/build-tiered.sh @@ -13,6 +13,33 @@ SOURCES_DIR="${HOME}/rpmbuild/SOURCES" RESULTS_DIR="${HOME}/mock-results" MOCK_ROOT="${MOCK_ROOT:-sonicde}" +# Forgejo upload config (optional - if not set, upload is skipped) +FORGEJO_URL="${FORGEJO_URL:-}" +FORGEJO_OWNER="${FORGEJO_OWNER:-}" +FORGEJO_TOKEN="${FORGEJO_TOKEN:-}" + +upload_rpms() { + local pkg=$1 + local result_dir=$2 + + if [ -z "$FORGEJO_URL" ] || [ -z "$FORGEJO_OWNER" ] || [ -z "$FORGEJO_TOKEN" ]; then + return 0 + fi + + for rpm in $(find "$result_dir" -name '*.rpm' ! -name '*.src.rpm'); do + local filename=$(basename "$rpm") + echo " Uploading $filename to Forgejo..." + if curl --fail-with-body --silent --show-error \ + --user "${FORGEJO_OWNER}:${FORGEJO_TOKEN}" \ + --upload-file "$rpm" \ + "${FORGEJO_URL}/api/packages/${FORGEJO_OWNER}/rpm/upload"; then + echo " Uploaded: $filename" + else + echo " WARNING: upload failed for $filename" + fi + done +} + mkdir -p "$RESULTS_DIR" "$SOURCES_DIR" TOTAL=$(python3 -c "import json; print(json.load(open('$PLAN_FILE'))['total'])") @@ -77,6 +104,10 @@ for tier_idx in $(seq 0 $((NUM_TIERS - 1))); do mock --root "$MOCK_ROOT" --no-clean --install \ $(find "$pkg_result_dir" -name '*.rpm' ! -name '*.src.rpm') \ 2>&1 | tail -3 || echo " WARNING: could not install ${pkg} into chroot" + + # Upload RPMs to Forgejo immediately so they're available even + # if a later package fails the build. + upload_rpms "$pkg" "$pkg_result_dir" else echo " FAILED: ${pkg}" FAILED+=("$pkg")