4a42b947bc
Add complete CI/CD pipeline for automated Astrolabe app releases: - GitHub Actions workflow for build, sign, and publish - Makefile for app store package creation - Version synchronization between info.xml and package.json - CHANGELOG.md with v0.1.0 release notes feat: configure commitizen monorepo with independent versioning Enable independent versioning for three components using scope-based commits: - MCP Server (feat(mcp) or unscoped): v* tags, updates pyproject.toml + Chart.yaml:appVersion - Helm Chart (feat(helm)): nextcloud-mcp-server-* tags, updates Chart.yaml:version - Astrolabe App (feat(astrolabe)): astrolabe-v* tags, updates info.xml + package.json Changes: - Add .cz.toml configs for Astrolabe and Helm chart - Update root pyproject.toml with scope filtering and tag ignores - Create bump helper scripts (bump-mcp.sh, bump-helm.sh, bump-astrolabe.sh) - Add CONTRIBUTING.md with version management documentation - Create component-specific changelogs - Configure appVersion/version separation for Helm chart This allows each component to release independently while maintaining proper version tracking and changelog generation.
3.2 KiB
3.2 KiB
Contributing to Nextcloud MCP Server
Version Management
This monorepo uses commitizen for version management with independent versioning for three components:
Components
| Component | Scope | Bump Command | Tag Example |
|---|---|---|---|
| MCP Server | mcp or none |
./scripts/bump-mcp.sh |
v0.54.0 |
| Helm Chart | helm |
./scripts/bump-helm.sh |
nextcloud-mcp-server-0.54.0 |
| Astrolabe App | astrolabe |
./scripts/bump-astrolabe.sh |
astrolabe-v0.2.0 |
Commit Message Format
Use conventional commits with scopes to target specific components:
# MCP server changes
feat(mcp): add calendar sync API
fix(mcp): resolve authentication bug
# Helm chart changes
feat(helm): add resource limits
docs(helm): update values documentation
# Astrolabe app changes
feat(astrolabe): add dark mode toggle
fix(astrolabe): resolve search UI bug
Unscoped commits default to the MCP server:
feat: add new feature # → MCP server (v0.54.0)
Release Workflow
1. Make Changes with Scoped Commits
git commit -m "feat(astrolabe): add dark mode toggle"
git commit -m "feat(helm): add ingress annotations"
git commit -m "feat(mcp): add calendar sync"
2. Bump Component Versions
# Bump MCP server (reads commits with scope=mcp or unscoped)
./scripts/bump-mcp.sh
# → Creates tag: v0.54.0
# → Updates: pyproject.toml, Chart.yaml:appVersion
# Bump Helm chart (reads commits with scope=helm)
./scripts/bump-helm.sh
# → Creates tag: nextcloud-mcp-server-0.54.0
# → Updates: Chart.yaml:version
# Bump Astrolabe (reads commits with scope=astrolabe)
./scripts/bump-astrolabe.sh
# → Creates tag: astrolabe-v0.2.0
# → Updates: info.xml, package.json
3. Push Tags
git push --follow-tags
Changelog Filtering
Each component maintains its own CHANGELOG.md:
- MCP Server:
CHANGELOG.md(root) - includesfeat(mcp):and unscoped commits - Helm Chart:
charts/nextcloud-mcp-server/CHANGELOG.md- includesfeat(helm):only - Astrolabe:
third_party/astrolabe/CHANGELOG.md- includesfeat(astrolabe):only
Manual Version Bumps
For specific increments:
# Patch bump (0.53.0 → 0.53.1)
uv run cz bump --increment PATCH
# Minor bump (0.53.0 → 0.54.0)
uv run cz bump --increment MINOR
# Major bump (0.53.0 → 1.0.0)
uv run cz bump --increment MAJOR
# For non-MCP components, use --config
cd charts/nextcloud-mcp-server
uv run cz --config .cz.toml bump --increment MINOR
Versioning Philosophy
- MCP Server: Follows PEP 440,
major_version_zero = true(0.x.x for pre-1.0) - Helm Chart: Follows PEP 440, starts at 0.53.0 (continues from current)
- Astrolabe: Follows PEP 440,
major_version_zero = true(0.x.x for alpha/beta)
Chart.yaml Version vs appVersion
The Helm chart has TWO version fields:
-
version: Chart packaging version (bumped byfeat(helm):)- Example:
0.53.0→0.54.0when adding resource limits
- Example:
-
appVersion: MCP server version being deployed (bumped byfeat(mcp):)- Example:
"0.53.0"→"0.54.0"when MCP server releases
- Example:
This allows the chart to evolve independently from the application.