๐Ÿค– 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

Bagikan artikel ini:

Facebook Twitter LinkedIn
×