5555 RELEASE_DEPLOY_KEY :
5656 description : ' SSH deploy key with write access to the repository'
5757 required : true
58+ GCS_BUCKET :
59+ description : ' Google Cloud Storage bucket name for uploading docs'
60+ required : true
5861
5962concurrency :
6063 group : release-${{ inputs.version_number }}-${{ inputs.release_type }}
@@ -143,7 +146,7 @@ jobs:
143146 run : |
144147 git config --global user.name 'Automated Release'
145148 git config --global user.email 'release-automation@bitmovin.com'
146- git add package.json CHANGELOG.md
149+ git add package.json package-lock.json CHANGELOG.md
147150 git commit -m "[skip ci] Bump version to ${{ steps.version_number.outputs.version_number }}"
148151 git tag "${{ steps.version_number.outputs.tag_name }}"
149152 git push origin ${{ inputs.branch_name || github.ref_name }}
@@ -172,6 +175,42 @@ jobs:
172175 env :
173176 NPM_AUTH_TOKEN : ${{ secrets.NPM_AUTH_TOKEN }}
174177
178+ github_release :
179+ name : Create GitHub Release
180+ needs : [version_bump, release]
181+ if : inputs.release_type == 'final' && inputs.dry_run != true
182+ runs-on : ubuntu-latest
183+ steps :
184+ - name : Checkout
185+ uses : actions/checkout@v4
186+ with :
187+ ref : ${{ needs.version_bump.outputs.tag_name }}
188+
189+ - name : Extract changelog entry
190+ uses : actions/github-script@v6
191+ id : changelog
192+ with :
193+ script : |
194+ const fs = require('fs');
195+ const { parseChangelogEntry } = require('./.github/scripts/parseChangelogEntry.js');
196+ const version = '${{ needs.version_bump.outputs.version_number }}';
197+ const changelog = fs.readFileSync('CHANGELOG.md', 'utf8');
198+ let body;
199+
200+ try {
201+ body = parseChangelogEntry(changelog);
202+ } catch (error) {
203+ core.warning(`Failed to extract release notes for v${version}: ${error.message}`);
204+ body = `Release notes are not available for v${version}. Please check CHANGELOG.md in this tag.`;
205+ }
206+
207+ fs.writeFileSync('release_notes.md', body);
208+
209+ - name : Create GitHub Release
210+ run : gh release create "${{ needs.version_bump.outputs.tag_name }}" --title "v${{ needs.version_bump.outputs.version_number }}" --notes-file release_notes.md
211+ env :
212+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
213+
175214 upload_docs :
176215 name : Build and upload Documentation
177216 needs : [test, version_bump, release]
@@ -211,9 +250,9 @@ jobs:
211250
212251 notify_success :
213252 name : Notify Success
214- needs : [test, version_bump, release, upload_docs]
253+ needs : [test, version_bump, release, upload_docs, github_release ]
215254 runs-on : ubuntu-latest
216- if : inputs.dry_run != true
255+ if : ${{ always() && inputs.dry_run != true && needs.test.result == 'success' && needs.version_bump.result == 'success' && needs.release.result == 'success' && needs.upload_docs.result == 'success' && (inputs.release_type != 'final' || needs.github_release.result == 'success') }}
217256 steps :
218257 - name : Checkout
219258 uses : actions/checkout@v4
@@ -226,8 +265,8 @@ jobs:
226265 handle_failure :
227266 name : Handle Failure
228267 runs-on : ubuntu-latest
229- needs : [test, version_bump, release, upload_docs, notify_success]
230- if : ${{ always() && inputs.dry_run != true && (needs.test.result == 'failure' || needs.version_bump.result == 'failure' || needs.release.result == 'failure' || needs.upload_docs.result == 'failure' || needs.notify_success.result == 'failure') }}
268+ needs : [test, version_bump, release, upload_docs, github_release, notify_success]
269+ if : ${{ always() && inputs.dry_run != true && (needs.test.result == 'failure' || needs.version_bump.result == 'failure' || needs.release.result == 'failure' || needs.upload_docs.result == 'failure' || needs.github_release.result == 'failure' || needs. notify_success.result == 'failure') }}
231270 steps :
232271 - name : Checkout
233272 uses : actions/checkout@v4
0 commit comments