@@ -27,67 +27,49 @@ jobs:
2727 - name : Analyze PR Commits
2828 id : analyze
2929 run : |
30- echo "Analyzing commits in this PR..."
31-
32- # Get commits only from this PR (not on base branch)
33- PR_COMMITS=$(git log origin/${{ github.base_ref }}..HEAD --pretty=format:"%s")
34-
35- echo "PR Commits:"
36- echo "$PR_COMMITS"
37- echo ""
38-
39- # Check for breaking changes
40- if echo "$PR_COMMITS" | grep -qE "^(feat|fix|chore|docs|style|refactor|perf|test)(\(.+\))?!:|^BREAKING CHANGE:"; then
41- RELEASE_TYPE="major"
42- elif echo "$PR_COMMITS" | grep -qE "^feat(\(.+\))?:"; then
43- RELEASE_TYPE="minor"
44- elif echo "$PR_COMMITS" | grep -qE "^fix(\(.+\))?:"; then
45- RELEASE_TYPE="patch"
30+ # Get commits from this PR
31+ COMMITS=$(git log origin/${{ github.base_ref }}..HEAD --pretty=format:"%s")
32+ echo "Commits in this PR:"
33+ echo "$COMMITS"
34+
35+ # Determine release type
36+ if echo "$COMMITS" | grep -qE "^[a-z]+(\(.+\))?!:|BREAKING CHANGE:"; then
37+ TYPE="major"
38+ elif echo "$COMMITS" | grep -qE "^feat(\(.+\))?:"; then
39+ TYPE="minor"
40+ elif echo "$COMMITS" | grep -qE "^fix(\(.+\))?:"; then
41+ TYPE="patch"
4642 else
47- RELEASE_TYPE ="none"
43+ TYPE ="none"
4844 fi
4945
50- echo "RELEASE_TYPE=$RELEASE_TYPE"
51- echo "release_type=$RELEASE_TYPE" >> $GITHUB_OUTPUT
52-
53- # Get current version (latest tag overall, not just reachable from current commit)
54- CURRENT_VERSION=$(git tag --sort=-v:refname | head -1 || echo "v0.0.0")
55- CURRENT_VERSION=${CURRENT_VERSION#v}
56- echo "Current version: v$CURRENT_VERSION"
57-
58- # Calculate next version
59- IFS='.' read -r major minor patch <<< "$CURRENT_VERSION"
60-
61- if [ "$RELEASE_TYPE" = "major" ]; then
62- major=$((major + 1))
63- minor=0
64- patch=0
65- elif [ "$RELEASE_TYPE" = "minor" ]; then
66- minor=$((minor + 1))
67- patch=0
68- elif [ "$RELEASE_TYPE" = "patch" ]; then
69- patch=$((patch + 1))
70- fi
46+ echo "release_type=$TYPE" >> $GITHUB_OUTPUT
47+ echo "Release type: $TYPE"
48+
49+ # Calculate next version if releasing
50+ if [ "$TYPE" != "none" ]; then
51+ CURRENT=$(git tag --sort=-v:refname | head -1 | sed 's/^v//')
52+ IFS='.' read -r maj min pat <<< "$CURRENT"
53+
54+ [ "$TYPE" = "major" ] && maj=$((maj + 1)) && min=0 && pat=0
55+ [ "$TYPE" = "minor" ] && min=$((min + 1)) && pat=0
56+ [ "$TYPE" = "patch" ] && pat=$((pat + 1))
7157
72- if [ "$RELEASE_TYPE" != "none" ]; then
73- NEXT_VERSION="$major.$minor.$patch"
74- echo "next_version=$NEXT_VERSION" >> $GITHUB_OUTPUT
58+ VERSION="$maj.$min.$pat"
59+ echo "next_version=$VERSION" >> $GITHUB_OUTPUT
7560 echo "will_release=true" >> $GITHUB_OUTPUT
76- echo "Next version: $NEXT_VERSION"
61+ echo "Next version: v$VERSION"
62+
63+ # Generate notes
64+ {
65+ echo "release_notes<<EOF"
66+ echo "## Changes in this PR"
67+ echo ""
68+ echo "$COMMITS" | sed 's/^/- /'
69+ echo "EOF"
70+ } >> $GITHUB_OUTPUT
7771 else
7872 echo "will_release=false" >> $GITHUB_OUTPUT
79- echo "No release will be created"
80- fi
81-
82- # Generate release notes
83- if [ "$RELEASE_TYPE" != "none" ]; then
84- NOTES="## Changes in this PR\n\n"
85- while IFS= read -r commit; do
86- NOTES="${NOTES}- ${commit}\n"
87- done <<< "$PR_COMMITS"
88- echo "release_notes<<EOF" >> $GITHUB_OUTPUT
89- echo -e "$NOTES" >> $GITHUB_OUTPUT
90- echo "EOF" >> $GITHUB_OUTPUT
9173 fi
9274
9375 - name : Comment PR
0 commit comments