1- name : Pre-release CI
1+ name : Release CI
22
33on :
44 push :
55 branches :
6+ - ' release/[0-9]+.[0-9]+.[0-9]+'
7+ - ' hotfix/[0-9]+.[0-9]+.[0-9]+'
68 - ' pre-release/[0-9]+.[0-9]+.[0-9]+-alpha.[0-9]+'
79 - ' pre-release/[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+'
810 - ' pre-release/[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+'
911
1012jobs :
1113 build :
12- runs-on : macOS-latest # 如果用了electron,记得改成 macOS-latest
13-
14+ runs-on : macos-latest # 如果用了electron,记得改成 macOS-latest
1415 permissions :
1516 contents : write
17+ pull-requests : write
18+ id-token : write
1619
1720 strategy :
1821 matrix :
@@ -21,12 +24,17 @@ jobs:
2124
2225 steps :
2326 - uses : actions/checkout@v3
27+ - run : |
28+ git config user.name ${{ github.actor }}
29+ git config user.email ${{ github.actor }}@users.noreply.github.com
30+
2431 - name : Use Node.js ${{ matrix.node-version }}
25- uses : actions/setup-node@v3
32+ uses : actions/setup-node@v4
2633 with :
2734 node-version : ${{ matrix.node-version }}
2835 cache : ' npm'
2936 cache-dependency-path : ' ./common/config/rush/pnpm-lock.yaml'
37+ registry-url : ' https://registry.npmjs.org'
3038
3139 - name : Print All Github Environment Variables
3240 run : env
@@ -37,46 +45,184 @@ jobs:
3745 python-version : ' 3.11'
3846
3947 - name : Set PYTHON env
40- run :
41- echo "PYTHON=$(which python3)" >> $GITHUB_ENV
42-
43- # Install rush
48+ run : echo "PYTHON=$(which python3)" >> $GITHUB_ENV
49+
50+ # Install rush
51+ - name : Install native deps for node-canvas (macOS)
52+ if : runner.os == 'macOS'
53+ run : |
54+ brew update
55+ brew install pkg-config cairo pango libpng jpeg giflib librsvg
56+ - name : Install native deps for node-canvas (Linux)
57+ if : runner.os == 'Linux'
58+ run : |
59+ sudo apt-get update
60+ sudo apt-get install -y build-essential pkg-config libcairo2-dev libpango1.0-dev libpng-dev libjpeg-dev libgif-dev librsvg2-dev
4461 - name : Install rush
4562 run : node common/scripts/install-run-rush.js install --bypass-policy
4663
47- - name : Parse semver version from branch name
48- id : semver_parser
64+ - name : Parse semver for release
65+ if : startsWith(github.ref_name, 'release/')
66+ id : semver_release
67+ uses : xile611/read-package-version-action@main
68+ with :
69+ path : packages/vrender
70+ semver_string : ${{ github.ref_name }}
71+ semver_pattern : ' ^release/(.*)$'
72+
73+ - name : Parse semver for hotfix
74+ if : startsWith(github.ref_name, 'hotfix/')
75+ id : semver_hotfix
76+ uses : xile611/read-package-version-action@main
77+ with :
78+ path : packages/vrender
79+ semver_string : ${{ github.ref_name }}
80+ semver_pattern : ' ^hotfix/(.*)$'
81+
82+ - name : Parse semver for pre-release
83+ if : startsWith(github.ref_name, 'pre-release/')
84+ id : semver_prerelease
4985 uses : xile611/read-package-version-action@main
5086 with :
5187 path : packages/vrender
5288 semver_string : ${{ github.ref_name }}
53- semver_pattern : ' ^pre-release/(.*)$' # ^v?(.*)$ by default
89+ semver_pattern : ' ^pre-release/(.*)$'
90+
91+ - name : update nextBump of version policies (release)
92+ if : startsWith(github.ref_name, 'release/')
93+ uses : xile611/set-next-bump-of-rush@main
94+ with :
95+ release_version : ${{ steps.semver_release.outputs.full }}
96+ write_next_bump : true
97+
98+ - name : update nextBump of version policies (hotfix)
99+ if : startsWith(github.ref_name, 'hotfix/')
100+ uses : xile611/set-next-bump-of-rush@main
101+ with :
102+ release_version : ${{ steps.semver_hotfix.outputs.full }}
103+ write_next_bump : true
104+
105+ - name : Update version
106+ if : startsWith(github.ref_name, 'release/') || startsWith(github.ref_name, 'hotfix/')
107+ run : node common/scripts/install-run-rush.js version --bump
108+
109+ # - name: Run CI
110+ # working-directory: ./tools/bugserver-trigger
111+ # env:
112+ # BUG_SERVER_TOKEN: ${{ secrets.BUG_SERVER_TOKEN }}
113+ # run: node ../../common/scripts/install-run-rushx.js ci -t @internal/bugserver-trigger
54114
55115 - name : Apply prereleaseName
56- run : node common/scripts/apply-prerelease-version.js ${{ steps.semver_parser.outputs.pre_release_name }} ${{ steps.semver_parser.outputs.main }}
116+ if : startsWith(github.ref_name, 'pre-release/')
117+ run : node common/scripts/apply-prerelease-version.js ${{ steps.semver_prerelease.outputs.pre_release_name }} ${{ steps.semver_prerelease.outputs.main }}
57118
58- - name : Build packages
119+ - name : Build packages (pre-release)
120+ if : startsWith(github.ref_name, 'pre-release/')
59121 run : node common/scripts/install-run-rush.js build --only tag:package
60122
61- - name : Publish to npm
123+ - name : Publish to npm (release)
124+ if : startsWith(github.ref_name, 'release/')
125+ run : node common/scripts/install-run-rush.js publish --publish --include-all --tag latest
126+
127+ - name : Publish to npm (hotfix)
128+ if : startsWith(github.ref_name, 'hotfix/')
129+ run : node common/scripts/install-run-rush.js publish --publish --include-all --tag hotfix
130+
131+ - name : Publish to npm (pre-release)
62132 env :
63133 NODE_AUTH_TOKEN : ${{secrets.NPM_TOKEN}}
64134 NPM_AUTH_TOKEN : ${{secrets.NPM_TOKEN}}
65- run : node common/scripts/install-run-rush.js publish --publish --include-all --tag ${{ steps.semver_parser.outputs.pre_release_type }}
135+ if : startsWith(github.ref_name, 'pre-release/')
136+ run : node common/scripts/install-run-rush.js publish --publish --include-all --tag ${{ steps.semver_prerelease.outputs.pre_release_type }}
66137
67138 - name : Update shrinkwrap
68139 run : node common/scripts/install-run-rush.js update
69140
70- - name : Get npm version
141+ - name : Get npm version (release/hotfix)
142+ if : startsWith(github.ref_name, 'release/') || startsWith(github.ref_name, 'hotfix/')
71143 id : package-version
144+ uses : xile611/read-package-version-action@v2.1
145+ with :
146+ path : packages/vrender
147+
148+ - name : Get npm version (pre-release)
149+ if : startsWith(github.ref_name, 'pre-release/')
150+ id : package-version-pre
72151 uses : xile611/read-package-version-action@main
73152 with :
74153 path : packages/vrender
75154
76- - name : Commit & Push changes
155+ - name : Disable git hooks for CI (release/hotfix)
156+ if : startsWith(github.ref_name, 'release/') || startsWith(github.ref_name, 'hotfix/')
157+ run : git config core.hooksPath /dev/null
158+ - name : Commit & Push changes (release/hotfix)
159+ if : startsWith(github.ref_name, 'release/') || startsWith(github.ref_name, 'hotfix/')
77160 uses : actions-js/push@master
161+ env :
162+ HUSKY : 0
78163 with :
79164 github_token : ${{ secrets.GITHUB_TOKEN }}
80165 message : ' build: prelease version ${{ steps.package-version.outputs.current_version }}'
81166 branch : ${{ github.ref_name }}
167+
168+ - name : Disable git hooks for CI (pre-release)
169+ if : startsWith(github.ref_name, 'pre-release/')
170+ run : git config core.hooksPath /dev/null
171+ - name : Commit & Push changes (pre-release)
172+ if : startsWith(github.ref_name, 'pre-release/')
173+ uses : actions-js/push@master
174+ env :
175+ HUSKY : 0
176+ with :
177+ github_token : ${{ secrets.GITHUB_TOKEN }}
178+ message : ' build: prelease version ${{ steps.package-version-pre.outputs.current_version }}'
179+ branch : ${{ github.ref_name }}
82180 author_name : ${{ github.actor }}
181+
182+ - name : Collect changelog of rush
183+ if : startsWith(github.ref_name, 'release/') || startsWith(github.ref_name, 'hotfix/')
184+ uses : xile611/collect-rush-changlog@main
185+ id : changelog
186+ with :
187+ version : ${{ steps.package-version.outputs.current_version }}
188+
189+ - name : Create Release for Tag (release)
190+ if : startsWith(github.ref_name, 'release/')
191+ id : release_tag
192+ uses : ncipollo/release-action@v1.12.0
193+ env :
194+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
195+ with :
196+ tag : v${{ steps.package-version.outputs.current_version }}
197+ commit : main
198+ prerelease : false
199+ body : |
200+ ${{ steps.changelog.outputs.markdown }}
201+ draft : true
202+
203+ - name : Create Release for Tag (hotfix)
204+ if : startsWith(github.ref_name, 'hotfix/')
205+ id : release_tag_hotfix
206+ uses : ncipollo/release-action@v1.12.0
207+ env :
208+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
209+ with :
210+ tag : v${{ steps.package-version.outputs.current_version }}
211+ commit : ${{ github.ref_name }}
212+ prerelease : false
213+ body : |
214+ ${{ steps.changelog.outputs.markdown }}
215+ draft : true
216+
217+ - name : Create Pull Request
218+ if : startsWith(github.ref_name, 'release/')
219+ uses : dustinirving/create-pr@v1.0.2
220+ with :
221+ token : ${{ secrets.GITHUB_TOKEN }}
222+ title : ' [Auto release] release ${{ steps.package-version.outputs.current_version }}'
223+ base : main
224+ head : ${{ github.ref_name }}
225+ labels : release
226+ reviewers : xile611
227+ body : |
228+ ${{ steps.changelog.outputs.markdown }}
0 commit comments