repomatic 7.4.0__tar.gz → 7.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {repomatic-7.4.0 → repomatic-7.4.1}/PKG-INFO +2 -2
- {repomatic-7.4.0 → repomatic-7.4.1}/pyproject.toml +8 -7
- {repomatic-7.4.0 → repomatic-7.4.1}/pyproject.toml.orig +11 -7
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/__init__.py +2 -2
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/binaries_page.py +4 -11
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/cli.py +21 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/_release-engine.yaml +10 -10
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/agent-sphinx-docs.md +28 -12
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/autofix.yaml +41 -41
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/cancel-runs.yaml +1 -1
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/changelog.yaml +17 -14
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/debug.yaml +1 -1
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/docs.yaml +3 -3
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/labels.yaml +5 -5
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/lint.yaml +8 -8
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-ship.md +3 -2
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/tests.yaml +7 -2
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/unsubscribe.yaml +1 -1
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/uv.toml +1 -1
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/pr_body.py +47 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/releases.py +69 -0
- repomatic-7.4.0/repomatic/templates/prepare-release.md → repomatic-7.4.1/repomatic/templates/prepare-release.md.noformat +3 -7
- {repomatic-7.4.0 → repomatic-7.4.1}/license +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/readme.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/__main__.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/binary.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/broken_links.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/bundle.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/cache.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/changelog.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/checksums.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/compat.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/config.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/__init__.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/action-publish-pypi.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/agent-grunt-qa.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/agent-qa-engineer.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/autolock.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/new-link.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/code-of-conduct.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/contributing.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/contributing.zh.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/funding.yml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/pull_request_template.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/__init__.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/license +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/bumpversion.toml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/codecov.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/labeller-content-based.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/labeller-file-based.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/labels.toml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/lychee.toml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/mdformat.toml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/mypy.toml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/pytest.toml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/release.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/ruff.toml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-av-false-positive.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-awesome-triage.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-babysit-ci.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-benchmark-update.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-brand-assets.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-file-bug-report.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-audit.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-changelog.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-deps.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-init.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-topics.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-sphinx-docs-sync.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-translation-sync.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-upstream-audit.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/typos.toml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/yamllint.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/zizmor.yaml +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/dep_graph.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/dep_report.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/dep_sources.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/docs.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/git_ops.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/__init__.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/actions.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/dev_release.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/gh.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/issue.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/matrix.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/release_sync.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/sponsor.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/status.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/token.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/unsubscribe.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/workflow_sync.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/gitignore.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/http.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/images.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/init_project.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/labels.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/lint_repo.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/mailmap.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/matrix_axes.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/metadata.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/npm.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/prepare_release.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/py.typed +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/pypi.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/pyproject.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/registry.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/setup_guide.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/sync_ops.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/__init__.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/available-admonition.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/broken-links-issue.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/bump-version.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/detect-squash-merge.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/development-warning.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/fix-changelog.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/fix-typos.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/fix-vulnerable-deps.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-images.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-json.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-markdown.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-pyproject.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-python.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-shell.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/generated-footer.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/github-releases.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/immutable-releases.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/pr-metadata.md.noformat +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/refresh-tip.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/release-notes.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/release-sync-report.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-branch-ruleset.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-dependabot.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-fork-pr-approval.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-notifications-pat.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-pages-source.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-pypi-trusted-publisher.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-sha-pinning-required.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-token.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-verify.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-virustotal.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-action-pins.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-bumpversion.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-dep-sources.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-gitignore.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-mailmap.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-repomatic.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-tool-versions.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-uv-lock.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-workflow-pins.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/unavailable-admonition.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/unsubscribe-phase1.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/unsubscribe-phase2.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/update-dep-graph.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/update-docs.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/yanked-admonition.md +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/tool_registry.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/tool_runner.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/tool_runner_page.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/uv.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/version_sync.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/virustotal.py +0 -0
- {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/vulnerable_deps.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: repomatic
|
|
3
|
-
Version: 7.4.
|
|
3
|
+
Version: 7.4.1
|
|
4
4
|
Summary: 🏭 Automate repository maintenance, releases, and CI/CD workflows
|
|
5
5
|
Keywords: changelog-formatter,dependabot-alternative,github-actions,github-labels,github-workflow,gitignore,mailmap,mypy,nuitka,python-automation,release-automation,repository-automation,repository-management,reusable-workflows,software-factory,sphinx-doc,typo,uv,workflow-reusable
|
|
6
6
|
Author: Kevin Deldycke
|
|
@@ -59,7 +59,7 @@ Requires-Dist: wcmatch>=10
|
|
|
59
59
|
Requires-Python: >=3.10
|
|
60
60
|
Project-URL: Changelog, https://github.com/kdeldycke/repomatic/blob/main/changelog.md
|
|
61
61
|
Project-URL: Documentation, https://kdeldycke.github.io/repomatic
|
|
62
|
-
Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.4.
|
|
62
|
+
Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1
|
|
63
63
|
Project-URL: Funding, https://github.com/sponsors/kdeldycke
|
|
64
64
|
Project-URL: Homepage, https://github.com/kdeldycke/repomatic
|
|
65
65
|
Project-URL: Issues, https://github.com/kdeldycke/repomatic/issues
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
build-backend = "uv_build"
|
|
3
|
-
requires = ["uv-build>=0.
|
|
3
|
+
requires = ["uv-build>=0.8"]
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "repomatic"
|
|
7
|
-
version = "7.4.
|
|
7
|
+
version = "7.4.1"
|
|
8
8
|
description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
|
|
9
9
|
readme = "readme.md"
|
|
10
10
|
keywords = [
|
|
@@ -92,7 +92,7 @@ email = "kevin@deldycke.com"
|
|
|
92
92
|
[project.urls]
|
|
93
93
|
Changelog = "https://github.com/kdeldycke/repomatic/blob/main/changelog.md"
|
|
94
94
|
Documentation = "https://kdeldycke.github.io/repomatic"
|
|
95
|
-
Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.
|
|
95
|
+
Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1"
|
|
96
96
|
Funding = "https://github.com/sponsors/kdeldycke"
|
|
97
97
|
Homepage = "https://github.com/kdeldycke/repomatic"
|
|
98
98
|
Issues = "https://github.com/kdeldycke/repomatic/issues"
|
|
@@ -119,6 +119,7 @@ docs = [
|
|
|
119
119
|
"sphinx-copybutton>=0.5.2",
|
|
120
120
|
"sphinx-datatables>=1",
|
|
121
121
|
"sphinx-design>=0.6",
|
|
122
|
+
"sphinxcontrib-jquery>=4",
|
|
122
123
|
"sphinxcontrib-mermaid>=1.2.3",
|
|
123
124
|
"sphinxext-opengraph>=0.13",
|
|
124
125
|
]
|
|
@@ -130,7 +131,7 @@ typing = [
|
|
|
130
131
|
]
|
|
131
132
|
|
|
132
133
|
[tool.uv]
|
|
133
|
-
required-version = ">=0.
|
|
134
|
+
required-version = ">=0.11.15"
|
|
134
135
|
exclude-newer = "1 week"
|
|
135
136
|
|
|
136
137
|
[tool.uv.dependency-groups.docs]
|
|
@@ -147,14 +148,14 @@ module-root = ""
|
|
|
147
148
|
[tool.nuitka]
|
|
148
149
|
copyright = "Kevin Deldycke <kevin@deldycke.com> and contributors. Distributed under GPL-2.0-or-later license."
|
|
149
150
|
file-description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
|
|
150
|
-
file-version = "7.4.
|
|
151
|
+
file-version = "7.4.1"
|
|
151
152
|
include-data-dir = ["repomatic/data/awesome_template=repomatic/data/awesome_template"]
|
|
152
153
|
include-data-files = ["repomatic/templates/*.md=repomatic/templates/"]
|
|
153
154
|
include-package-data = ["click_extra"]
|
|
154
155
|
linux-icon = "docs/assets/icon.png"
|
|
155
156
|
macos-app-icon = "docs/assets/icon.icns"
|
|
156
157
|
product-name = "Repomatic"
|
|
157
|
-
product-version = "7.4.
|
|
158
|
+
product-version = "7.4.1"
|
|
158
159
|
windows-icon-from-ico = "docs/assets/icon.ico"
|
|
159
160
|
|
|
160
161
|
[tool.ruff]
|
|
@@ -244,7 +245,7 @@ source = ["repomatic"]
|
|
|
244
245
|
precision = 2
|
|
245
246
|
|
|
246
247
|
[tool.bumpversion]
|
|
247
|
-
current_version = "7.4.
|
|
248
|
+
current_version = "7.4.1"
|
|
248
249
|
parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.dev(?P<dev>\d+))?'
|
|
249
250
|
serialize = [
|
|
250
251
|
"{major}.{minor}.{patch}.dev{dev}",
|
|
@@ -7,12 +7,12 @@ build-backend = "uv_build"
|
|
|
7
7
|
# repomatic runs across the ecosystem, where uv versions drift between projects,
|
|
8
8
|
# and a hard ceiling risks a chicken-and-egg deadlock when one project's uv
|
|
9
9
|
# moves ahead of repomatic's next release.
|
|
10
|
-
requires = [ "uv-build>=0.
|
|
10
|
+
requires = [ "uv-build>=0.8" ]
|
|
11
11
|
|
|
12
12
|
[project]
|
|
13
13
|
# Docs: https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
|
|
14
14
|
name = "repomatic"
|
|
15
|
-
version = "7.4.
|
|
15
|
+
version = "7.4.1"
|
|
16
16
|
description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
|
|
17
17
|
readme = "readme.md"
|
|
18
18
|
keywords = [
|
|
@@ -145,7 +145,7 @@ dependencies = [
|
|
|
145
145
|
]
|
|
146
146
|
urls.Changelog = "https://github.com/kdeldycke/repomatic/blob/main/changelog.md"
|
|
147
147
|
urls.Documentation = "https://kdeldycke.github.io/repomatic"
|
|
148
|
-
urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.
|
|
148
|
+
urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1"
|
|
149
149
|
urls.Funding = "https://github.com/sponsors/kdeldycke"
|
|
150
150
|
urls.Homepage = "https://github.com/kdeldycke/repomatic"
|
|
151
151
|
urls.Issues = "https://github.com/kdeldycke/repomatic/issues"
|
|
@@ -190,6 +190,10 @@ docs = [
|
|
|
190
190
|
"sphinx-datatables>=1",
|
|
191
191
|
# sphinx-design 0.6 introduced the current directive syntax for cards, grids, and tabs.
|
|
192
192
|
"sphinx-design>=0.6",
|
|
193
|
+
# sphinxcontrib-jquery is loaded explicitly in docs/conf.py (sphinx-datatables
|
|
194
|
+
# activates it too late to register jquery.js on its own); declare it so the
|
|
195
|
+
# build never relies on it arriving only transitively via sphinx-datatables.
|
|
196
|
+
"sphinxcontrib-jquery>=4",
|
|
193
197
|
# sphinxcontrib-mermaid 1.2.3 fixed mermaid_d3_zoom configuration support.
|
|
194
198
|
"sphinxcontrib-mermaid>=1.2.3",
|
|
195
199
|
# sphinxext-opengraph 0.13 stabilized OpenGraph metadata generation for Sphinx 8+.
|
|
@@ -216,7 +220,7 @@ typing = [
|
|
|
216
220
|
# self-updates). uv.lock stays stable across minors because sync-uv-lock
|
|
217
221
|
# discards a re-lock that only re-spells equivalent markers (see
|
|
218
222
|
# repomatic.uv.sync_uv_lock).
|
|
219
|
-
required-version = ">=0.
|
|
223
|
+
required-version = ">=0.11.15"
|
|
220
224
|
# Docs group requires Python >= 3.14 for recent MyST-Parser and click-extra features.
|
|
221
225
|
dependency-groups.docs = { requires-python = ">= 3.14" }
|
|
222
226
|
# Cooldown period: 7-day buffer before using newly released packages.
|
|
@@ -243,7 +247,7 @@ copyright = "Kevin Deldycke <kevin@deldycke.com> and contributors. Distributed u
|
|
|
243
247
|
file-description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
|
|
244
248
|
# Numeric only: Nuitka rejects PEP 440 .devN suffixes. Kept in sync with the
|
|
245
249
|
# package version by the dedicated [tool.bumpversion] rule that strips the suffix.
|
|
246
|
-
file-version = "7.4.
|
|
250
|
+
file-version = "7.4.1"
|
|
247
251
|
include-data-dir = [
|
|
248
252
|
"repomatic/data/awesome_template=repomatic/data/awesome_template",
|
|
249
253
|
]
|
|
@@ -261,7 +265,7 @@ include-package-data = [ "click_extra" ]
|
|
|
261
265
|
linux-icon = "docs/assets/icon.png"
|
|
262
266
|
macos-app-icon = "docs/assets/icon.icns"
|
|
263
267
|
product-name = "Repomatic"
|
|
264
|
-
product-version = "7.4.
|
|
268
|
+
product-version = "7.4.1"
|
|
265
269
|
windows-icon-from-ico = "docs/assets/icon.ico"
|
|
266
270
|
|
|
267
271
|
[tool.ruff]
|
|
@@ -383,7 +387,7 @@ run.source = [ "repomatic" ]
|
|
|
383
387
|
report.precision = 2
|
|
384
388
|
|
|
385
389
|
[tool.bumpversion]
|
|
386
|
-
current_version = "7.4.
|
|
390
|
+
current_version = "7.4.1"
|
|
387
391
|
# Parse versions with an optional .devN suffix (PEP 440).
|
|
388
392
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(\\.dev(?P<dev>\\d+))?"
|
|
389
393
|
serialize = [
|
|
@@ -56,9 +56,9 @@ import logging
|
|
|
56
56
|
from pathlib import Path
|
|
57
57
|
|
|
58
58
|
from click_extra.blocks import replace_region
|
|
59
|
-
from packaging.version import InvalidVersion, Version
|
|
60
59
|
|
|
61
60
|
from .binary import NUITKA_BUILD_TARGETS
|
|
61
|
+
from .github.releases import parse_release_version
|
|
62
62
|
from .virustotal import VIRUSTOTAL_GUI_URL
|
|
63
63
|
|
|
64
64
|
TYPE_CHECKING = False
|
|
@@ -182,14 +182,6 @@ def _platform_target(name: str) -> str:
|
|
|
182
182
|
return name
|
|
183
183
|
|
|
184
184
|
|
|
185
|
-
def _release_version(tag: str) -> Version | None:
|
|
186
|
-
"""Parse a release tag as a version, or `None` for foreign tag schemes."""
|
|
187
|
-
try:
|
|
188
|
-
return Version(tag.removeprefix("v"))
|
|
189
|
-
except InvalidVersion:
|
|
190
|
-
return None
|
|
191
|
-
|
|
192
|
-
|
|
193
185
|
def _binary_assets(release: ReleaseWithAssets) -> list[ReleaseAsset]:
|
|
194
186
|
"""Return the release's compiled binaries, sorted by filename.
|
|
195
187
|
|
|
@@ -261,7 +253,7 @@ def render_chart_section(records: Sequence[ScanRecord]) -> str:
|
|
|
261
253
|
|
|
262
254
|
points = []
|
|
263
255
|
for tag, (date, flagged, total) in per_tag.items():
|
|
264
|
-
version =
|
|
256
|
+
version = parse_release_version(tag)
|
|
265
257
|
if version is None:
|
|
266
258
|
continue
|
|
267
259
|
if total:
|
|
@@ -383,7 +375,8 @@ def render_binaries_csv(
|
|
|
383
375
|
versioned = [
|
|
384
376
|
(version, release)
|
|
385
377
|
for release in releases
|
|
386
|
-
if not release.draft
|
|
378
|
+
if not release.draft
|
|
379
|
+
and (version := parse_release_version(release.tag)) is not None
|
|
387
380
|
]
|
|
388
381
|
versioned.sort(key=lambda pair: pair[0], reverse=True)
|
|
389
382
|
|
|
@@ -105,6 +105,7 @@ from .github.dev_release import (
|
|
|
105
105
|
from .github.issue import close_open_prs_on_branch
|
|
106
106
|
from .github.pr_body import (
|
|
107
107
|
build_pr_body,
|
|
108
|
+
build_release_review_steps,
|
|
108
109
|
generate_pr_metadata_block,
|
|
109
110
|
generate_refresh_tip,
|
|
110
111
|
get_template_names,
|
|
@@ -4026,6 +4027,24 @@ def pr_body(
|
|
|
4026
4027
|
logging.info(f"Auto-detected version: {ver}")
|
|
4027
4028
|
return ver
|
|
4028
4029
|
|
|
4030
|
+
def _resolve_version() -> str:
|
|
4031
|
+
"""Resolve the release version from --version, else the bumpversion config."""
|
|
4032
|
+
return version if version is not None else _auto_version()
|
|
4033
|
+
|
|
4034
|
+
# The prepare-release checklist's two review steps share one GitHub
|
|
4035
|
+
# releases lookup; memoize it so both template args reuse a single fetch,
|
|
4036
|
+
# and so no other template pays for it (only prepare-release declares them).
|
|
4037
|
+
review_steps: dict[str, str] = {}
|
|
4038
|
+
|
|
4039
|
+
def _review_step(key: str) -> str:
|
|
4040
|
+
if not review_steps:
|
|
4041
|
+
dev_review, changes_review = build_release_review_steps(
|
|
4042
|
+
Metadata(), _resolve_version()
|
|
4043
|
+
)
|
|
4044
|
+
review_steps["dev_release_review"] = dev_review
|
|
4045
|
+
review_steps["changes_review"] = changes_review
|
|
4046
|
+
return review_steps[key]
|
|
4047
|
+
|
|
4029
4048
|
cli_extra_args: dict[str, str | None] = {}
|
|
4030
4049
|
for entry in template_args_cli:
|
|
4031
4050
|
if "=" not in entry:
|
|
@@ -4037,6 +4056,8 @@ def pr_body(
|
|
|
4037
4056
|
# Map argument names to their values or callables. CLI-provided extras
|
|
4038
4057
|
# override built-in flag-driven sources so callers can pass any name.
|
|
4039
4058
|
arg_sources: dict[str, str | None | Callable[[], str | None]] = {
|
|
4059
|
+
"changes_review": lambda: _review_step("changes_review"),
|
|
4060
|
+
"dev_release_review": lambda: _review_step("dev_release_review"),
|
|
4040
4061
|
"diff_table": os.getenv("REPOMATIC_DIFF_TABLE", ""),
|
|
4041
4062
|
"part": part,
|
|
4042
4063
|
"pr_ref": pr_ref,
|
|
@@ -51,7 +51,7 @@ jobs:
|
|
|
51
51
|
- name: Run repomatic metadata
|
|
52
52
|
id: metadata
|
|
53
53
|
run: >
|
|
54
|
-
uvx --no-progress 'repomatic==7.4.
|
|
54
|
+
uvx --no-progress 'repomatic==7.4.1' metadata
|
|
55
55
|
--format github-json --output "$GITHUB_OUTPUT"
|
|
56
56
|
new_commits_matrix release_commits_matrix build_targets nuitka_matrix
|
|
57
57
|
nuitka_extras is_python_project package_name current_version
|
|
@@ -134,7 +134,7 @@ jobs:
|
|
|
134
134
|
uv --no-progress sync --frozen ${flags}
|
|
135
135
|
- name: Pre-bake build metadata
|
|
136
136
|
if: contains(matrix.current_version, '.dev')
|
|
137
|
-
run: uvx --no-progress 'click-extra==8.
|
|
137
|
+
run: uvx --no-progress 'click-extra==8.6.0' prebake all
|
|
138
138
|
- name: Build binary
|
|
139
139
|
id: build-binary
|
|
140
140
|
continue-on-error: true
|
|
@@ -158,7 +158,7 @@ jobs:
|
|
|
158
158
|
# NUITKA_PYTHON_FLAGS holds the entry point's --python-flag (if any),
|
|
159
159
|
# meant to word-split.
|
|
160
160
|
# shellcheck disable=SC2086
|
|
161
|
-
uvx --no-progress 'repomatic==7.4.
|
|
161
|
+
uvx --no-progress 'repomatic==7.4.1' run nuitka -- \
|
|
162
162
|
${NUITKA_PYTHON_FLAGS} \
|
|
163
163
|
--output-filename="${BIN_NAME}" "${MODULE_PATH}"
|
|
164
164
|
- name: Upload Nuitka crash report
|
|
@@ -183,7 +183,7 @@ jobs:
|
|
|
183
183
|
BIN_NAME: ${{ matrix.bin_name }}
|
|
184
184
|
shell: bash
|
|
185
185
|
run: >
|
|
186
|
-
uvx --no-progress 'repomatic==7.4.
|
|
186
|
+
uvx --no-progress 'repomatic==7.4.1'
|
|
187
187
|
verify-binary --target "${TARGET}" --binary "${BIN_NAME}"
|
|
188
188
|
- name: Upload binaries
|
|
189
189
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
@@ -327,7 +327,7 @@ jobs:
|
|
|
327
327
|
CURRENT_VERSION: ${{ matrix.current_version }}
|
|
328
328
|
COMMIT: ${{ matrix.commit }}
|
|
329
329
|
run: >
|
|
330
|
-
uvx --no-progress 'repomatic==7.4.
|
|
330
|
+
uvx --no-progress 'repomatic==7.4.1' git-tag
|
|
331
331
|
--tag "v${CURRENT_VERSION}"
|
|
332
332
|
--commit "${COMMIT}"
|
|
333
333
|
--skip-existing
|
|
@@ -368,7 +368,7 @@ jobs:
|
|
|
368
368
|
continue-on-error: true
|
|
369
369
|
env:
|
|
370
370
|
GH_TOKEN: ${{ secrets.REPOMATIC_PAT || github.token }}
|
|
371
|
-
run: uvx --no-progress 'repomatic==7.4.
|
|
371
|
+
run: uvx --no-progress 'repomatic==7.4.1' sync-dev-release --live --delete
|
|
372
372
|
- name: Create GitHub release draft
|
|
373
373
|
# Idempotent: skips if release already exists (e.g. workflow re-run).
|
|
374
374
|
# Notes carry the PyPI availability admonition from the start: baking it
|
|
@@ -570,7 +570,7 @@ jobs:
|
|
|
570
570
|
VIRUSTOTAL_API_KEY: ${{ secrets.VIRUSTOTAL_API_KEY }}
|
|
571
571
|
CURRENT_VERSION: ${{ matrix.current_version }}
|
|
572
572
|
run: >
|
|
573
|
-
uvx --no-progress 'repomatic==7.4.
|
|
573
|
+
uvx --no-progress 'repomatic==7.4.1' scan-virustotal
|
|
574
574
|
--tag "v${CURRENT_VERSION}"
|
|
575
575
|
--binaries-dir ./binaries
|
|
576
576
|
--poll
|
|
@@ -583,7 +583,7 @@ jobs:
|
|
|
583
583
|
env:
|
|
584
584
|
GH_TOKEN: ${{ github.token }}
|
|
585
585
|
run: >
|
|
586
|
-
uvx --no-progress 'repomatic==7.4.
|
|
586
|
+
uvx --no-progress 'repomatic==7.4.1' sync-binaries
|
|
587
587
|
--repo "${{ github.repository }}"
|
|
588
588
|
--page docs/binaries.md
|
|
589
589
|
--records docs/assets/virustotal-scans.json
|
|
@@ -598,7 +598,7 @@ jobs:
|
|
|
598
598
|
CURRENT_VERSION: ${{ matrix.current_version }}
|
|
599
599
|
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
600
600
|
run: >
|
|
601
|
-
uvx --no-progress 'repomatic==7.4.
|
|
601
|
+
uvx --no-progress 'repomatic==7.4.1' git-commit-push
|
|
602
602
|
--message "Record v${CURRENT_VERSION} binaries"
|
|
603
603
|
--branch "${DEFAULT_BRANCH}"
|
|
604
604
|
docs/binaries.md
|
|
@@ -644,5 +644,5 @@ jobs:
|
|
|
644
644
|
env:
|
|
645
645
|
GH_TOKEN: ${{ github.token }}
|
|
646
646
|
run: >
|
|
647
|
-
uvx --no-progress 'repomatic==7.4.
|
|
647
|
+
uvx --no-progress 'repomatic==7.4.1' sync-dev-release --live
|
|
648
648
|
--upload-assets release_assets
|
|
@@ -545,8 +545,6 @@ Hand-written, but with a strict structure that downstream projects should mirror
|
|
|
545
545
|
|
|
546
546
|
7. **Release verification** section showing `gh attestation verify` against the package's own repo, with the `--signer-repo` flag if the release workflow runs as a reusable workflow from another repo. Mirror exactly: a stale flag here breaks reader trust.
|
|
547
547
|
|
|
548
|
-
8. **Dependencies graph** — a `## Dependencies` section closing the page, embedding `assets/dependencies.mmd` via a plain ```` ```mermaid ```` fence with `:align: center`. The `.mmd` is regenerated by `repomatic update-dep-graph` from `uv.lock`; never hand-edit it. One sentence explains the shapes: boxes hold the directly-declared dependencies of each group, drawn as hexagons; transitive dependencies render outside the boxes as ovals.
|
|
549
|
-
|
|
550
548
|
Sync rules:
|
|
551
549
|
|
|
552
550
|
- Re-check the Repology page on every release. New distros get a new tab; dropped distros get the tab removed.
|
|
@@ -554,6 +552,14 @@ Sync rules:
|
|
|
554
552
|
- Version-number references in download URLs must use `releases/latest/download/...`, not pinned tags. Hand-pinned versions in install.md were a long-running source of doc drift.
|
|
555
553
|
- The Try it tab-set's `Specific version` tab does carry a pinned version as an example — that's intentional (it teaches the syntax). From repomatic `v7.4.0` on, the prepare-release freeze step bumps it automatically (`freeze_install_cli_version` rewrites `{package}@X.Y.Z` and `{package}==X.Y.Z` pins in `docs/install.md`); hand-bumping is only needed on repos pinned to older release engines.
|
|
556
554
|
|
|
555
|
+
### `packaging.md`: distribution and dependency reference
|
|
556
|
+
|
|
557
|
+
A maintainer/packager-facing page. Every project carries the **dependency graph** here; projects distributed through package managers add their per-channel build instructions on the same page.
|
|
558
|
+
|
|
559
|
+
**Dependencies graph** — a `## Dependencies` section embedding `assets/dependencies.mmd` via a plain ```` ```mermaid ```` fence with `:align: center`. The `.mmd` is regenerated by `repomatic update-dep-graph` from `uv.lock`; never hand-edit it. One sentence explains the shapes: boxes hold the directly-declared dependencies of each group, drawn as hexagons; transitive dependencies render outside the boxes as ovals.
|
|
560
|
+
|
|
561
|
+
The graph used to close `install.md`; it moved here so the install page stays end-user-focused while packager-facing material lives on one page. `meta-package-manager` is the reference: its `packaging.md` renders the graph above a full per-distro build catalog.
|
|
562
|
+
|
|
557
563
|
## Standard page roster
|
|
558
564
|
|
|
559
565
|
A Sphinx site for a CLI/library project should converge on a predictable page set. Downstream repos that mirror this roster get free coherence with every other repo following the convention, and readers learn one navigation pattern.
|
|
@@ -565,7 +571,7 @@ Primary toctree (user-facing), in this order:
|
|
|
565
571
|
01. `install` — § Recipes › `install.md`. Always first.
|
|
566
572
|
02. `cli` — § Recipes › `cli.md`. CLIs only.
|
|
567
573
|
03. `configuration` — § Recipes › `configuration.md`. Projects with `[tool.X]` schema.
|
|
568
|
-
04. `dependencies` — Dependency policy page (version-specifier rules, floor-comment conventions, audit procedures). The project's own dependency graph
|
|
574
|
+
04. `dependencies` — Dependency policy page (version-specifier rules, floor-comment conventions, audit procedures). The project's own dependency graph is not a page of its own: it renders in `packaging.md`'s `## Dependencies` section (see § Recipes › `packaging.md`).
|
|
569
575
|
05. `tool-runner` — Only when the project ships a `repomatic run`-style tool runner.
|
|
570
576
|
06. `workflows` — Only when the project publishes reusable workflows.
|
|
571
577
|
07. `test-matrix` — Only when the project documents its CI test-matrix composition.
|
|
@@ -579,14 +585,15 @@ Development toctree, in this order:
|
|
|
579
585
|
02. `upstream-development` — Project-internal release process. Mark `(upstream maintainers only)` in the page heading so readers know this is not for consumers.
|
|
580
586
|
03. `operation-contracts` — Optional, for projects with formal automated-operation contracts.
|
|
581
587
|
04. `API <{package}>`, `tests` — Autodoc API pages: the `API <...>` entry aliases the package's root autodoc page, `tests` covers the test-suite package. Both keep plain octicon-free headings (see Title octicons below).
|
|
582
|
-
05. `
|
|
583
|
-
06. `
|
|
584
|
-
07. `
|
|
585
|
-
08. `changelog
|
|
586
|
-
09. `
|
|
587
|
-
10. `
|
|
588
|
-
11. `
|
|
589
|
-
12. `
|
|
588
|
+
05. `packaging` — Distribution and dependency reference (see § Recipes › `packaging.md`). Every project renders its dependency graph here; projects distributed through package managers add their per-channel build instructions alongside it. Maintainer/packager-facing, so it sits in Development.
|
|
589
|
+
06. `binaries` — Standalone-executables catalog written by the repomatic binaries pipeline. Only for projects compiling Nuitka binaries; a maintainer-facing reference, so it belongs here rather than in the primary toctree (end users reach the same downloads through `install.md`'s `## Executables` section).
|
|
590
|
+
07. `genindex`, `modindex` — Sphinx-generated index and module index.
|
|
591
|
+
08. `changelog` — Reference the root changelog via `{include} ../changelog.md` so the file stays single-sourced.
|
|
592
|
+
09. `changelog-archive` — Only when `[tool.repomatic] changelog.archive-location` points into `docs/`.
|
|
593
|
+
10. `todolist` — `sphinx.ext.todo` output. Drop this entry when the project has no TODOs.
|
|
594
|
+
11. `code-of-conduct`, `license` — `{include}` from root files; never duplicate the text.
|
|
595
|
+
12. `GitHub repository <https://...>` — External link as the last entry.
|
|
596
|
+
13. `Funding <https://github.com/sponsors/...>` — External link if the project accepts funding.
|
|
590
597
|
|
|
591
598
|
Page-shape rules that apply across the roster:
|
|
592
599
|
|
|
@@ -600,6 +607,8 @@ Page-shape rules that apply across the roster:
|
|
|
600
607
|
| `add-packaging-channel.md` | `git-merge` |
|
|
601
608
|
| `agents.md` | `dependabot` |
|
|
602
609
|
| `architectures.md` | `cpu` |
|
|
610
|
+
| `augmentations.md` | `plus-circle` |
|
|
611
|
+
| `bar-plugin.md` | `plug` |
|
|
603
612
|
| `benchmark.md` | `trophy` |
|
|
604
613
|
| `binaries.md` | `desktop-download` |
|
|
605
614
|
| `carapace.md` | `chevron-right` |
|
|
@@ -614,9 +623,12 @@ Page-shape rules that apply across the roster:
|
|
|
614
623
|
| `configuration.md` | `sliders` |
|
|
615
624
|
| `context.md` | `database` |
|
|
616
625
|
| `contributing.md` | `git-pull-request` |
|
|
626
|
+
| `cooldown.md` | `history` |
|
|
617
627
|
| `decorators.md` | `mention` |
|
|
618
628
|
| `dependencies.md` | `package-dependencies` |
|
|
619
629
|
| `detection.md` | `pulse` |
|
|
630
|
+
| `dump.md` | `file-moved` |
|
|
631
|
+
| `duplicates.md` | `stack` |
|
|
620
632
|
| `envvar.md` | `pin` |
|
|
621
633
|
| `execution.md` | `play` |
|
|
622
634
|
| `falsehoods.md` | `copilot-warning` |
|
|
@@ -626,15 +638,18 @@ Page-shape rules that apply across the roster:
|
|
|
626
638
|
| `license.md` | `law` |
|
|
627
639
|
| `logging.md` | `log` |
|
|
628
640
|
| `man-page.md` | `repo` |
|
|
641
|
+
| `managers.md` | `file-submodule` |
|
|
629
642
|
| `mkdocs.md` | `markdown` |
|
|
630
643
|
| `myst-docstrings.md` | `pencil` |
|
|
631
644
|
| `operation-contracts.md` | `tasklist` |
|
|
645
|
+
| `overrides.md` | `pin` |
|
|
632
646
|
| `packaging.md` | `package-dependents` |
|
|
633
647
|
| `parameters.md` | `tasklist` |
|
|
634
648
|
| `platforms.md` | `codespaces` |
|
|
635
649
|
| `pygments.md` | `file-code` |
|
|
636
650
|
| `pytest.md` | `meter` |
|
|
637
651
|
| `releasing.md` | `rocket` |
|
|
652
|
+
| `sbom.md` | `verified` |
|
|
638
653
|
| `screenshots.md` | `device-camera` |
|
|
639
654
|
| `security.md` | `shield-lock` |
|
|
640
655
|
| `shells.md` | `chevron-right` |
|
|
@@ -642,6 +657,7 @@ Page-shape rules that apply across the roster:
|
|
|
642
657
|
| `sphinx.md` | `book` |
|
|
643
658
|
| `spinner.md` | `sync` |
|
|
644
659
|
| `styling.md` | `typography` |
|
|
660
|
+
| `sudo.md` | `key` |
|
|
645
661
|
| `table.md` | `table` |
|
|
646
662
|
| `telemetry.md` | `broadcast` |
|
|
647
663
|
| `terminals.md` | `terminal` |
|
|
@@ -754,7 +770,7 @@ Strictness flags:
|
|
|
754
770
|
Theme assets and OpenGraph:
|
|
755
771
|
|
|
756
772
|
- `html_logo = "assets/logo-square.svg"` and `html_favicon = "assets/favicon.svg"` are the canonical paths. Both files live under `docs/assets/` and ship as SVG so the Furo theme's dark-mode swap works without a separate asset bundle. The `/brand-assets` skill is the canonical producer of these files: it manages the SVG sources (favicon, square logo, banner, social banner), exports light/dark PNG variants, and wires the new files into `docs/conf.py`. When `html_logo`/`html_favicon` are missing or out of date, run `/brand-assets` instead of editing the assets by hand.
|
|
757
|
-
- `ogp_image
|
|
773
|
+
- `ogp_image` must be an **absolute** URL to the committed PNG on the GitHub raw host — `f"https://raw.githubusercontent.com/{github_user}/{project_id}/main/docs/assets/banner-social-light.png"` — never a site-relative `assets/...` path. `docs/assets/` is not copied into the built site (it is neither in `html_static_path` nor referenced by any doc body, so Sphinx's image collector never picks it up), so a relative `ogp_image` resolves against `ogp_site_url` to a URL that 404s for the social crawlers that only ever see the raw HTML. Set it when the project has a banner asset; without `ogp_image`, `sphinxext.opengraph` falls back to the favicon, which scales poorly. Still define `ogp_site_url = f"https://{github_user}.github.io/{project_id}/"` for the page-level `og:url` tag. The PNG is exported from `assets/banner-social.svg` by the `/brand-assets` skill (which also produces the dark variant for dark-mode social cards on platforms that support them).
|
|
758
774
|
- The Furo `announcement` banner template across this lineage references the same `github_user` constant defined at the top of `conf.py`. Rebuilding the announcement string locally inside `html_theme_options` avoids a per-theme override layer.
|
|
759
775
|
|
|
760
776
|
Pruning checklist before merging any `conf.py` change:
|