Upstream

repomatic installs, configures and runs a long list of external tools and libraries. When one of them misbehaves, the fix goes upstream where possible, and into repomatic where it cannot wait. This page tracks that relationship: code contributed back, workarounds provided, issues reported, and features declined.

A dependency that a sibling project consumes more directly is tracked on that project’s page: click-extra for Click, Cloup and python-tabulate, and meta-package-manager for Nuitka and the package managers it wraps.

Code contributed upstream

Pull requests authored by repomatic’s maintainer and merged into upstream projects.

arrow

awesome-lint

repomatic lints awesome lists with it:

gitignore.io

lychee-action

mdformat-deflist

mdformat-gfm

mdformat-myst

mdformat-pelican

mdformat-pyproject

mdformat-recover-urls

mdformat-simple-breaks

pipdeptree

pipdeptree drew repomatic’s dependency graph until uv export --format cyclonedx1.5 replaced it:

sphinx

sphinx-autodoc-typehints

sphinxcontrib-mermaid

Upstreamed from repomatic

Issues found while building repomatic and resolved upstream. Where repomatic carried a workaround in the meantime, the entry says what it was and when it went away.

  • bump-my-version#331 - 1.1.1 broke the replace command on [[tool.bumpversion.files]] entries that do not apply. repomatic held bump-my-version at 1.1.0 until a later release fixed it.

  • lychee#1930 - lychee read its configuration only from its own file, so repomatic translated [tool.lychee] into that file. Since 0.24.0 (lychee#2104), lychee reads the section from pyproject.toml itself, and repomatic no longer translates it.

  • mdformat-myst#45 / mdformat-myst#46 - mdformat-myst depended on mdformat-frontmatter, which made it incompatible with mdformat 1.0.0. #46 replaced that dependency with mdformat-front-matters. repomatic ran mdformat-myst from its master branch, then from a fork, until a release carried the change.

  • mdformat-pelican#3 / mdformat-pelican#4 - mdformat-pelican and mdformat-gfm could not run together, also reported as mdformat-gfm#38. repomatic depended on a personal fork that carried the fix, then on unreleased upstream, then on the release that shipped it.

  • mdformat-web#5 - The HTML formatter added an extra doctype to html code blocks. repomatic ran a patched mdformat-web from June 2023 until 0.2.0 shipped the fix.

  • Nuitka#3879 / Nuitka#4024 - --main-entry-point crashed without a positional main program, then built a binary that failed at startup when the entry point carried the name of its package. repomatic compiled each entry point from its file path, with --python-flag=-m for a __main__.py, and skipped every src-layout project, until 4.3 fixed both.

  • Nuitka#3994 - A symlink inside an --include-data-dir tree shipped dangling, and crashed the macOS code signing. The tool runner staged a copy of the directory with no symlinks until 4.3, which ships the content of such a link.

  • Nuitka#3998 - enableCcache replaced a user-set CCACHE_SLOPPINESS with its own value. Since 4.3 Nuitka adds its value to the user’s.

  • Nuitka#4025 - --project refused to build over a py.typed and over a dependency’s package data, until 4.3.

  • tomlrt#171 - Table.section() dropped standalone comments and inline-array padding from the source document. repomatic rebuilt each section with a helper to keep them, and removed the helper once tomlrt 2.2.4 fixed the clone path.

  • zizmor#1664 - The template-injection audit failed on a multiline YAML block. repomatic turned the audit off until zizmor 1.23.0 fixed it, then turned it back on.

Also reported while building repomatic, and closed upstream:

Addressed by repomatic

Issues still open or unfixed upstream. repomatic provides the solution.

GitHub Actions

The reusable workflows work around a set of GitHub Actions limitations. The GitHub Actions limitations table lists each one, its status and the mechanism that addresses it.

PyPI

Tool configuration in pyproject.toml

repomatic run translates a [tool.X] section into the native configuration file of a tool that cannot read pyproject.toml:

Markdown formatting

repomatic post-processes the output of mdformat to undo two mdformat-myst rewrites, and changes one mdformat default:

Awesome lists

Python formatting

Shell formatting

Workflow linting

Test matrix

  • uv#12906 - uv installs x86_64 Python on arm64 Windows: tests.yaml forces a native ARM64 interpreter on the Windows ARM64 runner, which would otherwise test an emulated x86_64 Python. uv 0.13.0 prefers the native interpreter (uv#22100), and the workflows pin an older uv.

    Todo

    When sync-workflow-pins moves the uv pin of the setup-uv steps to 0.13.0 or later:

    • Delete the Force native ARM64 Python on Windows ARM64 step of tests.yaml, and the UV_PYTHON fallback in the Install Python step after it.

    • Rewrite the validate-arch comment of tests.yaml that says uv prefers an x86_64 interpreter on aarch64.

    • Build the two Windows binaries with --managed-python in a canary run of _release-engine.yaml. If both pass verify-binary and the self-tests, pass the flag on every platform.

    • Delete this entry, and the example that names the step in the repomatic-audit skill.

    When a Python version has no native build, uv 0.13.0 falls back to x86_64 with no error. The explicit request of the step fails there. Python 3.10 has none, and the test matrix already excludes it on windows-11-arm.

Nuitka binary builds

Nuitka integration details the workaround for each of these:

Dependency cooldowns

Dependency graph

Dependency choices

Two dependencies stand in for a feature that a preferred library lacks:

Issue reporting

Documentation

  • furo#921 (discussion): Furo shows no icons in toctree entries. repomatic’s documentation adds them with CSS.

Declined by upstream

Pull requests and features that upstream maintainers rejected.

Open upstream

Pull requests and issues still pending upstream.