-
Notifications
You must be signed in to change notification settings - Fork 113
Description
When working on a PR especially in CI, it's often required to check/examine/test all changes since the PR's working-branch was created from the upstream branch. One way to do this is using the command git merge-base $CIRRUS_BASE_BRANCH HEAD. According to the documentation for $CIRRUS_BASE_SHA, it seems they should be equivalent:
"Base SHA if current build was triggered by a PR"
Astonishingly, this is not the case. Instead, $CIRRUS_BASE_SHA will always track the current $CIRRUS_BASE_BRANCH HEAD, making $CIRRUS_BASE_SHA all but useless in a PR, once the branch moves.
Expected Behavior
Given the example situation:
A---B---C---D---E <--- HEAD on $CIRRUS_BASE_BRANCH
\
X---Y---Z (PR)
I would expect $CIRRUS_BASE_SHA to always point at C no matter what. Even after commit D and then E are added.
Real Behavior
Given the same example situation:
A---B---C---D---E <--- HEAD on $CIRRUS_BASE_BRANCH
\
X---Y---Z (PR)
It appears that $CIRRUS_BASE_SHA will point at D then E as they're added. Since the PR branch won't "know" about new commits on $CIRRUS_BASE_BRANCH, any git commands based on $CIRRUS_BASE_SHA will fail.
Related Info
This is a (tick one of the following):
- Website issue
- Link to page:
- Task issue
- OS: All
- Task name: Any
- Script/cache name (if applies): e.g.
git log ${CIRRUS_BASE_SHA}..HEADcan break.
Mitigation
Though it would be nice if the behavior could be fixed, I can understand hesitation to not break anyone relying on this buggy behavior. In that case, I think the documentation should be updated so it's much more specific. Something like:
The current $CIRRUS_BASE_BRANCH commit SHA if current build was triggered by a PR. Note, this value will change as new commits are added. If instead the working-branch (used for the PR) common ancestor is desired, the command
git merge-base $CIRRUS_BASE_BRANCH HEADmay be used.