Repository navigation
Conversation
❌ PR Check — Action Required
📖 Need help? See the Policy FAQ for details on every check and how to fix failures. |
|
🚫 Please fix the failed policies before requesting reviews. The following policy checks failed:
The |
1 task done
marbre
added a commit
that referenced
this pull request
Oct 14, 2026
## Motivation When multiple selected GPU targets share one native package owner, split artifact manifests can retain source roots whose device images have moved into a shared kpack under another root. The grouped-root validation introduced by #8327 rejects those absent directories before the DEB and RPM backends can apply their established filtering. The device-package builder then converts that exception into an empty result. Other variants can still be produced, causing package generation to appear successful and emit meta packages that depend on device packages that were never created. The failure is only discovered later during simulated or native package installation. This was first reported in #8327 (comment) and reproduces when #8350 enables `gfx1250-strict` alongside `gfx1250`. This PR carries forward the fix and artifact evidence from #8702, then adds RPM coverage and makes unexpected partial package failures fatal. Progress on #8278. ## Evidence The original #8702 investigation used https://github.com/ROCm/TheRock/actions/runs/36947069646. Both sparse device artifact manifests retained the rocSPARSE root after their device images moved into shared kpacks under hipSPARSELt. Each target kpack still contained 340 rocSPARSE and 3 hipSPARSELt images, while the generic artifact contained `librocsparse.so`. The current failure reproduces in #8350 run https://github.com/ROCm/TheRock/actions/runs/38419442156: - DEB package generation fails its simulated installation after the affected `gfx1250` device packages are omitted: https://github.com/ROCm/TheRock/actions/runs/38419442156/job/115420436430?pr=8350 - RPM generation completes despite omitting the affected packages: https://github.com/ROCm/TheRock/actions/runs/38419442156/job/115420436578?pr=8350 - The downstream RHEL 8 and SLES 16 installation jobs then fail on unresolved dependencies: - https://github.com/ROCm/TheRock/actions/runs/38419442156/job/115430597884?pr=8350 - https://github.com/ROCm/TheRock/actions/runs/38419442156/job/115430596637?pr=8350 The omitted packages include `amdrocm-sparse`, `amdrocm-blas-test`, `amdrocm-rand-test`, `amdrocm-ccl-test`, and `amdrocm-rccl-test` for the shared `gfx1250` package owner. ## Technical Details - Ignore absent manifest roots during kpack artifact discovery, matching the existing artifact-catalog behavior. - Continue collision validation for every existing package root. - Log skipped roots at debug level so stale manifest entries remain diagnosable. - Preserve the selected `gfx1250` and `gfx1250-strict` kpack payloads in their shared `gfx1250` native package. - Propagate unexpected device-package exceptions instead of converting them to empty results. - Keep intentional empty device variants skippable. - Return a nonzero status after the build summary whenever any base package is recorded as failed. - Add matching DEB and RPM regressions for combined-owner packages with absent manifest roots. The implementation is architecture-independent packaging logic. Regression fixtures use the motivating combined `gfx1250` and `gfx1250-strict` ownership case and verify that both selected payloads survive. No GPU execution is required for this change. ## Test Plan - `python build_tools/packaging/linux/tests/build_package_test.py` - `gfx125X,gfx1250-strict` dev build: https://github.com/ROCm/TheRock/actions/runs/38459803112 ## Test Result - 52 packaging tests passed. - The DEB regression verifies both selected kpack filenames and bytes survive staging when manifests contain absent roots. - The RPM regression verifies both valid target roots are retained in the generated spec and absent roots are excluded. - Device-package exceptions propagate, while intentional empty variants remain skippable. - Generic recorded package failures exit with status 1 after printing the build summary. ## Related - Tracking issue: #8278 - Original fix and evidence: #8702 - Native package ownership change: #8327 - Reproducing family enablement: #8350 ## Submission Checklist - [x] Look over the contributing guidelines at https://github.com/ROCm/TheRock/blob/main/CONTRIBUTING.md. Generated with Codex --------- Co-authored-by: Ammar ELWazir <3832908+ammarwa@users.noreply.github.com>
Member
|
Superseded by #8987. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fix(packaging): tolerate empty roots in split artifact manifests
Summary
When multiple GPU targets share a native package, split artifact manifests can retain a source root whose device images have moved into a shared kpack under another root. Native package root validation rejects that absent directory, preventing the device package from being produced and leaving unsatisfied DEB dependencies.
Skip absent manifest roots in kpack mode, matching ArtifactFlattener's existing behavior. Existing roots still undergo collision validation. Preserve both selected target kpacks.
Evidence
Build https://github.com/ROCm/TheRock/actions/runs/36947069646, attempt 1, source 392c7de. Both sparse device archives retain the rocSPARSE root in their manifests but put their shared kpack under hipSPARSELt. Each kpack indexes 340 rocSPARSE and 3 hipSPARSELt images for its respective target; the generic archive contains librocsparse.so. All three downloaded archives match their published SHA-256 checksums.
Related: #8327
Jira Super Epic: ROCM-31030. This PR addresses the split-artifact packaging defect within that campaign.
Validation