Skip to content

feat!: Migrate from pycalver to python-semantic-release#213

Merged
jbdevprimary merged 22 commits intomainfrom
feat/migrate-to-python-semantic-release
Nov 28, 2025
Merged

feat!: Migrate from pycalver to python-semantic-release#213
jbdevprimary merged 22 commits intomainfrom
feat/migrate-to-python-semantic-release

Conversation

@jbdevprimary
Copy link
Collaborator

@jbdevprimary jbdevprimary commented Nov 28, 2025

Summary

Replace pycalver with python-semantic-release (PSR) for robust per-package versioning with Git tag tracking.

This fixes the release workflow bug (#210) where versions weren't being committed back to main, causing repeated PyPI "file already exists" errors.

Version Strategy

Aspect Before (pycalver) After (PSR)
Format 202511.BUILD 202511.MINOR.PATCH
State tracking None Git tags per package
Commit-back ❌ Never ✅ Always
Per-package ❌ Shared counter ✅ Independent
Changelog ❌ None ✅ Auto-generated

Starting Version

  • 202511.3.0 for all packages (higher than existing 202511.2 on PyPI)
  • Major version 202511 maintains CalVer backward compatibility
  • Minor/patch follow SemVer semantics

Changes

Configuration

  • Root pyproject.toml: Replace pycalver with PSR in dev deps
  • All 4 packages: Add PSR config with monorepo parser, per-package tags

CI Workflow

  • Consolidate version + sync + release into single job
  • Proper Git tag creation and push-back to main
  • Handle "already exists" PyPI errors gracefully

Monorepo Parser

  • scripts/psr/monorepo_parser.py filters commits by file path
  • Conventional commit scopes: edt, logging, dic, connectors

Commit Message Format

feat(edt): add new feature     → extended-data-types 202511.4.0
fix(logging): handle edge case → lifecyclelogging 202511.3.1
feat!: breaking change         → 202512.0.0

Test Plan

  • CI passes (lint, tests)
  • PR review by AI agents
  • After merge: verify PSR creates tags and publishes to PyPI
  • Verify 202511.3.0 is higher than existing PyPI versions

Related Issues


Migration to python-semantic-release as discussed in the RFC


Note

Replaces pycalver with python-semantic-release, adds a monorepo commit parser, sets packages to 202511.3.0, and overhauls CI for build/test/release/docs while removing legacy workflows.

  • Versioning/Release:
    • Replace pycalver with python-semantic-release across repo; remove root pycalver config and add PSR to dev deps in pyproject.toml.
    • Add per-package PSR config and tag formats in packages/*/pyproject.toml using monorepo parser and scoped commits.
    • Initialize package versions to 202511.3.0 and update __version__ in each package.
  • CI/CD (.github/workflows/ci.yml):
    • New pipeline with jobs: build packages, matrix tests (py3.9/3.13), lint, AI review (Claude), required-check gate, per-package release (semantic-release bump/tag/publish/sync), and docs deploy to gh-pages.
    • Publish to PyPI only when version changes; sync package contents to public repos.
  • Monorepo Parser:
    • Add scripts/psr/monorepo_parser.py to filter commits by path_filters and scope_prefix for accurate per-package bumps.
  • Removed Workflows:
    • Delete legacy PR review and reusable workflows: agent-pr-review.yml, claude-pr-review.yml, reusable-*.yml (test/lint/release/sync/docs).

Written by Cursor Bugbot for commit bd7afcb. This will update automatically on new commits. Configure here.

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release needed: exit_run and file operations not in published packages

4 participants