@@ -10,6 +10,9 @@ concurrency:
1010 group : release-desktop
1111 cancel-in-progress : false
1212
13+ env :
14+ SKIP : " false"
15+
1316jobs :
1417 release :
1518 runs-on : macos-latest
@@ -20,47 +23,65 @@ jobs:
2023 steps :
2124 - name : Checkout repository
2225 uses : actions/checkout@v4
23- with :
24- fetch-depth : 0
2526
2627 - name : Read version from package.json
2728 id : version
2829 run : |
2930 VERSION=$(node -p "require('./apps/desktop/package.json').version")
3031 echo "version=$VERSION" >> $GITHUB_OUTPUT
3132
33+ - name : Check if version already released
34+ id : check_release
35+ env :
36+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
37+ run : |
38+ VERSION="${{ steps.version.outputs.version }}"
39+ if gh release view "v$VERSION" --repo "${{ github.repository }}" > /dev/null 2>&1; then
40+ echo "skip=true" >> $GITHUB_OUTPUT
41+ echo "::warning::Version $VERSION already released — skipping build. Bump the version in apps/desktop/package.json to trigger a new release."
42+ else
43+ echo "skip=false" >> $GITHUB_OUTPUT
44+ fi
45+
3246 - name : Install pnpm
47+ if : steps.check_release.outputs.skip != 'true'
3348 uses : pnpm/action-setup@v4
3449
3550 - name : Setup Node.js
51+ if : steps.check_release.outputs.skip != 'true'
3652 uses : actions/setup-node@v4
3753 with :
3854 node-version : 22
3955 cache : pnpm
4056
4157 - name : Install dependencies
58+ if : steps.check_release.outputs.skip != 'true'
4259 run : pnpm install --frozen-lockfile
4360
4461 - name : Typecheck
62+ if : steps.check_release.outputs.skip != 'true'
4563 run : pnpm -C apps/desktop typecheck
4664
4765 - name : Run tests
66+ if : steps.check_release.outputs.skip != 'true'
4867 run : pnpm -C apps/desktop test
4968
5069 - name : Build and publish to GitHub Releases
70+ if : steps.check_release.outputs.skip != 'true'
5171 env :
5272 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
5373 run : pnpm -C apps/desktop release
5474
5575 - name : Upload DMG as workflow artifact
76+ if : steps.check_release.outputs.skip != 'true'
5677 uses : actions/upload-artifact@v4
5778 with :
5879 name : ClosedLoop-macOS-${{ steps.version.outputs.version }}
5980 path : apps/desktop/dist-dmg/*.dmg
6081 if-no-files-found : error
6182
6283 - name : Build Slack message
63- if : success()
84+ if : steps.check_release.outputs.skip != 'true'
6485 id : slack_message
6586 run : |
6687 VERSION="${{ steps.version.outputs.version }}"
7394 echo "EOF" >> $GITHUB_OUTPUT
7495
7596 - name : Notify Slack
76- if : success()
97+ if : steps.check_release.outputs.skip != 'true'
7798 continue-on-error : true
7899 uses : ./.github/actions/slack-notify
79100 with :
0 commit comments