mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-30 13:23:41 +00:00
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.
90 lines
2.5 KiB
Bash
Executable file
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
|