Skip to main content

Centralized monorepo version-sync tool driven by versions.yaml.

Project description

scitrera-repo-tools

Centralized monorepo version-sync tool driven by versions.yaml.

Install

pip install scitrera-repo-tools
# or, from source:
pip install -e .

Usage

From any directory inside a monorepo containing a versions.yaml:

sync-versions            # apply updates (preserves local refs)
sync-versions --check    # dry-run, exit 1 on drift
sync-versions --verbose  # show every file inspected
sync-versions --config path/to/versions.yaml

Release mode

By default, sync-versions preserves local-reference dep specifiers (file:../foo, workspace:*, link:, git+..., PEP 508 pkg @ git+...) so local development keeps working. Before publishing to PyPI/npm, opt in to rewrite those into canonical version pins from versions.yaml:

sync-versions --release            # rewrite local refs to version pins
sync-versions --release --check    # preview the release-pass diff in CI

Typical pre-publish flow:

sync-versions --release
git diff                            # review the version-pin substitutions
# ... build + publish (npm publish / uv publish) ...
git checkout -- .                   # restore local refs for ongoing dev

versions.yaml schema

# Top-level project versions
my-python-pkg: 0.1.22
my-ts-pkg: 0.1.22

# External dep pins per language (optional)
preferred_versions:
  python:
    "pydantic": "2.13.4"
  typescript:
    "@modelcontextprotocol/sdk": "^1.26.0"

# Per-project file rules (replaces the hardcoded PROJECT_RULES dict)
project_rules:
  my-python-pkg:
    - { type: pyproject, path: my-python-pkg/pyproject.toml }
    - { type: init_py,   path: my-python-pkg/src/my_pkg/__init__.py }
  my-ts-pkg:
    - { type: package,   path: my-ts-pkg/package.json }

# Internal monorepo cross-reference sync (optional)
dependency_mappings:
  python:
    packages:
      "my-internal-dir": "my-published-name"
    dependencies:
      my-consumer:
        - "my-internal-dir"

# Lockfile fallback for nulls in preferred_versions (optional)
sources:
  python:
    - "uv.lock"

Releases

Releases are automated via GitHub Actions on tag push (v*.*.*):

  1. CI runs the test suite on Python 3.11/3.12/3.13.
  2. A guard step asserts the tag matches pyproject.toml's [project].version.
  3. python -m build produces an sdist + wheel.
  4. The artifacts are published to PyPI via trusted publishing (OIDC; no API token).
  5. A GitHub Release is created with the artifacts attached.

License

BSD 3-Clause.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scitrera_repo_tools-0.1.6.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scitrera_repo_tools-0.1.6-py3-none-any.whl (25.8 kB view details)

Uploaded Python 3

File details

Details for the file scitrera_repo_tools-0.1.6.tar.gz.

File metadata

  • Download URL: scitrera_repo_tools-0.1.6.tar.gz
  • Upload date:
  • Size: 22.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for scitrera_repo_tools-0.1.6.tar.gz
Algorithm Hash digest
SHA256 567de83a5601aba7b3e0ae176489d6a5f893d7728642c7414f9a012120aa16b2
MD5 58f5156f321c73dc9be21c965d2f1ade
BLAKE2b-256 7f471127bc24c6a8d11c1cedde68cd2b7b55e5191c9b47715f9d9a6deb84cfb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for scitrera_repo_tools-0.1.6.tar.gz:

Publisher: release.yml on scitrera/repo-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scitrera_repo_tools-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for scitrera_repo_tools-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 3853c4a4e063b6155b2f9b1bfc96531e9367fa051ca1f30e4df0757488def9dd
MD5 969213f599b61c12540be6eb12efbd86
BLAKE2b-256 09a110d7f72489b96cdcbdaafb6afbf07499b686748bdf18bfed672c9a8e5ba2

See more details on using hashes here.

Provenance

The following attestation bundles were made for scitrera_repo_tools-0.1.6-py3-none-any.whl:

Publisher: release.yml on scitrera/repo-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page