Skip to main content

Add your description here

Project description

Python Monorepos

Utilities for working with monorepos in Python.

Installation

git clone https://github.com/JenspederM/uvmono
cd uvmono
pip install .

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
uvmono add-devcontainer <package-name>

# Add dev-containers for all packages in the monorepo
uvmono add-devcontainer --all

# Create a Matrix Strategy for a GitHub Actions workflow
uvmono matrix_strategy <key-name>
# Returns a JSON object with the matrix strategy for the packages in the monorepo:
# {
#   "matrix": {
#     "inputs": [ 
#       { 
#           "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: |
            is_changed:
              - '${{ matrix.inputs.path }}/**'
            is_shared_changed:
              - 'packages/shared/**'
      ...

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

uvmono-0.3.7.tar.gz (34.9 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.7-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: uvmono-0.3.7.tar.gz
  • Upload date:
  • Size: 34.9 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.7.tar.gz
Algorithm Hash digest
SHA256 30e7e681f31422ba14aed2176592042bf4d3b087cc52ee38f68830847f71a0ff
MD5 9205cb4139ee34ecf02397630d19fd8f
BLAKE2b-256 ddf1d739d734850e7f7f63d86d516588fbca870b1489317048e2eff79c627c5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for uvmono-0.3.7.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.7-py3-none-any.whl.

File metadata

  • Download URL: uvmono-0.3.7-py3-none-any.whl
  • Upload date:
  • Size: 12.2 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.7-py3-none-any.whl
Algorithm Hash digest
SHA256 2fdea317b9c637988c21e522b07f3063ec059b338ef2fb36a98f8e8f6297662c
MD5 55aafd39da0a89364d3e5d8880a99064
BLAKE2b-256 b45b4314d46c8235e83751e19b6ad0b1b716f544730cd53316252b7f8c2e1729

See more details on using hashes here.

Provenance

The following attestation bundles were made for uvmono-0.3.7-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.

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