๐Ÿค– Skrip Otomatis gh-force-merge.sh

Merge branch GitHub secara cepat dan aman dengan fallback otomatis via GitHub CLI

Pernah punya PR yang nge-stuck karena ada status check belum lewat? Atau butuh merge cepat untuk CI/CD? Nah, skrip gh-force-merge.sh ini bisa jadi penyelamat. ๐Ÿ˜Ž

Skrip ini menggunakan GitHub CLI (gh) untuk mendeteksi PR dari branch lokal, mencoba merge biasa, lalu otomatis fallback ke mode admin-squash kalau merge normal gagal.

๐Ÿงฉ Fitur Utama

โš™๏ธ Isi Skrip: gh-force-merge.sh

#!/usr/bin/env bash
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; CYAN='\033[0;36m'; YELLOW='\033[1;33m'; RESET='\033[0m'
DRY_RUN=false; AUTO=false
for arg in "$@"; do
 case $arg in
 --dry-run) DRY_RUN=true ;;
 --auto) AUTO=true ;;
 -h|--help)
 echo "Gunakan: $0 [--dry-run] [--auto]"
 exit 0 ;;
 esac
done
echo -e "${CYAN}๐Ÿ” Mengecek branch aktif...${RESET}"
BRANCH=$(git branch --show-current || true)
[[ -z "$BRANCH" ]] && { echo -e "${RED}โŒ Tidak ada branch aktif.${RESET}"; exit 1; }
echo -e "Branch aktif: ${YELLOW}$BRANCH${RESET}"
if ! gh auth status &>/dev/null; then
 echo -e "${RED}โŒ Belum login ke GitHub CLI.${RESET}"
 exit 1
fi
echo -e "${CYAN}๐Ÿ”Ž Mendeteksi PR...${RESET}"
PR_NUMBER=$(gh pr list --head "$BRANCH" --state open --json number --jq '.[0].number')
PR_URL=$(gh pr list --head "$BRANCH" --state open --json url --jq '.[0].url')
if [[ -z "$PR_NUMBER" ]]; then
 echo -e "${YELLOW}โš ๏ธ Tidak ditemukan PR, membuat baru...${RESET}"
 gh pr create --base main --head "$BRANCH" --title "Auto Merge: $BRANCH" --body "PR otomatis via gh-force-merge.sh"
 PR_NUMBER=$(gh pr list --head "$BRANCH" --state open --json number --jq '.[0].number')
 PR_URL=$(gh pr list --head "$BRANCH" --state open --json url --jq '.[0].url')
fi
echo -e "${GREEN}โœ… PR #${PR_NUMBER}${RESET} โ†’ ${PR_URL}"
if [[ "$AUTO" == false ]]; then
 read -rp "Merge sekarang? [y/N]: " CONFIRM
 [[ ! "$CONFIRM" =~ ^[Yy]$ ]] && { echo -e "${YELLOW}๐Ÿšซ Dibatalkan.${RESET}"; exit 0; }
fi
CMD_NORMAL="gh pr merge $PR_NUMBER --merge --delete-branch"
if [[ "$DRY_RUN" == true ]]; then
 echo "[DRY RUN] $CMD_NORMAL"
else
 if ! $CMD_NORMAL; then
 echo -e "${YELLOW}โš ๏ธ Merge normal gagal, mencoba admin-squash...${RESET}"
 CMD_ADMIN="gh pr merge $PR_NUMBER --admin --squash --delete-branch"
 [[ "$DRY_RUN" == true ]] && echo "[DRY RUN] $CMD_ADMIN" || $CMD_ADMIN
 fi
fi
echo -e "${GREEN}๐ŸŽ‰ Merge branch '$BRANCH' selesai.${RESET}"

๐Ÿ’ก Cara Menggunakan

chmod +x gh-force-merge.sh
# Mode interaktif
./gh-force-merge.sh
# Mode simulasi (tidak eksekusi merge)
./gh-force-merge.sh --dry-run
# Mode otomatis (tanpa konfirmasi, cocok untuk CI)
./gh-force-merge.sh --auto

๐Ÿง  Catatan Aman