2424 type : string
2525 default : ' '
2626 repo-source :
27- description : ' Repository to stage changes from.'
27+ description : ' Repository to merge changes from.'
2828 required : false
2929 type : choice
3030 default : ' upstream'
@@ -166,6 +166,7 @@ jobs:
166166 fi
167167
168168 - name : Merge PRs
169+ id : merge-prs
169170 if : ${{ inputs['commit-sha'] == '' && inputs.pr_numbers != '' }}
170171 env :
171172 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
@@ -182,6 +183,8 @@ jobs:
182183 IFS=',' read -ra PR_LIST <<< "${INPUTS_PR_NUMBERS}"
183184
184185 UPSTREAM_URL="https://github.com/${STEPS_UPSTREAM_OUTPUTS_REPO}.git"
186+ RESULTS=""
187+ FAILED=false
185188
186189 for PR_NUMBER in "${PR_LIST[@]}"; do
187190 PR_NUMBER=$(echo "$PR_NUMBER" | tr -d ' ')
@@ -190,6 +193,7 @@ jobs:
190193 PR_TITLE=$(echo "$PR_DATA" | jq -r '.title')
191194 MERGE_COMMIT=$(echo "$PR_DATA" | jq -r '.mergeCommit.oid')
192195
196+ set +e
193197 if [ -n "$MERGE_COMMIT" ] && [ "$MERGE_COMMIT" != "null" ]; then
194198 # PR is merged: cherry-pick its merge commit.
195199 # Determine if it is a merge commit or squash commit.
@@ -214,16 +218,33 @@ jobs:
214218 MERGE_BASE=$(git merge-base "$PR_HEAD_SHA" "$BASE_SHA")
215219 git diff "$MERGE_BASE" "$PR_HEAD_SHA" | git apply --index
216220 fi
221+ APPLY_EXIT=$?
222+ set -e
217223
218- git commit -m "$PR_TITLE"
224+ if [ $APPLY_EXIT -eq 0 ]; then
225+ git commit -m "$PR_TITLE"
226+ RESULTS="${RESULTS}${PR_NUMBER}=✅ "
227+ else
228+ git cherry-pick --abort 2>/dev/null || git reset --hard HEAD
229+ RESULTS="${RESULTS}${PR_NUMBER}=❌ "
230+ FAILED=true
231+ break
232+ fi
219233 done
220234
235+ echo "results=${RESULTS}" >> "$GITHUB_OUTPUT"
236+
237+ if [ "$FAILED" = "true" ]; then
238+ exit 1
239+ fi
240+
221241 - name : Push backport branch
222242 env :
223243 STEPS_BACKPORT_BRANCH_OUTPUTS_NAME : ${{ steps.backport-branch.outputs.name }}
224244 run : git push -u origin "${STEPS_BACKPORT_BRANCH_OUTPUTS_NAME}"
225245
226246 - name : Create pull request
247+ id : create-pr
227248 env :
228249 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
229250 STEPS_UPSTREAM_OUTPUTS_REPO : ${{ steps.upstream.outputs.repo }}
@@ -291,3 +312,43 @@ jobs:
291312 else
292313 echo "::notice::The 'Auto-backport' label does not exist on ${PR_REPO}. Consider adding it so that backport pull requests can be identified easily."
293314 fi
315+
316+ echo "url=${PR_URL}" >> "$GITHUB_OUTPUT"
317+
318+ - name : Write job summary
319+ if : always()
320+ env :
321+ MATRIX_BRANCH : ${{ matrix.branch }}
322+ INPUTS_COMMIT_SHA : ${{ inputs.commit-sha }}
323+ INPUTS_PR_NUMBERS : ${{ inputs.pr_numbers }}
324+ STEPS_MERGE_PRS_OUTPUTS_RESULTS : ${{ steps.merge-prs.outputs.results }}
325+ STEPS_CREATE_PR_OUTPUTS_URL : ${{ steps.create-pr.outputs.url }}
326+ run : |
327+ PR_DISPLAY="${STEPS_CREATE_PR_OUTPUTS_URL:-N/A}"
328+
329+ if [ -n "${INPUTS_PR_NUMBERS}" ] && [ -z "${INPUTS_COMMIT_SHA}" ]; then
330+ IFS=',' read -ra PR_LIST <<< "${INPUTS_PR_NUMBERS}"
331+
332+ HEADER="| Branch |"
333+ SEPARATOR="| :--- |"
334+ for PR_NUM in "${PR_LIST[@]}"; do
335+ PR_NUM=$(echo "$PR_NUM" | tr -d ' ')
336+ HEADER="${HEADER} #${PR_NUM} |"
337+ SEPARATOR="${SEPARATOR} :---: |"
338+ done
339+ HEADER="${HEADER} Pull Request |"
340+ SEPARATOR="${SEPARATOR} :--- |"
341+
342+ ROW="| \`${MATRIX_BRANCH}\` |"
343+ for PR_NUM in "${PR_LIST[@]}"; do
344+ PR_NUM=$(echo "$PR_NUM" | tr -d ' ')
345+ STATUS=$(echo "${STEPS_MERGE_PRS_OUTPUTS_RESULTS}" | tr ' ' '\n' | grep "^${PR_NUM}=" | cut -d= -f2)
346+ ROW="${ROW} ${STATUS:-❌} |"
347+ done
348+ ROW="${ROW} ${PR_DISPLAY} |"
349+
350+ printf '%s\n%s\n%s\n' "$HEADER" "$SEPARATOR" "$ROW" >> "$GITHUB_STEP_SUMMARY"
351+ else
352+ printf '| Branch | Pull Request |\n| :--- | :--- |\n| `%s` | %s |\n' \
353+ "${MATRIX_BRANCH}" "${PR_DISPLAY}" >> "$GITHUB_STEP_SUMMARY"
354+ fi
0 commit comments