[BUG] Fresh-profile CI cannot fetch its event commit from the shallow checkout #4

Closed
opened 2026-09-12 18:14:02 +02:00 by erikinkinen · 0 comments
Owner

Summary

The fresh-profile CI source preparation fetches the selected commit from its shallow local CI checkout. Git rejects the shallow-root update, leaving no usable FETCH_HEAD. This stops both workflows before the new fresh-directory EFI reproducibility checks.

Reproduction

At Bootloader 1563a4d9a5d523aa866896e13eb7fdc6ae728fb2, run the maintained workflow from its normal shallow event checkout. The “Prepare exact source pair and explicit profile environment” step invokes the pinned original Integration helper's exact_checkout using that local checkout as its source and the exact event commit as its revision.

Both push CI 131 and PR CI 132 fail at the first source destination. No unchanged rerun was requested.

Expected and actual behavior

Expected: prepare two pristine checkouts at the exact original event commit, preserve original dependency identities and recorded locks, and then execute the declared profile artifact checks.

Actual: Git reports that the selected commit is rejected because shallow roots may not be updated. The following rev-parse FETCH_HEAD^{commit} returns 128, raising CalledProcessError; the workflow step exits 1. Neither fresh artifact-pair gate nor the separate deliberate diagnostic build is reached. This is source preparation failure, not an emitted-artifact mismatch.

Git documents that fetch normally refuses refs from shallow sources when they require changing the destination's shallow boundary: git-fetch documentation.

Environment and identity

  • Bootloader: 1563a4d9a5d523aa866896e13eb7fdc6ae728fb2; push run 131/API 9061/job 19489 and PR run 132/API 9062/job 19491, attempt 1.
  • Original Integration helper: 381bccd87c5632e9d1af8aa9d0aca295cbc00e1f; source-pair preparation uses its unchanged dependency_pins.py.
  • Container CI, x86-64 UEFI target; compiler paths in the logs identify Rust 1.93.1, and the traceback identifies Python 3.13 library paths. Complete executable hashes are not established by these logs.
  • No image, firmware execution or guest authority is involved. The new source-pair step has no established successful CI baseline.

Evidence and prior checks

Both complete failed test-job logs and successful Markdown logs are retained. The source-preparation failures occur on September 12 at 16:07:07 and 16:09:32 UTC. Formatting, strict Clippy, existing build/test/rustdoc stages and the 35 Python artifact/ownership fixtures pass before source preparation. Markdown passes in both workflows.

Independent local validation used complete original source repositories, and its seven artifact builds passed. That local result does not cover this shallow CI source route. The retained Git warning and failure remain distinct from artifact-free UEFI capability-query warnings. No warning filtering, output normalization, gate relaxation or source fallback was used.

The correction is signed and pushed as Bootloader 8cb4383699c47812f64f086f54da6b2a7b9e9133 in PR #3. Source preparation now uses the initial checkout's explicit server/repository URL and exact event SHA through the unchanged pinned helper. It retains original-object checks, prepared lock bytes, the selected timestamp and offline compilation without local-origin or branch fallback.

Six focused cases execute the actual preparation body against synthetic local shallow and complete Git fixtures; those fixture commits are test data, not production-source evidence. They verify older event selection despite newer remote HEAD and an unrelated local origin, both exact detached trees, lock preservation, and rejection of missing/malformed/unavailable inputs, dirty destinations and a missing lock. The original shallow-route body remains a captured failed control. All 41 Python source/artifact/owner tests and workflow checks pass. No Rust, compiler/artifact recipe or dependency pin changes accompany this correction. Push CI 133 and PR CI 134 both complete successfully on September 12 at 16:38:47 UTC for exact head 8cb4383699c47812f64f086f54da6b2a7b9e9133. All four complete job logs are retained (141854 bytes), with no warning or failure diagnostics. Both runs pass the six new source cases, 22 artifact-reader cases, 13 process-owner cases and default/all Rust suites. The unchanged unconditional workflow then succeeds through both fresh-profile comparisons and the deliberate release diagnostic check. Raw CI EFI/PDB files and artifact receipts were not published for independent byte inspection; the separately recorded local artifact hashes are not ascribed to CI.

Tracking

Implementation: WIP PR #3; component audit: #2; motivating reproducibility defect: Integration #28.

The scoped shallow-checkout source defect is resolved by the signed correction, focused failure controls and both successful current-head workflows. Earlier failed runs remain retained. Complete fresh host-image comparison has since passed, resolving Integration #28. Guest performance acceptance remains open in Integration #3; this source-preparation correction does not establish that result.

## Summary The fresh-profile CI source preparation fetches the selected commit from its shallow local CI checkout. Git rejects the shallow-root update, leaving no usable FETCH_HEAD. This stops both workflows before the new fresh-directory EFI reproducibility checks. ## Reproduction At Bootloader `1563a4d9a5d523aa866896e13eb7fdc6ae728fb2`, run the maintained workflow from its normal shallow event checkout. The “Prepare exact source pair and explicit profile environment” step invokes the pinned original Integration helper's `exact_checkout` using that local checkout as its source and the exact event commit as its revision. Both [push CI 131](https://git.erikinkinen.fi/erix/bootloader/actions/runs/131) and [PR CI 132](https://git.erikinkinen.fi/erix/bootloader/actions/runs/132) fail at the first source destination. No unchanged rerun was requested. ## Expected and actual behavior Expected: prepare two pristine checkouts at the exact original event commit, preserve original dependency identities and recorded locks, and then execute the declared profile artifact checks. Actual: Git reports that the selected commit is rejected because shallow roots may not be updated. The following `rev-parse FETCH_HEAD^{commit}` returns 128, raising CalledProcessError; the workflow step exits 1. Neither fresh artifact-pair gate nor the separate deliberate diagnostic build is reached. This is source preparation failure, not an emitted-artifact mismatch. Git documents that fetch normally refuses refs from shallow sources when they require changing the destination's shallow boundary: [git-fetch documentation](https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt---update-shallow). ## Environment and identity - Bootloader: `1563a4d9a5d523aa866896e13eb7fdc6ae728fb2`; push run 131/API 9061/job 19489 and PR run 132/API 9062/job 19491, attempt 1. - Original Integration helper: `381bccd87c5632e9d1af8aa9d0aca295cbc00e1f`; source-pair preparation uses its unchanged `dependency_pins.py`. - Container CI, x86-64 UEFI target; compiler paths in the logs identify Rust 1.93.1, and the traceback identifies Python 3.13 library paths. Complete executable hashes are not established by these logs. - No image, firmware execution or guest authority is involved. The new source-pair step has no established successful CI baseline. ## Evidence and prior checks Both complete failed test-job logs and successful Markdown logs are retained. The source-preparation failures occur on September 12 at 16:07:07 and 16:09:32 UTC. Formatting, strict Clippy, existing build/test/rustdoc stages and the 35 Python artifact/ownership fixtures pass before source preparation. Markdown passes in both workflows. Independent local validation used complete original source repositories, and its seven artifact builds passed. That local result does not cover this shallow CI source route. The retained Git warning and failure remain distinct from artifact-free UEFI capability-query warnings. No warning filtering, output normalization, gate relaxation or source fallback was used. The correction is signed and pushed as Bootloader `8cb4383699c47812f64f086f54da6b2a7b9e9133` in [PR #3](https://git.erikinkinen.fi/erix/bootloader/pulls/3). Source preparation now uses the initial checkout's explicit server/repository URL and exact event SHA through the unchanged pinned helper. It retains original-object checks, prepared lock bytes, the selected timestamp and offline compilation without local-origin or branch fallback. Six focused cases execute the actual preparation body against synthetic local shallow and complete Git fixtures; those fixture commits are test data, not production-source evidence. They verify older event selection despite newer remote HEAD and an unrelated local origin, both exact detached trees, lock preservation, and rejection of missing/malformed/unavailable inputs, dirty destinations and a missing lock. The original shallow-route body remains a captured failed control. All 41 Python source/artifact/owner tests and workflow checks pass. No Rust, compiler/artifact recipe or dependency pin changes accompany this correction. [Push CI 133](https://git.erikinkinen.fi/erix/bootloader/actions/runs/133) and [PR CI 134](https://git.erikinkinen.fi/erix/bootloader/actions/runs/134) both complete successfully on September 12 at 16:38:47 UTC for exact head `8cb4383699c47812f64f086f54da6b2a7b9e9133`. All four complete job logs are retained (141854 bytes), with no warning or failure diagnostics. Both runs pass the six new source cases, 22 artifact-reader cases, 13 process-owner cases and default/all Rust suites. The unchanged unconditional workflow then succeeds through both fresh-profile comparisons and the deliberate release diagnostic check. Raw CI EFI/PDB files and artifact receipts were not published for independent byte inspection; the separately recorded local artifact hashes are not ascribed to CI. ## Tracking Implementation: [WIP PR #3](https://git.erikinkinen.fi/erix/bootloader/pulls/3); component audit: #2; motivating reproducibility defect: [Integration #28](https://git.erikinkinen.fi/erix/integration/issues/28). The scoped shallow-checkout source defect is resolved by the signed correction, focused failure controls and both successful current-head workflows. Earlier failed runs remain retained. Complete fresh host-image comparison has since passed, resolving [Integration #28](https://git.erikinkinen.fi/erix/integration/issues/28). Guest performance acceptance remains open in [Integration #3](https://git.erikinkinen.fi/erix/integration/issues/3); this source-preparation correction does not establish that result.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
erix/bootloader#4
No description provided.