Skip to content

Commit 1c7a149

Browse files
committed
change main_start_sha to main_start_ref
1 parent bee1dc9 commit 1c7a149

1 file changed

Lines changed: 55 additions & 16 deletions

File tree

.github/workflows/release-proposal-dispatch.yml

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ on:
2323
- libdd-trace-protobuf
2424
- libdd-trace-stats
2525
- libdd-trace-utils
26-
main_start_sha:
26+
main_start_ref:
2727
description: >
28-
Optional commit on main to cut the release from (full or short SHA). Leave empty for
29-
latest main. Must be an ancestor of origin/main.
28+
Optional git ref to cut the release from: commit SHA (short or full), branch name,
29+
tag, or refs/... (e.g. main, v1.2.3, origin/main). Leave empty to use latest
30+
origin/main.
3031
required: false
3132
type: string
3233
default: ''
@@ -151,26 +152,64 @@ jobs:
151152
git config --global user.name "$GIT_USER_NAME"
152153
git config --global user.email "$GIT_USER_EMAIL"
153154
154-
- name: Optionally checkout main at specific SHA
155+
- name: Optionally checkout at a specific git ref
155156
env:
156-
MAIN_START_SHA: ${{ inputs.main_start_sha }}
157+
MAIN_START_REF: ${{ inputs.main_start_ref }}
157158
run: |
158-
git fetch origin "${{ env.MAIN_BRANCH }}"
159-
if [ -n "${MAIN_START_SHA// }" ]; then
160-
SHA=$(echo "$MAIN_START_SHA" | tr -d '[:space:]')
161-
if ! echo "$SHA" | grep -qE '^[0-9a-fA-F]{7,40}$'; then
162-
echo "Error: main_start_sha must be a 7–40 character hex commit SHA." >&2
159+
set -euo pipefail
160+
git fetch origin "${{ env.MAIN_BRANCH }}" --tags --prune
161+
162+
resolve_to_commit() {
163+
local r="$1"
164+
local c=""
165+
# Already a commit or resolvable locally
166+
c=$(git rev-parse -q --verify "${r}^{commit}" 2>/dev/null) || true
167+
if [ -n "$c" ]; then
168+
echo "$c"
169+
return 0
170+
fi
171+
# Remote branch: origin/<name>
172+
c=$(git rev-parse -q --verify "origin/${r}^{commit}" 2>/dev/null) || true
173+
if [ -n "$c" ]; then
174+
echo "$c"
175+
return 0
176+
fi
177+
# Tag
178+
c=$(git rev-parse -q --verify "refs/tags/${r}^{commit}" 2>/dev/null) || true
179+
if [ -n "$c" ]; then
180+
echo "$c"
181+
return 0
182+
fi
183+
return 1
184+
}
185+
186+
if [ -n "${MAIN_START_REF// }" ]; then
187+
REF=$(echo "$MAIN_START_REF" | tr -d '[:space:]')
188+
if [ -z "$REF" ]; then
189+
echo "Error: main_start_ref is whitespace-only." >&2
163190
exit 1
164191
fi
165-
if ! git merge-base --is-ancestor "$SHA" "origin/${{ env.MAIN_BRANCH }}"; then
166-
echo "Error: main_start_sha must be an ancestor of origin/${{ env.MAIN_BRANCH }}." >&2
192+
# Try to fetch the ref from origin (branches, tags, and SHA objects)
193+
git fetch origin "$REF" 2>/dev/null || true
194+
195+
COMMIT=""
196+
COMMIT=$(resolve_to_commit "$REF") || true
197+
if [ -z "$COMMIT" ]; then
198+
# e.g. short SHA or ref only present after full fetch
199+
git fetch origin "$REF:$REF" 2>/dev/null || true
200+
COMMIT=$(resolve_to_commit "$REF") || true
201+
fi
202+
if [ -z "$COMMIT" ]; then
203+
echo "Error: could not resolve git ref to a commit: $REF" >&2
204+
echo "Try a full SHA, a branch/tag name on origin, or refs/heads/... / refs/tags/..." >&2
167205
exit 1
168206
fi
169-
git checkout "$SHA"
170-
echo "Release cut from ${{ env.MAIN_BRANCH }} at $SHA (not tip)."
207+
git checkout "$COMMIT"
208+
echo "Release cut from ref '$REF' -> $COMMIT ($(git log -1 --oneline))"
171209
else
172210
git checkout "${{ env.MAIN_BRANCH }}"
173-
echo "Release cut from origin/${{ env.MAIN_BRANCH }} tip."
211+
git reset --hard "origin/${{ env.MAIN_BRANCH }}"
212+
echo "Release cut from origin/${{ env.MAIN_BRANCH }} tip ($(git rev-parse --short HEAD))."
174213
fi
175214
176215
- name: Create ephemeral release branch
@@ -180,7 +219,7 @@ jobs:
180219
EPHEMERAL_BRANCH="release/${{ inputs.crate }}/$TIMESTAMP"
181220
git checkout -b "$EPHEMERAL_BRANCH"
182221
git push origin "$EPHEMERAL_BRANCH"
183-
echo "Ephemeral release branch created: $EPHEMERAL_BRANCH from ${{ env.MAIN_BRANCH }} branch ($(git rev-parse --short HEAD))"
222+
echo "Ephemeral release branch created: $EPHEMERAL_BRANCH branch ($(git rev-parse --short HEAD))"
184223
echo "ephemeral_branch=$EPHEMERAL_BRANCH" >> "$GITHUB_OUTPUT"
185224
echo "timestamp=$TIMESTAMP" >> "$GITHUB_OUTPUT"
186225

0 commit comments

Comments
 (0)