diff --git a/.changeset/config.json b/.changeset/config.json index 91b6a951..73297bf6 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,6 +1,6 @@ { "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", - "changelog": "@changesets/cli/changelog", + "changelog": ["@changesets/changelog-github", { "repo": "MCP-Mux/mcp-mux" }], "commit": false, "fixed": [], "linked": [], diff --git a/.changeset/fix-release-workflow.md b/.changeset/fix-release-workflow.md new file mode 100644 index 00000000..7e62a3ae --- /dev/null +++ b/.changeset/fix-release-workflow.md @@ -0,0 +1,9 @@ +--- +"@mcpmux/desktop": patch +--- + +Fix release workflow to properly create GitHub releases with changelog and binaries. The workflow now: +- Creates GitHub releases with proper release notes from changesets +- Uploads MSI, DEB, DMG, and AppImage packages to the release +- Generates updater JSON with signatures for auto-updates +- Uses @changesets/changelog-github for better changelog formatting with PR/author links diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b1eceef9..f6af7032 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,6 +24,7 @@ jobs: outputs: published: ${{ steps.changesets.outputs.published }} publishedPackages: ${{ steps.changesets.outputs.publishedPackages }} + version: ${{ steps.get-version.outputs.version }} steps: - uses: actions/checkout@v4 with: @@ -44,9 +45,18 @@ jobs: title: 'chore: version packages' commit: 'chore: version packages' version: pnpm changeset version + publish: pnpm run publish + createGithubReleases: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Get version from package.json + id: get-version + if: steps.changesets.outputs.published == 'true' + run: | + VERSION=$(node -p "require('./apps/desktop/package.json').version") + echo "version=$VERSION" >> $GITHUB_OUTPUT + # ───────────────────────────────────────────────────────────── # Build and Release: Triggered when changesets publishes # ───────────────────────────────────────────────────────────── @@ -136,9 +146,9 @@ jobs: APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} with: - tagName: v__VERSION__ - releaseName: 'McpMux v__VERSION__' - releaseBody: 'See the changelog for details.' + tagName: v${{ needs.changesets.outputs.version }} + releaseName: 'McpMux v${{ needs.changesets.outputs.version }}' + releaseBody: '' releaseDraft: false prerelease: false updaterJsonKeepUniversal: true diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json index d5045e84..89228db4 100644 --- a/apps/desktop/src-tauri/tauri.conf.json +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -20,7 +20,7 @@ "endpoints": [ "https://github.com/MCP-Mux/mcp-mux/releases/latest/download/latest.json" ], - "pubkey": "" + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDJDRTAxQ0Y3NDI0RjkwQTkKUldTcGtFOUM5eHpnTEFYb0ZnSjNXbURvSVhYUVdwbDFROW1iMTBPWGNDZ2VlVUNQdGpBQ3BCczYK" } }, "app": { diff --git a/package.json b/package.json index b194d559..931fd2f9 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "build": "pnpm --filter @mcpmux/desktop build", "changeset": "changeset", "version": "changeset version", + "publish": "echo 'Publishing handled by Tauri in build-release job'", "release:key": "pnpm --filter @mcpmux/desktop tauri signer generate -w ~/.tauri/mcpmux.key", "test": "pnpm test:rust && pnpm test:ts", "test:rust": "cargo nextest run --workspace", @@ -33,6 +34,7 @@ "clean": "pnpm -r clean && cargo clean" }, "devDependencies": { + "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.0", "@modelcontextprotocol/sdk": "^1.10.0", "@playwright/test": "^1.50.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed8412d6..ef061cf9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: devDependencies: + '@changesets/changelog-github': + specifier: ^0.5.0 + version: 0.5.2 '@changesets/cli': specifier: ^2.27.0 version: 2.29.8(@types/node@25.0.1) @@ -372,6 +375,9 @@ packages: '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} + '@changesets/changelog-github@0.5.2': + resolution: {integrity: sha512-HeGeDl8HaIGj9fQHo/tv5XKQ2SNEi9+9yl1Bss1jttPqeiASRXhfi0A2wv8yFKCp07kR1gpOI5ge6+CWNm1jPw==} + '@changesets/cli@2.29.8': resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==} hasBin: true @@ -385,6 +391,9 @@ packages: '@changesets/get-dependents-graph@2.1.3': resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} + '@changesets/get-github-info@0.7.0': + resolution: {integrity: sha512-+i67Bmhfj9V4KfDeS1+Tz3iF32btKZB2AAx+cYMqDSRFP7r3/ZdGbjCo+c6qkyViN9ygDuBjzageuPGJtKGe5A==} + '@changesets/get-release-plan@4.0.14': resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==} @@ -2134,6 +2143,9 @@ packages: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} + dataloader@1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2240,6 +2252,10 @@ packages: resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -3333,6 +3349,15 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -4162,6 +4187,9 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@5.1.1: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} @@ -4385,6 +4413,9 @@ packages: puppeteer-core: optional: true + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -4402,6 +4433,9 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4712,6 +4746,14 @@ snapshots: dependencies: '@changesets/types': 6.1.0 + '@changesets/changelog-github@0.5.2': + dependencies: + '@changesets/get-github-info': 0.7.0 + '@changesets/types': 6.1.0 + dotenv: 8.6.0 + transitivePeerDependencies: + - encoding + '@changesets/cli@2.29.8(@types/node@25.0.1)': dependencies: '@changesets/apply-release-plan': 7.0.14 @@ -4766,6 +4808,13 @@ snapshots: picocolors: 1.1.1 semver: 7.7.3 + '@changesets/get-github-info@0.7.0': + dependencies: + dataloader: 1.4.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + '@changesets/get-release-plan@4.0.14': dependencies: '@changesets/assemble-release-plan': 6.0.9 @@ -6535,6 +6584,8 @@ snapshots: whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 + dataloader@1.4.0: {} + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 @@ -6617,6 +6668,8 @@ snapshots: dotenv@17.2.3: {} + dotenv@8.6.0: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7805,6 +7858,10 @@ snapshots: netmask@2.0.2: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-releases@2.0.27: {} normalize-package-data@6.0.2: @@ -8613,6 +8670,8 @@ snapshots: dependencies: tldts: 6.1.86 + tr46@0.0.3: {} + tr46@5.1.1: dependencies: punycode: 2.3.1 @@ -8883,6 +8942,8 @@ snapshots: - supports-color - utf-8-validate + webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} whatwg-encoding@3.1.1: @@ -8896,6 +8957,11 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which@2.0.2: dependencies: isexe: 2.0.0