CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
66 lines
3.9 KiB
Markdown
66 lines
3.9 KiB
Markdown
# Sprint-end rebase: linearize rocprofiler-compute-develop onto develop
|
|
|
|
Follow **[`AGENTS.md`](../../AGENTS.md)** and the full redirect chain it references.
|
|
|
|
## Goal
|
|
|
|
Linearize `rocprofiler-compute-develop` (rcd) onto `develop` at sprint end, dropping the
|
|
`develop -> rcd` sync merge commits, then force-push in place.
|
|
|
|
`develop` requires linear history. rcd is the ongoing integration branch and is kept current
|
|
by periodically merging `develop` into it, so it accumulates
|
|
`Merge branch 'develop' into rocprofiler-compute-develop` commits. The sprint drop PR
|
|
(head=rcd, base=develop) can only merge once rcd is flattened. Preserve authorship (no squash).
|
|
|
|
## Key facts
|
|
|
|
- Every sync merge on rcd is `develop -> rcd`. Linearizing = replaying only rcd's non-merge
|
|
commits (the sprint work) onto the latest `develop`.
|
|
- The rebase-from point is the merge-base of `develop` and rcd, NOT `develop`'s current tip.
|
|
Get it authoritatively with `git merge-base origin/develop rocprofiler-compute-develop`.
|
|
(`gh pr view <PR> --json baseRefOid` returns `develop`'s tip, which only equals the
|
|
merge-base when develop has not advanced past rcd's last sync merge, so do not rely on it.)
|
|
- The final rocprofiler-compute tree at the linearized tip MUST byte-match the pre-rebase tip.
|
|
Linearizing changes history shape, not content. This is the oracle that gates the push.
|
|
|
|
## DO NOT use `-X theirs` (or `-X ours`)
|
|
|
|
A blanket merge strategy silently corrupts content. In a rebase, `-X theirs` resolves each
|
|
conflicted hunk toward the commit being replayed and discards the new-base side with no stop.
|
|
When a prior partial drop already landed some sprint PRs on develop under different SHAs, those
|
|
PRs' lines conflict on replay and `-X theirs` reverts develop's newer content to an older
|
|
intermediate. Nothing re-applies it, so the tip ships a regression that passes the rebase but
|
|
fails tests / pre-commit. Resolve conflicts per commit instead (see step 5).
|
|
|
|
## Steps
|
|
|
|
1. `git fetch origin develop rocprofiler-compute-develop`
|
|
2. `MERGE_BASE=$(git merge-base origin/develop rocprofiler-compute-develop)`
|
|
3. Backup: `git tag backup-rcd-<date> rocprofiler-compute-develop` (this tag is the oracle and
|
|
the restore point. Keep it until the push is validated.)
|
|
4. Sanity-list before rewriting:
|
|
- sprint commits (will replay): `git log --no-merges --oneline $MERGE_BASE..rocprofiler-compute-develop`
|
|
- merges (will drop): `git log --merges --oneline $MERGE_BASE..rocprofiler-compute-develop`
|
|
5. Flatten, resolving conflicts commit-by-commit (NO `-X` strategy):
|
|
`git rebase --onto origin/develop $MERGE_BASE rocprofiler-compute-develop`
|
|
- On each stop, resolve sensibly. Most conflicts are the handful of sprint PRs whose end
|
|
state already reached develop via a prior partial drop. Reconcile so the result keeps the
|
|
sprint's final intent, then `git rebase --continue`.
|
|
- `git config rerere.enabled true` first so repeated resolutions replay automatically.
|
|
6. Verify (all must pass BEFORE pushing):
|
|
- ORACLE (must be empty): `git diff backup-rcd-<date> HEAD -- projects/rocprofiler-compute/`
|
|
If non-empty, a conflict was mis-resolved. Fix it. Do not push.
|
|
- merges == 0: `git rev-list --merges --count origin/develop..rocprofiler-compute-develop`
|
|
- commit count == the non-merge count from step 4
|
|
- linear on develop: `git merge-base --is-ancestor origin/develop rocprofiler-compute-develop`
|
|
- authorship intact (original PR authors, not the rebaser):
|
|
`git log --format='%an <%ae>' origin/develop..rocprofiler-compute-develop | sort -u`
|
|
7. Force-push in place (branch is rewritten, NOT deleted):
|
|
`git push --force-with-lease origin rocprofiler-compute-develop`
|
|
|
|
## Notes
|
|
|
|
- Never squash; plain rebase keeps author fields (new SHAs are expected and fine).
|
|
- The oracle in step 6 is non-negotiable. Any resolution strategy is safe behind it; none is
|
|
safe without it. The empty rocprofiler-compute diff proves the tip content is unchanged.
|