Repository navigation
Migrating Existing Projects
Projects that predate the template can adopt it. Moving each onto it gives it the shared CI, release and wiki machinery, and future fixes through copier update. Do one project at a time, on a branch, as one reviewed PR.
-
Branch and render over the repo.
_skip_if_existskeeps existingsrc/,tests/,CHANGELOG.mdand wiki pages. Everything else is offered for overwrite:git switch -c chore/adopt-project-template uvx copier copy --trust --overwrite -d github_owner=<current-owner> \ gh:metalayerlab/project-template .
Use the repository's current owner while it lives there. Moving it to metalayerlab later is
gh repo transferplus anothercopier update -d github_owner=metalayerlab, and the image path changes, so update every consumer (Flux, Compose). -
Merge back what is project-specific, with
git diffandgit add -p: dependencies and entry points inpyproject.toml, extra Dockerfile stages, extra manifests, README content. -
Bring the wiki in with its history, then let the checker list the gaps:
git remote add wiki ../<name>.wiki && git fetch wiki mv docs/wiki/.standard.toml "$TMPDIR/standard.toml" # keep the standard git rm -rq docs/wiki && git commit -qm "chore: make room for the wiki" git subtree add --prefix=docs/wiki wiki master # the wiki, with its history mv "$TMPDIR/standard.toml" docs/wiki/.standard.toml python3 scripts/check-wiki.py # missing pages and headings
Copy missing skeleton pages from a fresh render, and rename headings to the standard's.
-
Retire the old machinery:
scripts/bump-version.sh,.github/release-template.md,src/<pkg>/__version__.py(change its imports tofrom <pkg> import __version__),requirements*.txt, and repo-root compose files (moved tocontrib/docker/). -
Seed release-please with the current release: set
.release-please-manifest.jsonand thepyproject.tomlversion to the latestvX.Y.Ztag. The existingCHANGELOG.mdstays, and new entries go on top. -
Make the checks pass:
uv sync, then the Definition of done. A backlog of lint, type or coverage failures is fixed in follow-up PRs. Don't relax the template's settings. Where you must, add a temporary per-module mypy override, tracked inTODO.md. -
GitHub settings, as in Quick Start: squash merge on the PR title, and the ruleset with the new required checks (the workflows create their labels). Put the repository's current topics in
.github/repository.tomlbefore runningpython3 scripts/repo-metadata.py: it removes topics the file doesn't list (--checkshows them). Oncewiki.ymlpublishes, archive the old<name>.wikiclone.
| Situation | What to do |
|---|---|
| Already uv + hatchling, version only in pyproject | Steps 1β2 are mostly merging workflows; keep extra build stages and entrypoints |
setuptools / pip / requirements*.txt
|
Move to hatchling + uv (uv add each runtime dependency, uv add --dev the tools), then delete the requirements files |
| black | Replace with ruff format; expect one large formatting commit |
| Non-blocking or loose lint and types | Expect a ruff and mypy-strict backlog: temporary per-module overrides, tracked in TODO.md
|
An old requires-python floor |
Raise it to the template's minimum, or answer python_version accordingly |
| Several compose files at the repo root | Move them to contrib/docker/; extra variants stay as extra files there |
| Privileged workloads (FUSE, DaemonSets) | Keep them as extra manifests; their namespace can't use the restricted Pod Security level, so say why in a comment |
| Fixtures captured from real systems | Answer personal_data_guard=true. Keep project-specific rules in a script of their own with its own CI step, because the template's guard is template-owned |
A long-lived integration branch (e.g. next) |
Replace it with feat/* branches into main. Merge the wiki clone's branches into master (the branch GitHub publishes) before step 3 |
| A notes repository (an Obsidian vault) |
copier copy --trust -d language=obsidian -d vault_dir=<the vault's folder, or .> into it. An existing π Home.md or π Conventions.md is kept; the vault gains decisions/, the base and the record template. Your README.md is kept; .gitignore comes back as a conflict once: keep your ignore entries. Put your note conventions in π Conventions; AGENTS.md tells assistants to follow them |
| Missing wiki pages or LICENSE | The checker lists missing pages; choose a licence with license
|
project-template | The metalayerlab project template
GitHub β’ Releases β’ Changelog β’ Contributing
This wiki is generated from docs/wiki/ on every push to main: edits made here are overwritten. Change it with a pull request.
- π
copier updatekeeps every project in step - π·οΈ release-please: reviewed Release PRs and generated changelogs
- π A standardised, CI-checked wiki in every repo
- π€ One
AGENTS.mdfor Claude, Codex, Copilot, Gemini and Cursor - π³ Hardened Docker, Kubernetes and systemd manifests