summaryrefslogtreecommitdiff
path: root/.github/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/ci.yml36
1 files changed, 33 insertions, 3 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bc83bbe..ccb1958 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -32,12 +32,42 @@ jobs:
env:
PR_BASE_SHA: ${{ github.event.pull_request.base.sha }}
PUSH_BEFORE_SHA: ${{ github.event.before }}
+ DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
run: |
+ is_usable_rev() {
+ local rev="$1"
+ [ -n "$rev" ] &&
+ [ "$rev" != "0000000000000000000000000000000000000000" ] &&
+ git rev-parse --verify "${rev}^{commit}" >/dev/null 2>&1 &&
+ git merge-base --is-ancestor "$rev" HEAD >/dev/null 2>&1
+ }
+
BASE_SHA="${PR_BASE_SHA:-$PUSH_BEFORE_SHA}"
- if [ -z "$BASE_SHA" ] || [ "$BASE_SHA" = "0000000000000000000000000000000000000000" ]; then
- if git rev-parse HEAD^ >/dev/null 2>&1; then
- BASE_SHA="$(git rev-parse HEAD^)"
+ if ! is_usable_rev "$BASE_SHA"; then
+ BASE_SHA=""
+ fi
+
+ if [ -z "$BASE_SHA" ] && [ -n "$DEFAULT_BRANCH" ]; then
+ DEFAULT_REF="origin/$DEFAULT_BRANCH"
+
+ if ! git rev-parse --verify "${DEFAULT_REF}^{commit}" >/dev/null 2>&1; then
+ git fetch --no-tags --depth=1 origin \
+ "$DEFAULT_BRANCH:refs/remotes/origin/$DEFAULT_BRANCH" \
+ >/dev/null 2>&1 || true
+ fi
+
+ if git rev-parse --verify "${DEFAULT_REF}^{commit}" >/dev/null 2>&1; then
+ MERGE_BASE="$(git merge-base HEAD "$DEFAULT_REF" 2>/dev/null || true)"
+ if is_usable_rev "$MERGE_BASE"; then
+ BASE_SHA="$MERGE_BASE"
+ fi
+ fi
+ fi
+
+ if [ -z "$BASE_SHA" ]; then
+ if git rev-parse --verify HEAD~1 >/dev/null 2>&1; then
+ BASE_SHA="$(git rev-parse HEAD~1)"
else
BASE_SHA="$(git rev-list --max-parents=0 HEAD)"
fi