git-repokit 0.9.10__tar.gz → 0.9.12__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.
- git_repokit-0.9.12/PKG-INFO +329 -0
- git_repokit-0.9.12/README.md +288 -0
- git_repokit-0.9.12/git_repokit.egg-info/PKG-INFO +329 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/SOURCES.txt +5 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/pyproject.toml +3 -3
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/__version__.py +1 -1
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/badges.py +26 -26
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/branch_utils.py +4 -2
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/cli.py +21 -8
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/common_kit.py +42 -5
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/config.py +1 -1
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/github_setup.py +2 -2
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/guardrails.py +1 -1
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/hooks/pre-commit-template +2 -2
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/LICENSES.md +5 -2
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/__init__.py +44 -13
- git_repokit-0.9.12/repokit/licenses/proprietary-evaluation.txt +50 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/repo_manager.py +117 -91
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/template_engine.py +5 -3
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/hooks/pre-commit.template +2 -2
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/pyproject.toml +2 -2
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_badges.py +3 -3
- git_repokit-0.9.12/tests/test_cli_examples.py +91 -0
- git_repokit-0.9.12/tests/test_docs_links.py +35 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_github_owner.py +1 -1
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers.py +39 -1
- git_repokit-0.9.12/tests/test_license_adopt.py +95 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_license_cli.py +19 -3
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_licenses.py +3 -3
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_new_default.py +11 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_packaging.py +32 -4
- git_repokit-0.9.12/tests/test_private_branch_create.py +338 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_readme_blocks.py +10 -10
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_template_parity.py +3 -3
- git_repokit-0.9.10/PKG-INFO +0 -422
- git_repokit-0.9.10/README.md +0 -381
- git_repokit-0.9.10/git_repokit.egg-info/PKG-INFO +0 -422
- {git_repokit-0.9.10 → git_repokit-0.9.12}/LICENSE +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/MANIFEST.in +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/dependency_links.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/entry_points.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/requires.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/top_level.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/__init__.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/__main__.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/__init__.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/__init__.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/analyzer.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/backend.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/cache.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/parsers.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/transports/__init__.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/transports/cli.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/transports/openai_compat.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/transports/prompt_file.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/types.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/auth_integration.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/defaults.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/directory_analyzer.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/directory_profiles.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/git_config.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/github_create.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/history_cleaner.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/history_protection.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/hooks/pre-commit-guardrails +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/layers.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/0bsd.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/agpl-3.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/all-rights-reserved.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/apache-2.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/bsd-2-clause.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/bsd-3-clause.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/bsl-1.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/cc-by-4.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/cc-by-sa-4.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/cc0-1.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/epl-2.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/gpl-2.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/gpl-3.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/isc.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/lgpl-2.1.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/lgpl-3.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/mit.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/mpl-2.0.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/unlicense.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/readme_blocks.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/remote_integration.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/CLAUDE-nested.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/CLAUDE.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/instructions/step1_context_rebuilder.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/instructions/step2_dev_workflow_process.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/instructions/step3_context_bridge.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/CHANGELOG.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/CONTRIBUTING.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/README.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/gitattributes.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/gitignore.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/FUNDING.yml.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/ROADMAP.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/dependabot.yml.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/one-offs-README.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/platform-support.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/pull_request_template.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/release-template.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/settings.json.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/stale.yml.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/CODEOWNERS.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/ISSUE_TEMPLATE/bug-report.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/ISSUE_TEMPLATE/feature-request.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/issues/notes.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/issues/roadmap.md.template +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/any/claude-plugin/.claude-plugin/marketplace.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/any/claude-plugin/plugin/.claude-plugin/plugin.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/any/claude-plugin/plugin/README.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.github/workflows/ci-c-cpp.yml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.repokit-common.toml.rkappend +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.vscode/tasks.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/CMakeLists.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/CMakePresets.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/cmake/GenerateStamp.cmake +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/src/main.cpp +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/tests/test_version.cpp +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/vcpkg.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/minimal/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/minimal/Makefile +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/minimal/build.bat +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/minimal/src/__RK_SNAKE__.c +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/.vscode/tasks.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/__RK_PROJECT__.sln +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/__RK_PROJECT__.vcxproj +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/src/main.cpp +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/.repokit-common.toml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/hooks/hooks.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/hooks/scripts/session-start.mjs +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/tests/manifest.test.js +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node/.repokit-common.toml.rkappend +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node/package.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node-package/.github/workflows/release.yml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node-package/package.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node-package/src/index.ts +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node-package/tests/index.test.ts +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/script/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/script/__RK_PROJECT__.js +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/script/tests/version.test.js +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/ts/package.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/ts/tsconfig.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/.github/workflows/ci-python.yml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/.repokit-common.toml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/VERSION +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/hooks.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/scripts/run-hook.mjs +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/scripts/session_start.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/tests/test_manifest.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/.github/workflows/release.yml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/__init__.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/__main__.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/_version.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/cli.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/tests/conftest.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/tests/test_version.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/.github/workflows/ci-python.yml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/.repokit-common.toml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/VERSION +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/__RK_PROJECT__.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/tests/test_version.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/setuppy/requirements.txt +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/setuppy/setup.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/c-cpp/.gitignore.rkappend +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/c-cpp/.repokit-common.toml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/c-cpp/include/__RK_SNAKE__/version.h +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/c-cpp/src/app.rc +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.editorconfig +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.github/workflows/ci-js-ts.yml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.gitignore.rkappend +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.repokit-common.toml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/VERSION +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/python/.github/workflows/ci-python.yml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/python/.gitignore.rkappend +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/python/.vscode/launch.json +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/manifest.toml +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/CLAUDE.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_maps/MOC-project.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_oracle/backlinks.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_oracle/concepts.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_oracle/manifest.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_todo/ACTIVE-WORK.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_todo/OPEN-LOOPS.md +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/utils.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/vault.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/setup.cfg +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/setup.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_branch_strategies.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_cli_integration.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_core_functionality.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_deployment_scenarios.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_directory_profiles.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_extras_cli.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_github_create.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_github_integration.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_github_setup.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_guardrails.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_hermetic.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_hook_encoding.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_hook_patterns.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layer_action_pins.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_c_cpp.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_claude_plugin.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_cli.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_compositions.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_js_ts.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_vscode.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_legacy_smoke.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_run_tests_driver.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_utils.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_vault_bootstrap.py +0 -0
- {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_vendored_ailib.py +0 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: git-repokit
|
|
3
|
+
Version: 0.9.12
|
|
4
|
+
Summary: Create standardized Git repositories: language presets, licenses, GitHub setup, and a private notes vault
|
|
5
|
+
Author: Dustin Darcy
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/DazzleTools/git-repokit
|
|
8
|
+
Project-URL: Repository, https://github.com/DazzleTools/git-repokit
|
|
9
|
+
Project-URL: Issues, https://github.com/DazzleTools/git-repokit/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/DazzleTools/git-repokit/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: git,repository,scaffolding,template,project-generator,github
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: requests>=2.25.0
|
|
26
|
+
Requires-Dist: tomli>=1.1; python_version < "3.11"
|
|
27
|
+
Provides-Extra: test
|
|
28
|
+
Requires-Dist: pytest>=7.0.0; extra == "test"
|
|
29
|
+
Requires-Dist: python-dotenv>=1.0.0; extra == "test"
|
|
30
|
+
Requires-Dist: pyyaml>=6.0; extra == "test"
|
|
31
|
+
Requires-Dist: build>=1.0; extra == "test"
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
34
|
+
Requires-Dist: python-dotenv>=1.0.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pyyaml>=6.0; extra == "dev"
|
|
36
|
+
Requires-Dist: build>=1.0; extra == "dev"
|
|
37
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
38
|
+
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
39
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
# git-repokit
|
|
43
|
+
|
|
44
|
+
[](https://pypi.org/project/git-repokit/)
|
|
45
|
+
[](https://github.com/DazzleTools/git-repokit/releases)
|
|
46
|
+
[](https://pypistats.org/packages/git-repokit)
|
|
47
|
+
[](https://www.python.org/downloads/)
|
|
48
|
+
[](https://opensource.org/licenses/MIT)
|
|
49
|
+
[](https://github.com/DazzleTools/git-repokit/discussions)
|
|
50
|
+
[](docs/platform-support.md)
|
|
51
|
+
|
|
52
|
+
**One `repokit` command creates a project that is ready to work in (including the structure, the code for its language, the tooling and hooks, a private notes vault, a license, and the repository on GitHub with its labels and first issues).**
|
|
53
|
+
|
|
54
|
+
`repokit create` replaces the hand-run route of copying a template repository, running its setup, then setting up GitHub and the notes by hand. Every piece is optional and configurable, so your own house style lives in one config file, and a create becomes one short command.
|
|
55
|
+
|
|
56
|
+
## What a project gets
|
|
57
|
+
|
|
58
|
+
A full create (the [Quick Start](#-quick-start) below) produces:
|
|
59
|
+
|
|
60
|
+
- **The structure:** README, CONTRIBUTING, CHANGELOG, LICENSE, `.gitignore`, `.gitattributes`, `docs/`, `tests/`, `scripts/`, and, if you ask for them, ROADMAP, a funding file, Dependabot, a stale-issue policy and PR and release templates.
|
|
61
|
+
- **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, and more. Each comes with tests, a CI workflow and a VS Code debug configuration that work from the first commit. See [Languages and layers](docs/Languages-and-Layers.md).
|
|
62
|
+
- **A README that names the project:** the real GitHub owner, badges for the release, the Python or Node minimum and the license, install and test commands for the preset, and a License section at the end.
|
|
63
|
+
- **The tooling:** [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) vendored at `scripts/repokit-common/`, with git hooks that keep version numbers in step, keep private files out of public commits, and run the tests before a push.
|
|
64
|
+
- **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents and postmortems. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
|
|
65
|
+
- **The repository on GitHub** (with `--github`): created with your `gh` login and pushed. It gets the standard labels, Roadmap and Quick Notes as issues #1 and #2 (pinned), discussions and topics. See [GitHub setup](docs/GitHub-Setup.md).
|
|
66
|
+
|
|
67
|
+
## 📦 Installation
|
|
68
|
+
|
|
69
|
+
Python 3.10 or newer. The command is `repokit`.
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pip install git-repokit
|
|
73
|
+
# or the same tool under its DazzleTools alias
|
|
74
|
+
pip install dazzle-git-repokit
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`--github` also needs the [GitHub CLI](https://cli.github.com/), logged in once with `gh auth login`.
|
|
78
|
+
|
|
79
|
+
From source:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
git clone https://github.com/DazzleTools/git-repokit.git
|
|
83
|
+
cd git-repokit
|
|
84
|
+
pip install -e ".[dev]" # with the test and lint tools
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 🎯 Quick Start
|
|
88
|
+
|
|
89
|
+
### A full project, on GitHub
|
|
90
|
+
|
|
91
|
+
This is the most common create: a Python package with everything turned on, published to GitHub with its labels, first issues and topics.
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
repokit create my-tool --language python --license gpl-3.0-or-later \
|
|
95
|
+
--description "What my-tool does, in one sentence" \
|
|
96
|
+
--extras all \
|
|
97
|
+
--github --github-setup labels,issues,pin,discussions,topics \
|
|
98
|
+
--topics cli,python
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
You get a private GitHub repository under your `gh` login (add `--public` for a public one, `--org MyOrg` for an organization), with `main` pushed, the labels made, and issues #1 (Roadmap) and #2 (Quick Notes) pinned. Locally, `my-tool/` holds the project and its vault in `my-tool/private/`. [GitHub setup](docs/GitHub-Setup.md) lists the few steps that are still done by hand afterwards.
|
|
102
|
+
|
|
103
|
+
### The same create from your house config
|
|
104
|
+
|
|
105
|
+
Put the choices you make every time in `~/.repokit/config.json`:
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"license": "gpl-3.0-or-later",
|
|
110
|
+
"license_private": "all-rights-reserved",
|
|
111
|
+
"extras": ["all"],
|
|
112
|
+
"github_setup": ["labels", "issues", "pin", "discussions", "topics"],
|
|
113
|
+
"github": {"username": "your-login"}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Then the full create is:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
repokit create my-tool --language python --github \
|
|
121
|
+
--description "What my-tool does, in one sentence" --topics cli,python
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Every key is listed in [Configuration](docs/Configuration.md).
|
|
125
|
+
|
|
126
|
+
### A multi-branch project
|
|
127
|
+
|
|
128
|
+
The private-branch model keeps all your working history on a local-only `private` branch, and moves finished work to public branches that are checked out beside it:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
repokit create my-app --branch-strategy standard --language python --license mit --github
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
my-app/
|
|
136
|
+
local/ the repository, on the private branch: work here
|
|
137
|
+
dev/ the dev branch
|
|
138
|
+
github/ the main branch
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Then the day-to-day loop is:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
cd my-app/local # work and commit on private, notes and all
|
|
145
|
+
git add -A && git commit -m "Add the parser"
|
|
146
|
+
|
|
147
|
+
cd ../dev # bring the work to dev, without the private files
|
|
148
|
+
repokit safe-merge private --preview
|
|
149
|
+
repokit safe-merge private
|
|
150
|
+
git commit -m "Add the parser"
|
|
151
|
+
|
|
152
|
+
cd ../github # and on to main when it is ready
|
|
153
|
+
repokit safe-merge dev
|
|
154
|
+
git commit -m "Release the parser"
|
|
155
|
+
git push
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
`safe-merge` leaves out the private content (`private/`, `CLAUDE.md`, `revisions/`, ...), and the hooks refuse it on a public branch if it ever gets staged. `--github` pushes only the public branches. Other layouts: `simple` (private, dev, main), `gitflow`, `github-flow`, and your own with `--branches` and `--worktrees`; see [Branch strategies](#branch-strategies) below.
|
|
159
|
+
|
|
160
|
+
### Other common creates
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# Local only: no GitHub, nothing pushed
|
|
164
|
+
repokit create my-tool --language python --license mit
|
|
165
|
+
|
|
166
|
+
# A Claude Code plugin (hooks in JavaScript; add --language python for Python hooks)
|
|
167
|
+
repokit create my-plugin --with claude-plugin --license apache-2.0 --github
|
|
168
|
+
|
|
169
|
+
# A C/C++ app with CMake, or a Visual Studio solution
|
|
170
|
+
repokit create my-app --language c-cpp --license bsd-3-clause
|
|
171
|
+
repokit create my-app --with c-cpp/msbuild --license gpl-3.0-or-later
|
|
172
|
+
|
|
173
|
+
# A TypeScript npm package
|
|
174
|
+
repokit create my-lib --language js-ts --license mpl-2.0
|
|
175
|
+
|
|
176
|
+
# A one-file Python script, no packaging, given away to the public domain
|
|
177
|
+
repokit create my-script --with python/script --license unlicense
|
|
178
|
+
|
|
179
|
+
# Several pieces in one --with, comma-separated; repokit puts them in order
|
|
180
|
+
repokit create my-plugin --with claude-plugin,ts --license mit # a Claude Code plugin in TypeScript
|
|
181
|
+
repokit create my-lib --with node,ts,node-package --license isc # the same layers as --with js-ts/node-package
|
|
182
|
+
repokit create my-app --with c-cpp/cmake-app,python/script --license mit # two languages, a preset for each
|
|
183
|
+
|
|
184
|
+
# A private project: all rights reserved, evaluation-only, your own terms, or no LICENSE at all
|
|
185
|
+
repokit create my-work --language python --license all-rights-reserved
|
|
186
|
+
repokit create my-work --language python --license proprietary-evaluation
|
|
187
|
+
repokit create my-work --language python --license file=../terms/client-terms.txt
|
|
188
|
+
repokit create my-sketch --license none
|
|
189
|
+
|
|
190
|
+
# What every language offers, and the license catalogue
|
|
191
|
+
repokit list
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The catalogue has every license GitHub and GitLab offer when you create a repository, beyond the ones above: `lgpl-3.0`, `agpl-3.0`, `epl-2.0`, `0bsd`, `cc0-1.0` and more, with the texts from [choosealicense.com](https://choosealicense.com/licenses/), which also helps you pick one. `repokit list` prints every id, ready to copy. Two more are for software you are not giving away: `all-rights-reserved`, and `proprietary-evaluation`, which allows evaluation and non-commercial use until you revoke it, forbids everything else, and optionally provides an email for permission requests.
|
|
195
|
+
|
|
196
|
+
## Choosing the code type
|
|
197
|
+
|
|
198
|
+
`--language` picks the language: `python`, `c-cpp`, `js-ts`, or `generic` (the default, which adds no code). Each language has a default preset, and `--with` picks another one, such as `python/claude-plugin` or `c-cpp/msbuild`. `--with` also takes a comma-separated list of presets and single layers (`--with claude-plugin,ts`). A name can be bare when only one language has it, and is qualified when two do: `script` is refused as ambiguous, `python/script` is not. `repokit list` shows every preset and layer, including the planned ones.
|
|
199
|
+
|
|
200
|
+
| Language | Default preset | Other presets |
|
|
201
|
+
|---|---|---|
|
|
202
|
+
| `python` | `python/pypi`: a package with `pyproject.toml`, a CLI, tests, and publish-on-release | `python/script`, `python/setuppy`, `python/claude-plugin` |
|
|
203
|
+
| `c-cpp` | `c-cpp/cmake-app`: CMake presets, vcpkg, CTest, a version header | `c-cpp/msbuild`, `c-cpp/minimal` |
|
|
204
|
+
| `js-ts` | `js-ts/node-package`: a TypeScript npm package with `node:test` | `js-ts/script`, `js-ts/claude-plugin` |
|
|
205
|
+
|
|
206
|
+
Several languages stack: `--language python,c-cpp`. The details, and how to add a language, are in [Languages and layers](docs/Languages-and-Layers.md).
|
|
207
|
+
|
|
208
|
+
## The license
|
|
209
|
+
|
|
210
|
+
A license is required. `--license <id>` writes `LICENSE` from a catalogue of the licenses GitHub and GitLab offer (`mit`, `apache-2.0`, `gpl-3.0`, `gpl-3.0-or-later`, `bsd-3-clause`, ...), plus `all-rights-reserved` and `proprietary-evaluation` for a private project. `--license file=<path>` copies a text as it is, and `--license none` writes no file. The holder and year come from your git identity and the clock, and the license also populates in `pyproject.toml` or the plugin manifest. With `license` set in the config, you can leave the flag off.
|
|
211
|
+
|
|
212
|
+
## Branch strategies
|
|
213
|
+
|
|
214
|
+
repokit has two ways to keep private work private:
|
|
215
|
+
|
|
216
|
+
- **`main-only` (the default):** the project folder is the repository, on `main`, and `private/` is its own nested git repository that the project ignores. One branch, no merging rules to learn.
|
|
217
|
+
- **The private-branch model:** your working history lives on a local-only `private` branch in `<name>/local/`, and the public branches are git worktrees in sibling folders. You move finished work across with `repokit safe-merge`, which leaves the private content behind. This is the model repokit was first built for, and it suits projects with several release stages or several people.
|
|
218
|
+
|
|
219
|
+
| `--branch-strategy` | Public branches | Checked out in folders | Flow |
|
|
220
|
+
|---|---|---|---|
|
|
221
|
+
| `main-only` | main | the project folder itself | commit on main |
|
|
222
|
+
| `standard` | dev, staging, test, live, main | `dev/`, `github/` (main) | private -> dev -> test / staging -> main -> live |
|
|
223
|
+
| `simple` | dev, main | `github/` (main) | private -> dev -> main |
|
|
224
|
+
| `gitflow` | develop, release, hotfix, main | `develop/`, `github/` (main) | private -> develop -> release -> main, with hotfixes |
|
|
225
|
+
| `github-flow` | main | `github/` (main) | private -> main |
|
|
226
|
+
| `minimal` | main | none (switch branches in `local/`) | private -> main |
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# A GitFlow project on GitHub
|
|
230
|
+
repokit create my-lib --branch-strategy gitflow --language python --license mit --github
|
|
231
|
+
|
|
232
|
+
# Your own branches, with worktrees for two of them (name a private-branch
|
|
233
|
+
# strategy too, or the project gets no private branch)
|
|
234
|
+
repokit create my-app --branch-strategy simple --branches main,develop,qa,production \
|
|
235
|
+
--worktrees main,develop --license mit
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
The guards for the private-branch model: `repokit check-guardrails` shows what is protected, `repokit setup-guardrails` installs the hooks in a project repokit did not make, and `repokit safe-merge-dev` merges between development branches while keeping their history out of the public ones. The [Branch strategies](docs/Branch-Strategies.md) guide covers each layout, and the [Workflow guide](docs/Workflow-Guide.md) covers the day-to-day work.
|
|
239
|
+
|
|
240
|
+
## Existing projects
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
repokit analyze ./my-project # what repokit would do, changing nothing
|
|
244
|
+
repokit adopt ./my-project --dry-run # preview adopting a git repository in place
|
|
245
|
+
repokit adopt ./my-project --language python --migration-strategy safe --backup
|
|
246
|
+
repokit migrate ./my-folder --dry-run # add repokit's folders and files to a folder
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
`adopt` fills in what the project lacks. It keeps the project's own license file (`LICENSE`, `LICENSE.md`, `COPYING`, ...); with none, it writes the license your config names, or adopts the project without one and says so. `--license` is only for choosing one (it replaces the project's own file). It keeps the repository's history and sets up the private-branch layout (`--branch-strategy standard` unless you name another): your folder stays on the `private` branch, with `main` and `dev` checked out in sibling folders. The `safe` strategy keeps every existing file and adds what is missing beside it. `repokit setup-guardrails` adds the private-content hooks to a project repokit did not create. The [Adoption guide](docs/Adoption-Guide.md) and the [Migration guide](docs/Migration-Guide.md) walk through each case.
|
|
250
|
+
|
|
251
|
+
## All commands
|
|
252
|
+
|
|
253
|
+
| Command | What it does |
|
|
254
|
+
|---|---|
|
|
255
|
+
| `create` | Create a new project |
|
|
256
|
+
| `list` | List the languages, presets and layers |
|
|
257
|
+
| `analyze` | Report what repokit would do with an existing folder |
|
|
258
|
+
| `adopt` | Add repokit's structure to an existing git repository, in place |
|
|
259
|
+
| `migrate` | Add repokit's standard folders, files and hooks to an existing folder |
|
|
260
|
+
| `publish` | Publish an existing repository to GitHub or GitLab |
|
|
261
|
+
| `bootstrap` | Write a script that sets repokit up |
|
|
262
|
+
| `init-config` | Write a `.repokit.json` |
|
|
263
|
+
| `store-credentials` | Store a GitHub or GitLab token for `--publish-to` |
|
|
264
|
+
| `setup-guardrails`, `check-guardrails` | Install, or check, the private-content protection |
|
|
265
|
+
| `safe-merge`, `safe-merge-dev` | Merge branches without carrying private content across |
|
|
266
|
+
| `clean-history`, `analyze-history` | Find, or remove, sensitive data in a repository's history |
|
|
267
|
+
| `manage-gitkeep` | Add or remove `.gitkeep` files |
|
|
268
|
+
| `list-templates` | List the template files |
|
|
269
|
+
|
|
270
|
+
`repokit <command> --help` shows each command's options and examples.
|
|
271
|
+
|
|
272
|
+
## 🧪 Testing
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
python -m pytest -q # the full suite, about ten minutes
|
|
276
|
+
python -m pytest -q -m unit # the unit tests, a few seconds
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Every run is isolated from your git config, home directory and tokens. A `git push` runs the unit tests through the vendored pre-push hook; CI runs the unit tests on Python 3.10 to 3.13, on Linux and Windows. [tests/README.md](tests/README.md) covers the test classes and the live GitHub tests.
|
|
280
|
+
|
|
281
|
+
## 📚 Documentation
|
|
282
|
+
|
|
283
|
+
- [Configuration](docs/Configuration.md): every config key, and the flag that matches it
|
|
284
|
+
- [Languages and layers](docs/Languages-and-Layers.md): presets, `--with`, and adding a language
|
|
285
|
+
- [GitHub setup](docs/GitHub-Setup.md): `--github`, `--github-setup`, and what GitHub has no API for
|
|
286
|
+
- [The vault](docs/The-Vault.md): `private/`, its first files, and the sessions that use it
|
|
287
|
+
- [Branch strategies](docs/Branch-Strategies.md): main-only and the private-branch model
|
|
288
|
+
- [Workflow guide](docs/Workflow-Guide.md): day-to-day work under the private-branch strategies
|
|
289
|
+
- [Deployment demo](docs/Deployment-Demo.md): worked examples, from a new project to GitHub
|
|
290
|
+
- [Adoption guide](docs/Adoption-Guide.md) and [Migration guide](docs/Migration-Guide.md): existing projects
|
|
291
|
+
- [Recipes and how-tos](docs/Recipes-And-Howtos.md): commands for common cases
|
|
292
|
+
- [Auth guide](docs/Auth-Guide.md): the `gh` login, and tokens for `--publish-to`
|
|
293
|
+
- [Platform support](docs/platform-support.md): what runs where, and what each platform needs
|
|
294
|
+
- [Why repokit exists](docs/Why-RepoKit-Exists.md)
|
|
295
|
+
|
|
296
|
+
The [documentation guide](docs/README.md) suggests a reading order.
|
|
297
|
+
|
|
298
|
+
## Contributing
|
|
299
|
+
|
|
300
|
+
Contributions are welcome! See the [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
|
|
301
|
+
|
|
302
|
+
Like the project?
|
|
303
|
+
|
|
304
|
+
[](https://www.buymeacoffee.com/djdarcy)
|
|
305
|
+
|
|
306
|
+
## Related Projects
|
|
307
|
+
|
|
308
|
+
- [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) - The shared scripts and git hooks every project gets at `scripts/repokit-common/`: version sync, private-content checks, tests before a push, `gh_issue_full.py`. repokit vendors it into each project it creates, and into itself
|
|
309
|
+
- [git-repokit-template](https://github.com/DazzleTools/git-repokit-template) - The template repository repokit grew from: copy it, run its setup, then finish GitHub and the notes by hand. `repokit create --language python` reproduces its project tree, and a regression test keeps the two in step
|
|
310
|
+
- [dazzlecmd](https://github.com/DazzleTools/dazzlecmd) - The DazzleTools CLI (`dz`). Its `dz private-init` first made `private/` its own repository; repokit's vault is a port of it
|
|
311
|
+
- [github-traffic-tracker](https://github.com/djdarcy/github-traffic-tracker) - Traffic history beyond GitHub's 14 days (`ghtraf`). `--github-setup traffic` prints its setup commands, and the `installs` and `views` badges read its counts
|
|
312
|
+
|
|
313
|
+
## Acknowledgments
|
|
314
|
+
|
|
315
|
+
- Inspired by modern DevOps practices and GitOps workflows
|
|
316
|
+
- https://nvie.com/posts/a-successful-git-branching-model/
|
|
317
|
+
- https://trunkbaseddevelopment.com/
|
|
318
|
+
- https://docs.github.com/en/get-started/quickstart/github-flow
|
|
319
|
+
- https://martinfowler.com/articles/continuousIntegration.html
|
|
320
|
+
- https://www.atlassian.com/continuous-delivery
|
|
321
|
+
- https://www.perforce.com/blog/vcs/best-branching-strategies-high-velocity-development
|
|
322
|
+
- Built for developers who value consistency and automation
|
|
323
|
+
- Special thanks to the open-source community writ large
|
|
324
|
+
|
|
325
|
+
## License
|
|
326
|
+
|
|
327
|
+
git-repokit, Copyright (C) 2025-2026 Dustin Darcy
|
|
328
|
+
|
|
329
|
+
Licensed under the MIT License (MIT) -- see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# git-repokit
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/git-repokit/)
|
|
4
|
+
[](https://github.com/DazzleTools/git-repokit/releases)
|
|
5
|
+
[](https://pypistats.org/packages/git-repokit)
|
|
6
|
+
[](https://www.python.org/downloads/)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
[](https://github.com/DazzleTools/git-repokit/discussions)
|
|
9
|
+
[](docs/platform-support.md)
|
|
10
|
+
|
|
11
|
+
**One `repokit` command creates a project that is ready to work in (including the structure, the code for its language, the tooling and hooks, a private notes vault, a license, and the repository on GitHub with its labels and first issues).**
|
|
12
|
+
|
|
13
|
+
`repokit create` replaces the hand-run route of copying a template repository, running its setup, then setting up GitHub and the notes by hand. Every piece is optional and configurable, so your own house style lives in one config file, and a create becomes one short command.
|
|
14
|
+
|
|
15
|
+
## What a project gets
|
|
16
|
+
|
|
17
|
+
A full create (the [Quick Start](#-quick-start) below) produces:
|
|
18
|
+
|
|
19
|
+
- **The structure:** README, CONTRIBUTING, CHANGELOG, LICENSE, `.gitignore`, `.gitattributes`, `docs/`, `tests/`, `scripts/`, and, if you ask for them, ROADMAP, a funding file, Dependabot, a stale-issue policy and PR and release templates.
|
|
20
|
+
- **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, and more. Each comes with tests, a CI workflow and a VS Code debug configuration that work from the first commit. See [Languages and layers](docs/Languages-and-Layers.md).
|
|
21
|
+
- **A README that names the project:** the real GitHub owner, badges for the release, the Python or Node minimum and the license, install and test commands for the preset, and a License section at the end.
|
|
22
|
+
- **The tooling:** [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) vendored at `scripts/repokit-common/`, with git hooks that keep version numbers in step, keep private files out of public commits, and run the tests before a push.
|
|
23
|
+
- **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents and postmortems. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
|
|
24
|
+
- **The repository on GitHub** (with `--github`): created with your `gh` login and pushed. It gets the standard labels, Roadmap and Quick Notes as issues #1 and #2 (pinned), discussions and topics. See [GitHub setup](docs/GitHub-Setup.md).
|
|
25
|
+
|
|
26
|
+
## 📦 Installation
|
|
27
|
+
|
|
28
|
+
Python 3.10 or newer. The command is `repokit`.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install git-repokit
|
|
32
|
+
# or the same tool under its DazzleTools alias
|
|
33
|
+
pip install dazzle-git-repokit
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`--github` also needs the [GitHub CLI](https://cli.github.com/), logged in once with `gh auth login`.
|
|
37
|
+
|
|
38
|
+
From source:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
git clone https://github.com/DazzleTools/git-repokit.git
|
|
42
|
+
cd git-repokit
|
|
43
|
+
pip install -e ".[dev]" # with the test and lint tools
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 🎯 Quick Start
|
|
47
|
+
|
|
48
|
+
### A full project, on GitHub
|
|
49
|
+
|
|
50
|
+
This is the most common create: a Python package with everything turned on, published to GitHub with its labels, first issues and topics.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
repokit create my-tool --language python --license gpl-3.0-or-later \
|
|
54
|
+
--description "What my-tool does, in one sentence" \
|
|
55
|
+
--extras all \
|
|
56
|
+
--github --github-setup labels,issues,pin,discussions,topics \
|
|
57
|
+
--topics cli,python
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
You get a private GitHub repository under your `gh` login (add `--public` for a public one, `--org MyOrg` for an organization), with `main` pushed, the labels made, and issues #1 (Roadmap) and #2 (Quick Notes) pinned. Locally, `my-tool/` holds the project and its vault in `my-tool/private/`. [GitHub setup](docs/GitHub-Setup.md) lists the few steps that are still done by hand afterwards.
|
|
61
|
+
|
|
62
|
+
### The same create from your house config
|
|
63
|
+
|
|
64
|
+
Put the choices you make every time in `~/.repokit/config.json`:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"license": "gpl-3.0-or-later",
|
|
69
|
+
"license_private": "all-rights-reserved",
|
|
70
|
+
"extras": ["all"],
|
|
71
|
+
"github_setup": ["labels", "issues", "pin", "discussions", "topics"],
|
|
72
|
+
"github": {"username": "your-login"}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Then the full create is:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
repokit create my-tool --language python --github \
|
|
80
|
+
--description "What my-tool does, in one sentence" --topics cli,python
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Every key is listed in [Configuration](docs/Configuration.md).
|
|
84
|
+
|
|
85
|
+
### A multi-branch project
|
|
86
|
+
|
|
87
|
+
The private-branch model keeps all your working history on a local-only `private` branch, and moves finished work to public branches that are checked out beside it:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
repokit create my-app --branch-strategy standard --language python --license mit --github
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
my-app/
|
|
95
|
+
local/ the repository, on the private branch: work here
|
|
96
|
+
dev/ the dev branch
|
|
97
|
+
github/ the main branch
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Then the day-to-day loop is:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
cd my-app/local # work and commit on private, notes and all
|
|
104
|
+
git add -A && git commit -m "Add the parser"
|
|
105
|
+
|
|
106
|
+
cd ../dev # bring the work to dev, without the private files
|
|
107
|
+
repokit safe-merge private --preview
|
|
108
|
+
repokit safe-merge private
|
|
109
|
+
git commit -m "Add the parser"
|
|
110
|
+
|
|
111
|
+
cd ../github # and on to main when it is ready
|
|
112
|
+
repokit safe-merge dev
|
|
113
|
+
git commit -m "Release the parser"
|
|
114
|
+
git push
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`safe-merge` leaves out the private content (`private/`, `CLAUDE.md`, `revisions/`, ...), and the hooks refuse it on a public branch if it ever gets staged. `--github` pushes only the public branches. Other layouts: `simple` (private, dev, main), `gitflow`, `github-flow`, and your own with `--branches` and `--worktrees`; see [Branch strategies](#branch-strategies) below.
|
|
118
|
+
|
|
119
|
+
### Other common creates
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Local only: no GitHub, nothing pushed
|
|
123
|
+
repokit create my-tool --language python --license mit
|
|
124
|
+
|
|
125
|
+
# A Claude Code plugin (hooks in JavaScript; add --language python for Python hooks)
|
|
126
|
+
repokit create my-plugin --with claude-plugin --license apache-2.0 --github
|
|
127
|
+
|
|
128
|
+
# A C/C++ app with CMake, or a Visual Studio solution
|
|
129
|
+
repokit create my-app --language c-cpp --license bsd-3-clause
|
|
130
|
+
repokit create my-app --with c-cpp/msbuild --license gpl-3.0-or-later
|
|
131
|
+
|
|
132
|
+
# A TypeScript npm package
|
|
133
|
+
repokit create my-lib --language js-ts --license mpl-2.0
|
|
134
|
+
|
|
135
|
+
# A one-file Python script, no packaging, given away to the public domain
|
|
136
|
+
repokit create my-script --with python/script --license unlicense
|
|
137
|
+
|
|
138
|
+
# Several pieces in one --with, comma-separated; repokit puts them in order
|
|
139
|
+
repokit create my-plugin --with claude-plugin,ts --license mit # a Claude Code plugin in TypeScript
|
|
140
|
+
repokit create my-lib --with node,ts,node-package --license isc # the same layers as --with js-ts/node-package
|
|
141
|
+
repokit create my-app --with c-cpp/cmake-app,python/script --license mit # two languages, a preset for each
|
|
142
|
+
|
|
143
|
+
# A private project: all rights reserved, evaluation-only, your own terms, or no LICENSE at all
|
|
144
|
+
repokit create my-work --language python --license all-rights-reserved
|
|
145
|
+
repokit create my-work --language python --license proprietary-evaluation
|
|
146
|
+
repokit create my-work --language python --license file=../terms/client-terms.txt
|
|
147
|
+
repokit create my-sketch --license none
|
|
148
|
+
|
|
149
|
+
# What every language offers, and the license catalogue
|
|
150
|
+
repokit list
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
The catalogue has every license GitHub and GitLab offer when you create a repository, beyond the ones above: `lgpl-3.0`, `agpl-3.0`, `epl-2.0`, `0bsd`, `cc0-1.0` and more, with the texts from [choosealicense.com](https://choosealicense.com/licenses/), which also helps you pick one. `repokit list` prints every id, ready to copy. Two more are for software you are not giving away: `all-rights-reserved`, and `proprietary-evaluation`, which allows evaluation and non-commercial use until you revoke it, forbids everything else, and optionally provides an email for permission requests.
|
|
154
|
+
|
|
155
|
+
## Choosing the code type
|
|
156
|
+
|
|
157
|
+
`--language` picks the language: `python`, `c-cpp`, `js-ts`, or `generic` (the default, which adds no code). Each language has a default preset, and `--with` picks another one, such as `python/claude-plugin` or `c-cpp/msbuild`. `--with` also takes a comma-separated list of presets and single layers (`--with claude-plugin,ts`). A name can be bare when only one language has it, and is qualified when two do: `script` is refused as ambiguous, `python/script` is not. `repokit list` shows every preset and layer, including the planned ones.
|
|
158
|
+
|
|
159
|
+
| Language | Default preset | Other presets |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| `python` | `python/pypi`: a package with `pyproject.toml`, a CLI, tests, and publish-on-release | `python/script`, `python/setuppy`, `python/claude-plugin` |
|
|
162
|
+
| `c-cpp` | `c-cpp/cmake-app`: CMake presets, vcpkg, CTest, a version header | `c-cpp/msbuild`, `c-cpp/minimal` |
|
|
163
|
+
| `js-ts` | `js-ts/node-package`: a TypeScript npm package with `node:test` | `js-ts/script`, `js-ts/claude-plugin` |
|
|
164
|
+
|
|
165
|
+
Several languages stack: `--language python,c-cpp`. The details, and how to add a language, are in [Languages and layers](docs/Languages-and-Layers.md).
|
|
166
|
+
|
|
167
|
+
## The license
|
|
168
|
+
|
|
169
|
+
A license is required. `--license <id>` writes `LICENSE` from a catalogue of the licenses GitHub and GitLab offer (`mit`, `apache-2.0`, `gpl-3.0`, `gpl-3.0-or-later`, `bsd-3-clause`, ...), plus `all-rights-reserved` and `proprietary-evaluation` for a private project. `--license file=<path>` copies a text as it is, and `--license none` writes no file. The holder and year come from your git identity and the clock, and the license also populates in `pyproject.toml` or the plugin manifest. With `license` set in the config, you can leave the flag off.
|
|
170
|
+
|
|
171
|
+
## Branch strategies
|
|
172
|
+
|
|
173
|
+
repokit has two ways to keep private work private:
|
|
174
|
+
|
|
175
|
+
- **`main-only` (the default):** the project folder is the repository, on `main`, and `private/` is its own nested git repository that the project ignores. One branch, no merging rules to learn.
|
|
176
|
+
- **The private-branch model:** your working history lives on a local-only `private` branch in `<name>/local/`, and the public branches are git worktrees in sibling folders. You move finished work across with `repokit safe-merge`, which leaves the private content behind. This is the model repokit was first built for, and it suits projects with several release stages or several people.
|
|
177
|
+
|
|
178
|
+
| `--branch-strategy` | Public branches | Checked out in folders | Flow |
|
|
179
|
+
|---|---|---|---|
|
|
180
|
+
| `main-only` | main | the project folder itself | commit on main |
|
|
181
|
+
| `standard` | dev, staging, test, live, main | `dev/`, `github/` (main) | private -> dev -> test / staging -> main -> live |
|
|
182
|
+
| `simple` | dev, main | `github/` (main) | private -> dev -> main |
|
|
183
|
+
| `gitflow` | develop, release, hotfix, main | `develop/`, `github/` (main) | private -> develop -> release -> main, with hotfixes |
|
|
184
|
+
| `github-flow` | main | `github/` (main) | private -> main |
|
|
185
|
+
| `minimal` | main | none (switch branches in `local/`) | private -> main |
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# A GitFlow project on GitHub
|
|
189
|
+
repokit create my-lib --branch-strategy gitflow --language python --license mit --github
|
|
190
|
+
|
|
191
|
+
# Your own branches, with worktrees for two of them (name a private-branch
|
|
192
|
+
# strategy too, or the project gets no private branch)
|
|
193
|
+
repokit create my-app --branch-strategy simple --branches main,develop,qa,production \
|
|
194
|
+
--worktrees main,develop --license mit
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
The guards for the private-branch model: `repokit check-guardrails` shows what is protected, `repokit setup-guardrails` installs the hooks in a project repokit did not make, and `repokit safe-merge-dev` merges between development branches while keeping their history out of the public ones. The [Branch strategies](docs/Branch-Strategies.md) guide covers each layout, and the [Workflow guide](docs/Workflow-Guide.md) covers the day-to-day work.
|
|
198
|
+
|
|
199
|
+
## Existing projects
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
repokit analyze ./my-project # what repokit would do, changing nothing
|
|
203
|
+
repokit adopt ./my-project --dry-run # preview adopting a git repository in place
|
|
204
|
+
repokit adopt ./my-project --language python --migration-strategy safe --backup
|
|
205
|
+
repokit migrate ./my-folder --dry-run # add repokit's folders and files to a folder
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
`adopt` fills in what the project lacks. It keeps the project's own license file (`LICENSE`, `LICENSE.md`, `COPYING`, ...); with none, it writes the license your config names, or adopts the project without one and says so. `--license` is only for choosing one (it replaces the project's own file). It keeps the repository's history and sets up the private-branch layout (`--branch-strategy standard` unless you name another): your folder stays on the `private` branch, with `main` and `dev` checked out in sibling folders. The `safe` strategy keeps every existing file and adds what is missing beside it. `repokit setup-guardrails` adds the private-content hooks to a project repokit did not create. The [Adoption guide](docs/Adoption-Guide.md) and the [Migration guide](docs/Migration-Guide.md) walk through each case.
|
|
209
|
+
|
|
210
|
+
## All commands
|
|
211
|
+
|
|
212
|
+
| Command | What it does |
|
|
213
|
+
|---|---|
|
|
214
|
+
| `create` | Create a new project |
|
|
215
|
+
| `list` | List the languages, presets and layers |
|
|
216
|
+
| `analyze` | Report what repokit would do with an existing folder |
|
|
217
|
+
| `adopt` | Add repokit's structure to an existing git repository, in place |
|
|
218
|
+
| `migrate` | Add repokit's standard folders, files and hooks to an existing folder |
|
|
219
|
+
| `publish` | Publish an existing repository to GitHub or GitLab |
|
|
220
|
+
| `bootstrap` | Write a script that sets repokit up |
|
|
221
|
+
| `init-config` | Write a `.repokit.json` |
|
|
222
|
+
| `store-credentials` | Store a GitHub or GitLab token for `--publish-to` |
|
|
223
|
+
| `setup-guardrails`, `check-guardrails` | Install, or check, the private-content protection |
|
|
224
|
+
| `safe-merge`, `safe-merge-dev` | Merge branches without carrying private content across |
|
|
225
|
+
| `clean-history`, `analyze-history` | Find, or remove, sensitive data in a repository's history |
|
|
226
|
+
| `manage-gitkeep` | Add or remove `.gitkeep` files |
|
|
227
|
+
| `list-templates` | List the template files |
|
|
228
|
+
|
|
229
|
+
`repokit <command> --help` shows each command's options and examples.
|
|
230
|
+
|
|
231
|
+
## 🧪 Testing
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
python -m pytest -q # the full suite, about ten minutes
|
|
235
|
+
python -m pytest -q -m unit # the unit tests, a few seconds
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Every run is isolated from your git config, home directory and tokens. A `git push` runs the unit tests through the vendored pre-push hook; CI runs the unit tests on Python 3.10 to 3.13, on Linux and Windows. [tests/README.md](tests/README.md) covers the test classes and the live GitHub tests.
|
|
239
|
+
|
|
240
|
+
## 📚 Documentation
|
|
241
|
+
|
|
242
|
+
- [Configuration](docs/Configuration.md): every config key, and the flag that matches it
|
|
243
|
+
- [Languages and layers](docs/Languages-and-Layers.md): presets, `--with`, and adding a language
|
|
244
|
+
- [GitHub setup](docs/GitHub-Setup.md): `--github`, `--github-setup`, and what GitHub has no API for
|
|
245
|
+
- [The vault](docs/The-Vault.md): `private/`, its first files, and the sessions that use it
|
|
246
|
+
- [Branch strategies](docs/Branch-Strategies.md): main-only and the private-branch model
|
|
247
|
+
- [Workflow guide](docs/Workflow-Guide.md): day-to-day work under the private-branch strategies
|
|
248
|
+
- [Deployment demo](docs/Deployment-Demo.md): worked examples, from a new project to GitHub
|
|
249
|
+
- [Adoption guide](docs/Adoption-Guide.md) and [Migration guide](docs/Migration-Guide.md): existing projects
|
|
250
|
+
- [Recipes and how-tos](docs/Recipes-And-Howtos.md): commands for common cases
|
|
251
|
+
- [Auth guide](docs/Auth-Guide.md): the `gh` login, and tokens for `--publish-to`
|
|
252
|
+
- [Platform support](docs/platform-support.md): what runs where, and what each platform needs
|
|
253
|
+
- [Why repokit exists](docs/Why-RepoKit-Exists.md)
|
|
254
|
+
|
|
255
|
+
The [documentation guide](docs/README.md) suggests a reading order.
|
|
256
|
+
|
|
257
|
+
## Contributing
|
|
258
|
+
|
|
259
|
+
Contributions are welcome! See the [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
|
|
260
|
+
|
|
261
|
+
Like the project?
|
|
262
|
+
|
|
263
|
+
[](https://www.buymeacoffee.com/djdarcy)
|
|
264
|
+
|
|
265
|
+
## Related Projects
|
|
266
|
+
|
|
267
|
+
- [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) - The shared scripts and git hooks every project gets at `scripts/repokit-common/`: version sync, private-content checks, tests before a push, `gh_issue_full.py`. repokit vendors it into each project it creates, and into itself
|
|
268
|
+
- [git-repokit-template](https://github.com/DazzleTools/git-repokit-template) - The template repository repokit grew from: copy it, run its setup, then finish GitHub and the notes by hand. `repokit create --language python` reproduces its project tree, and a regression test keeps the two in step
|
|
269
|
+
- [dazzlecmd](https://github.com/DazzleTools/dazzlecmd) - The DazzleTools CLI (`dz`). Its `dz private-init` first made `private/` its own repository; repokit's vault is a port of it
|
|
270
|
+
- [github-traffic-tracker](https://github.com/djdarcy/github-traffic-tracker) - Traffic history beyond GitHub's 14 days (`ghtraf`). `--github-setup traffic` prints its setup commands, and the `installs` and `views` badges read its counts
|
|
271
|
+
|
|
272
|
+
## Acknowledgments
|
|
273
|
+
|
|
274
|
+
- Inspired by modern DevOps practices and GitOps workflows
|
|
275
|
+
- https://nvie.com/posts/a-successful-git-branching-model/
|
|
276
|
+
- https://trunkbaseddevelopment.com/
|
|
277
|
+
- https://docs.github.com/en/get-started/quickstart/github-flow
|
|
278
|
+
- https://martinfowler.com/articles/continuousIntegration.html
|
|
279
|
+
- https://www.atlassian.com/continuous-delivery
|
|
280
|
+
- https://www.perforce.com/blog/vcs/best-branching-strategies-high-velocity-development
|
|
281
|
+
- Built for developers who value consistency and automation
|
|
282
|
+
- Special thanks to the open-source community writ large
|
|
283
|
+
|
|
284
|
+
## License
|
|
285
|
+
|
|
286
|
+
git-repokit, Copyright (C) 2025-2026 Dustin Darcy
|
|
287
|
+
|
|
288
|
+
Licensed under the MIT License (MIT) -- see [LICENSE](LICENSE).
|