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.1broke thereplacecommand on[[tool.bumpversion.files]]entries that do not apply. repomatic heldbump-my-versionat1.1.0until a later release fixed it.lychee#1930-lycheeread its configuration only from its own file, so repomatic translated[tool.lychee]into that file. Since0.24.0(lychee#2104),lycheereads the section frompyproject.tomlitself, and repomatic no longer translates it.mdformat-myst#45/mdformat-myst#46-mdformat-mystdepended onmdformat-frontmatter, which made it incompatible withmdformat1.0.0.#46replaced that dependency withmdformat-front-matters. repomatic ranmdformat-mystfrom itsmasterbranch, then from a fork, until a release carried the change.mdformat-pelican#3/mdformat-pelican#4-mdformat-pelicanandmdformat-gfmcould not run together, also reported asmdformat-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 tohtmlcode blocks. repomatic ran a patchedmdformat-webfrom June 2023 until0.2.0shipped the fix.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 oncetomlrt2.2.4fixed the clone path.zizmor#1664- Thetemplate-injectionaudit failed on a multiline YAML block. repomatic turned the audit off untilzizmor1.23.0fixed it, then turned it back on.
Also reported while building repomatic, and closed upstream:
setup-python#807- Feature request: Do not fail when caching on non-Python repositoriesruff#9186- docstring code formatter: add a--docstring-code-formatparameter toruff formatCLIuv#8770- CLI reported byuv runon Windows is not found on invocationuv#5185- Feature request: option to not updateuv.lockfileuv#4762-uv pip install --all-extras .fail to locatepyproject.tomluv#1481-uv pip installcannot fetch requirement file from remote URLbump-my-version#145- Add support forignore_missing_filesglobal option in configuration filebump-my-version#117- Empty string replacement (--replace "") is interpreted as absence of parameterbump-my-version#34- Traceback on--searchparameter with plain stringbump-my-version#25---no-configured-filesshould not updatecurrent_versionbump-my-version#19- Decouple search & replace from version bumpmdformat-admon#15- Latestmdformat-admonandmdformat-gfmconflictsmdformat-deflist#4- Latestmdformat-deflistandmdformat-admonconflictsmdformat-gfm#27- Latestmdformat-gfmandmdformat-admonconflictsmdformat-myst#43- Replace dependency ofmdformat-tablestomdformat-gfmmdformat-simple-breaks#3- Uncapmdformat < 0.8.0requirementmdformat-toc#19-mdformat-tocforces URL-encoding of non-ASCII charactersNuitka#3449- Why does nuitka reportsx86_64architecture onwindows-11-armrunner?pipdeptree#188- Graph stability: random order in Graphiz contenttomlrt#172- Reassigning a section relocates its AoT children to the end of the document
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¶
warehouse#11096- Trusted publishing: Support for GitHub reusable workflows: thepublish-pypijob stays in each repository’s ownrelease.yaml, so the OIDC claim names the file that the repository registered as its Trusted Publisher.warehouse#1388- 404 for registered package with no release andwarehouse#9536- Unable to get a consistent view of existing/changed packages from the various APIs: PyPI’s JSON API answers404for some registered projects. repomatic does not read that404as proof that a package is missing.
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:
actionlint#623- Support configuration in[tool.actionlint]section ofpyproject.tomlbiome#9239(discussion)zizmor#322(discussion comment)mdformat#432- Option to specify path to configuration file andmdformat#562- Add--configoption to specify explicit configuration file path:mdformatfinds its configuration only by discovery, so repomatic writes a temporary.mdformat.tomlfor the run and deletes it after.
Markdown formatting¶
repomatic post-processes the output of mdformat to undo two mdformat-myst rewrites, and changes one mdformat default:
mdformat-myst#21- myst formatting directive with only 1 parameter:mdformat-mystturns:key: valuedirective options into a YAML block. repomatic restores the field list. The open fix ismdformat-myst#49.mdformat-myst#13- colon fence syntax is broken by escape character:mdformat-mystescapes:::{name}colon fences. repomatic removes the escape. The open fixes aremdformat-myst#36andmdformat-myst#48.mdformat#312- Needless URL encoding of link destinations: repomatic turns off URL validation and bundlesmdformat-recover-urls, which decodes percent-encoded non-ASCII characters back.
Awesome lists¶
mdformat-toc#17- Feature request: ignore specific Headings /mdformat-toc#20:mdformat-toccannot leave a heading out of the table of contents, andawesome-lintforbids some entries there. Thefix-awesome-toccommand deletes them.
Python formatting¶
ruff#7414- Formatter: wrap comments (E501): Ruff does not wrap long comments. Theformat-pythonjob also runsautopep8, limited to that one fix.
Shell formatting¶
sh#1203- zsh: support inline loop syntax:shfmtcannot parse some Zsh constructs, so repomatic keeps Zsh files away from it.
Workflow linting¶
actionlint#711- Support the new$/self-repositoryuses:syntax /actionlint#732:actionlintrejects the$/self-repository syntax of GitHub. repomatic’s workflows call their own reusable workflows through workspace-relative./paths instead.
Test matrix¶
uv#12906- uv installs x86_64 Python on arm64 Windows:tests.yamlforces a native ARM64 interpreter on the Windows ARM64 runner, which would otherwise test an emulated x86_64 Python.
Nuitka binary builds¶
Nuitka integration details the workaround for each of these:
Nuitka#3879---main-entry-pointdoesn’t populate the_main_moduleand_main_pathsinternal state andNuitka#4024---main-entry-pointwhose CLI name matches its package builds a binary that fails at startup: repomatic compiles a__main__.pyentry point as its package directory, with--python-flag=-m.Nuitka#3909- With--projectthe[tool.nuitka]section ofpyproject.tomlis ignored andNuitka#4025---projectrefuses to build over apy.typedand over a dependency’s package data: Nuitka4.2reads[tool.nuitka]only under--project, a mode repomatic cannot use, so the tool runner turns the section into command-line flags.Nuitka#2136asked for the same support earlier.Nuitka#3994---include-data-dirpackage dangling symlinks: silent on Linux,FileNotFoundErrorin macOS signing: the tool runner stages a copy of the data directory with no symlinks before it calls Nuitka.Nuitka#3996-ccachenever hits across CI machines: the release workflow writesbase_dirintoccache.conf.Nuitka#3997- Tool downloads are fetched and executed without integrity verification: the macOS builds turn ccache off, which keeps its unverified download out of the build.
Dependency cooldowns¶
uv#20995- Allow sharing exclude-newer-package across workspaces: file reference, env var, or repo-level config: uv has no configuration or environment knob for--exclude-newer-package, so repomatic adds the exemption to every frozen command line. Glob exemptions (uv#20788) or pin-based bypasses (uv#19864,uv#18921) would also remove the need.uv#18792- Prune staleexclude-newer-packageentries onuv lock: repomatic removes the stale entries itself after it relocks.
Dependency graph¶
mermaid#4182-clickcannot be used for node IDs: a Mermaid keyword breaks a graph when used as a node ID. repomatic keeps keywords out of the node IDs of its dependency graph, aspipdeptree#201does upstream.
Dependency choices¶
Two dependencies stand in for a feature that a preferred library lacks:
whenever#277(discussion):wheneverhas no humanizer, so repomatic usesarrowfor its human-readable times.wcmatch#226- Possibly add a gitignore parser:wcmatchcannot read.gitignorefiles, so repomatic also depends onpy-walk.
Issue reporting¶
create-issue-from-file#298- Avoid creating duplicate issues: the action opens a new issue on every run. repomatic manages the issues its jobs open, so a new run does not duplicate them.
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.
mypy#13294- Auto-detect minimal Python for--python-versionoption: repomatic derives--python-versionfromrequires-pythonwhen it runsmypy.pyupgrade#688- Auto-detect minimal Python version: repomatic computed the minimal Python version fromrequires-pythonwhile it still ranpyupgrade.sh#1268- Support configuration in[tool.shfmt]section ofpyproject.toml:shfmtreads its style from.editorconfigonly, so repomatic has no[tool.shfmt]section.
Open upstream¶
Pull requests and issues still pending upstream.
awesome-lint#229- Fix false positives inbalanced-punctuationbump-my-version#146- Non-matching glob patterns don’t raiseFileNotFoundErrorlychee#2249- Recognize{#id}heading anchors in--include-fragments: closed bylychee#2250, which no stable release carries yet.lychee#1772- Suggest alternative frontend services from LibRedirectmdformat-myst#25- Block attributes formatting introduce extra empty linemdformat-web#8-format_xmldrops comments and the XML declaration: since0.2.0, formatting anxmlcode block deletes its comments and its<?xml ...?>declaration. repomatic pinsmdformat-web0.2.0, so theformat-markdownjob applies that loss to everyxmlblock it formats.Todo
When
sync-tool-versionsmoves themdformat-webpin past0.2.0, run the reproducer from hukkin/mdformat-web#8 throughrepomatic run mdformat. Then update this entry to match the result.sphinx#14623-todolistproduce duplicate titles for admonitions