1
0
Fork 0

bin: gh-autosquash

This commit is contained in:
Jeremy Kaplan 2022-08-19 15:00:03 -07:00
commit e3a713e5cc
2 changed files with 73 additions and 0 deletions

71
bin/gh-autosquash Executable file
View file

@ -0,0 +1,71 @@
#!/usr/bin/env bash
set -euo pipefail
timestamp() {
date "+%Y-%m-%dT%H:%M:%S%z"
}
log() {
echo "[$(timestamp)]" "$@"
}
notify() {
title="$1"
body="$2"
log "${body}"
notify-send "${title}" "${body}"
}
prompt_continue() {
read -rp 'Press ENTER to continue > '
}
default_workflow() {
root=$(git rev-parse --show-toplevel)
cat "${root}/.gh-autosquash-default-workflow"
}
branch="${1-$(git symbolic-ref --short HEAD)}"
workflow="${2-$(default_workflow)}"
data=$(gh pr view "${branch}" --json 'body,number,title')
body=$(jq -r '.body' <<< "${data}")
number=$(jq -r '.number' <<< "${data}")
title=$(jq -r '.title' <<< "${data}")
log "Squash-merging PR #${number}: ${branch}"
# Use the commit title and description as the commit message by default.
commit_title=$(vipe <<< "${title} (#${number})"); unset title
commit_message=$(vipe <<< "${body}"); unset body
log "Waiting for workflow: ${workflow}"
gh run list \
--branch "${branch}" \
--workflow "${workflow}" \
--json 'status,databaseId' \
--jq '.[] | select(.status != "completed") | .databaseId' \
| xargs -n 1 gh run watch
notify "${branch}" 'Workflow complete!'
log "Confirming squash-merge for ${branch} (#${number})"
echo ''
echo '|------------------------------------------------------------------------------|-------------------|'
echo "${commit_title}"
echo ''
echo "${commit_message}"
echo '|------------------------------------------------------------------------------|-------------------|'
echo ''
prompt_continue
gh pr merge "${branch}" \
--squash \
--delete-branch \
--subject "${commit_title}" \
--body "${commit_message}"
notify "${branch}" 'PR merged!'

View file

@ -24,3 +24,5 @@ node_modules/
.notags .notags
.DS_Store .DS_Store
.gh-autosquash-default-workflow