@@ -35,31 +35,90 @@ 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" | uniq | while IFS= read -r line; do
60
+ if [[ "$line" == "feat"* ]]; then
61
+ echo "Adding features line: $line"
62
+ ALL_FEATURES="${ALL_FEATURES}- $line\n"
63
+ elif [[ "$line" == "fix"* ]]; then
64
+ echo "Adding fixes line: $line"
65
+ ALL_FIXES="${ALL_FIXES}- $line\n"
66
+ elif [[ "$line" == "refactor"* ]]; then
67
+ echo "Adding changes line: $line"
68
+ ALL_CHANGES="${ALL_CHANGES}- $line\n"
69
+ elif [[ ! -z "$line" ]]; then
70
+ echo "Adding others line: $line"
71
+ ALL_OTHER="${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="${CHANGELOG}## :new: Нововведения\n\n${ALL_FEATURES}\n"
81
+ else
82
+ echo "All features are empty: ${ALL_FEATURES}"
83
+ fi
84
+ if [ ! -z "${ALL_FIXES}" ]; then
85
+ CHANGELOG="${CHANGELOG}## :bug: Исправления\n\n${ALL_FIXES}\n"
86
+ else
87
+ echo "All fixes are empty: ${ALL_FIXES}"
88
+ fi
89
+ if [ ! -z "${ALL_CHANGES}" ]; then
90
+ CHANGELOG="${CHANGELOG}## :wrench: Изменения\n\n${ALL_CHANGES}"
91
+ else
92
+ echo "All changes are empty: ${ALL_CHANGES}"
93
+ fi
94
+ if [ ! -z "${ALL_OTHER}" ]; then
95
+ CHANGELOG="${CHANGELOG}## :information_source: Примечания\n\n${ALL_OTHER}"
96
+ else
97
+ echo "All other are empty: ${ALL_OTHER}"
98
+ fi
99
+
100
+ echo "Resulting changelog:"
101
+ echo "$CHANGELOG"
102
+
103
+ # Save to GITHUB_ENV
104
+ {
105
+ echo 'CHANGELOG<<EOF'
106
+ echo -e "$CHANGELOG" | sed '$d'
107
+ echo 'EOF'
108
+ } >> $GITHUB_ENV
50
109
51
110
- name : Create Pre-release
52
111
if : ${{ env.CURRENT_VERSION != env.PREVIOUS_VERSION }}
53
112
uses : actions/github-script@v7
54
113
with :
55
114
script : |
56
- const version = '${{ steps.current_version.outputs.version }}' ;
115
+ const {CHANGELOG, CURRENT_VERSION} = process.env ;
57
116
github.rest.repos.createRelease({
58
117
owner: context.repo.owner,
59
118
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<!-- ... -->" ,
119
+ tag_name: `v${CURRENT_VERSION }`,
120
+ name: `v${CURRENT_VERSION }`,
121
+ body: `${CHANGELOG}` ,
63
122
draft: false,
64
123
prerelease: true,
65
124
});
0 commit comments