@@ -9,6 +9,7 @@ MANIFEST_FILE="${MANIFEST_FILE:-.release-please-manifest.json}"
99CHART_FILE=" ${CHART_FILE:- charts/ openbao-operator/ Chart.yaml} "
1010RELEASE_NOTES_DIR=" ${RELEASE_NOTES_DIR:- release-notes} "
1111DRY_RUN=" ${DRY_RUN:- 0} "
12+ TAG_TARGET=" ${TAG_TARGET:- release-pr-merge} "
1213
1314GH_READ_TOKEN=" ${GH_READ_TOKEN:- ${GH_TOKEN:- } } "
1415GH_WRITE_TOKEN=" ${GH_WRITE_TOKEN:- ${GH_TOKEN:- } } "
@@ -23,6 +24,14 @@ if [[ "${DRY_RUN}" != "1" && -z "${GH_WRITE_TOKEN}" ]]; then
2324 exit 1
2425fi
2526
27+ case " ${TAG_TARGET} " in
28+ release-pr-merge | branch-head) ;;
29+ * )
30+ echo " TAG_TARGET must be either 'release-pr-merge' or 'branch-head', got '${TAG_TARGET} '" >&2
31+ exit 1
32+ ;;
33+ esac
34+
2635require_file () {
2736 local path=" $1 "
2837 if [[ ! -f " ${path} " ]]; then
@@ -203,6 +212,29 @@ if [[ "${manifest_at_merge}" != "${version}" || "${chart_version_at_merge}" != "
203212 exit 1
204213fi
205214
215+ tag_oid=" ${merge_oid} "
216+
217+ if [[ " ${TAG_TARGET} " == " branch-head" ]]; then
218+ tag_oid=" $( git rev-parse HEAD) "
219+
220+ if ! git merge-base --is-ancestor " ${merge_oid} " " ${tag_oid} " ; then
221+ echo " branch-head tag target ${tag_oid} does not descend from release PR merge commit ${merge_oid} " >&2
222+ exit 1
223+ fi
224+
225+ manifest_at_target=" $( git show " ${tag_oid} :${MANIFEST_FILE} " | jq -er ' ."."' ) "
226+ chart_version_at_target=" $( git show " ${tag_oid} :${CHART_FILE} " | chart_value /dev/stdin " version" ) "
227+ chart_app_version_at_target=" $( git show " ${tag_oid} :${CHART_FILE} " | chart_value /dev/stdin " appVersion" ) "
228+
229+ if [[ " ${manifest_at_target} " != " ${version} " || " ${chart_version_at_target} " != " ${version} " || " ${chart_app_version_at_target} " != " ${version} " ]]; then
230+ echo " release files at branch-head tag target ${tag_oid} do not match ${version} " >&2
231+ echo " manifest@target: ${manifest_at_target} " >&2
232+ echo " chart@target: ${chart_version_at_target} " >&2
233+ echo " appVersion@target: ${chart_app_version_at_target} " >&2
234+ exit 1
235+ fi
236+ fi
237+
206238notes_file=" $( mktemp) "
207239generated_notes_file=" $( mktemp) "
208240trap ' rm -f "${notes_file}" "${generated_notes_file}"' EXIT
231263
232264if git rev-parse -q --verify " refs/tags/${version} " > /dev/null 2>&1 ; then
233265 local_tag_commit=" $( git rev-list -n1 " ${version} " ) "
234- if [[ " ${local_tag_commit} " != " ${merge_oid } " ]]; then
235- echo " local tag ${version} points at ${local_tag_commit} , expected ${merge_oid } " >&2
266+ if [[ " ${local_tag_commit} " != " ${tag_oid } " ]]; then
267+ echo " local tag ${version} points at ${local_tag_commit} , expected ${tag_oid } " >&2
236268 exit 1
237269 fi
238270elif git ls-remote --exit-code --tags origin " refs/tags/${version} " > /dev/null 2>&1 ; then
239271 git fetch --no-tags origin " refs/tags/${version} :refs/tags/${version} " > /dev/null 2>&1
240272 remote_tag_commit=" $( git rev-list -n1 " ${version} " ) "
241- if [[ " ${remote_tag_commit} " != " ${merge_oid } " ]]; then
242- echo " remote tag ${version} points at ${remote_tag_commit} , expected ${merge_oid } " >&2
273+ if [[ " ${remote_tag_commit} " != " ${tag_oid } " ]]; then
274+ echo " remote tag ${version} points at ${remote_tag_commit} , expected ${tag_oid } " >&2
243275 exit 1
244276 fi
245277else
246278 if [[ " ${DRY_RUN} " == " 1" ]]; then
247- echo " [dry-run] would create signed annotated tag ${version} at ${merge_oid} "
279+ echo " [dry-run] would create signed annotated tag ${version} at ${tag_oid} ( ${TAG_TARGET} ) "
248280 else
249281 require_git_tag_signing
250- git tag -s " ${version} " " ${merge_oid } " -m " Release ${version} "
282+ git tag -s " ${version} " " ${tag_oid } " -m " Release ${version} "
251283 git push origin " refs/tags/${version} "
252284 fi
253285fi
0 commit comments