@@ -35,31 +35,85 @@ jobs:
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 : Create Tag
38
+ - name : Collect Changes
39
39
if : ${{ env.CURRENT_VERSION != env.PREVIOUS_VERSION }}
40
- uses : actions/github-script@v7
41
- with :
42
- script : |
43
- const version = '${{ steps.current_version.outputs.version }}';
44
- github.rest.git.createRef({
45
- owner: context.repo.owner,
46
- repo: context.repo.repo,
47
- ref: `refs/tags/v${version}`,
48
- sha: '${{ github.sha }}'
49
- });
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 "Processing changelog"
59
+ echo "$CHANGELOG" | while IFS= read -r line; do
60
+ if [[ "$line" == "feat"* ]]; then
61
+ echo "Adding features line: $line"
62
+ ALL_FEATURES+="- $line\n"
63
+ elif [[ "$line" == "fix"* ]]; then
64
+ echo "Adding fixes line: $line"
65
+ ALL_FIXES+="- $line\n"
66
+ elif [[ "$line" == "refactor"* ]]; then
67
+ echo "Adding changes line: $line"
68
+ ALL_CHANGES+="- $line\n"
69
+ elif [[ ! -z "$line" ]]; then
70
+ echo "Adding others line: $line"
71
+ ALL_OTHER+="- $line\n"
72
+ fi
73
+ done
74
+
75
+ # Start with an empty formatted changelog
76
+ CHANGELOG=""
77
+
78
+ # Add sections if not empty
79
+ if [ ! -z "$ALL_FEATURES" ]; then
80
+ CHANGELOG+="## :new: Нововведения\n\n${ALL_FEATURES}\n"
81
+ fi
82
+ if [ ! -z "$ALL_FIXES" ]; then
83
+ CHANGELOG+="## :bug: Исправления\n\n${ALL_FIXES}\n"
84
+ fi
85
+ if [ ! -z "$ALL_CHANGES" ]; then
86
+ CHANGELOG+="## :wrench: Изменения\n\n${ALL_CHANGES}"
87
+ fi
88
+ if [ ! -z "$ALL_OTHER" ]; then
89
+ CHANGELOG+="## :information_source: Примечания\n\n${ALL_OTHER}"
90
+ fi
91
+
92
+ echo "Resulting changelog:"
93
+ echo "$CHANGELOG"
94
+
95
+ echo "After removing spaces:"
96
+ echo "$CHANGELOG" | sed '$d'
97
+
98
+ # Save to GITHUB_ENV
99
+ {
100
+ echo 'CHANGELOG<<EOF'
101
+ echo -e "$CHANGELOG" | sed '$d'
102
+ echo 'EOF'
103
+ } >> $GITHUB_ENV
50
104
51
105
- name : Create Pre-release
52
106
if : ${{ env.CURRENT_VERSION != env.PREVIOUS_VERSION }}
53
107
uses : actions/github-script@v7
54
108
with :
55
109
script : |
56
- const version = '${{ steps.current_version.outputs.version }}' ;
110
+ const {CHANGELOG, CURRENT_VERSION} = process.env ;
57
111
github.rest.repos.createRelease({
58
112
owner: context.repo.owner,
59
113
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<!-- ... -->" ,
114
+ tag_name: `v${CURRENT_VERSION }`,
115
+ name: `v${CURRENT_VERSION }`,
116
+ body: `${CHANGELOG}` ,
63
117
draft: false,
64
118
prerelease: true,
65
119
});
0 commit comments