#!/bin/bash # Check if a commit or code change has been released (is contained in any version tag) # # Usage: # ./scripts/check-if-released # ./scripts/check-if-released --details # # Examples: # ./scripts/check-if-released f4568be # ./scripts/check-if-released HEAD~3 --details set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "${SCRIPT_DIR}/.." # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Check if commit hash provided if [ -z "$1" ]; then echo "Usage: $0 [--details]" echo "" echo "Examples:" echo " $0 f4568be" echo " $0 HEAD~3 --details" exit 1 fi COMMIT="$1" DETAILS="${2:-}" # Validate commit exists if ! git rev-parse --verify "$COMMIT" >/dev/null 2>&1; then echo -e "${RED}Error: Commit '$COMMIT' not found${NC}" exit 1 fi # Get full commit hash FULL_HASH=$(git rev-parse "$COMMIT") SHORT_HASH=$(git rev-parse --short "$COMMIT") # Get commit info COMMIT_SUBJECT=$(git log -1 --format="%s" "$COMMIT") COMMIT_DATE=$(git log -1 --format="%ci" "$COMMIT") echo "Checking commit: $SHORT_HASH" echo "Subject: $COMMIT_SUBJECT" echo "Date: $COMMIT_DATE" echo "" # Check if commit is in any version tag (v*.*.*) TAGS=$(git tag --contains "$COMMIT" | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+' || true) if [ -z "$TAGS" ]; then echo -e "${GREEN}✓ NOT RELEASED${NC}" echo "This commit is not part of any version tag." echo "" echo -e "${YELLOW}→ No legacy migration needed for code introduced in this commit${NC}" exit 0 else echo -e "${RED}✗ ALREADY RELEASED${NC}" echo "This commit is included in the following version tags:" echo "$TAGS" | sed 's/^/ - /' echo "" echo -e "${YELLOW}⚠ Breaking Change Decision:${NC}" echo " 1. If migration is SIMPLE (e.g., .lower(), key rename) → Add it" echo " 2. If migration is COMPLEX → Document in release notes instead" echo " 3. Home Assistant style: Prefer breaking changes over code complexity" echo "" if [ "$DETAILS" = "--details" ]; then echo "" echo "First release containing this commit:" FIRST_TAG=$(echo "$TAGS" | head -1) echo " Tag: $FIRST_TAG" git log -1 --format=" Date: %ci" "$FIRST_TAG" echo "" echo "Latest release:" LATEST_TAG=$(git tag -l 'v*.*.*' --sort=-version:refname | head -1) echo " Tag: $LATEST_TAG" git log -1 --format=" Date: %ci" "$LATEST_TAG" fi exit 1 fi