A modern project scaffolding tool that helps you quickly create standardized project structures with best practices.
Project description
repo-scaffold
A modern project scaffolding tool that helps you quickly create standardized project structures with best practices.
Features
- 🚀 Quick project initialization with modern best practices
- 📦 Cookiecutter templates with standardized structure
- ⚙️ Interactive project configuration
- 🔧 Pre-configured development tools (ruff, pytest, just)
- 📚 Documentation setup with MkDocs Material
- 🔄 GitHub Actions workflows included
- 🏷️ Conventional-commit driven versioning via Cocogitto
- 📦 Dependency / workspace management with uv
Installation
# Recommended: install as a uv tool
uv tool install repo-scaffold
# Or run without installing
uvx repo-scaffold list
# Or with pip
pip install repo-scaffold
Quick Start
# List available templates
repo-scaffold list
# Create a new project (interactive)
repo-scaffold create python
# Create a project in a specific directory, no prompts
repo-scaffold create python --no-input -o ./my-projects
# Create a uv workspace monorepo
repo-scaffold create uv-workspace -o ./my-projects
# Push a generated project to GitHub: create the repo, set CI secrets,
# push the initial commit, create the gh-pages branch, and point GitHub
# Pages at it. Reads GITHUB_TOKEN from the environment.
export GITHUB_TOKEN=ghp_...
repo-scaffold gh-init ./my-projects/my-python-project
See the GitHub bootstrap docs for the full flag list and the secrets/variables gh-init knows how to set.
End-to-End: From create to GitHub Pages
A full walkthrough from an empty directory to a published repository with CI and docs.
# 1. Generate the project. `create` also runs `git init` on branch `master`
# (opt out with --no-git). Drop --no-input to configure it interactively.
repo-scaffold create python --no-input -o ./workspace
cd ./workspace/my_python_project # directory name is the project_slug
# 2. (Optional) make your own first changes here. gh-init creates the
# initial commit for you, so an extra commit at this point is optional.
# 3. Provide a GitHub token with `repo` scope (or `public_repo` for public repos).
export GITHUB_TOKEN=ghp_...
# 4. Bootstrap GitHub. By default gh-init will:
# - create the repository (name/description pulled from pyproject.toml)
# - set the CI secrets/variables the generated workflows expect
# - push the initial commit to `master`
# - create the `gh-pages` branch and set it as the GitHub Pages source
repo-scaffold gh-init .
# 5. Publish docs: push a release tag (or let the Cocogitto version-bump
# workflow create one). The docs-deploy workflow builds the site and
# pushes it to `gh-pages`, which GitHub Pages now serves automatically.
git push --tags # or: git tag 0.1.0 && git push origin 0.1.0
Common opt-outs:
repo-scaffold create python --no-git— skip the localgit init.repo-scaffold gh-init . --private— create a private repository.repo-scaffold gh-init . --protect-branch— protect the default branch (require PR review; admins can still push so releases keep working).repo-scaffold gh-init . --no-push— create the repo and set secrets without pushing (Pages setup is skipped, since it needs the pushed branch).repo-scaffold gh-init . --no-pages— push, but don't creategh-pagesor configure Pages (you can set it later in repo Settings → Pages).
Available Templates
Currently supported project templates:
-
python— single-package Python projectpyproject.toml+uvfor dependency managementpytest+ coverage,rufffor lint & format- Optional Click CLI, Podman compose files, GitHub Actions, MkDocs Material docs
- Cocogitto release workflow that bumps version, writes
CHANGELOG.md, tags, and triggers PyPI publish
-
uv-workspace— uv workspace monorepo- Workspace-aware
pyproject.tomlwith one initial member underpackages/ - Shared
dev/docsdependency groups - Cocogitto monorepo release workflow with per-package and global tags
- Same lint / test / docs tooling as the python template
- Workspace-aware
Both templates use just (via rust-just) as the task runner. Bootstrap from a clean machine with uvx --from rust-just just init — that recipe also installs rust-just as a uv tool, so every subsequent recipe can be run as plain just <recipe>.
Development Setup
# Clone the repository
git clone https://github.com/ShawnDen-coder/repo-scaffold.git
cd repo-scaffold
# Bootstrap once: installs rust-just as a uv tool, syncs deps, installs hooks
uvx --from rust-just just init
# Subsequent runs use `just` directly
just lint
just test
Releasing
This project (and the templates it generates) uses Cocogitto driven by conventional commits:
- Push a
feat:/fix:/ breaking-change commit tomasterand theversion-bumpworkflow runscog bump --auto, updatingCHANGELOG.md, bumpingpyproject.tomlviauv version, committing, and tagging. - The release workflow then builds and publishes the tagged version.
See cog.toml for hook and changelog configuration.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file repo_scaffold-0.19.1.tar.gz.
File metadata
- Download URL: repo_scaffold-0.19.1.tar.gz
- Upload date:
- Size: 43.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a996aefa180941c1bab50644e0af4b827f727aabc9ac2cea126daee8c9cf42e5
|
|
| MD5 |
1afb40b642b2c829b5efaa022d9cc42d
|
|
| BLAKE2b-256 |
b515d52d325015e4b64e626cf6cd383a563a8e4d2c9ae162f2201441a9de0ec3
|
File details
Details for the file repo_scaffold-0.19.1-py3-none-any.whl.
File metadata
- Download URL: repo_scaffold-0.19.1-py3-none-any.whl
- Upload date:
- Size: 56.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9c8aeaafaeccf5066d6a4a7bbfc3066a19a43076bc8112773ddedbf2cb6be0b
|
|
| MD5 |
28dac75f559b3515290e1a24d09ad47e
|
|
| BLAKE2b-256 |
c633ce0748377949ec5cb7698fe2d1c3c0cb760046ade0755625e67c2176bb4b
|