1- name : Publish Packages
1+ name : Release MCP Packages
22
33on :
4- workflow_call :
5- secrets :
6- NPM_TOKEN :
7- required : true
4+ push :
5+ branches :
6+ - main
7+
8+ concurrency : ${{ github.workflow }}-${{ github.ref }}
89
910permissions :
1011 contents : write
1112
1213jobs :
13- release :
14- name : Release
15- runs-on : ubuntu-20.04
14+ is_release :
15+ name : Is release?
16+ runs-on : ubuntu-latest
17+ outputs :
18+ release : ${{ steps.version.outputs.release }}
1619 steps :
17- - uses : actions/create-github-app-token@v1
18- id : app-token
19- with :
20- app-id : ${{ vars.VERSION_BUMPER_APPID }}
21- private-key : ${{ secrets.VERSION_BUMPER_SECRET }}
22-
2320 - name : Checkout Repo
2421 uses : actions/checkout@v3
25- with :
26- token : ${{ steps.app-token.outputs.token }}
2722
28- - uses : pnpm/action-setup@v3
23+ - name : Install pnpm
24+ uses : pnpm/action-setup@v3
25+ id : pnpm-install
2926 with :
3027 version : 9.5
3128
32- - name : Setup Node.js 18
29+ - name : Setup Node
3330 uses : actions/setup-node@v3
3431 with :
35- node-version : ' 18.x'
32+ node-version : " 18.x"
33+ registry-url : " https://registry.npmjs.org"
3634 cache : pnpm
35+ cache-dependency-path : pnpm-lock.yaml
3736
3837 - name : Configure pnpm
3938 run : |
@@ -43,28 +42,64 @@ jobs:
4342 - name : Install dependencies
4443 run : pnpm install --frozen-lockfile
4544
46- - name : Create new versions
47- run : pnpm run version
48- env :
49- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
45+ - name : Check if new version
46+ id : version
47+ run : |
48+ IS_RELEASE=$(./.github/scripts/is_release.sh)
49+ echo "release=$IS_RELEASE" >> "$GITHUB_OUTPUT"
5050
51- - name : Release new versions
52- uses : changesets/action@v1
51+ changes :
52+ name : Repository changes
53+ needs : [is_release]
54+ if : needs.is_release.outputs.release == 'true'
55+ runs-on : ubuntu-latest
56+ outputs :
57+ js-sdk : ${{ steps.filter.outputs.js-sdk }}
58+ python-sdk : ${{ steps.filter.outputs.python-sdk }}
59+ steps :
60+ - name : Checkout repository
61+ uses : actions/checkout@v3
5362 with :
54- publish : pnpm run publish
55- createGithubReleases : true
63+ fetch-depth : 0
64+
65+ - name : Get the last release
66+ id : last_release
67+ uses : cardinalby/git-get-release-action@v1
5668 env :
57- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
58- NPM_TOKEN : ${{ secrets.NPM_TOKEN }}
69+ GITHUB_TOKEN : ${{ github.token }}
70+ with :
71+ latest : true
72+ prerelease : false
73+ draft : false
5974
60- - name : Update lock file
61- run : pnpm i --no-link --no-frozen-lockfile
75+ - name : Find changes since the last release
76+ uses : dorny/paths-filter@v2
77+ id : filter
78+ with :
79+ base : ${{ steps.last_release.outputs.tag_name }}
80+ filters : |
81+ js:
82+ - 'packages/js/**'
83+ python:
84+ - 'packages/python/**'
6285
63- - name : Commit new versions
64- run : |
65- git config user.name "github-actions[bot]"
66- git config user.email "github-actions[bot]@users.noreply.github.com"
67- git commit -am "[skip ci] Release new versions" || exit 0
68- git push
86+ publish :
87+ name : Publish
88+ needs : [is_release]
89+ if : (!cancelled()) && !contains(needs.*.result, 'failure') && needs.is_release.outputs.release == 'true'
90+ uses : ./.github/workflows/publish_packages.yml
91+ secrets : inherit
92+
93+ report-failure :
94+ needs : [publish]
95+ if : failure()
96+ name : Release Failed - Slack Notification
97+ runs-on : ubuntu-latest
98+ steps :
99+ - name : Release Failed - Slack Notification
100+ uses : rtCamp/action-slack-notify@v2
69101 env :
70- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
102+ SLACK_COLOR : " #ff0000"
103+ SLACK_MESSAGE : " :here-we-go-again: :bob-the-destroyer: We need :fix-parrot: ASAP :pray:"
104+ SLACK_TITLE : Release Failed
105+ SLACK_WEBHOOK : ${{ secrets.SLACK_WEBHOOK }}
0 commit comments