Files
nextcloud-mcp-server/CONTRIBUTING.md
Chris Coutinho 4a42b947bc feat(astrolabe): add Nextcloud App Store deployment automation
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.
2025-12-19 18:06:39 +01:00

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) - includes feat(mcp): and unscoped commits
  • Helm Chart: charts/nextcloud-mcp-server/CHANGELOG.md - includes feat(helm): only
  • Astrolabe: third_party/astrolabe/CHANGELOG.md - includes feat(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 by feat(helm):)

    • Example: 0.53.00.54.0 when adding resource limits
  • appVersion: MCP server version being deployed (bumped by feat(mcp):)

    • Example: "0.53.0""0.54.0" when MCP server releases

This allows the chart to evolve independently from the application.