Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
32 changes: 0 additions & 32 deletions .github/workflows/release.yml

This file was deleted.

62 changes: 62 additions & 0 deletions .github/workflows/semantic-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Semantic Release

on:
push:
branches:
- main

permissions:
contents: write
issues: write
pull-requests: write
id-token: write # Required for PyPI trusted publishing

jobs:
test:
uses: ./.github/workflows/test.yml

release:
name: Release
needs: test
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/mcpm

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 'lts/*'

- name: Install semantic-release dependencies
run: |
npm install -g semantic-release @semantic-release/git @semantic-release/github @semantic-release/changelog @semantic-release/commit-analyzer @semantic-release/release-notes-generator @semantic-release/exec

- name: Semantic Release
id: semantic
uses: cycjimmy/semantic-release-action@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Install uv with caching
if: steps.semantic.outputs.new_release_published == 'true'
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
cache-dependency-glob: "pyproject.toml"

- name: Build
if: steps.semantic.outputs.new_release_published == 'true'
run: uv build

- name: Publish distribution to PyPI
if: steps.semantic.outputs.new_release_published == 'true'
uses: pypa/gh-action-pypi-publish@release/v1
67 changes: 67 additions & 0 deletions .github/workflows/semver-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Semantic Version Check

on:
pull_request:
types: [opened, synchronize, reopened]

jobs:
semver-check:
name: Validate Semantic Version
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 'lts/*'

- name: Install dependencies
run: |
npm install -g semantic-release @semantic-release/git @semantic-release/github @semantic-release/changelog @semantic-release/commit-analyzer @semantic-release/release-notes-generator @semantic-release/exec

- name: Check Release
uses: cycjimmy/semantic-release-action@v4
with:
dry_run: true
ci: false
unset_gha_env: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Comment PR
if: always()
uses: actions/github-script@v7
with:
script: |
const semanticResult = process.env.SEMANTIC_OUTPUT;
let comment = '## Semantic Version Check\n\n';

if (semanticResult && semanticResult.includes('The next release version is')) {
const versionMatch = semanticResult.match(/The next release version is (.*)/);
if (versionMatch) {
comment += `✅ Valid semantic version changes detected!\n\n`;
comment += `Next version will be: **${versionMatch[1]}**\n`;
}
} else {
comment += `⚠️ No semantic version changes detected.\n\n`;
comment += 'Please ensure your commits follow the [Conventional Commits](https://www.conventionalcommits.org/) format:\n\n';
comment += '- `feat: new feature` (triggers MINOR version bump)\n';
comment += '- `fix: bug fix` (triggers PATCH version bump)\n';
comment += '- `BREAKING CHANGE: description` (triggers MAJOR version bump)\n';
}

github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment
});
58 changes: 58 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Test & Validate

on:
pull_request:
workflow_call:
workflow_dispatch:

permissions:
contents: read

jobs:
validate-manifests:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Validate Server JSON Files
uses: cardinalby/schema-validator-action@v3
with:
file: 'mcp-registry/servers/*.json'
schema: 'mcp-registry/schema/server-schema.json'
mode: 'default'
fixSchemas: 'false'

test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- name: Run tests
run: |
uv sync --group dev
uv run pytest

lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- name: Check code style with ruff
run: |
uv sync --group dev
uv run ruff check src/ tests/
27 changes: 27 additions & 0 deletions .releaserc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"branches": [
"main",
"master"
],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
[
"@semantic-release/exec",
{
"prepareCmd": "echo '__version__ = \"${nextRelease.version}\"' > src/mcpm/version.py"
}
],
[
"@semantic-release/git",
{
"assets": [
"CHANGELOG.md",
"src/mcpm/version.py"
],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
]
]
}
Loading