Skip to main content

Python Monorepos

Utilities for working with monorepos in Python.

Installation

uv init --package
uv add uvmono
uv run uvmono --help

Usage

# Show help
uvmono --help

# List all packages in the monorepo
uvmono list

# Add a package to the monorepo
uvmono new <package-name>

# Add dev-containers for a package in the monorepo (optionally for all packages)
uvmono add-devcontainer <package-name> [--all]

# Create a Matrix Strategy for a GitHub Actions workflow
# The key is the key for the matrix strategy in the GitHub Actions workflow `matrix.<key-name>.path`
uvmono matrix_strategy <key>
# Returns a JSON object with the matrix strategy for the packages in the monorepo:
# {
#   "matrix": {
#     <key>: [ 
#       { 
#           "path": "packages/package1", 
#           "name": "package1", 
#           "dependencies": ["package2"], 
#           "filter":  "..." # outputs `is_changed` in dorny/paths-filter@v3
#       },
#       ...
#     ]
#   }
# }

Examples

List all packages in the monorepo

uvmono list

Add a package to the monorepo

Create a new package in the monorepo with the name my-package.

uvmono new my-package

This will automatically create a new directory packages/my-package with the following structure:

.
└── packages/my-package
    ├── src
    │   └── my_package
    │       └── __init__.py
    ├── tests
    │   ├── __init__.py
    │   ├── conftest.py
    │   └── test_main.py
    ├── pyproject.toml
    └── README.md

Create a Matrix Strategy for a GitHub Actions workflow

Create a matrix strategy for a GitHub Actions workflow with the key inputs.

uvmono matrix_strategy inputs

This will automatically generate a matrix strategy for the packages in the monorepo, which can be used in a GitHub Actions workflow:

name: CI

on:
  pull_request:
    branches:
      - main

jobs:
  build_matrix:
    name: Build Package Matrix
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.matrix_strategy.outputs.matrix }}
    steps:
      - uses: actions/checkout@v4
      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true
          cache-dependency-glob: "uv.lock"
      - name: Install the project
        run: uv sync --all-extras --dev
      - name: Create Package Matrix
        id: matrix_strategy
        run: uv run uvmono matrix_strategy inputs

  test_package:
    runs-on: ubuntu-latest
    needs: build_matrix
    strategy:
      matrix: ${{ fromJson(needs.build_matrix.outputs.matrix) }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Print Inputs
        run: |
          echo "Path: ${{ matrix.inputs.path }}"
          echo "Name: ${{ matrix.inputs.name }}"
          echo "Shared: ${{ matrix.inputs.shared }}"
      - name: "Check if ${{ matrix.inputs.name }} has changed"
        uses: dorny/paths-filter@v3
        id: changes
        with:
          filters: ${{ matrix.inputs.filter }}
      ...

Download files

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

Source Distribution

uvmono-0.3.9.tar.gz (39.8 kB view details)

Uploaded Source

Built Distribution

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

uvmono-0.3.9-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file uvmono-0.3.9.tar.gz.

File metadata

  • Download URL: uvmono-0.3.9.tar.gz
  • Upload date:
  • Size: 39.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for uvmono-0.3.9.tar.gz
Algorithm Hash digest
SHA256 a18079f9b4b5db2b3d0e1f6a853ae0d0d505101344764453911d64a4b27f49f8
MD5 94a9a996cd457f1c314f1c01c423a464
BLAKE2b-256 15cb66b523feecdb51983bb9a648d1c03a07d67437339cf9f4cb21ea7d47529a

See more details on using hashes here.

Provenance

The following attestation bundles were made for uvmono-0.3.9.tar.gz:

Publisher: publish.yml on JenspederM/uvmono

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

File details

Details for the file uvmono-0.3.9-py3-none-any.whl.

File metadata

  • Download URL: uvmono-0.3.9-py3-none-any.whl
  • Upload date:
  • Size: 14.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for uvmono-0.3.9-py3-none-any.whl
Algorithm Hash digest
SHA256 39a18b5e6bb3b07e9aed6ea6d62d6a4f920e527271ecc0caf3e5bb85a10c6676
MD5 d40e87b64308a2996a7eda23797ebb8c
BLAKE2b-256 0a389ecb5d8dbc102f8765abb277299921f829079d084ce7a0c6fcb3493c5723

See more details on using hashes here.

Provenance

The following attestation bundles were made for uvmono-0.3.9-py3-none-any.whl:

Publisher: publish.yml on JenspederM/uvmono

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

Release history Release notifications | RSS feed

This release

0.3.9 This release

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.5

2 files

0.3.3

2 files

0.3.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

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