1+ name : Create GitHub Releases
2+
3+ on :
4+ push :
5+ tags :
6+ - " packages/*/v*"
7+
8+ jobs :
9+ create-release :
10+ runs-on : ubuntu-latest
11+
12+ permissions :
13+ contents : write
14+
15+ steps :
16+ - name : Checkout repository
17+ uses : actions/checkout@v5
18+ with :
19+ fetch-depth : 0
20+
21+ - name : Setup Node.js
22+ uses : actions/setup-node@v5
23+ with :
24+ node-version : " 22"
25+
26+ - name : Extract package and version from tag
27+ run : |
28+ FULL_TAG="${GITHUB_REF#refs/tags/}" # packages/ui/v2.1.0
29+
30+ PACKAGE=$(echo "$FULL_TAG" | cut -d/ -f2)
31+ VERSION=$(echo "$FULL_TAG" | cut -d/ -f3 | sed 's/^v//')
32+
33+ echo "FULL_TAG=$FULL_TAG" >> $GITHUB_ENV
34+ echo "PACKAGE=$PACKAGE" >> $GITHUB_ENV
35+ echo "VERSION=$VERSION" >> $GITHUB_ENV
36+
37+ - name : Resolve package name
38+ run : |
39+ PACKAGE_DIR="packages/$PACKAGE"
40+
41+ if [ -f "$PACKAGE_DIR/package.json" ]; then
42+ PACKAGE_NAME=$(node -p "require('./$PACKAGE_DIR/package.json').name")
43+ else
44+ PACKAGE_NAME="$PACKAGE"
45+ fi
46+
47+ echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_ENV
48+
49+ - name : Extract changelog
50+ run : |
51+ PACKAGE_DIR="packages/$PACKAGE"
52+ CHANGELOG_FILE="$PACKAGE_DIR/CHANGELOG.md"
53+
54+ if [ -f "$CHANGELOG_FILE" ]; then
55+ awk "/^## \[$VERSION\]/ {flag=1; next} /^## \[/ {flag=0} flag" "$CHANGELOG_FILE" > changelog_body.txt
56+ else
57+ echo "No changelog available" > changelog_body.txt
58+ fi
59+
60+ - name : Add contributors to changelog
61+ id : contributors
62+ run : |
63+ PACKAGE_DIR="packages/$PACKAGE"
64+ CHANGELOG_FILE="$PACKAGE_DIR/CHANGELOG.md"
65+
66+ # Get previous tag for the same package
67+ PREV_TAG=$(git tag -l "packages/$PACKAGE/v*" | grep -v "$VERSION" | sort -V | tail -n1 || echo "")
68+
69+ # Get list of contributors since previous tag
70+ if [ -n "$PREV_TAG" ]; then
71+ CONTRIBUTORS=$(git log $PREV_TAG..HEAD --pretty=format:"%an" -- $PACKAGE_DIR | sort -u)
72+ else
73+ CONTRIBUTORS=$(git log --pretty=format:"%an" -- $PACKAGE_DIR | sort -u)
74+ fi
75+
76+ # Generate @contributor link with GitHub profile URL
77+ CONTRIBUTORS_MD=""
78+ for NAME in $CONTRIBUTORS; do
79+ USERNAME=$(echo $NAME | tr -d ' ')
80+ CONTRIBUTORS_MD="$CONTRIBUTORS_MD\n[@$USERNAME](https://github.com/$USERNAME)"
81+ done
82+
83+ # Add contributors to changelog body
84+ if [ -n "$CONTRIBUTORS_MD" ]; then
85+ echo -e "\n❤️ Thank You$CONTRIBUTORS_MD" >> changelog_body.txt
86+ fi
87+
88+ # Update CHANGELOG_BODY variable
89+ echo "CHANGELOG_BODY<<EOF" >> $GITHUB_ENV
90+ cat changelog_body.txt >> $GITHUB_ENV
91+ echo "EOF" >> $GITHUB_ENV
92+
93+ - name : Prepare release body
94+ run : |
95+ echo "CHANGELOG_BODY<<EOF" >> $GITHUB_ENV
96+ cat changelog_body.txt >> $GITHUB_ENV
97+ echo "EOF" >> $GITHUB_ENV
98+
99+ - name : Create GitHub Release
100+ uses : actions/create-release@v1
101+ with :
102+ tag_name : ${{ env.FULL_TAG }}
103+ release_name : " ${{ env.PACKAGE_NAME }} v${{ env.VERSION }}"
104+ body : ${{ env.CHANGELOG_BODY }}
105+ draft : false
106+ prerelease : false
107+ env :
108+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments