From d085cf0235912e2329bf05919c2643db0689c84b Mon Sep 17 00:00:00 2001 From: Lukas Johannes Breitwieser Date: Sat, 7 Nov 2026 10:42:48 +0100 Subject: [PATCH 1/3] Add debug info about tarfile size in archive_and_upload --- .github/workflows/root-ci-config/build_root.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/root-ci-config/build_root.py b/.github/workflows/root-ci-config/build_root.py index ccbe82d30e55a..97822ac21b738 100755 --- a/.github/workflows/root-ci-config/build_root.py +++ b/.github/workflows/root-ci-config/build_root.py @@ -42,6 +42,14 @@ COMPRESSIONLEVEL = 6 if not WINDOWS else 1 +def sizeof_fmt(num, suffix="B"): + for unit in ("", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"): + if abs(num) < 1024.0: + return f"{num:3.1f} {unit}{suffix}" + num /= 1024.0 + return f"{num:.1f} Yi{suffix}" + + def main(): # openstack.enable_logging(debug=True) @@ -350,6 +358,9 @@ def archive_and_upload(archive_name, prefix): targz.add("src") targz.add("build") + archive_size = os.path.getsize(f"{WORKDIR}/{new_archive}") + print(f"Archive {new_archive} size: {archive_size} bytes ({sizeof_fmt(archive_size)})") + try: import openstack CONNECTION = openstack.connect(cloud='envvars') From f3a24f97136210224b1790e241333a03c199d5e1 Mon Sep 17 00:00:00 2001 From: Lukas Johannes Breitwieser Date: Sat, 7 Nov 2026 10:45:43 +0100 Subject: [PATCH 2/3] Add debug info to upload_file: file size, segment size, segment count --- .../workflows/root-ci-config/build_utils.py | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/root-ci-config/build_utils.py b/.github/workflows/root-ci-config/build_utils.py index 9a6f3606083ac..e8746f7b39044 100755 --- a/.github/workflows/root-ci-config/build_utils.py +++ b/.github/workflows/root-ci-config/build_utils.py @@ -241,20 +241,31 @@ def upload_file(connection, container: str, dest_object: str, src_file: str) -> if not os.path.exists(src_file): raise Exception(f"No such file: {src_file}") + gigabyte = 1024**3 + week_in_seconds = 60*60*24*7 + segment_size = 5 * gigabyte + + file_size = os.path.getsize(src_file) + num_segments = max(1, (file_size + segment_size - 1) // segment_size) + print_info( + f"Upload config for {dest_object}: " + f"file_size={file_size} bytes, " + f"segment_size={segment_size} bytes, " + f"expected_segments={num_segments}, " + f"delete_after={2*week_in_seconds}s" + ) + def create_object_local(): connection.create_object( container=container, name=dest_object, filename=src_file, - segment_size=5*gigabyte, + segment_size=segment_size, **{ 'X-Delete-After': str(2*week_in_seconds) } ) - gigabyte = 1024**3 - week_in_seconds = 60*60*24*7 - max_attempts = 5 sleep_time_unit = 4 success = False @@ -267,6 +278,7 @@ def create_object_local(): sleep_time = sleep_time_unit * attempt print_warning( f"""Attempt {attempt} to upload {src_file} to {dest_object} failed. Retrying in {sleep_time} seconds...""" + f" (file_size={file_size} bytes, expected_segments={num_segments})" ) time.sleep(sleep_time) if success: From 40ac641084b5319ec3b1a341329073f36095760a Mon Sep 17 00:00:00 2001 From: Lukas Johannes Breitwieser Date: Sat, 7 Nov 2026 11:08:58 +0100 Subject: [PATCH 3/3] [ci] TEMP DEBUG: run nightly build steps on PRs, Linux only Run the 'Nightly build' step on pull_request events in the Linux jobs and skip the macOS and Windows jobs, to debug the nightly S3 upload failure. Not for merging. --- .github/workflows/root-ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/root-ci.yml b/.github/workflows/root-ci.yml index dcbc630df6520..60aa594923149 100644 --- a/.github/workflows/root-ci.yml +++ b/.github/workflows/root-ci.yml @@ -88,7 +88,7 @@ jobs: # can be skipped if the tag [skip-ci] or [skip ci] is written in the title. if: | (github.repository_owner == 'root-project' && github.event_name != 'pull_request') || - (github.event_name == 'pull_request' && !( + (github.event_name == 'pull_request' && false && !( contains(github.event.pull_request.title, '[skip-ci]') || contains(github.event.pull_request.title, '[skip ci]') || contains(github.event.pull_request.labels.*.name, 'skip ci') @@ -235,7 +235,7 @@ jobs: # can be skipped if the tag [skip-ci] or [skip ci] is written in the title. if: | (github.repository_owner == 'root-project' && github.event_name != 'pull_request') || - (github.event_name == 'pull_request' && !( + (github.event_name == 'pull_request' && false && !( contains(github.event.pull_request.title, '[skip-ci]') || contains(github.event.pull_request.title, '[skip ci]') || contains(github.event.pull_request.labels.*.name, 'skip ci') @@ -515,7 +515,7 @@ jobs: build-directory: /github/home/ROOT-CI/src/ - name: Pull Request Build - if: ${{ github.event_name == 'pull_request' }} + if: ${{ github.event_name == 'pull_request' && false }} # TEMP DEBUG env: INCREMENTAL: ${{ !contains(github.event.pull_request.labels.*.name, 'clean build') }} GITHUB_PR_ORIGIN: ${{ github.event.pull_request.head.repo.clone_url }} @@ -548,13 +548,13 @@ jobs: " - name: Nightly build - if: github.event_name == 'schedule' + if: github.event_name == 'schedule' || github.event_name == 'pull_request' # TEMP DEBUG run: ".github/workflows/root-ci-config/build_root.py --buildtype Release --platform ${{ matrix.image }} --incremental false --binaries true - --base_ref ${{ inputs.ref_name }} + --base_ref ${{ inputs.ref_name || github.base_ref }} --repository ${{ github.server_url }}/${{ github.repository }} " @@ -580,7 +580,7 @@ jobs: path: /github/home/ROOT-CI/build/TestResults.xml - name: Upload binaries - if: ${{ !cancelled() && (inputs.binaries || github.event_name == 'schedule' || startsWith(github.ref, 'refs/tags/')) }} + if: ${{ !cancelled() && (inputs.binaries || github.event_name == 'schedule' || github.event_name == 'pull_request' || startsWith(github.ref, 'refs/tags/')) }} uses: actions/upload-artifact@v4 with: name: Binaries ${{ matrix.image }} ${{ matrix.property }}