Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 0 additions & 17 deletions .changeset/README.md

This file was deleted.

11 changes: 0 additions & 11 deletions .changeset/config.json

This file was deleted.

72 changes: 43 additions & 29 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,55 +14,69 @@ env:

jobs:
# ─────────────────────────────────────────────────────────────
# Changesets: Version management and release PR
# Release PR: Create/update release PR with version bump
# ─────────────────────────────────────────────────────────────
changesets:
release-pr:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
outputs:
published: ${{ steps.changesets.outputs.published }}
publishedPackages: ${{ steps.changesets.outputs.publishedPackages }}
version: ${{ steps.get-version.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
- uses: dtolnay/rust-toolchain@stable

- name: Create/Update Release PR
uses: release-plz/action@v0.5
with:
node-version: 20
cache: 'pnpm'
command: release-pr
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- run: pnpm install --frozen-lockfile
# ─────────────────────────────────────────────────────────────
# Release: Create git tag and GitHub release when PR is merged
# ─────────────────────────────────────────────────────────────
release:
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
releases_created: ${{ steps.release-plz.outputs.releases_created }}
version: ${{ steps.get-version.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- uses: dtolnay/rust-toolchain@stable

- name: Create Release PR or Publish
id: changesets
uses: changesets/action@v1
- name: Create Release
id: release-plz
uses: release-plz/action@v0.5
with:
title: 'chore: version packages'
commit: 'chore: version packages'
version: pnpm changeset version
publish: pnpm run publish
createGithubReleases: true
command: release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Get version from package.json
- name: Extract version from tag
id: get-version
if: steps.changesets.outputs.published == 'true'
if: steps.release-plz.outputs.releases_created == 'true'
run: |
VERSION=$(node -p "require('./apps/desktop/package.json').version")
TAG="${{ steps.release-plz.outputs.tag }}"
VERSION="${TAG#v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Released version: $VERSION"

# ─────────────────────────────────────────────────────────────
# Build and Release: Triggered when changesets publishes
# Build Release: Build Tauri app when release is created
# ─────────────────────────────────────────────────────────────
build-release:
needs: changesets
if: needs.changesets.outputs.published == 'true'
needs: release
if: needs.release.outputs.releases_created == 'true'
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -146,9 +160,9 @@ jobs:
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tagName: v${{ needs.changesets.outputs.version }}
releaseName: 'McpMux v${{ needs.changesets.outputs.version }}'
releaseBody: ''
tagName: v${{ needs.release.outputs.version }}
releaseName: 'McpMux v${{ needs.release.outputs.version }}'
releaseBody: '' # Release notes already created by release-plz
releaseDraft: false
prerelease: false
updaterJsonKeepUniversal: true
Expand All @@ -157,7 +171,7 @@ jobs:
# Nightly: Build on every push (no release)
# ─────────────────────────────────────────────────────────────
nightly:
if: "github.event_name == 'push' && !contains(github.event.head_commit.message, 'chore: version packages')"
if: "github.event_name == 'push' && !contains(github.event.head_commit.message, 'chore: release')"
strategy:
fail-fast: false
matrix:
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@mcpmux/desktop",
"private": true,
"version": "0.1.2",
"version": "0.1.0",
"type": "module",
"scripts": {
"dev": "tauri dev",
Expand Down
5 changes: 0 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@
"setup": "pwsh -ExecutionPolicy Bypass -File scripts/setup-dev.ps1",
"dev": "pnpm --filter @mcpmux/desktop dev",
"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",
Expand All @@ -34,8 +31,6 @@
"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",
"@testing-library/jest-dom": "^6.6.0",
Expand Down
77 changes: 77 additions & 0 deletions release-plz.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# release-plz configuration for McpMux Tauri Desktop App
# https://release-plz.dev/docs/config

[workspace]
# Use git tags for version detection (not crates.io) - we're a desktop app
git_only = true

# Enable GitHub releases
git_release_enable = true
git_tag_enable = true

# Tag and release naming
git_tag_name = "v{{ version }}"
git_release_name = "McpMux v{{ version }}"

# Release PR configuration
release_always = false # Only release when PR is merged
pr_name = "chore: release v{{ version }}"
pr_labels = ["release", "automated"]
pr_draft = false

# Don't run cargo semver-checks (not a library)
semver_check = false

# Don't publish to crates.io
publish = false

[changelog]
header = """# Changelog

All notable changes to McpMux will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

"""

body = """
{% if version %}
## [{{ version }}]{% if release_link %}({{ release_link }}){% endif %} - {{ timestamp | date(format="%Y-%m-%d") }}
{% endif %}
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | upper_first }}
{% for commit in commits %}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}{% if commit.breaking %}**BREAKING:** {% endif %}{{ commit.message }}
{%- if commit.links %} ({% for link in commit.links %}[{{ link.text }}]({{ link.href }}){% endfor %}){% endif %}
{% endfor %}
{% endfor %}
"""

trim = true
protect_breaking_commits = true

# Conventional commit parsing
commit_parsers = [
{ message = "^feat", group = "Features" },
{ message = "^fix", group = "Bug Fixes" },
{ message = "^perf", group = "Performance" },
{ message = "^refactor", group = "Refactoring" },
{ message = "^docs", group = "Documentation" },
{ message = "^style", group = "Styling" },
{ message = "^test", group = "Testing" },
{ message = "^chore\\(deps\\)", group = "Dependencies" },
{ message = "^chore\\(release\\)", skip = true },
{ message = "^chore", skip = true },
{ message = "^ci", skip = true },
{ message = "^build", skip = true },
]

# Convert issue/PR references to links
commit_preprocessors = [
{ pattern = "\\(#([0-9]+)\\)", replace = "([#${1}](https://github.com/AiAndMore/mcp-mux/pull/${1}))" },
]

[[package]]
name = "mcpmux"
changelog_path = "CHANGELOG.md"
Loading