Files
gh-vanman2024-cli-builder-p…/skills/cobra-patterns/scripts/generate-completions.sh
2025-11-30 09:04:14 +08:00

83 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Generate shell completion scripts for Cobra CLI
# Usage: ./generate-completions.sh <cli-binary> [output-dir]
set -euo pipefail
CLI_BINARY="${1:-}"
OUTPUT_DIR="${2:-./completions}"
if [ -z "$CLI_BINARY" ]; then
echo "Error: CLI binary path required"
echo "Usage: $0 <cli-binary> [output-dir]"
exit 1
fi
if [ ! -f "$CLI_BINARY" ]; then
echo "Error: Binary not found: $CLI_BINARY"
exit 1
fi
if [ ! -x "$CLI_BINARY" ]; then
echo "Error: Binary is not executable: $CLI_BINARY"
exit 1
fi
mkdir -p "$OUTPUT_DIR"
CLI_NAME=$(basename "$CLI_BINARY")
echo "Generating shell completions for $CLI_NAME..."
echo ""
# Generate Bash completion
if "$CLI_BINARY" completion bash > "$OUTPUT_DIR/$CLI_NAME.bash" 2>/dev/null; then
echo "✓ Bash completion: $OUTPUT_DIR/$CLI_NAME.bash"
echo " Install: source $OUTPUT_DIR/$CLI_NAME.bash"
else
echo "⚠ Bash completion not available"
fi
# Generate Zsh completion
if "$CLI_BINARY" completion zsh > "$OUTPUT_DIR/_$CLI_NAME" 2>/dev/null; then
echo "✓ Zsh completion: $OUTPUT_DIR/_$CLI_NAME"
echo " Install: Place in \$fpath directory"
else
echo "⚠ Zsh completion not available"
fi
# Generate Fish completion
if "$CLI_BINARY" completion fish > "$OUTPUT_DIR/$CLI_NAME.fish" 2>/dev/null; then
echo "✓ Fish completion: $OUTPUT_DIR/$CLI_NAME.fish"
echo " Install: source $OUTPUT_DIR/$CLI_NAME.fish"
else
echo "⚠ Fish completion not available"
fi
# Generate PowerShell completion
if "$CLI_BINARY" completion powershell > "$OUTPUT_DIR/$CLI_NAME.ps1" 2>/dev/null; then
echo "✓ PowerShell completion: $OUTPUT_DIR/$CLI_NAME.ps1"
echo " Install: & $OUTPUT_DIR/$CLI_NAME.ps1"
else
echo "⚠ PowerShell completion not available"
fi
echo ""
echo "Completions generated in: $OUTPUT_DIR"
echo ""
echo "Installation instructions:"
echo ""
echo "Bash:"
echo " echo 'source $OUTPUT_DIR/$CLI_NAME.bash' >> ~/.bashrc"
echo ""
echo "Zsh:"
echo " mkdir -p ~/.zsh/completions"
echo " cp $OUTPUT_DIR/_$CLI_NAME ~/.zsh/completions/"
echo " Add to ~/.zshrc: fpath=(~/.zsh/completions \$fpath)"
echo ""
echo "Fish:"
echo " mkdir -p ~/.config/fish/completions"
echo " cp $OUTPUT_DIR/$CLI_NAME.fish ~/.config/fish/completions/"
echo ""