feat(release): CI matrix, PyPI trusted-publishing pipeline, registry manifest, Docker fix
- ci.yml: ruff lint/format, Linux 3.11/3.12 tests + coverage, Windows mocked-COM leg, package build + clean-venv wheel smoke, Docker smoke, server.json schema validation - release.yml: tag -> test gate -> tag/version check -> build -> PyPI trusted publishing (OIDC) -> GitHub Release - pyproject: SPDX license, authors, keywords, classifiers, project URLs, autocad-mcp-pro console alias; version 1.4.0 - Dockerfile: ship engineering/ + version.py (image previously missed both -> engineering tools failed in containers); healthcheck imports engineering - server.json: MCP registry manifest (io.github.u-c4n/autocad-mcp, pypi package) - docs/RELEASE-DISTRIBUTION.md: one-time owner actions (PyPI trusted publisher, mcp-publisher login) + directory submissions runbook Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
9ec6c4a989
commit
2f56a73093
@@ -0,0 +1,51 @@
|
||||
# Release & Distribution Runbook (v1.4.0+)
|
||||
|
||||
The code side of a release is fully automated; three account-bound steps need
|
||||
a human once, plus the directory submissions. Track them here.
|
||||
|
||||
## One-time setup (owner action)
|
||||
|
||||
- [ ] **PyPI trusted publisher** — on <https://pypi.org/manage/account/publishing/>
|
||||
add a *pending publisher* for project `autocad-mcp-pro`:
|
||||
repository `U-C4N/Autocad-MCP`, workflow `release.yml`, environment `pypi`.
|
||||
(No API token is stored anywhere; `release.yml` uses OIDC.)
|
||||
- [ ] **GitHub environment** — create the `pypi` environment in the repo
|
||||
settings (Settings → Environments) so the publish job can bind to it.
|
||||
- [ ] **MCP registry login** — install `mcp-publisher`, then
|
||||
`mcp-publisher login github` (authenticates the `io.github.u-c4n` namespace).
|
||||
|
||||
## Every release
|
||||
|
||||
1. Bump `pyproject.toml` + `server.json` versions, add the CHANGELOG section,
|
||||
update the README snapshot line — `tests/test_release_consistency.py`
|
||||
enforces all of it.
|
||||
2. Push `main`, wait for CI to go green (lint, linux, windows, package,
|
||||
docker, registry-validate).
|
||||
3. Tag and push: `git tag v1.4.0 && git push origin v1.4.0`.
|
||||
`release.yml` runs the test gate, verifies tag == package version, builds,
|
||||
publishes to PyPI via trusted publishing and cuts the GitHub Release.
|
||||
4. Verify: `pip install autocad-mcp-pro==<version>` in a clean venv;
|
||||
`uvx autocad-mcp-pro --help`.
|
||||
5. Publish the registry manifest: `mcp-publisher publish` (validates
|
||||
`server.json`, checks the `mcp-name` marker in the PyPI README).
|
||||
|
||||
## Directory listings (submit once, then keep fresh)
|
||||
|
||||
- [ ] Glama — <https://glama.ai/mcp/servers> (auto-indexes GitHub; claim the
|
||||
server page and verify metadata).
|
||||
- [ ] mcpservers.org — submit via their GitHub repo PR flow.
|
||||
- [ ] awesome-mcp-servers — PR adding the server under CAD/engineering.
|
||||
- [ ] Smithery — optional; requires a `smithery.yaml` (evaluate demand first).
|
||||
|
||||
## Benchmark refresh (per release)
|
||||
|
||||
```bash
|
||||
python -m benchmarks.run_competitors --server autocad-mcp-pro --backend ezdxf
|
||||
python -m benchmarks.run_competitors --server puran-water-autocad-mcp --backend ezdxf
|
||||
python -m benchmarks.run_competitors --server beiming183-autocad-mcp --backend ezdxf
|
||||
# sanitize + copy reports into benchmarks/results/published/, then:
|
||||
python -m benchmarks.render_live_chart
|
||||
```
|
||||
|
||||
Bump the competitor pins in `benchmarks/competitors.yaml` deliberately (new
|
||||
SHA = re-read their tool contracts before trusting the mappings).
|
||||
Reference in New Issue
Block a user