#!/usr/bin/env bash set -euo pipefail REPO_DIR="${REPO_DIR:-$(pwd)}" TARGET_BRANCH="${TARGET_BRANCH:-thirdparty/skill}" SNAPSHOT_DIR="${SNAPSHOT_DIR:-superpowers}" SOURCE_FILE="${SOURCE_FILE:-${SNAPSHOT_DIR}/SOURCE.md}" UPSTREAM_REPO="${UPSTREAM_REPO:-https://github.com/obra/superpowers.git}" UPSTREAM_REF="${UPSTREAM_REF:-main}" COMMIT_AUTHOR_NAME="${COMMIT_AUTHOR_NAME:-playbook-bot}" COMMIT_AUTHOR_EMAIL="${COMMIT_AUTHOR_EMAIL:-playbook-bot@local}" cd "$REPO_DIR" git config user.name "$COMMIT_AUTHOR_NAME" git config user.email "$COMMIT_AUTHOR_EMAIL" git fetch origin "$TARGET_BRANCH" git checkout -B "$TARGET_BRANCH" "origin/$TARGET_BRANCH" latest_sha="$(git ls-remote "$UPSTREAM_REPO" "refs/heads/$UPSTREAM_REF" | awk 'NR==1 {print $1}')" if [ -z "$latest_sha" ]; then echo "ERROR: failed to resolve upstream ref: $UPSTREAM_REPO $UPSTREAM_REF" >&2 exit 1 fi current_sha="" if [ -f "$SOURCE_FILE" ]; then current_sha="$(sed -n 's/^- Ref:[[:space:]]*//p' "$SOURCE_FILE" | head -n 1)" fi if [ "$latest_sha" = "$current_sha" ]; then echo "Third-party snapshot is up to date: $latest_sha" exit 0 fi tmp_dir="$(mktemp -d)" cleanup() { rm -rf "$tmp_dir" } trap cleanup EXIT upstream_dir="$tmp_dir/upstream" git init "$upstream_dir" >/dev/null git -C "$upstream_dir" remote add origin "$UPSTREAM_REPO" git -C "$upstream_dir" fetch --depth 1 origin "$latest_sha" git -C "$upstream_dir" checkout --detach FETCH_HEAD rm -rf "$SNAPSHOT_DIR" mkdir -p "$SNAPSHOT_DIR" git -C "$upstream_dir" archive --format=tar HEAD | tar -xf - -C "$SNAPSHOT_DIR" snapshot_date="$(date -u +%Y-%m-%d)" cat > "$SOURCE_FILE" <