#!/usr/bin/env bash # ============================================================================ # CHANGELOG Validator # ============================================================================ # Purpose: Validate CHANGELOG.md format compliance (Keep a Changelog) # Version: 1.0.0 # Usage: ./changelog-validator.sh [--strict] [--json] # Returns: 0=success, 1=error, JSON output to stdout if --json # ============================================================================ set -euo pipefail # Default values STRICT_MODE=false JSON_OUTPUT=false REQUIRE_UNRELEASED=true # Valid change categories per Keep a Changelog VALID_CATEGORIES=("Added" "Changed" "Deprecated" "Removed" "Fixed" "Security") # Parse arguments CHANGELOG_PATH="${1:-CHANGELOG.md}" shift || true while [[ $# -gt 0 ]]; do case "$1" in --strict) STRICT_MODE=true shift ;; --json) JSON_OUTPUT=true shift ;; --no-unreleased) REQUIRE_UNRELEASED=false shift ;; *) shift ;; esac done # Initialize results declare -a issues=() declare -a version_entries=() declare -a categories_used=() has_title=false has_unreleased=false compliance_score=100 # Check if file exists if [[ ! -f "$CHANGELOG_PATH" ]]; then if $JSON_OUTPUT; then cat <