231 lines · 5.4 KB · Text
RawDownload
#!/usr/bin/env bash## Remove Preview callouts from documentation for stable release.## Usage:#   script/docs-strip-preview-callouts [--dry-run]## This script finds and removes all Preview-related callouts from docs:#   > **Preview:** This feature is available in Zed Preview...#   > **Changed in Preview (v0.XXX).** See [release notes]...## Then creates a PR with the changes.## Options:#   --dry-run     Show what would be changed without modifying files or creating PR#   --verbose     Show detailed progress## Run this as part of the stable release workflow. set -euo pipefail DRY_RUN=falseVERBOSE=false # ColorsRED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[0;33m'BLUE='\033[0;34m'NC='\033[0m' log() {    if [[ "$VERBOSE" == "true" ]]; then        echo -e "${BLUE}[strip-preview]${NC} $*" >&2    fi} error() {    echo -e "${RED}Error:${NC} $*" >&2    exit 1} # Parse argumentswhile [[ $# -gt 0 ]]; do    case $1 in        --dry-run)            DRY_RUN=true            shift            ;;        --verbose)            VERBOSE=true            shift            ;;        -h|--help)            head -18 "$0" | tail -16            exit 0            ;;        *)            error "Unknown option: $1"            ;;    esacdone # Get repo rootREPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"cd "$REPO_ROOT" DOCS_DIR="$REPO_ROOT/docs/src" echo "Searching for Preview callouts in $DOCS_DIR..." # Find files with either type of preview callout:# - > **Preview:** ...# - > **Changed in Preview ...files_with_callouts=$(grep -rlE "> \*\*(Preview:|Changed in Preview)" "$DOCS_DIR" 2>/dev/null || true) if [[ -z "$files_with_callouts" ]]; then    echo "No Preview callouts found. Nothing to do."    exit 0fi file_count=$(echo "$files_with_callouts" | wc -l | tr -d ' ')echo "Found $file_count file(s) with Preview callouts:"echo "" for file in $files_with_callouts; do    relative_path="${file#$REPO_ROOT/}"    echo "  $relative_path"        if [[ "$VERBOSE" == "true" ]]; then        grep -nE "> \*\*(Preview:|Changed in Preview)" "$file" | while read -r line; do            echo "    $line"        done    fidone echo "" if [[ "$DRY_RUN" == "true" ]]; then    echo -e "${YELLOW}=== DRY RUN ===${NC}"    echo ""    echo "Would remove Preview callouts from the files above and create a PR."    echo ""    echo "Lines to be removed:"    echo ""        for file in $files_with_callouts; do        relative_path="${file#$REPO_ROOT/}"        echo "--- $relative_path ---"        grep -nE "> \*\*(Preview:|Changed in Preview)" "$file" || true        echo ""    done        echo -e "${YELLOW}=== END DRY RUN ===${NC}"    echo ""    echo "Run without --dry-run to apply changes and create PR."    exit 0fi # Check for clean working state (ignore untracked files)if [[ -n "$(git status --porcelain docs/ | grep -v '^??' || true)" ]]; then    error "docs/ directory has uncommitted changes. Please commit or stash first."fi # Apply changesecho "Removing Preview callouts..." for file in $files_with_callouts; do    log "Processing: $file"        tmp_file=$(mktemp)        # Remove preview callout lines and their continuations    # Handles both:    #   > **Preview:** This feature is available...    #   > **Changed in Preview (v0.XXX).** See [release notes]...    awk '    BEGIN { in_callout = 0 }    /^> \*\*Preview:\*\*/ {         in_callout = 1        next     }    /^> \*\*Changed in Preview/ {         in_callout = 1        next     }    in_callout && /^>/ && !/^> \*\*/ {        next    }    in_callout && /^$/ {        in_callout = 0        next    }    {        in_callout = 0        print    }    ' "$file" > "$tmp_file"        mv "$tmp_file" "$file"    echo "  Updated: ${file#$REPO_ROOT/}"done echo ""echo -e "${GREEN}Preview callouts removed from $file_count file(s).${NC}" # Check if there are actual changes (in case callouts were in comments or something)if [[ -z "$(git status --porcelain docs/)" ]]; then    echo ""    echo "No effective changes to commit (callouts may have been in non-rendered content)."    exit 0fi # Create branch and PRecho ""echo "Creating PR..." BRANCH_NAME="docs/stable-release-$(date +%Y-%m-%d)"log "Branch: $BRANCH_NAME" git checkout -b "$BRANCH_NAME"git add docs/src/ # Build file list for commit messageFILE_LIST=$(echo "$files_with_callouts" | sed "s|$REPO_ROOT/||" | sed 's/^/- /') git commit -m "docs: Remove Preview callouts for stable release Features documented with Preview callouts are now in Stable. Files updated:$FILE_LIST" git push -u origin "$BRANCH_NAME" gh pr create \    --title "docs: Remove Preview callouts for stable release" \    --body "This PR removes Preview callouts from documentation for features that are now in Stable. ## Files Updated $(echo "$files_with_callouts" | sed "s|$REPO_ROOT/|• |") ## What This Does Removes callouts like:\`\`\`markdown> **Preview:** This feature is available in Zed Preview. It will be included in the next Stable release.\`\`\` And:\`\`\`markdown> **Changed in Preview (v0.XXX).** See [release notes](/releases#0.XXX).\`\`\` These features are now in Stable, so the callouts are no longer needed. Release Notes: - N/A" PR_URL=$(gh pr view --json url --jq '.url') echo ""echo -e "${GREEN}Done!${NC}"echo ""echo "PR created: $PR_URL"echo ""echo "Next steps:"echo "1. Review the PR to ensure callouts were removed correctly"echo "2. Merge the PR as part of the stable release"