diff --git a/bootstrap.sh b/bootstrap.sh index 8c871a7..5a7328d 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -60,24 +60,67 @@ show_help() { # 1 ─ Parse CLI options ───────────────────────── while [[ $# -gt 0 ]]; do case "$1" in - --version) VERSION="$2"; shift 2 ;; - --tag) TAG="$2"; shift 2 ;; - --package_name) PACKAGE_NAME="$2"; shift 2 ;; - --author_name) AUTHOR_NAME="$2"; shift 2 ;; - --author_email) AUTHOR_EMAIL="$2"; shift 2 ;; - --output_file) OUTPUT_FILE="$2"; shift 2 ;; - --cliff_config) CLIFF_CONFIG="$2"; shift 2 ;; - -h|--help) show_help; exit 0 ;; - *) echo "❌ Unknown option: $1"; show_help; exit 1 ;; + --version) + VERSION="$2" + shift 2 + ;; + --tag) + TAG="$2" + shift 2 + ;; + --package_name) + PACKAGE_NAME="$2" + shift 2 + ;; + --author_name) + AUTHOR_NAME="$2" + shift 2 + ;; + --author_email) + AUTHOR_EMAIL="$2" + shift 2 + ;; + --output_file) + OUTPUT_FILE="$2" + shift 2 + ;; + --cliff_config) + CLIFF_CONFIG="$2" + shift 2 + ;; + -h | --help) + show_help + exit 0 + ;; + *) + echo "❌ Unknown option: $1" + show_help + exit 1 + ;; esac done # 2 ─ Validate mandatory inputs ──────────────── -[[ -z "$VERSION" ]] && { echo "❌ --version is required"; exit 1; } -[[ -z "$TAG" ]] && { echo "❌ --tag is required"; exit 1; } -[[ -z "$PACKAGE_NAME" ]] && { echo "❌ --package_name is required"; exit 1; } -[[ -z "$AUTHOR_NAME" ]] && { echo "❌ --author_name is required"; exit 1; } -[[ -z "$AUTHOR_EMAIL" ]] && { echo "❌ --author_email is required"; exit 1; } +[[ -z "$VERSION" ]] && { + echo "❌ --version is required" + exit 1 +} +[[ -z "$TAG" ]] && { + echo "❌ --tag is required" + exit 1 +} +[[ -z "$PACKAGE_NAME" ]] && { + echo "❌ --package_name is required" + exit 1 +} +[[ -z "$AUTHOR_NAME" ]] && { + echo "❌ --author_name is required" + exit 1 +} +[[ -z "$AUTHOR_EMAIL" ]] && { + echo "❌ --author_email is required" + exit 1 +} # 3 ─ Prepare temporary clone ────────────────── TMP_DIR=$(mktemp -d) @@ -94,7 +137,10 @@ bash "$TMP_DIR/scripts/install-git-cliff.sh" if [[ -z "$CLIFF_CONFIG" ]]; then CLIFF_CONFIG="$TMP_DIR/configs/cliff.debian.toml" fi -[[ ! -r "$CLIFF_CONFIG" ]] && { echo "❌ Config not found: $CLIFF_CONFIG"; exit 1; } +[[ ! -r "$CLIFF_CONFIG" ]] && { + echo "❌ Config not found: $CLIFF_CONFIG" + exit 1 +} # 6 ─ Generate changelog in CURRENT dir ──────── echo "📝 Generating changelog (output → $OUTPUT_FILE)" @@ -103,8 +149,8 @@ env \ AUTHOR_NAME="$AUTHOR_NAME" \ AUTHOR_EMAIL="$AUTHOR_EMAIL" \ bash "$TMP_DIR/scripts/generate-changelog.sh" \ - -c "$CLIFF_CONFIG" \ - -t "$TAG" \ - -o "$OUTPUT_FILE" + -c "$CLIFF_CONFIG" \ + -t "$TAG" \ + -o "$OUTPUT_FILE" echo "✅ Changelog ready: $OUTPUT_FILE" diff --git a/scripts/generate-changelog.sh b/scripts/generate-changelog.sh index defbc62..7ced2c2 100755 --- a/scripts/generate-changelog.sh +++ b/scripts/generate-changelog.sh @@ -39,27 +39,77 @@ show_help() { # 1 Parse CLI options while [[ $# -gt 0 ]]; do case "$1" in - -c|--config) [[ $# -lt 2 ]] && { echo "❌ $1 requires a value"; exit 1; }; CONFIG_FILE="$2"; shift 2 ;; - -t|--tag) [[ $# -lt 2 ]] && { echo "❌ $1 requires a value"; exit 1; }; TAG="$2"; shift 2 ;; - -o|--out) [[ $# -lt 2 ]] && { echo "❌ $1 requires a value"; exit 1; }; OUT_FILE="$2"; shift 2 ;; - -d|--debug) DEBUG=true; shift ;; - -h|--help) show_help; exit 0 ;; - *) echo "❌ Unknown option: $1"; show_help; exit 1 ;; + -c | --config) + [[ $# -lt 2 ]] && { + echo "❌ $1 requires a value" + exit 1 + } + CONFIG_FILE="$2" + shift 2 + ;; + -t | --tag) + [[ $# -lt 2 ]] && { + echo "❌ $1 requires a value" + exit 1 + } + TAG="$2" + shift 2 + ;; + -o | --out) + [[ $# -lt 2 ]] && { + echo "❌ $1 requires a value" + exit 1 + } + OUT_FILE="$2" + shift 2 + ;; + -d | --debug) + DEBUG=true + shift + ;; + -h | --help) + show_help + exit 0 + ;; + *) + echo "❌ Unknown option: $1" + show_help + exit 1 + ;; esac done # 2 Basic validation -[[ -z "$CONFIG_FILE" || -z "$TAG" ]] && { echo "❌ --config and --tag are required"; show_help; exit 1; } -[[ "$DEBUG" = false && -z "$OUT_FILE" ]] && { echo "❌ --out is required unless --debug is set"; show_help; exit 1; } -[[ ! -r "$CONFIG_FILE" ]] && { echo "❌ Config file not found or unreadable: $CONFIG_FILE"; exit 1; } +[[ -z "$CONFIG_FILE" || -z "$TAG" ]] && { + echo "❌ --config and --tag are required" + show_help + exit 1 +} +[[ "$DEBUG" = false && -z "$OUT_FILE" ]] && { + echo "❌ --out is required unless --debug is set" + show_help + exit 1 +} +[[ ! -r "$CONFIG_FILE" ]] && { + echo "❌ Config file not found or unreadable: $CONFIG_FILE" + exit 1 +} if [[ "$DEBUG" = false ]]; then OUT_DIR=$(dirname "$OUT_FILE") - [[ ! -d "$OUT_DIR" ]] && { echo "❌ Output directory does not exist: $OUT_DIR"; exit 1; } + [[ ! -d "$OUT_DIR" ]] && { + echo "❌ Output directory does not exist: $OUT_DIR" + exit 1 + } fi # 3 Required tools -need() { command -v "$1" >/dev/null || { echo "❌ $1 is required but not installed"; exit 1; }; } -need git; need git-cliff; need sed +need() { command -v "$1" >/dev/null || { + echo "❌ $1 is required but not installed" + exit 1 +}; } +need git +need git-cliff +need sed # 4 Generate changelog if $DEBUG; then @@ -67,6 +117,6 @@ if $DEBUG; then git cliff --config "$CONFIG_FILE" -t "$TAG" -s all else echo "📝 Generating changelog → $OUT_FILE" - git cliff --config "$CONFIG_FILE" -t "$TAG" -s all > "$OUT_FILE" + git cliff --config "$CONFIG_FILE" -t "$TAG" -s all >"$OUT_FILE" echo "✅ Changelog written to $OUT_FILE" fi