-
-
Notifications
You must be signed in to change notification settings - Fork 25
134 lines (123 loc) · 4.79 KB
/
changelog.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
name: changelog
on:
workflow_run:
workflows:
- "Build and Release AnymeX" # Name of the triggering workflow
types:
- completed
workflow_dispatch: # Allow manual triggering of this workflow
jobs:
notify:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
# Clear existing CHANGELOG.md
- name: Clear CHANGELOG.md
run: |
echo ""> CHANGELOG.md
echo "" >> CHANGELOG.md
- name: Get previous tag
id: get_prev_tag
run: |
echo "Getting the previous tag..."
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
echo "Previous tag retrieved: $PREV_TAG"
if [ -z "$PREV_TAG" ]; then
echo "No previous tag found, using the initial commit."
PREV_TAG=$(git rev-list --max-parents=0 HEAD)
fi
echo "prev_tag=$PREV_TAG" >> $GITHUB_ENV
echo "Previous tag: $PREV_TAG"
- name: Get commit messages between tags
id: get_commits
run: |
echo "Getting commit messages between tags..."
COMMITS=$(git log ${{ env.prev_tag }}..HEAD --pretty=format:'%h %s' | tr '\n' '|')
echo "Commits retrieved: $COMMITS"
echo "commits=$COMMITS" >> $GITHUB_ENV
- name: Categorize commits
id: categorize
run: |
echo "Categorizing commits..."
FEATURES=""
BUG_FIXES=""
REFACTORS=""
STYLE_CHANGES=""
PERFORMANCE=""
CHORES=""
REPO_URL="https://github.com/${{ github.repository }}"
IFS='|' read -ra COMMIT_LIST <<< "${{ env.commits }}"
echo "Commit list: ${COMMIT_LIST[@]}"
for LINE in "${COMMIT_LIST[@]}"; do
HASH=$(echo "$LINE" | awk '{print $1}')
MESSAGE=$(echo "$LINE" | cut -d' ' -f2-)
LINK="[$HASH]($REPO_URL/commit/$HASH)"
FORMATTED_COMMIT="* $LINK: $MESSAGE"
echo "Processing commit: $FORMATTED_COMMIT"
if [[ $MESSAGE == feat* ]]; then
FEATURES+="$FORMATTED_COMMIT\n"
elif [[ $MESSAGE == fix* || $MESSAGE == bug* || $MESSAGE == improvement* || $MESSAGE == patch* ]]; then
BUG_FIXES+="$FORMATTED_COMMIT\n"
elif [[ $MESSAGE == refactor* ]]; then
REFACTORS+="$FORMATTED_COMMIT\n"
elif [[ $MESSAGE == style* ]]; then
STYLE_CHANGES+="$FORMATTED_COMMIT\n"
elif [[ $MESSAGE == perf* ]]; then
PERFORMANCE+="$FORMATTED_COMMIT\n"
elif [[ $MESSAGE == chore* || $MESSAGE == docs* || $MESSAGE == build* || $MESSAGE == ci* ]]; then
CHORES+="$FORMATTED_COMMIT\n"
fi
done
if [ -n "$FEATURES" ]; then
echo "### 🎉 New Features" >> CHANGELOG.md
echo -e "$FEATURES" >> CHANGELOG.md
fi
if [ -n "$BUG_FIXES" ]; then
echo "### 🛠️ Bug Fixes & Improvements" >> CHANGELOG.md
echo -e "$BUG_FIXES" >> CHANGELOG.md
fi
if [ -n "$REFACTORS" ]; then
echo "### 🔧 Refactors" >> CHANGELOG.md
echo -e "$REFACTORS" >> CHANGELOG.md
fi
if [ -n "$STYLE_CHANGES" ]; then
echo "### 🎨 Style Changes" >> CHANGELOG.md
echo -e "$STYLE_CHANGES" >> CHANGELOG.md
fi
if [ -n "$PERFORMANCE" ]; then
echo "### 🚀 Performance Improvements" >> CHANGELOG.md
echo -e "$PERFORMANCE" >> CHANGELOG.md
fi
if [ -n "$CHORES" ]; then
echo "### 🧹 Chores & Documentation" >> CHANGELOG.md
echo -e "$CHORES" >> CHANGELOG.md
fi
- name: Commit and push changelog
run: |
echo "Committing and pushing changelog..."
git config --global user.name "GitHub Actions"
git config --global user.email "[email protected]"
git add CHANGELOG.md
git commit -m "Update changelog for version ${{ github.ref_name }}"
git push origin HEAD:main
# Step 2: Get the latest tag
- name: Get latest tag
id: get_tag
run: |
# Fetch all tags
git fetch --tags
# Get the latest tag
TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
echo "latest_tag=$TAG" >> $GITHUB_ENV
# Step 4: Run release action with the latest tag
- name: Create or Update Release
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
bodyFile: CHANGELOG.md
tag: ${{ env.latest_tag }} # Use the latest tag
allowUpdates: true