hass.tibber_prices/scripts/check-if-released
Julian Pawlowski ddc718aabd feat(release): add semantic versioning workflow automation
Added intelligent version suggestion system based on Conventional Commits
analysis to support proper semantic versioning.

New scripts:
- check-if-released: Verify if commit exists in any version tag
  - Helps decide if legacy migration code is needed
  - Shows guidance for breaking changes vs simple migrations

- suggest-version: Analyze commits and suggest next version
  - Counts breaking changes, features, and bug fixes
  - Applies pre-1.0 rules: breaking→MINOR, feat→MINOR, fix→PATCH
  - Applies post-1.0 rules: breaking→MAJOR, feat→MINOR, fix→PATCH
  - Checks manifest.json and suggests alternatives (MAJOR/MINOR/PATCH)
  - Provides preview and release commands

Updated scripts:
- prepare-release: Now calls suggest-version when no argument provided
  - Shows suggested version before prompting
  - Maintains manual override capability

Impact: Developers get intelligent version suggestions based on actual
commit content, reducing versioning mistakes and following semver correctly.
2025-11-09 15:32:44 +00:00

90 lines
2.5 KiB
Bash
Executable file

#!/bin/bash
# Check if a commit or code change has been released (is contained in any version tag)
#
# Usage:
# ./scripts/check-if-released <commit-hash>
# ./scripts/check-if-released <commit-hash> --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 <commit-hash> [--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