#!/usr/bin/env bash # Required env vars: (none) # Optional env vars: PREV_SHA (if set, generates an incremental diff from that commit) set -euo pipefail git fetch origin main --depth=100 if [ -n "${PREV_SHA:-}" ] && git cat-file -e "${PREV_SHA}^{commit}" 2>/dev/null; then OLD_BASE=$(git merge-base origin/main "$PREV_SHA") NEW_BASE=$(git merge-base origin/main HEAD) if [ "$OLD_BASE" = "$NEW_BASE" ]; then echo "Generating incremental diff from ${PREV_SHA} to HEAD" git diff "${PREV_SHA}..HEAD" > pr.diff echo "incremental=true" >> "$GITHUB_OUTPUT" else echo "PR base changed (merge/rebase from main) — generating full diff" git diff origin/main...HEAD > pr.diff echo "incremental=false" >> "$GITHUB_OUTPUT" fi else echo "Generating full diff from origin/main to HEAD" git diff origin/main...HEAD > pr.diff echo "incremental=false" >> "$GITHUB_OUTPUT" fi DIFF_SIZE=$(wc -c < pr.diff) echo "Diff size: ${DIFF_SIZE} bytes" if [ "$DIFF_SIZE" -gt 12288 ]; then head -c 12288 pr.diff > pr_truncated.diff printf '\n\n[... diff truncated due to size ...]' >> pr_truncated.diff mv pr_truncated.diff pr.diff echo "truncated=true" >> "$GITHUB_OUTPUT" fi