35
35
id : previous_version
36
36
run : echo "PREVIOUS_VERSION=$(git show HEAD~:custom_components/$DOMAIN/manifest.json | jq -r '.version')" >> $GITHUB_ENV
37
37
38
+ - name : Collect Changes
39
+ if : ${{ env.CURRENT_VERSION != env.PREVIOUS_VERSION }}
40
+ id : collect_changes
41
+ run : |
42
+ PREVIOUS_TAG=$(git rev-list -n 1 v${{ env.PREVIOUS_VERSION }})
43
+ CURRENT_SHA=${{ github.sha }}
44
+ if [ -z "$PREVIOUS_TAG" ]; then
45
+ # Fallback in case there's no previous tag
46
+ CHANGELOG=$(git log --pretty=format:"%s%n%b" $(git rev-list --max-parents=0 HEAD)..$CURRENT_SHA)
47
+ else
48
+ CHANGELOG=$(git log --pretty=format:"%s%n%b" $PREVIOUS_TAG..$CURRENT_SHA)
49
+ fi
50
+
51
+ # Initialize section variables
52
+ ALL_FEATURES=""
53
+ ALL_FIXES=""
54
+ ALL_CHANGES=""
55
+ ALL_OTHER=""
56
+
57
+ # Process each commit message
58
+ echo "$CHANGELOG" | while IFS= read -r line; do
59
+ if [[ "$line" == "feat"* ]]; then
60
+ ALL_FEATURES+="- $line\n"
61
+ elif [[ "$line" == "fix"* ]]; then
62
+ ALL_FIXES+="- $line\n"
63
+ elif [[ "$line" == "refactor"* ]]; then
64
+ ALL_CHANGES+="- $line\n"
65
+ else
66
+ ALL_OTHER+="- $line\n"
67
+ fi
68
+ done
69
+
70
+ # Start with an empty formatted changelog
71
+ CHANGELOG=""
72
+
73
+ # Add sections if not empty
74
+ if [ ! -z "$ALL_FEATURES" ]; then
75
+ CHANGELOG+="## :new: Нововведения\n\n${ALL_FEATURES}\n"
76
+ fi
77
+ if [ ! -z "$ALL_FIXES" ]; then
78
+ CHANGELOG+="## :bug: Исправления\n\n${ALL_FIXES}\n"
79
+ fi
80
+ if [ ! -z "$ALL_CHANGES" ]; then
81
+ CHANGELOG+="## :wrench: Изменения\n\n${ALL_CHANGES}"
82
+ fi
83
+ if [ ! -z "$ALL_OTHER" ]; then
84
+ CHANGELOG+="## :information_source: Примечания\n\n${ALL_OTHER}"
85
+ fi
86
+
87
+ # Save to GITHUB_ENV
88
+ {
89
+ echo "CHANGELOG<<EOF"
90
+ echo -e "$CHANGELOG" | sed '$d'
91
+ echo "EOF"
92
+ } >> "$GITHUB_ENV"
93
+
38
94
- name : Create Tag
39
95
if : ${{ env.CURRENT_VERSION != env.PREVIOUS_VERSION }}
40
96
uses : actions/github-script@v7
@@ -53,13 +109,13 @@ jobs:
53
109
uses : actions/github-script@v7
54
110
with :
55
111
script : |
56
- const version = '${{ steps.current_version.outputs.version }}' ;
112
+ const {CHANGELOG, CURRENT_VERSION} = process.env ;
57
113
github.rest.repos.createRelease({
58
114
owner: context.repo.owner,
59
115
repo: context.repo.repo,
60
- tag_name: `v${version }`,
61
- name: `v${version }`,
62
- body: "## :new: Нововведения\n\n<!-- ... -->\n\n## :bug: Исправления\n\n<!-- ... -->\n\n## :wrench: Изменения\n\n<!-- ... -->\n\n## :information_source: Примечания\n\n<!-- ... -->" ,
116
+ tag_name: `v${CURRENT_VERSION }`,
117
+ name: `v${CURRENT_VERSION }`,
118
+ body: `${CHANGELOG}` ,
63
119
draft: false,
64
120
prerelease: true,
65
121
});
0 commit comments