@@ -3,70 +3,104 @@ name: Release CI
33on :
44 push :
55 branches :
6- - ' release/[0-9]+.[0-9]+.[0-9]+'
6+ - ' release/[0-9]+\.[0-9]+\.[0-9]+'
7+ - ' hotfix/[0-9]+\.[0-9]+\.[0-9]+'
8+ - ' pre-release/[0-9]+\.[0-9]+\.[0-9]+-alpha\.[0-9]+'
9+ - ' pre-release/[0-9]+\.[0-9]+\.[0-9]+-beta\.[0-9]+'
10+ - ' pre-release/[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+'
11+ - ' pre-release/[0-9]+\.[0-9]+\.[0-9]+-hotfix\.[0-9]+'
712
813jobs :
914 build :
10- runs-on : macos-13
15+ runs-on : macos-latest
1116 permissions :
17+ id-token : write
1218 contents : write
1319 pull-requests : write
1420
1521 strategy :
1622 matrix :
17- node-version : [18.x]
18- # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
23+ node-version : [20.x]
1924
2025 steps :
21- - uses : actions/checkout@v3
26+ - uses : actions/checkout@v4
2227 - run : |
2328 git config user.name ${{ github.actor }}
2429 git config user.email ${{ github.actor }}@users.noreply.github.com
2530
26- - name : Use Node.js ${{ matrix.node-version }}
27- uses : actions/setup-node@v3
31+ - name : Setup Node.js
32+ uses : actions/setup-node@v4
2833 with :
2934 node-version : ${{ matrix.node-version }}
35+ registry-url : ' https://registry.npmjs.org'
3036 cache : ' npm'
3137 cache-dependency-path : ' ./common/config/rush/pnpm-lock.yaml'
3238
33- # Install rush
39+ - name : Update npm
40+ run : npm install -g npm@latest
41+
42+ - name : Install latest pnpm
43+ run : npm install -g pnpm@10.7.0
44+
45+ - name : Install Python distutils (macOS)
46+ if : runner.os == 'macOS'
47+ run : |
48+ python3 -m pip install setuptools --break-system-packages
49+
50+ - name : Install Python distutils (Linux)
51+ if : runner.os == 'Linux'
52+ run : |
53+ sudo apt-get update
54+ sudo apt-get install -y python3-distutils
55+ python3 -m pip install setuptools --break-system-packages
56+
57+ - name : Install native deps for node-canvas (macOS)
58+ if : runner.os == 'macOS'
59+ run : |
60+ brew update
61+ brew install pkg-config cairo pango libpng jpeg giflib librsvg
62+
63+ - name : Install native deps for node-canvas (Linux)
64+ if : runner.os == 'Linux'
65+ run : |
66+ sudo apt-get update
67+ sudo apt-get install -y build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev pkg-config
68+
3469 - name : Install rush
3570 run : node common/scripts/install-run-rush.js install --bypass-policy
3671
37- - name : Parse semver version from branch name
38- id : semver_parser
72+ # Release flow
73+ - name : Parse semver (release)
74+ if : startsWith(github.ref_name, 'release/')
75+ id : semver_release
3976 uses : xile611/read-package-version-action@main
4077 with :
4178 path : packages/vchart
4279 semver_string : ${{ github.ref_name }}
43- semver_pattern : ' ^release/(.*)$' # ^v?(.*)$ by default
80+ semver_pattern : ' ^release/(.*)$'
4481
45- - name : update nextBump of version policies
82+ - name : update nextBump (release)
83+ if : startsWith(github.ref_name, 'release/')
4684 uses : xile611/set-next-bump-of-rush@main
4785 with :
48- release_version : ${{ steps.semver_parser .outputs.full }}
86+ release_version : ${{ steps.semver_release .outputs.full }}
4987 write_next_bump : true
5088
51- - name : Generate changelog by rush version
89+ - name : Generate changelog (release)
90+ if : startsWith(github.ref_name, 'release/')
5291 run : node common/scripts/install-run-rush.js version --bump
5392
54- - name : Update version
55- run : node common/scripts/apply-release-version.js 'none' ${{ steps.semver_parser.outputs.main }}
93+ - name : Update version (release)
94+ if : startsWith(github.ref_name, 'release/')
95+ run : node common/scripts/apply-release-version.js 'none' ${{ steps.semver_release.outputs.main }}
5696
5797 - name : Build vutils-extension && vchart
5898 env :
5999 NODE_OPTIONS : ' --max_old_space_size=4096'
60100 run : node common/scripts/install-run-rush.js build --to @visactor/vchart
61101
62- # run bugserver after the build of main packages
63- # - name: Run Bugserver
64- # working-directory: ./packages/vchart
65- # env:
66- # BUG_SERVER_TOKEN: ${{ secrets.BUG_SERVER_TOKEN }}
67- # run: node ../../common/scripts/install-run-rushx.js ci
68-
69102 - name : Build vchart-extension
103+ if : startsWith(github.ref_name, 'release/') || startsWith(github.ref_name, 'pre-release/')
70104 env :
71105 NODE_OPTIONS : ' --max_old_space_size=4096'
72106 run : node common/scripts/install-run-rush.js build --only @visactor/vchart-extension
@@ -96,54 +130,153 @@ jobs:
96130 NODE_OPTIONS : ' --max_old_space_size=4096'
97131 run : node common/scripts/install-run-rush.js build --only @visactor/wx-vchart
98132
99- - name : Publish to npm
100- env :
101- NODE_AUTH_TOKEN : ${{secrets.NPM_TOKEN}}
102- NPM_AUTH_TOKEN : ${{secrets.NPM_TOKEN}}
133+ - name : Publish to npm (release)
134+ if : startsWith(github.ref_name, 'release/')
103135 run : node common/scripts/install-run-rush.js publish --publish --include-all --tag latest
104136
105137 - name : Update shrinkwrap
106138 run : node common/scripts/install-run-rush.js update
107139
108- - name : Get npm version
109- id : package-version
140+ - name : Get npm version (release)
141+ if : startsWith(github.ref_name, 'release/')
142+ id : package_version_release
110143 uses : xile611/read-package-version-action@main
111144 with :
112145 path : packages/vchart
113146
114- - name : Commit & Push changes
147+ - name : Commit & Push changes (release)
148+ if : startsWith(github.ref_name, 'release/')
115149 run : |
116150 git add .
117- git commit -m 'build: release version ${{ steps.package-version .outputs.current_version }}' -n
118- git push origin ${{ github.ref_name }}
151+ git commit -m 'build: release version ${{ steps.package_version_release .outputs.current_version }} [skip ci] ' -n
152+ git push --no-verify origin ${{ github.ref_name }}
119153
120- - name : Collect changelog of rush
154+ - name : Collect changelog of rush (release)
155+ if : startsWith(github.ref_name, 'release/')
121156 uses : xile611/collect-rush-changlog@main
122- id : changelog
157+ id : changelog_release
123158 with :
124- version : ${{ steps.package-version .outputs.current_version }}
159+ version : ${{ steps.package_version_release .outputs.current_version }}
125160
126- - name : Create Release for Tag
127- id : release_tag
161+ - name : Create Release for Tag (release)
162+ if : startsWith(github.ref_name, 'release/')
163+ id : release_tag_release
128164 uses : ncipollo/release-action@v1.12.0
129165 env :
130166 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
131167 with :
132- tag : v${{ steps.package-version .outputs.current_version }}
168+ tag : v${{ steps.package_version_release .outputs.current_version }}
133169 commit : main
134170 prerelease : false
135171 body : |
136- ${{ steps.changelog .outputs.markdown }}
137- draft : true #
172+ ${{ steps.changelog_release .outputs.markdown }}
173+ draft : true
138174
139- - name : Create Pull Request
175+ - name : Create Pull Request (release)
176+ if : startsWith(github.ref_name, 'release/')
140177 uses : dustinirving/create-pr@v1.0.2
141178 with :
142179 token : ${{ secrets.GITHUB_TOKEN }}
143- title : ' [Auto release] release ${{ steps.package-version .outputs.current_version }}'
180+ title : ' [Auto release] release ${{ steps.package_version_release .outputs.current_version }}'
144181 base : main
145182 head : ${{ github.ref_name }}
146- labels : release # default labels, the action will throw error if not specified
147- reviewers : kkxxkk2019 # default reviewers, the action will throw error if not specified
183+ labels : release
184+ reviewers : kkxxkk2019
185+ body : |
186+ ${{ steps.changelog_release.outputs.markdown }}
187+
188+ # Hotfix flow
189+ - name : Parse semver (hotfix)
190+ if : startsWith(github.ref_name, 'hotfix/')
191+ id : semver_hotfix
192+ uses : xile611/read-package-version-action@main
193+ with :
194+ path : packages/vchart
195+ semver_string : ${{ github.ref_name }}
196+ semver_pattern : ' ^hotfix/(.*)$'
197+
198+ - name : update nextBump (hotfix)
199+ if : startsWith(github.ref_name, 'hotfix/')
200+ uses : xile611/set-next-bump-of-rush@main
201+ with :
202+ release_version : ${{ steps.semver_hotfix.outputs.full }}
203+ write_next_bump : true
204+
205+ - name : Generate changelog (hotfix)
206+ if : startsWith(github.ref_name, 'hotfix/')
207+ run : node common/scripts/install-run-rush.js version --bump
208+
209+ - name : Update version (hotfix)
210+ if : startsWith(github.ref_name, 'hotfix/')
211+ run : node common/scripts/apply-release-version.js 'none' ${{ steps.semver_hotfix.outputs.main }}
212+
213+ - name : Publish to npm (hotfix)
214+ if : startsWith(github.ref_name, 'hotfix/')
215+ run : node common/scripts/install-run-rush.js publish --publish --include-all --tag hotfix
216+
217+ - name : Get npm version (hotfix)
218+ if : startsWith(github.ref_name, 'hotfix/')
219+ id : package_version_hotfix
220+ uses : xile611/read-package-version-action@main
221+ with :
222+ path : packages/vchart
223+
224+ - name : Commit & Push changes (hotfix)
225+ if : startsWith(github.ref_name, 'hotfix/')
226+ run : |
227+ git add .
228+ git commit -m 'build: prelease version ${{ steps.package_version_hotfix.outputs.current_version }} [skip ci]' -n
229+ git push --no-verify origin ${{ github.ref_name }}
230+
231+ - name : Collect changelog of rush (hotfix)
232+ if : startsWith(github.ref_name, 'hotfix/')
233+ uses : xile611/collect-rush-changlog@main
234+ id : changelog_hotfix
235+ with :
236+ version : ${{ steps.package_version_hotfix.outputs.current_version }}
237+
238+ - name : Create Release for Tag (hotfix)
239+ if : startsWith(github.ref_name, 'hotfix/')
240+ id : release_tag_hotfix
241+ uses : ncipollo/release-action@v1.12.0
242+ env :
243+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
244+ with :
245+ tag : v${{ steps.package_version_hotfix.outputs.current_version }}
246+ commit : ${{ github.ref_name }}
247+ prerelease : false
148248 body : |
149- ${{ steps.changelog.outputs.markdown }}
249+ ${{ steps.changelog_hotfix.outputs.markdown }}
250+ draft : true
251+
252+ # Pre-release flow
253+ - name : Parse semver (pre-release)
254+ if : startsWith(github.ref_name, 'pre-release/')
255+ id : semver_prerelease
256+ uses : xile611/read-package-version-action@main
257+ with :
258+ path : packages/vchart
259+ semver_string : ${{ github.ref_name }}
260+ semver_pattern : ' ^pre-release/(.*)$'
261+
262+ - name : Apply prereleaseName (pre-release)
263+ if : startsWith(github.ref_name, 'pre-release/')
264+ run : node common/scripts/apply-release-version.js ${{ steps.semver_prerelease.outputs.pre_release_name }} ${{ steps.semver_prerelease.outputs.main }}
265+
266+ - name : Publish to npm (pre-release)
267+ if : startsWith(github.ref_name, 'pre-release/')
268+ run : node common/scripts/install-run-rush.js publish --publish --include-all --tag ${{ steps.semver_prerelease.outputs.pre_release_type }}
269+
270+ - name : Get npm version (pre-release)
271+ if : startsWith(github.ref_name, 'pre-release/')
272+ id : package_version_prerelease
273+ uses : xile611/read-package-version-action@main
274+ with :
275+ path : packages/vchart
276+
277+ - name : Commit & Push changes (pre-release)
278+ if : startsWith(github.ref_name, 'pre-release/')
279+ run : |
280+ git add .
281+ git commit -m 'build: prerelease version ${{ steps.package_version_prerelease.outputs.current_version }} [skip ci]' -n
282+ git push --no-verify origin ${{ github.ref_name }}
0 commit comments