From bed17f027edb1ff939af275daf33c4b2fb669ddb Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Thu, 9 Oct 2025 20:48:35 -0400 Subject: [PATCH 01/18] feat: add placeholders for a template and configuration --- .github/ISSUE_TEMPLATE/03_documentation.yml | 23 +++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 1 + 2 files changed, 24 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/03_documentation.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml new file mode 100644 index 0000000..64cc3c1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -0,0 +1,23 @@ +name: '๐Ÿ“– Documentation improvement' +description: Report an issue with the documentation. +labels: [documentation] + +body: + - type: textarea + id: description + attributes: + label: Description + description: > + Describe the issue with the documentation and how it can be fixed or improved. + validations: + required: true + + - type: input + id: link + attributes: + label: Link + description: > + Provide a link to the existing documentation, if applicable. + placeholder: ex. https://docs.pola.rs/api/python/dev/... + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false From 8b9441743b5088463443b6427b6b6a4c934c58d3 Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 11 Oct 2025 00:45:38 -0400 Subject: [PATCH 02/18] docs: update outdated information and generally improve accuracy --- README.md | 56 ++++++++++++------- docs/getting-started-template-contributing.md | 34 ++++++----- docs/philosophy.md | 17 +++++- docs/quickstart.md | 32 ++++++----- docs/usage.md | 23 ++++---- 5 files changed, 96 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 3940b08..8236d5d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# cookiecutter-robust-python +# Cookiecutter Robust Python A Python project template robust enough to follow up [cookiecutter-hypermodern-python] @@ -8,37 +8,44 @@ A Python project template robust enough to follow up [cookiecutter-hypermodern-p --- -## Usage/Installation +## Quick Start -The only prerequisite for using the template is to [install uv]. +### Prerequisites +The only requirement is [uv]. -From there just cd into the directory you want to create the project in and run: -```terminaloutput +### Create Your Project +Navigate to where you want to create your project and run: + +```bash uvx cruft create https://github.com/56kyle/cookiecutter-robust-python.git ``` -Which will prompt you for a few inputs before generating the project. -```terminaloutput -> [1/15] project_name (robust-python): my-repo-name -> ... + +This will prompt you for a few inputs to customize your project: +``` +[1/15] project_name (robust-python): my-awesome-project +[2/15] package_name (my_awesome_project): +[3/15] friendly_name (My Awesome Project): +... ``` -#### Local Setup +### Project Setup + +After generating your project, set it up for development: -Once you have generated your project, and preferably before opening the IDE, the normal workflow to setup everything would go as follows: -```terminaloutput -cd my-repo-name +```bash +cd my-awesome-project -# Pins the uv python version, generates/syncs a venv, etc. +# Set up virtual environment and install dependencies uvx nox -s setup-venv -# Sets up a git repo w/ a main/develop branch along with an initial commit of everything just generated. +# Initialize git repository with main/develop branches uvx nox -s setup-git -# Sets up the remote reference and ensures main/develop are pushed/synced. Requires that the remote exists (should be empty). -uvx nos -s setup-remote +# Set up remote repository (requires empty remote repo to exist) +uvx nox -s setup-remote ``` -You can also run `uvx nox -t env` for the same effect. +**Quick setup:** Run `uvx nox -t env` to execute all environment setup tasks at once. ## Most Notable Features @@ -46,9 +53,9 @@ You can also run `uvx nox -t env` for the same effect. - Built for supporting most OS's (windows, linux, macos) and all currently supported [python] versions - Platform agnostic CI/CD ([github], [gitlab], [bitbucket]) - CI/CD that parities local [nox] sessions for all [python] -- [maturin] support that can be at any time during the project's lifecycle +- [maturin] support that can be added at any time during the project's lifecycle - Designed to be a maintainable template over time through the use of automated demos and integration tests -- ... and much more! +- Rich documentation explaining tooling decisions and rationale For a general overview of where we are at with this template, please see the [roadmap](#roadmap) section. @@ -127,7 +134,7 @@ to Python's ecosystem overall. That being said, it's generally good practice to avoid the complexity of this dual language system unless you actually need the performance bump for your use case. However knowing ahead of time if performance will be an issue is rather tricky, and a much easier route is to just prepare as though you _might_ swap to it some day. -The [Robust Python Cookiecutter] includes a `include_rust_extensions` flag that not only toggles [maturin] vs a traditional Python package, +The [Robust Python Cookiecutter] includes an `add_rust_extension` flag that not only toggles [maturin] vs a traditional Python package, but that can be used in combination with [cruft] to swap to [maturin] at any time with just about no risk to CI/CD / etc. Additionally, the [Robust Python Cookiecutter] is designed with both normal and [monorepos] in mind. So whether you need to just add @@ -171,18 +178,25 @@ However, Open Source work is draining, and is especially so for a project templa I can guarantee that if the [Robust Python Cookiecutter] ever sees any number of users, I will immediately transfer it to an organization to enable at least a handful of trusted individuals to ensure the project is taken care of. +[bitbucket]: https://bitbucket.org [bitbucket-pipelines]: https://support.atlassian.com/bitbucket-cloud/docs/write-a-pipe-for-bitbucket-pipelines/ [cookiecutter]: https://cookiecutter.readthedocs.io/en/stable/ [cookiecutter-hypermodern-python]: https://github.com/cjolowicz/cookiecutter-hypermodern-python [cookiecutter-robust-python]: https://github.com/56kyle/cookiecutter-robust-python [cruft]: https://cruft.github.io/cruft/ +[github]: https://github.com [github-actions]: https://docs.github.com/en/actions +[gitlab]: https://gitlab.com [hypermodern python cookiecutter]: https://github.com/cjolowicz/cookiecutter-hypermodern-python [just]: https://github.com/casey/just?tab=readme-ov-fil [maturin]: https://github.com/PyO3/maturin +[monorepos]: https://en.wikipedia.org/wiki/Monorepo +[my personal fork]: https://github.com/56kyle/cookiecutter-hypermodern-python +[nox]: https://nox.thea.codes/ [noxfile]: https://github.com/56kyle/cookiecutter-robust-python/blob/main/%7B%7Bcookiecutter.project_name%7D%7D/noxfile.py [poetry]: https://python-poetry.org/docs/ [polars]: https://github.com/pola-rs/polars +[python]: https://www.python.org/ [robust python cookiecutter]: https://github.com/56kyle/cookiecutter-robust-python [ruff]: https://docs.astral.sh/ruff/ [rust]: https://www.rust-lang.org/learn diff --git a/docs/getting-started-template-contributing.md b/docs/getting-started-template-contributing.md index fa24464..aa93c17 100644 --- a/docs/getting-started-template-contributing.md +++ b/docs/getting-started-template-contributing.md @@ -10,32 +10,29 @@ To contribute to the template, you will need: 2. **Python 3.9+**: We recommend using a supported Python version. 3. **uv**: Our chosen dependency manager (see [Dependency Management (02)](topics/02_dependency-management.md)). Install `uv` globally or in a base environment following the official {uv-install}`uv installation guide<>`. 4. **Docker or Podman**: Required for testing the containerization aspects of the generated template (see [Container Build (11)](topics/11_container-build.md), [Dev Containers (17)](topics/17_dev-containers.md)). -5. **Task Automation Tools**: The template itself uses a `noxfile.py` to manage its own development and documentation build workflows. Install `nox`: - ```bash - uv add nox # Ensure you have uv first - ``` +5. **Task Automation Tools**: The template uses `noxfile.py` for development workflows. We use `uvx` to run nox without installing it globally. ## Setting up Your Development Environment 1. **Clone the Template Repository:** ```bash - git clone https://github.com/56kyle/cookiecutter-robust-python.git # **UPDATE WITH TEMPLATE REPO URL** + git clone https://github.com/56kyle/cookiecutter-robust-python.git cd cookiecutter-robust-python ``` 2. **Install Template Development Dependencies:** - The template needs dependencies to run its tests, build its documentation, and check its own code. + Install all dependency groups needed for template development: ```bash - uv sync # This installs deps from the template's pyproject.toml into a .venv + uv sync --all-groups ``` 3. **Install Pre-commit Hooks for the Template:** - To ensure your contributions meet the template's own code quality standards, install the pre-commit hooks for _this template repository_: + Set up pre-commit hooks to maintain code quality: ```bash - uvx nox -s pre-commit -- install # Installs hooks based on the template's .pre-commit-config.yaml + uvx nox -s pre-commit -- install ``` 4. **Set up Dev Container (Optional):** @@ -52,10 +49,10 @@ The template's own `noxfile.py` defines tasks for maintaining the template itsel ``` 2. **Run Core Template Checks:** - This includes linting the template's own Python files (like `noxfile.py`), checking formatting, etc. + Lint and format the template's own Python files: ```bash - uvx nox -s check # Runs the template's internal checks + uvx nox -s lint ``` 3. **Build Template Documentation:** @@ -66,15 +63,17 @@ The template's own `noxfile.py` defines tasks for maintaining the template itsel ``` 4. **Run Template Tests:** - (Assuming the template itself has tests, e.g., testing cookiecutter rendering or noxfile sessions). + Test the template's generation functionality: ```bash - uvx nox -s test # Runs tests for the template itself + uvx nox -s test ``` -5. **Run All Checks and Tests:** +5. **Generate Demo Project:** + Create a demo project to test template functionality: + ```bash - uvx nox # Runs the default sessions defined in noxfile.py (often check and test) + uvx nox -s generate-demo ``` ## Updating Template Version and Releasing @@ -82,10 +81,9 @@ The template's own `noxfile.py` defines tasks for maintaining the template itsel This template uses Calendar Versioning (YYYY.MM.DD) for its own releases. 1. **Ensure Your Branch is Up-to-date:** Pull the latest changes from the main branch. -2. **Run Commitizen Bump for the Template:** (Assuming Commitizen is used for template versioning). Use `uvx` to run Commitizen against the template: +2. **Release the Template:** ```bash - uvx cz bump --changelog # Follow prompts, generates tag/changelog entry - # Alternatively, specify increment e.g., uvx cz bump --changelog --increment major_version_zero + uvx nox -s release-template # Uses Commitizen to bump version and create tags ``` This will update the version string(s) (e.g., in `__version__.py` or `conf.py`), create a Git tag, and potentially update the changelog. 3. **Push Changes and Tags:** Push the commits and the newly created tag to the template repository: diff --git a/docs/philosophy.md b/docs/philosophy.md index 8abd7a3..749a1d5 100644 --- a/docs/philosophy.md +++ b/docs/philosophy.md @@ -40,6 +40,19 @@ These principles form the basis for the evaluation criteria and justifications d ## Solved Issues -The [Robust Python Cookiecutter] also exists to solve a few key issues that were omnipresent in [cookiecutter-hypermodern-python]. +The Robust Python Cookiecutter addresses several key challenges that existed in the original cookiecutter-hypermodern-python: -### +### Template Update Propagation +One major issue with traditional cookiecutter workflows is the difficulty of propagating template updates to existing projects. The Robust Python Cookiecutter includes built-in support for Cruft, enabling projects to receive template updates through manageable pull requests rather than manual recreation. + +### Project Domain Expansion +While pure Python projects are common, many modern Python packages benefit from optional Rust extensions for performance-critical components. The template includes configurable Rust support via Maturin, allowing projects to start as pure Python and add Rust components when needed without architectural disruption. + +### Documentation of Decisions +Rather than just providing tooling, this template documents the reasoning behind each tool choice. This enables maintainers to evaluate whether decisions remain valid as the ecosystem evolves, supporting long-term template maintenance. + +### CI/CD Vendor Independence +The template is designed to work across GitHub Actions, GitLab CI, and Bitbucket Pipelines by centralizing logic in Nox sessions rather than platform-specific workflow syntax. This ensures consistency and portability. + +### Long-term Maintenance Strategy +The template includes comprehensive testing infrastructure with automated demo projects and integration tests, helping ensure changes don't break the generation process and providing confidence in template evolution. diff --git a/docs/quickstart.md b/docs/quickstart.md index 8d7d1b2..aedfc41 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -1,8 +1,8 @@ # Quickstart -This guide provides the absolute minimum steps to get up and running with a project generated by `cookiecutter-robust-python`. It's for developers who want to start coding and use the core workflows right away. +This guide covers the essential steps to get up and running with a project generated by `cookiecutter-robust-python`. Perfect for developers who want to start coding with the core workflows immediately. -For detailed explanations of the tools and the philosophy, see the full documentation. +For detailed tool explanations and project philosophy, see the full documentation. --- @@ -23,10 +23,10 @@ Navigate to the directory you want to create your new project in. cd ~/path/to/my/repos ``` -Generate your project from the template using the given command: +Generate your project from the template: ```bash -uvx cookiecutter gh:56kyle/cookiecutter-robust-python +uvx cruft create https://github.com/56kyle/cookiecutter-robust-python.git ``` Follow the prompts to customize your project. @@ -39,13 +39,13 @@ Navigate to your new project directory: cd your-project-slug ``` -Install dependencies and create the virtual environment using `uv sync`: +Set up the virtual environment and install dependencies: ```bash -uv sync +uvx nox -s setup-venv ``` -This command reads `pyproject.toml`, resolves dependencies from `uv.lock`, installs them into a standard virtual environment (`.venv` by default), and prepares the project. +This sets up a virtual environment with uv and installs all development dependencies. ## 4. Install Pre-commit Hooks @@ -59,25 +59,27 @@ Now, `git commit` will automatically run code formatting and basic linting check ## 5. Run Checks and Tests -Execute the template's core quality checks and tests using `nox` from the project root: +Run quality checks and tests using the nox sessions: ```bash -uvx nox -s check # Runs linters, type checker, security checks -uvx nox -s test # Runs tests and coverage -uvx nox # Runs default tasks (often check and test) +uvx nox -s lint-python # Run Ruff linting +uvx nox -s typecheck # Run Pyright type checking +uvx nox -s security-python # Run Bandit and pip-audit +uvx nox -s tests-python # Run pytest with coverage ``` -These commands use the Task Automation layer defined in `noxfile.py` and ensure checks run correctly in isolated environments using your specified Python version. +These commands run in isolated environments with the proper Python versions as defined in `noxfile.py`. ## 6. Build Documentation -If you need to view the project's generated documentation locally: +Build and serve the project documentation locally: ```bash -uvx nox -s docs +uvx nox -s docs # Build and serve with live reload +uvx nox -s build-docs # Build only (static files) ``` -This builds the project documentation website into the `docs/_build/html` directory. +The `docs` session builds and serves documentation with automatic reload on changes. ## Next Steps diff --git a/docs/usage.md b/docs/usage.md index ce862b1..4800ef7 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -57,14 +57,14 @@ The template provides a suite of tools for maintaining code quality, integrated - **Format Code:** Code formatting and import sorting is handled by {ruff}`Ruff<>` ([Topic 03](topics/03_code-formatting.md)) using the configuration in `.ruff.toml`. Your pre-commit hooks automatically fix these on commit. To format manually: ```bash - uvx nox -s lint # Includes a formatting check - # Or directly via uv run (often requires specific args): uv run ruff format . + uvx nox -s format-python # Format Python code with Ruff + uvx nox -s lint-python # Lint Python code with Ruff (includes formatting check) ``` - **Lint Code:** Linting checks for code style (beyond formatting), errors, potential bugs, and code smells using {ruff}`Ruff<>` and {pydocstyle}`pydocstyle<>` ([Topic 04](topics/04_code-linting.md)). Run checks via Task Automation: ```bash - uvx nox -s lint + uvx nox -s lint-python ``` - **Type Check Code:** Static type analysis using {pyright}`Pyright<>` ([Topic 05](topics/05_type-checking.md)) based on `pyrightconfig.json`: @@ -76,12 +76,15 @@ The template provides a suite of tools for maintaining code quality, integrated - **Security Checks:** Scan for dependency vulnerabilities with {pip-audit}`pip-audit<>` and code security issues with {bandit-bandit}`Bandit<>` ([Topic 08](topics/08_security-checks.md)): ```bash - uvx nox -s security + uvx nox -s security-python ``` - **Run All Core Checks:** ```bash - uvx nox -s check + # Run individual checks: + uvx nox -s format-python lint-python typecheck security-python + # Or use quality tag: + uvx nox -t quality ``` ## Testing @@ -91,7 +94,7 @@ The template uses {pytest-pytest-cov}`pytest<>` ([Topic 06](topics/06_testing-co - **Write Tests:** Place test files (e.g., `test_*.py` or `*_test.py`) in the `tests/` directory. - **Run Tests with Coverage:** ```bash - uvx nox -s test + uvx nox -s tests-python ``` This runs tests across applicable Python versions and measures code coverage with {coveragepy-coverage}`coverage.py<>` ([Topic 06](topics/06_testing-coverage.md)) based on `.coveragerc`. Reports are generated (JUnit XML for CI, terminal summary). @@ -101,11 +104,11 @@ Create and publish your package following Python standards ([Topic 09](topics/09 - **Build Package:** Create standard `sdist` (`.tar.gz`) and `wheel` (`.whl`) files in the `dist/` directory. ```bash - uvx nox -s build + uvx nox -s build-python ``` - **Publish Package:** Upload built packages using {uv}`uv<>`'s publish command. Requires credentials set via environment variables (e.g., `UV_TOKEN` or `TWINE_API_KEY`). ```bash - uvx nox -s publish + uvx nox -s publish-python ``` ## Containerization @@ -114,7 +117,7 @@ Define and build Docker container images for your application ([Topic 11](topics - **Build Application Image:** Uses the `Dockerfile` in the project root. ```bash - uvx nox -s container + uvx nox -s build-container ``` - **Run with Docker Compose:** ```bash @@ -128,7 +131,7 @@ Use {commitizen}`Commitizen<>` ([Topic 12](topics/12_task-automation.md)) via {u - **Bump Version:** Automatically determine the next version (major, minor, patch, etc.) based on commit messages since the last tag, update version strings, and create a Git tag. ```bash - uvx nox -s release -- [major|minor|patch] # e.g., uvx nox -s release -- minor + uvx nox -s setup-release -- [major|minor|patch] # e.g., uvx nox -s setup-release -- minor ``` Follow the prompts. Requires following {conventional-commits}`Conventional Commits<>`. Pushing the resulting tag often triggers the CD pipeline. From abb3b6750a8cb6848dab8f8d344f31d466ca6c1f Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 11 Oct 2025 00:50:49 -0400 Subject: [PATCH 03/18] docs: fix two broken link references --- docs/our-chosen-toolchain.md | 2 +- docs/usage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/our-chosen-toolchain.md b/docs/our-chosen-toolchain.md index 787e98d..c662115 100644 --- a/docs/our-chosen-toolchain.md +++ b/docs/our-chosen-toolchain.md @@ -117,7 +117,7 @@ The true power of this template lies in how these chosen tools work together coh 1. **Configuration:** Defined primarily in `pyproject.toml` and separate tool config files ([01](topics/01_project-structure.md)). 2. **Dependency/Environment Management:** Handled efficiently by {uv}`uv<>`, creating standard virtual environments and managing packages based on `pyproject.toml` and `uv.lock` ([02](topics/02_dependency-management.md)). 3. **Task Automation:** Orchestrated by {nox}`Nox<>`, calling commands from other tools via `uv run` (or `uvx`), providing the single interface for developers and CI/CD to run workflows ([12](topics/12_task-automation.md)). -4. **Code Quality & Testing:** Ensured by {ruff}`Ruff<>` (formatting/linting), {pyright}`Pyright<>` (typing), {pip-audit}`pip-audit<>` (dep security), and {bandit-bandit}`Bandit<>` (code security), along with {pytest-pytest-cov}`pytest<>`/{coveragepy-coverage}`coverage.py<>` for testing. These tools are installed via {uv}`uv<>` and executed via Task Automation ([03](topics/03_code-formatting.md)-[08](topics/08_security-checks.md), orchestrated by [12](topics/12_task-automation.md)). +4. **Code Quality & Testing:** Ensured by {ruff}`Ruff<>` (formatting/linting), {pyright}`Pyright<>` (typing), {pip-audit}`pip-audit<>` (dep security), and {bandit-bandit}`Bandit<>` (code security), along with {pytest-pytest-cov}`pytest<>`/{coveragepy}`coverage.py<>` for testing. These tools are installed via {uv}`uv<>` and executed via Task Automation ([03](topics/03_code-formatting.md)-[08](topics/08_security-checks.md), orchestrated by [12](topics/12_task-automation.md)). 5. **Packaging & Distribution:** Artifacts created via {uv}`uv<>` build using selected backends, and published via {uv}`uv<>` publish, orchestrated by Task Automation ([09](topics/09_packaging-build.md)-[10](topics/10_packaging-publish.md)). 6. **Containerization:** Defined by `Dockerfile`, built by {docker}`Docker<>`/{podman}`Podman<>` (often via `uv` installing deps inside), orchestrated by Task Automation. Local multi-container setups managed by {docker}`Docker Compose<>` ([11](topics/11_container-build.md), [15](topics/15_compose-local.md)). 7. **Automated Workflows:** Triggered by CI/CD platforms (configured to call Task Automation commands), handling matrices, secrets, and reporting ([13](topics/13_ci-orchestration.md)-[14](topics/14_cd-orchestration.md)). diff --git a/docs/usage.md b/docs/usage.md index 4800ef7..34f9abf 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -96,7 +96,7 @@ The template uses {pytest-pytest-cov}`pytest<>` ([Topic 06](topics/06_testing-co ```bash uvx nox -s tests-python ``` - This runs tests across applicable Python versions and measures code coverage with {coveragepy-coverage}`coverage.py<>` ([Topic 06](topics/06_testing-coverage.md)) based on `.coveragerc`. Reports are generated (JUnit XML for CI, terminal summary). + This runs tests across applicable Python versions and measures code coverage with {coveragepy}`coverage.py<>` ([Topic 06](topics/06_testing-coverage.md)) based on `.coveragerc`. Reports are generated (JUnit XML for CI, terminal summary). ## Building and Publishing From f85bdf1e755dfc523bc7d30e28953d5cf8023737 Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Thu, 16 Oct 2025 01:48:06 -0400 Subject: [PATCH 04/18] chore: replace url in example and allow blank issues --- .github/ISSUE_TEMPLATE/03_documentation.yml | 2 +- .github/ISSUE_TEMPLATE/config.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml index 64cc3c1..02062ef 100644 --- a/.github/ISSUE_TEMPLATE/03_documentation.yml +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -18,6 +18,6 @@ body: label: Link description: > Provide a link to the existing documentation, if applicable. - placeholder: ex. https://docs.pola.rs/api/python/dev/... + placeholder: ex. https://cookiecutter-robust-python.readthedocs.io/en/latest/... validations: required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 3ba13e0..0086358 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1 +1 @@ -blank_issues_enabled: false +blank_issues_enabled: true From 232cd5ca8486fe1ad3511ef8482bf08d5c35622a Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Thu, 16 Oct 2025 01:50:07 -0400 Subject: [PATCH 05/18] chore: add contact links to the config.yml --- .github/ISSUE_TEMPLATE/config.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 0086358..ee682d7 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1 +1,8 @@ blank_issues_enabled: true +contact_links: + - name: โ“ Question + url: https://github.com/56kyle/cookiecutter-robust-python/discussions + about: Ask and answer questions about cookiecutter-robust-python in Discussions + - name: ๐Ÿ”ง Troubleshooting + url: https://github.com/56kyle/cookiecutter-robust-python/discussions + about: For troubleshooting help, see the Discussions From af769ec53bcfa8ad813338f983c1f238cf41c88e Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Thu, 16 Oct 2025 03:46:43 -0400 Subject: [PATCH 06/18] feat: add initial generation of some templates --- .github/ISSUE_TEMPLATE/01_template_bug.yml | 74 +++++++++++++ .../02_generated_project_bug.yml | 102 ++++++++++++++++++ .github/ISSUE_TEMPLATE/03_documentation.yml | 56 +++++++++- .../ISSUE_TEMPLATE/04_template_feature.yml | 80 ++++++++++++++ .../05_generated_project_feature.yml | 97 +++++++++++++++++ .../ISSUE_TEMPLATE/06_dependency_update.yml | 89 +++++++++++++++ 6 files changed, 493 insertions(+), 5 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/01_template_bug.yml create mode 100644 .github/ISSUE_TEMPLATE/02_generated_project_bug.yml create mode 100644 .github/ISSUE_TEMPLATE/04_template_feature.yml create mode 100644 .github/ISSUE_TEMPLATE/05_generated_project_feature.yml create mode 100644 .github/ISSUE_TEMPLATE/06_dependency_update.yml diff --git a/.github/ISSUE_TEMPLATE/01_template_bug.yml b/.github/ISSUE_TEMPLATE/01_template_bug.yml new file mode 100644 index 0000000..336d321 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01_template_bug.yml @@ -0,0 +1,74 @@ +name: '๐Ÿ”ง Template Bug Report' +description: Report a bug with the cookiecutter template itself (generation process, hooks, scripts) +labels: [bug, template] + +body: + - type: markdown + attributes: + value: | + **This template is for issues with the cookiecutter template itself** - problems during generation, template scripts, or template configuration. + + For issues with the **generated project** (nox sessions, dependencies, tooling), please use the "Generated Project Bug Report" template instead. + + - type: textarea + id: description + attributes: + label: Bug description + description: A clear description of the template issue + placeholder: ex. Template generation fails when selecting Rust extension... + validations: + required: true + + - type: dropdown + id: issue_stage + attributes: + label: When does the issue occur? + options: + - During cookiecutter prompts/input + - During template file generation + - During post-generation hooks + - When running template nox commands (generate-demo, lint, test, etc.) + - Template documentation/structure issues + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Steps to reproduce + placeholder: | + 1. Run `cookiecutter gh:56kyle/cookiecutter-robust-python` + 2. Select options: {...} + 3. See error during generation + validations: + required: true + + - type: textarea + id: cookiecutter_config + attributes: + label: Cookiecutter configuration + description: The options you selected (from .cookiecutter.json if generation succeeded) + render: json + validations: + required: false + + - type: textarea + id: environment + attributes: + label: Environment + value: | + - OS: + - Python version: + - Cookiecutter version: + - Template commit/version: + validations: + required: true + + - type: textarea + id: error_output + attributes: + label: Error output + description: Full error messages, stack traces, or command output + render: shell + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml b/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml new file mode 100644 index 0000000..5c93827 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml @@ -0,0 +1,102 @@ +name: '๐Ÿ“ฆ Generated Project Bug Report' +description: Report a bug with the generated project (nox sessions, dependencies, tooling, structure) +labels: [bug, generated-project] + +body: + - type: markdown + attributes: + value: | + **This template is for issues with generated projects** - problems with nox sessions, dependencies, tooling configuration, or project structure. + + For issues with the **cookiecutter template itself** (generation process, template scripts), please use the "Template Bug Report" template instead. + + - type: textarea + id: description + attributes: + label: Bug description + description: A clear description of the issue in the generated project + placeholder: ex. nox -s tests-python fails with import errors... + validations: + required: true + + - type: dropdown + id: issue_category + attributes: + label: Issue category + options: + - Nox session failures + - Dependency/package management issues + - Build/packaging problems + - Testing framework issues + - Documentation build issues + - Linting/formatting configuration + - Type checking issues + - Security scanning problems + - CI/CD workflow issues + - Rust extension issues (if applicable) + - Container/Docker issues + - Project structure/template files + - Other + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Steps to reproduce + placeholder: | + 1. Generate project with: cookiecutter gh:56kyle/cookiecutter-robust-python + 2. Select options: {...} + 3. Run: nox -s tests-python + 4. See error: {...} + validations: + required: true + + - type: textarea + id: cookiecutter_config + attributes: + label: Project configuration + description: Contents of .cookiecutter.json from your generated project + render: json + validations: + required: true + + - type: dropdown + id: rust_extension + attributes: + label: Does your project use Rust extension? + options: + - "No" + - "Yes" + validations: + required: true + + - type: textarea + id: environment + attributes: + label: Environment + value: | + - OS: + - Python version: + - uv version: + - nox version: + - Template version used: + validations: + required: true + + - type: textarea + id: command_output + attributes: + label: Command output + description: Full output of the failing command(s) + render: shell + validations: + required: false + + - type: textarea + id: workaround + attributes: + label: Workaround (if any) + description: If you found a way to work around the issue, please describe it + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml index 02062ef..dfcd32e 100644 --- a/.github/ISSUE_TEMPLATE/03_documentation.yml +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -1,14 +1,38 @@ name: '๐Ÿ“– Documentation improvement' -description: Report an issue with the documentation. +description: Report an issue with the documentation or suggest improvements labels: [documentation] body: + - type: markdown + attributes: + value: | + Use this template for issues with: + - Template documentation (README, docs/ folder) + - Generated project documentation + - Missing or unclear documentation + - Documentation build issues + + - type: dropdown + id: doc_type + attributes: + label: Documentation type + options: + - Template documentation (this repository) + - Generated project documentation template + - API/code documentation + - Usage guides/tutorials + - Configuration documentation + - Troubleshooting guides + - Other + validations: + required: true + - type: textarea id: description attributes: label: Description - description: > - Describe the issue with the documentation and how it can be fixed or improved. + description: Describe the documentation issue and how it can be improved + placeholder: ex. The nox session documentation is missing examples for Rust projects... validations: required: true @@ -16,8 +40,30 @@ body: id: link attributes: label: Link - description: > - Provide a link to the existing documentation, if applicable. + description: Link to the existing documentation (if applicable) placeholder: ex. https://cookiecutter-robust-python.readthedocs.io/en/latest/... validations: required: false + + - type: dropdown + id: issue_type + attributes: + label: Issue type + options: + - Missing documentation + - Incorrect/outdated information + - Unclear explanation + - Documentation build failure + - Broken links + - Formatting issues + - Suggestion for improvement + validations: + required: true + + - type: textarea + id: suggested_improvement + attributes: + label: Suggested improvement + description: How should this documentation be improved? + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/04_template_feature.yml b/.github/ISSUE_TEMPLATE/04_template_feature.yml new file mode 100644 index 0000000..6ff95da --- /dev/null +++ b/.github/ISSUE_TEMPLATE/04_template_feature.yml @@ -0,0 +1,80 @@ +name: 'โœจ Template Feature Request' +description: Suggest a new feature or improvement for the cookiecutter template itself +labels: [enhancement, template] + +body: + - type: markdown + attributes: + value: | + **This template is for feature requests for the cookiecutter template itself** - new cookiecutter options, template structure changes, or template functionality. + + For improvements to **generated projects** (new nox sessions, tooling updates, project features), please use the "Generated Project Feature Request" template instead. + + - type: textarea + id: problem + attributes: + label: Problem or use case + description: What problem would this feature solve? What use case would it enable? + placeholder: ex. I want to be able to choose between different CI providers during template generation... + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed solution + description: Describe your proposed solution or feature + placeholder: ex. Add a new cookiecutter variable 'ci_provider' with options for GitHub Actions, GitLab CI, etc... + validations: + required: true + + - type: dropdown + id: feature_type + attributes: + label: Feature type + options: + - New cookiecutter variable/option + - New template files or structure + - New post-generation hooks + - New template nox sessions + - Template documentation improvements + - Template testing improvements + - Other template functionality + validations: + required: true + + - type: textarea + id: implementation + attributes: + label: Implementation ideas + description: Any ideas on how this could be implemented? (optional) + validations: + required: false + + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: What alternatives have you considered? + validations: + required: false + + - type: dropdown + id: breaking_change + attributes: + label: Would this be a breaking change? + description: Would this change break existing template usage or generated projects? + options: + - "No - backward compatible" + - "Yes - breaking change" + - "Unsure" + validations: + required: true + + - type: textarea + id: additional_context + attributes: + label: Additional context + description: Add any other context, screenshots, or examples + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml b/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml new file mode 100644 index 0000000..5770b8d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml @@ -0,0 +1,97 @@ +name: '๐Ÿš€ Generated Project Feature Request' +description: Suggest improvements or new features for generated projects (nox sessions, tooling, structure) +labels: [enhancement, generated-project] + +body: + - type: markdown + attributes: + value: | + **This template is for feature requests for generated projects** - new nox sessions, tooling improvements, dependency updates, or project structure enhancements. + + For improvements to the **cookiecutter template itself** (new template options, generation process), please use the "Template Feature Request" template instead. + + - type: textarea + id: problem + attributes: + label: Problem or use case + description: What problem would this feature solve for generated projects? + placeholder: ex. Generated projects need better support for async testing... + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed solution + description: Describe your proposed solution or feature + placeholder: ex. Add pytest-asyncio to default dependencies and configure async test support... + validations: + required: true + + - type: dropdown + id: feature_category + attributes: + label: Feature category + options: + - New nox session + - Dependency/tooling updates + - Testing improvements + - Build/packaging enhancements + - Documentation improvements + - Security enhancements + - CI/CD workflow improvements + - Development experience improvements + - Rust extension features + - Container/deployment features + - Project structure improvements + - Other + validations: + required: true + + - type: dropdown + id: affects_rust + attributes: + label: Does this affect Rust extension projects? + options: + - "No - Python only" + - "Yes - Rust extension projects" + - "Both Python and Rust projects" + validations: + required: true + + - type: textarea + id: implementation + attributes: + label: Implementation ideas + description: How could this be implemented in the generated project template? + validations: + required: false + + - type: textarea + id: examples + attributes: + label: Examples or references + description: Links to similar implementations or examples from other projects + validations: + required: false + + - type: dropdown + id: breaking_change + attributes: + label: Would this be a breaking change? + description: Would this change break existing generated projects or require migration? + options: + - "No - backward compatible" + - "Yes - breaking change requiring migration" + - "Only affects new projects" + - "Unsure" + validations: + required: true + + - type: textarea + id: additional_context + attributes: + label: Additional context + description: Add any other context about this feature request + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/06_dependency_update.yml b/.github/ISSUE_TEMPLATE/06_dependency_update.yml new file mode 100644 index 0000000..d69f3de --- /dev/null +++ b/.github/ISSUE_TEMPLATE/06_dependency_update.yml @@ -0,0 +1,89 @@ +name: '๐Ÿ“ฆ Dependency/Tooling Update' +description: Suggest updates to dependencies, tools, or versions used in the template or generated projects +labels: [dependencies, maintenance] + +body: + - type: markdown + attributes: + value: | + Use this template to suggest updates to: + - Python version ranges + - Tool versions (uv, nox, ruff, pyright, etc.) + - Dependencies in template or generated projects + - Rust toolchain versions (if applicable) + - GitHub Actions versions + + - type: dropdown + id: update_type + attributes: + label: Update type + options: + - Python version support (min/max versions) + - Core tooling (uv, nox, ruff, pyright, etc.) + - Development dependencies + - Documentation dependencies + - Security tools (bandit, pip-audit) + - Testing framework updates + - Rust toolchain/dependencies + - GitHub Actions versions + - Container base images + - Other + validations: + required: true + + - type: textarea + id: current_version + attributes: + label: Current version/configuration + description: What is currently being used? + placeholder: ex. Python 3.9-3.13, ruff 0.1.0, etc. + validations: + required: true + + - type: textarea + id: proposed_version + attributes: + label: Proposed version/configuration + description: What should it be updated to? + placeholder: ex. Python 3.10-3.13, ruff 0.2.0, etc. + validations: + required: true + + - type: textarea + id: motivation + attributes: + label: Motivation + description: Why should this be updated? + placeholder: ex. New version includes security fixes, performance improvements, new features we could use... + validations: + required: true + + - type: dropdown + id: breaking_change + attributes: + label: Breaking change impact + options: + - "No impact - backward compatible" + - "Minor - affects edge cases only" + - "Major - affects all projects" + - "Requires migration guide" + - "Unsure" + validations: + required: true + + - type: textarea + id: testing_needed + attributes: + label: Testing considerations + description: What testing would be needed to validate this update? + placeholder: ex. Test template generation, run all nox sessions, check CI workflows... + validations: + required: false + + - type: textarea + id: links + attributes: + label: Links and references + description: Links to release notes, changelogs, or relevant documentation + validations: + required: false \ No newline at end of file From 1189e3e26e06612cc6e81df6001be20628533f78 Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 01:03:26 -0400 Subject: [PATCH 07/18] cicd: adding more detail to the template issue templates --- .github/ISSUE_TEMPLATE/01_template_bug.yml | 54 +++++++++----- .../02_generated_project_bug.yml | 71 +++++++++++++------ .github/ISSUE_TEMPLATE/03_documentation.yml | 35 +++++---- .../ISSUE_TEMPLATE/04_template_feature.yml | 47 +++++++----- .../05_generated_project_feature.yml | 45 ++++++++---- .../ISSUE_TEMPLATE/06_dependency_update.yml | 36 ++++++---- .github/ISSUE_TEMPLATE/config.yml | 10 +-- 7 files changed, 198 insertions(+), 100 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01_template_bug.yml b/.github/ISSUE_TEMPLATE/01_template_bug.yml index 336d321..185d1d8 100644 --- a/.github/ISSUE_TEMPLATE/01_template_bug.yml +++ b/.github/ISSUE_TEMPLATE/01_template_bug.yml @@ -1,33 +1,41 @@ name: '๐Ÿ”ง Template Bug Report' description: Report a bug with the cookiecutter template itself (generation process, hooks, scripts) labels: [bug, template] +title: '[Template Bug] ' body: - type: markdown attributes: value: | - **This template is for issues with the cookiecutter template itself** - problems during generation, template scripts, or template configuration. + ## Template Bug Report - For issues with the **generated project** (nox sessions, dependencies, tooling), please use the "Generated Project Bug Report" template instead. + Report issues with the **cookiecutter template itself** including: + - Template generation failures + - Post-generation hook errors + - Template script problems + - Template configuration issues + + > **Note:** For issues with **generated projects** (nox sessions, dependencies, tooling), use the "Generated Project Bug Report" template instead. - type: textarea id: description attributes: - label: Bug description - description: A clear description of the template issue - placeholder: ex. Template generation fails when selecting Rust extension... + label: ๐Ÿ“ Bug Description + description: Clearly describe what went wrong with the template + placeholder: | + Example: Template generation fails when selecting Rust extension with error "... validations: required: true - type: dropdown id: issue_stage attributes: - label: When does the issue occur? + label: ๐ŸŽฏ When does the issue occur? options: - During cookiecutter prompts/input - During template file generation - During post-generation hooks - - When running template nox commands (generate-demo, lint, test, etc.) + - Template nox commands (generate-demo, lint, test, etc.) - Template documentation/structure issues validations: required: true @@ -35,27 +43,39 @@ body: - type: textarea id: reproduction attributes: - label: Steps to reproduce + label: ๐Ÿ”„ Steps to Reproduce + description: Provide clear steps to reproduce the issue placeholder: | - 1. Run `cookiecutter gh:56kyle/cookiecutter-robust-python` - 2. Select options: {...} - 3. See error during generation + 1. Run: cookiecutter gh:56kyle/cookiecutter-robust-python + 2. Select options: {project_name: "test", add_rust_extension: "yes"} + 3. Error occurs: ... + value: | + 1. + 2. + 3. validations: required: true - type: textarea id: cookiecutter_config attributes: - label: Cookiecutter configuration - description: The options you selected (from .cookiecutter.json if generation succeeded) + label: โš™๏ธ Cookiecutter Configuration + description: Paste your .cookiecutter.json file contents or the options you selected render: json + placeholder: | + { + "project_name": "my-project", + "add_rust_extension": "yes", + ... + } validations: required: false - type: textarea id: environment attributes: - label: Environment + label: ๐Ÿ–ฅ๏ธ Environment + description: Please fill in your system information value: | - OS: - Python version: @@ -67,8 +87,10 @@ body: - type: textarea id: error_output attributes: - label: Error output - description: Full error messages, stack traces, or command output + label: ๐Ÿšจ Error Output + description: Paste the complete error message, stack trace, or command output render: shell + placeholder: | + Paste full error output here... validations: required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml b/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml index 5c93827..d07c21b 100644 --- a/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml +++ b/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml @@ -1,31 +1,40 @@ name: '๐Ÿ“ฆ Generated Project Bug Report' description: Report a bug with the generated project (nox sessions, dependencies, tooling, structure) labels: [bug, generated-project] +title: '[Generated Project Bug] ' body: - type: markdown attributes: value: | - **This template is for issues with generated projects** - problems with nox sessions, dependencies, tooling configuration, or project structure. + ## Generated Project Bug Report - For issues with the **cookiecutter template itself** (generation process, template scripts), please use the "Template Bug Report" template instead. + Report issues with **generated projects** including: + - Nox session failures + - Dependency or tooling problems + - Build/packaging issues + - Testing framework errors + - Project configuration problems + + > **Note:** For issues with the **cookiecutter template itself** (generation process, template scripts), use the "Template Bug Report" template instead. - type: textarea id: description attributes: - label: Bug description - description: A clear description of the issue in the generated project - placeholder: ex. nox -s tests-python fails with import errors... + label: ๐Ÿ“ Bug Description + description: Clearly describe the issue in your generated project + placeholder: | + Example: Running 'nox -s tests-python' fails with import errors... validations: required: true - type: dropdown id: issue_category attributes: - label: Issue category + label: ๐Ÿท๏ธ Issue Category options: - Nox session failures - - Dependency/package management issues + - Dependency/package management - Build/packaging problems - Testing framework issues - Documentation build issues @@ -33,9 +42,9 @@ body: - Type checking issues - Security scanning problems - CI/CD workflow issues - - Rust extension issues (if applicable) + - Rust extension issues - Container/Docker issues - - Project structure/template files + - Project structure/files - Other validations: required: true @@ -43,28 +52,41 @@ body: - type: textarea id: reproduction attributes: - label: Steps to reproduce + label: ๐Ÿ”„ Steps to Reproduce + description: Provide clear steps to reproduce the issue placeholder: | - 1. Generate project with: cookiecutter gh:56kyle/cookiecutter-robust-python - 2. Select options: {...} - 3. Run: nox -s tests-python - 4. See error: {...} + 1. Generate project: cookiecutter gh:56kyle/cookiecutter-robust-python + 2. Select options: {project_name: "test", add_rust_extension: "no"} + 3. Run command: nox -s tests-python + 4. Error occurs: ... + value: | + 1. + 2. + 3. + 4. validations: required: true - type: textarea id: cookiecutter_config attributes: - label: Project configuration - description: Contents of .cookiecutter.json from your generated project + label: โš™๏ธ Project Configuration + description: Paste the contents of .cookiecutter.json from your generated project render: json + placeholder: | + { + "project_name": "my-project", + "add_rust_extension": "no", + ... + } validations: required: true - type: dropdown id: rust_extension attributes: - label: Does your project use Rust extension? + label: ๐Ÿฆ€ Rust Extension + description: Does your project include Rust extensions? options: - "No" - "Yes" @@ -74,7 +96,8 @@ body: - type: textarea id: environment attributes: - label: Environment + label: ๐Ÿ–ฅ๏ธ Environment + description: Please fill in your system information value: | - OS: - Python version: @@ -87,16 +110,20 @@ body: - type: textarea id: command_output attributes: - label: Command output - description: Full output of the failing command(s) + label: ๐Ÿ’ป Command Output + description: Paste the complete output of the failing command(s) render: shell + placeholder: | + Paste full command output here... validations: required: false - type: textarea id: workaround attributes: - label: Workaround (if any) - description: If you found a way to work around the issue, please describe it + label: ๐Ÿ”ง Workaround + description: If you found a temporary solution, please describe it + placeholder: | + Example: Manually editing pyproject.toml to fix the dependency version... validations: required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml index dfcd32e..fe835f7 100644 --- a/.github/ISSUE_TEMPLATE/03_documentation.yml +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -1,21 +1,25 @@ -name: '๐Ÿ“– Documentation improvement' -description: Report an issue with the documentation or suggest improvements +name: '๐Ÿ“– Documentation Issue' +description: Report documentation issues or suggest improvements labels: [documentation] +title: '[Docs] ' body: - type: markdown attributes: value: | - Use this template for issues with: + ## Documentation Issue + + Report problems or suggest improvements for: - Template documentation (README, docs/ folder) - - Generated project documentation + - Generated project documentation templates - Missing or unclear documentation - Documentation build issues + - API/code documentation - type: dropdown id: doc_type attributes: - label: Documentation type + label: ๐Ÿ“ Documentation Type options: - Template documentation (this repository) - Generated project documentation template @@ -30,25 +34,26 @@ body: - type: textarea id: description attributes: - label: Description - description: Describe the documentation issue and how it can be improved - placeholder: ex. The nox session documentation is missing examples for Rust projects... + label: ๐Ÿ“ Issue Description + description: Describe the documentation problem and suggest improvements + placeholder: | + Example: The nox session documentation is missing examples for Rust projects... validations: required: true - type: input id: link attributes: - label: Link - description: Link to the existing documentation (if applicable) - placeholder: ex. https://cookiecutter-robust-python.readthedocs.io/en/latest/... + label: ๐Ÿ”— Documentation Link + description: Link to the problematic documentation (if applicable) + placeholder: https://cookiecutter-robust-python.readthedocs.io/en/latest/... validations: required: false - type: dropdown id: issue_type attributes: - label: Issue type + label: ๐Ÿท๏ธ Issue Type options: - Missing documentation - Incorrect/outdated information @@ -63,7 +68,9 @@ body: - type: textarea id: suggested_improvement attributes: - label: Suggested improvement - description: How should this documentation be improved? + label: โœจ Suggested Improvement + description: How can this documentation be improved? What would you like to see added or changed? + placeholder: | + Example: Add a section showing how to customize the nox configuration for different project types... validations: required: false diff --git a/.github/ISSUE_TEMPLATE/04_template_feature.yml b/.github/ISSUE_TEMPLATE/04_template_feature.yml index 6ff95da..ac71243 100644 --- a/.github/ISSUE_TEMPLATE/04_template_feature.yml +++ b/.github/ISSUE_TEMPLATE/04_template_feature.yml @@ -1,37 +1,46 @@ name: 'โœจ Template Feature Request' -description: Suggest a new feature or improvement for the cookiecutter template itself +description: Suggest new features or improvements for the cookiecutter template itself labels: [enhancement, template] +title: '[Template Feature] ' body: - type: markdown attributes: value: | - **This template is for feature requests for the cookiecutter template itself** - new cookiecutter options, template structure changes, or template functionality. + ## Template Feature Request - For improvements to **generated projects** (new nox sessions, tooling updates, project features), please use the "Generated Project Feature Request" template instead. + Suggest improvements for the **cookiecutter template itself** including: + - New cookiecutter options/variables + - Template structure changes + - New post-generation hooks + - Template functionality enhancements + + > **Note:** For improvements to **generated projects** (new nox sessions, tooling updates), use the "Generated Project Feature Request" template instead. - type: textarea id: problem attributes: - label: Problem or use case + label: ๐ŸŽก Problem or Use Case description: What problem would this feature solve? What use case would it enable? - placeholder: ex. I want to be able to choose between different CI providers during template generation... + placeholder: | + Example: I want to choose between different CI providers during template generation... validations: required: true - type: textarea id: solution attributes: - label: Proposed solution - description: Describe your proposed solution or feature - placeholder: ex. Add a new cookiecutter variable 'ci_provider' with options for GitHub Actions, GitLab CI, etc... + label: ๐Ÿ’ก Proposed Solution + description: Describe your proposed solution or feature in detail + placeholder: | + Example: Add a new cookiecutter variable 'ci_provider' with options for GitHub Actions, GitLab CI, etc... validations: required: true - type: dropdown id: feature_type attributes: - label: Feature type + label: ๐Ÿท๏ธ Feature Type options: - New cookiecutter variable/option - New template files or structure @@ -46,23 +55,27 @@ body: - type: textarea id: implementation attributes: - label: Implementation ideas - description: Any ideas on how this could be implemented? (optional) + label: ๐Ÿ”ง Implementation Ideas + description: How could this feature be implemented? Any technical considerations? + placeholder: | + Example: Modify cookiecutter.json to add the variable, create conditional template files... validations: required: false - type: textarea id: alternatives attributes: - label: Alternatives considered - description: What alternatives have you considered? + label: ๐Ÿ”€ Alternatives Considered + description: What other approaches have you considered? + placeholder: | + Example: Could use environment variables instead of cookiecutter variables... validations: required: false - type: dropdown id: breaking_change attributes: - label: Would this be a breaking change? + label: โš ๏ธ Breaking Change Impact description: Would this change break existing template usage or generated projects? options: - "No - backward compatible" @@ -74,7 +87,9 @@ body: - type: textarea id: additional_context attributes: - label: Additional context - description: Add any other context, screenshots, or examples + label: ๐Ÿ“ Additional Context + description: Any other relevant information, examples, or references + placeholder: | + Links to similar implementations, screenshots, or additional details... validations: required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml b/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml index 5770b8d..9be63c2 100644 --- a/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml +++ b/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml @@ -1,37 +1,47 @@ name: '๐Ÿš€ Generated Project Feature Request' description: Suggest improvements or new features for generated projects (nox sessions, tooling, structure) labels: [enhancement, generated-project] +title: '[Generated Project Feature] ' body: - type: markdown attributes: value: | - **This template is for feature requests for generated projects** - new nox sessions, tooling improvements, dependency updates, or project structure enhancements. + ## Generated Project Feature Request - For improvements to the **cookiecutter template itself** (new template options, generation process), please use the "Template Feature Request" template instead. + Suggest improvements for **generated projects** including: + - New nox sessions + - Tooling improvements + - Dependency updates + - Project structure enhancements + - Development workflow improvements + + > **Note:** For improvements to the **cookiecutter template itself** (new template options, generation process), use the "Template Feature Request" template instead. - type: textarea id: problem attributes: - label: Problem or use case + label: ๐ŸŽก Problem or Use Case description: What problem would this feature solve for generated projects? - placeholder: ex. Generated projects need better support for async testing... + placeholder: | + Example: Generated projects need better support for async testing... validations: required: true - type: textarea id: solution attributes: - label: Proposed solution - description: Describe your proposed solution or feature - placeholder: ex. Add pytest-asyncio to default dependencies and configure async test support... + label: ๐Ÿ’ก Proposed Solution + description: Describe your proposed solution or feature in detail + placeholder: | + Example: Add pytest-asyncio to default dependencies and configure async test support... validations: required: true - type: dropdown id: feature_category attributes: - label: Feature category + label: ๐Ÿท๏ธ Feature Category options: - New nox session - Dependency/tooling updates @@ -51,7 +61,8 @@ body: - type: dropdown id: affects_rust attributes: - label: Does this affect Rust extension projects? + label: ๐Ÿฆ€ Rust Extension Impact + description: Does this feature affect Rust extension projects? options: - "No - Python only" - "Yes - Rust extension projects" @@ -62,23 +73,27 @@ body: - type: textarea id: implementation attributes: - label: Implementation ideas + label: ๐Ÿ”ง Implementation Ideas description: How could this be implemented in the generated project template? + placeholder: | + Example: Modify pyproject.toml dependencies, add new nox session in noxfile.py... validations: required: false - type: textarea id: examples attributes: - label: Examples or references + label: ๐Ÿ”— Examples or References description: Links to similar implementations or examples from other projects + placeholder: | + Example: https://github.com/example/project implements this feature... validations: required: false - type: dropdown id: breaking_change attributes: - label: Would this be a breaking change? + label: โš ๏ธ Breaking Change Impact description: Would this change break existing generated projects or require migration? options: - "No - backward compatible" @@ -91,7 +106,9 @@ body: - type: textarea id: additional_context attributes: - label: Additional context - description: Add any other context about this feature request + label: ๐Ÿ“ Additional Context + description: Any other relevant information about this feature request + placeholder: | + Additional details, use cases, or considerations... validations: required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/06_dependency_update.yml b/.github/ISSUE_TEMPLATE/06_dependency_update.yml index d69f3de..8c7ebab 100644 --- a/.github/ISSUE_TEMPLATE/06_dependency_update.yml +++ b/.github/ISSUE_TEMPLATE/06_dependency_update.yml @@ -1,27 +1,31 @@ name: '๐Ÿ“ฆ Dependency/Tooling Update' description: Suggest updates to dependencies, tools, or versions used in the template or generated projects labels: [dependencies, maintenance] +title: '[Dependency Update] ' body: - type: markdown attributes: value: | - Use this template to suggest updates to: + ## Dependency/Tooling Update + + Suggest updates to: - Python version ranges - Tool versions (uv, nox, ruff, pyright, etc.) - Dependencies in template or generated projects - Rust toolchain versions (if applicable) - GitHub Actions versions + - Container base images - type: dropdown id: update_type attributes: - label: Update type + label: ๐Ÿท๏ธ Update Type options: - Python version support (min/max versions) - Core tooling (uv, nox, ruff, pyright, etc.) - Development dependencies - - Documentation dependencies + - Documentation dependencies - Security tools (bandit, pip-audit) - Testing framework updates - Rust toolchain/dependencies @@ -34,34 +38,37 @@ body: - type: textarea id: current_version attributes: - label: Current version/configuration + label: ๐Ÿ“… Current Version/Configuration description: What is currently being used? - placeholder: ex. Python 3.9-3.13, ruff 0.1.0, etc. + placeholder: | + Example: Python 3.9-3.13, ruff 0.1.0, etc. validations: required: true - type: textarea id: proposed_version attributes: - label: Proposed version/configuration + label: โฌ†๏ธ Proposed Version/Configuration description: What should it be updated to? - placeholder: ex. Python 3.10-3.13, ruff 0.2.0, etc. + placeholder: | + Example: Python 3.10-3.13, ruff 0.2.0, etc. validations: required: true - type: textarea id: motivation attributes: - label: Motivation + label: ๐ŸŽก Motivation description: Why should this be updated? - placeholder: ex. New version includes security fixes, performance improvements, new features we could use... + placeholder: | + Example: New version includes security fixes, performance improvements, new features we could use... validations: required: true - type: dropdown id: breaking_change attributes: - label: Breaking change impact + label: โš ๏ธ Breaking Change Impact options: - "No impact - backward compatible" - "Minor - affects edge cases only" @@ -74,16 +81,19 @@ body: - type: textarea id: testing_needed attributes: - label: Testing considerations + label: ๐Ÿงช Testing Considerations description: What testing would be needed to validate this update? - placeholder: ex. Test template generation, run all nox sessions, check CI workflows... + placeholder: | + Example: Test template generation, run all nox sessions, check CI workflows... validations: required: false - type: textarea id: links attributes: - label: Links and references + label: ๐Ÿ”— Links and References description: Links to release notes, changelogs, or relevant documentation + placeholder: | + Example: https://github.com/project/repo/releases/tag/v1.0.0 validations: required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index ee682d7..5681ad4 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ -blank_issues_enabled: true +blank_issues_enabled: false contact_links: - - name: โ“ Question + - name: โ“ Questions & Support url: https://github.com/56kyle/cookiecutter-robust-python/discussions - about: Ask and answer questions about cookiecutter-robust-python in Discussions - - name: ๐Ÿ”ง Troubleshooting + about: Ask questions and get help using cookiecutter-robust-python + - name: ๐Ÿ’ฌ General Discussion url: https://github.com/56kyle/cookiecutter-robust-python/discussions - about: For troubleshooting help, see the Discussions + about: Discuss ideas, best practices, and share your projects From 005d5e7c49fb1702347368a68945d74a51b4a4ca Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 16:28:18 -0400 Subject: [PATCH 08/18] cicd: consolidate templates in favor of choice options between template and generated project --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 199 ++++++++++++++++++ .github/ISSUE_TEMPLATE/01_template_bug.yml | 96 --------- .github/ISSUE_TEMPLATE/02_feature_request.yml | 163 ++++++++++++++ .../02_generated_project_bug.yml | 129 ------------ .github/ISSUE_TEMPLATE/03_documentation.yml | 83 ++++++-- .../ISSUE_TEMPLATE/04_dependency_update.yml | 171 +++++++++++++++ .../ISSUE_TEMPLATE/04_template_feature.yml | 95 --------- .../05_generated_project_feature.yml | 114 ---------- .../ISSUE_TEMPLATE/06_dependency_update.yml | 99 --------- 9 files changed, 597 insertions(+), 552 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/01_bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/01_template_bug.yml create mode 100644 .github/ISSUE_TEMPLATE/02_feature_request.yml delete mode 100644 .github/ISSUE_TEMPLATE/02_generated_project_bug.yml create mode 100644 .github/ISSUE_TEMPLATE/04_dependency_update.yml delete mode 100644 .github/ISSUE_TEMPLATE/04_template_feature.yml delete mode 100644 .github/ISSUE_TEMPLATE/05_generated_project_feature.yml delete mode 100644 .github/ISSUE_TEMPLATE/06_dependency_update.yml diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml new file mode 100644 index 0000000..837d0aa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -0,0 +1,199 @@ +name: '๐Ÿ› Bug Report' +description: Report a bug with the template or generated projects +labels: [bug] +title: '[Bug] ' + +body: + - type: markdown + attributes: + value: | + ## Bug Report + + Report issues with either the cookiecutter template or generated projects. + + - type: dropdown + id: issue_scope + attributes: + label: ๐ŸŽฏ Issue Scope + description: Is this a template issue or generated project issue? + options: + - Template (generation, hooks, template scripts) + - Generated Project (nox, dependencies, tooling) + validations: + required: true + + - type: textarea + id: description + attributes: + label: ๐Ÿ“ Bug Description + description: Clearly describe what went wrong + placeholder: | + A clear and concise description of the bug... + validations: + required: true + + - type: dropdown + id: issue_category + attributes: + label: ๐Ÿท๏ธ Issue Category + description: Select the category that best describes the issue + options: + # Template-specific options + - Template - Cookiecutter prompts/input + - Template - File generation + - Template - Post-generation hooks + - Template - Nox commands (generate-demo, lint, test) + - Template - Documentation/structure + # Generated project options + - Generated - Nox session failures + - Generated - Dependency/package management + - Generated - Build/packaging problems + - Generated - Testing framework issues + - Generated - Documentation build issues + - Generated - Linting/formatting configuration + - Generated - Type checking issues + - Generated - Security scanning problems + - Generated - CI/CD workflow issues + - Generated - Rust extension issues + - Generated - Container/Docker issues + - Generated - Project structure/files + - Other + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: ๐Ÿ”„ Steps to Reproduce + description: Provide clear steps to reproduce the issue + value: | + 1. + 2. + 3. + validations: + required: true + + - type: textarea + id: expected_behavior + attributes: + label: โœ… Expected Behavior + description: What did you expect to happen? + validations: + required: true + + - type: textarea + id: actual_behavior + attributes: + label: โŒ Actual Behavior + description: What actually happened? + validations: + required: true + + - type: textarea + id: cookiecutter_config + attributes: + label: โš™๏ธ Cookiecutter Configuration + description: Paste your .cookiecutter.json file contents or the options you selected + render: json + placeholder: | + { + "project_name": "my-project", + "add_rust_extension": "no", + ... + } + validations: + required: false + + - type: dropdown + id: rust_extension + attributes: + label: ๐Ÿฆ€ Rust Extension + description: Does your project include Rust extensions? + options: + - "No" + - "Yes" + - "N/A - Template issue" + validations: + required: true + + - type: dropdown + id: python_version + attributes: + label: ๐Ÿ Python Version + description: Which Python version are you using? + options: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + - "Other (specify in environment)" + validations: + required: true + + - type: dropdown + id: os + attributes: + label: ๐Ÿ’ป Operating System + description: Which OS are you using? + options: + - macOS (Intel) + - macOS (Apple Silicon) + - Linux (Ubuntu/Debian) + - Linux (Fedora/RHEL) + - Linux (Arch) + - Linux (Other) + - Windows 10 + - Windows 11 + - WSL2 + - Other + validations: + required: true + + - type: textarea + id: environment + attributes: + label: ๐Ÿ–ฅ๏ธ Environment Details + description: Additional environment information + value: | + - uv version: + - nox version: + - Cookiecutter version: + - Template version/commit: + - Other relevant tools: + validations: + required: true + + - type: textarea + id: error_output + attributes: + label: ๐Ÿšจ Error Output + description: Paste the complete error message, stack trace, or command output + render: shell + placeholder: | + Paste full error output here... + validations: + required: false + + - type: textarea + id: workaround + attributes: + label: ๐Ÿ”ง Workaround + description: If you found a temporary solution, please describe it + placeholder: | + Describe any workaround you discovered... + validations: + required: false + + - type: dropdown + id: severity + attributes: + label: โšก Severity + description: How severe is this issue? + options: + - Critical (blocks all usage) + - High (blocks major functionality) + - Medium (workaround available) + - Low (minor inconvenience) + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/01_template_bug.yml b/.github/ISSUE_TEMPLATE/01_template_bug.yml deleted file mode 100644 index 185d1d8..0000000 --- a/.github/ISSUE_TEMPLATE/01_template_bug.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: '๐Ÿ”ง Template Bug Report' -description: Report a bug with the cookiecutter template itself (generation process, hooks, scripts) -labels: [bug, template] -title: '[Template Bug] ' - -body: - - type: markdown - attributes: - value: | - ## Template Bug Report - - Report issues with the **cookiecutter template itself** including: - - Template generation failures - - Post-generation hook errors - - Template script problems - - Template configuration issues - - > **Note:** For issues with **generated projects** (nox sessions, dependencies, tooling), use the "Generated Project Bug Report" template instead. - - - type: textarea - id: description - attributes: - label: ๐Ÿ“ Bug Description - description: Clearly describe what went wrong with the template - placeholder: | - Example: Template generation fails when selecting Rust extension with error "... - validations: - required: true - - - type: dropdown - id: issue_stage - attributes: - label: ๐ŸŽฏ When does the issue occur? - options: - - During cookiecutter prompts/input - - During template file generation - - During post-generation hooks - - Template nox commands (generate-demo, lint, test, etc.) - - Template documentation/structure issues - validations: - required: true - - - type: textarea - id: reproduction - attributes: - label: ๐Ÿ”„ Steps to Reproduce - description: Provide clear steps to reproduce the issue - placeholder: | - 1. Run: cookiecutter gh:56kyle/cookiecutter-robust-python - 2. Select options: {project_name: "test", add_rust_extension: "yes"} - 3. Error occurs: ... - value: | - 1. - 2. - 3. - validations: - required: true - - - type: textarea - id: cookiecutter_config - attributes: - label: โš™๏ธ Cookiecutter Configuration - description: Paste your .cookiecutter.json file contents or the options you selected - render: json - placeholder: | - { - "project_name": "my-project", - "add_rust_extension": "yes", - ... - } - validations: - required: false - - - type: textarea - id: environment - attributes: - label: ๐Ÿ–ฅ๏ธ Environment - description: Please fill in your system information - value: | - - OS: - - Python version: - - Cookiecutter version: - - Template commit/version: - validations: - required: true - - - type: textarea - id: error_output - attributes: - label: ๐Ÿšจ Error Output - description: Paste the complete error message, stack trace, or command output - render: shell - placeholder: | - Paste full error output here... - validations: - required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml new file mode 100644 index 0000000..ae05411 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -0,0 +1,163 @@ +name: 'โœจ Feature Request' +description: Suggest new features or improvements for the template or generated projects +labels: [enhancement] +title: '[Feature] ' + +body: + - type: markdown + attributes: + value: | + ## Feature Request + + Suggest improvements for either the cookiecutter template or generated projects. + + - type: dropdown + id: feature_scope + attributes: + label: ๐ŸŽฏ Feature Scope + description: Is this for the template or generated projects? + options: + - Template (cookiecutter options, generation process) + - Generated Project (nox sessions, tooling, structure) + - Both + validations: + required: true + + - type: textarea + id: problem + attributes: + label: ๐ŸŽฏ Problem Statement + description: What problem would this feature solve? What use case would it enable? + placeholder: | + Describe the problem or use case this feature addresses... + validations: + required: true + + - type: textarea + id: solution + attributes: + label: ๐Ÿ’ก Proposed Solution + description: Describe your proposed solution or feature in detail + placeholder: | + Describe how this feature would work... + validations: + required: true + + - type: dropdown + id: feature_category + attributes: + label: ๐Ÿท๏ธ Feature Category + description: Select the category that best describes this feature + options: + # Template features + - Template - New cookiecutter variable/option + - Template - New template files or structure + - Template - New post-generation hooks + - Template - New nox sessions + - Template - Documentation improvements + - Template - Testing improvements + # Generated project features + - Generated - New nox session + - Generated - Dependency/tooling updates + - Generated - Testing improvements + - Generated - Build/packaging enhancements + - Generated - Documentation improvements + - Generated - Security enhancements + - Generated - CI/CD workflow improvements + - Generated - Development experience + - Generated - Rust extension features + - Generated - Container/deployment features + - Generated - Project structure improvements + - Other + validations: + required: true + + - type: dropdown + id: rust_impact + attributes: + label: ๐Ÿฆ€ Rust Extension Impact + description: Does this feature affect Rust extension projects? + options: + - "No - Python only" + - "Yes - Rust extension projects only" + - "Yes - Both Python and Rust projects" + - "N/A - Template feature" + validations: + required: true + + - type: textarea + id: implementation + attributes: + label: ๐Ÿ”ง Implementation Ideas + description: How could this feature be implemented? Any technical considerations? + placeholder: | + Describe potential implementation approaches... + validations: + required: false + + - type: textarea + id: alternatives + attributes: + label: ๐Ÿ”„ Alternatives Considered + description: What other approaches have you considered? + placeholder: | + List any alternative solutions you've considered... + validations: + required: false + + - type: textarea + id: examples + attributes: + label: ๐Ÿ”— Examples or References + description: Links to similar implementations or examples from other projects + placeholder: | + - https://github.com/example/project + - Similar feature in X project... + validations: + required: false + + - type: dropdown + id: breaking_change + attributes: + label: โš ๏ธ Breaking Change + description: Would this change break existing usage? + options: + - "No - Fully backward compatible" + - "Yes - Requires migration" + - "Only affects new projects" + - "Unsure" + validations: + required: true + + - type: dropdown + id: priority + attributes: + label: ๐Ÿ“Š Priority + description: How important is this feature to you? + options: + - "Nice to have" + - "Important" + - "Critical" + validations: + required: true + + - type: checkboxes + id: contribution + attributes: + label: ๐Ÿค Contribution + description: Are you willing to contribute to this feature? + options: + - label: I am willing to submit a PR for this feature + required: false + - label: I am willing to help test this feature + required: false + + - type: textarea + id: additional_context + attributes: + label: ๐Ÿ“ Additional Context + description: Any other relevant information about this feature request + placeholder: | + Additional details, use cases, or considerations... + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml b/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml deleted file mode 100644 index d07c21b..0000000 --- a/.github/ISSUE_TEMPLATE/02_generated_project_bug.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: '๐Ÿ“ฆ Generated Project Bug Report' -description: Report a bug with the generated project (nox sessions, dependencies, tooling, structure) -labels: [bug, generated-project] -title: '[Generated Project Bug] ' - -body: - - type: markdown - attributes: - value: | - ## Generated Project Bug Report - - Report issues with **generated projects** including: - - Nox session failures - - Dependency or tooling problems - - Build/packaging issues - - Testing framework errors - - Project configuration problems - - > **Note:** For issues with the **cookiecutter template itself** (generation process, template scripts), use the "Template Bug Report" template instead. - - - type: textarea - id: description - attributes: - label: ๐Ÿ“ Bug Description - description: Clearly describe the issue in your generated project - placeholder: | - Example: Running 'nox -s tests-python' fails with import errors... - validations: - required: true - - - type: dropdown - id: issue_category - attributes: - label: ๐Ÿท๏ธ Issue Category - options: - - Nox session failures - - Dependency/package management - - Build/packaging problems - - Testing framework issues - - Documentation build issues - - Linting/formatting configuration - - Type checking issues - - Security scanning problems - - CI/CD workflow issues - - Rust extension issues - - Container/Docker issues - - Project structure/files - - Other - validations: - required: true - - - type: textarea - id: reproduction - attributes: - label: ๐Ÿ”„ Steps to Reproduce - description: Provide clear steps to reproduce the issue - placeholder: | - 1. Generate project: cookiecutter gh:56kyle/cookiecutter-robust-python - 2. Select options: {project_name: "test", add_rust_extension: "no"} - 3. Run command: nox -s tests-python - 4. Error occurs: ... - value: | - 1. - 2. - 3. - 4. - validations: - required: true - - - type: textarea - id: cookiecutter_config - attributes: - label: โš™๏ธ Project Configuration - description: Paste the contents of .cookiecutter.json from your generated project - render: json - placeholder: | - { - "project_name": "my-project", - "add_rust_extension": "no", - ... - } - validations: - required: true - - - type: dropdown - id: rust_extension - attributes: - label: ๐Ÿฆ€ Rust Extension - description: Does your project include Rust extensions? - options: - - "No" - - "Yes" - validations: - required: true - - - type: textarea - id: environment - attributes: - label: ๐Ÿ–ฅ๏ธ Environment - description: Please fill in your system information - value: | - - OS: - - Python version: - - uv version: - - nox version: - - Template version used: - validations: - required: true - - - type: textarea - id: command_output - attributes: - label: ๐Ÿ’ป Command Output - description: Paste the complete output of the failing command(s) - render: shell - placeholder: | - Paste full command output here... - validations: - required: false - - - type: textarea - id: workaround - attributes: - label: ๐Ÿ”ง Workaround - description: If you found a temporary solution, please describe it - placeholder: | - Example: Manually editing pyproject.toml to fix the dependency version... - validations: - required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml index fe835f7..20a5a4a 100644 --- a/.github/ISSUE_TEMPLATE/03_documentation.yml +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -9,35 +9,60 @@ body: value: | ## Documentation Issue - Report problems or suggest improvements for: - - Template documentation (README, docs/ folder) - - Generated project documentation templates - - Missing or unclear documentation - - Documentation build issues - - API/code documentation + Report problems or suggest improvements for documentation. + + - type: dropdown + id: doc_scope + attributes: + label: ๐ŸŽฏ Documentation Scope + description: Which documentation area is this about? + options: + - Template (this repository) + - Generated Project (documentation templates) + - Both + validations: + required: true - type: dropdown id: doc_type attributes: label: ๐Ÿ“ Documentation Type options: - - Template documentation (this repository) - - Generated project documentation template + - README files - API/code documentation - Usage guides/tutorials - Configuration documentation - Troubleshooting guides + - Build/deployment documentation + - Development setup + - Contributing guidelines - Other validations: required: true + - type: dropdown + id: issue_type + attributes: + label: ๐Ÿท๏ธ Issue Type + options: + - Missing documentation + - Incorrect/outdated information + - Unclear explanation + - Documentation build failure + - Broken links + - Formatting issues + - Suggestion for improvement + - Translation issue + validations: + required: true + - type: textarea id: description attributes: label: ๐Ÿ“ Issue Description description: Describe the documentation problem and suggest improvements placeholder: | - Example: The nox session documentation is missing examples for Rust projects... + Clear description of the documentation issue... validations: required: true @@ -51,17 +76,28 @@ body: required: false - type: dropdown - id: issue_type + id: affects_rust attributes: - label: ๐Ÿท๏ธ Issue Type + label: ๐Ÿฆ€ Rust Extension + description: Does this documentation issue affect Rust extension projects? options: - - Missing documentation - - Incorrect/outdated information - - Unclear explanation - - Documentation build failure - - Broken links - - Formatting issues - - Suggestion for improvement + - "No - Python only" + - "Yes - Rust extension specific" + - "Yes - Both Python and Rust" + - "N/A" + validations: + required: true + + - type: dropdown + id: priority + attributes: + label: ๐Ÿ“Š Priority + description: How important is this documentation fix? + options: + - "Low - Minor improvement" + - "Medium - Affects usability" + - "High - Blocks understanding" + - "Critical - Incorrect information" validations: required: true @@ -71,6 +107,15 @@ body: label: โœจ Suggested Improvement description: How can this documentation be improved? What would you like to see added or changed? placeholder: | - Example: Add a section showing how to customize the nox configuration for different project types... + Specific suggestions for improvement... validations: required: false + + - type: checkboxes + id: contribution + attributes: + label: ๐Ÿค Contribution + description: Are you willing to help improve this documentation? + options: + - label: I am willing to submit a PR to fix this documentation + required: false diff --git a/.github/ISSUE_TEMPLATE/04_dependency_update.yml b/.github/ISSUE_TEMPLATE/04_dependency_update.yml new file mode 100644 index 0000000..890fc38 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/04_dependency_update.yml @@ -0,0 +1,171 @@ +name: '๐Ÿ“ฆ Dependency Update' +description: Suggest updates to dependencies, tools, or versions +labels: [dependencies, maintenance] +title: '[Dependency] ' + +body: + - type: markdown + attributes: + value: | + ## Dependency/Tooling Update + + Suggest updates to dependencies, tools, or versions used in the template or generated projects. + + - type: dropdown + id: update_scope + attributes: + label: ๐ŸŽฏ Update Scope + description: Does this affect the template, generated projects, or both? + options: + - Template only + - Generated projects only + - Both template and generated projects + validations: + required: true + + - type: dropdown + id: update_type + attributes: + label: ๐Ÿท๏ธ Update Type + options: + - Python version support + - Core tooling (uv, nox, ruff, pyright) + - Development dependencies + - Documentation dependencies + - Security tools (bandit, pip-audit) + - Testing frameworks + - Rust toolchain/dependencies + - GitHub Actions + - Container base images + - Other + validations: + required: true + + - type: input + id: package_name + attributes: + label: ๐Ÿ“ฆ Package/Tool Name + description: Name of the package or tool to update + placeholder: ruff, uv, pytest, etc. + validations: + required: true + + - type: input + id: current_version + attributes: + label: ๐Ÿ“… Current Version + description: Current version or version range + placeholder: "0.1.0, >=3.9, etc." + validations: + required: true + + - type: input + id: proposed_version + attributes: + label: โฌ†๏ธ Proposed Version + description: Proposed new version or version range + placeholder: "0.2.0, >=3.10, etc." + validations: + required: true + + - type: dropdown + id: update_reason + attributes: + label: ๐ŸŽฏ Primary Reason + description: Main reason for this update + options: + - Security fix + - Bug fixes + - New features we need + - Performance improvements + - EOL/deprecation + - Dependency compatibility + - Ecosystem alignment + - Other + validations: + required: true + + - type: dropdown + id: urgency + attributes: + label: โšก Urgency + description: How urgent is this update? + options: + - "Critical - Security vulnerability" + - "High - Breaks functionality" + - "Medium - Improvement needed" + - "Low - Nice to have" + validations: + required: true + + - type: dropdown + id: breaking_change + attributes: + label: โš ๏ธ Breaking Change + description: Would this update introduce breaking changes? + options: + - "No - Fully backward compatible" + - "Minor - Small changes needed" + - "Major - Significant changes required" + - "Unknown - Needs investigation" + validations: + required: true + + - type: dropdown + id: affects_rust + attributes: + label: ๐Ÿฆ€ Rust Extension Impact + description: Does this update affect Rust extension projects? + options: + - "No - Python only" + - "Yes - Rust projects only" + - "Yes - Both Python and Rust" + - "N/A" + validations: + required: true + + - type: textarea + id: motivation + attributes: + label: ๐Ÿ“ Detailed Motivation + description: Explain why this update is needed and what benefits it provides + placeholder: | + Detailed explanation of why this update is beneficial... + validations: + required: true + + - type: textarea + id: testing_needed + attributes: + label: ๐Ÿงช Testing Plan + description: What testing would be needed to validate this update? + placeholder: | + - Test template generation with both Python and Rust options + - Run all nox sessions + - Check CI workflows + - Test on multiple OS/Python versions + validations: + required: false + + - type: textarea + id: links + attributes: + label: ๐Ÿ”— References + description: Links to release notes, changelogs, or relevant documentation + placeholder: | + - Release notes: https://... + - Changelog: https://... + - Migration guide: https://... + validations: + required: false + + - type: checkboxes + id: contribution + attributes: + label: ๐Ÿค Contribution + description: Are you willing to help with this update? + options: + - label: I am willing to submit a PR for this update + required: false + - label: I am willing to help test this update + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/04_template_feature.yml b/.github/ISSUE_TEMPLATE/04_template_feature.yml deleted file mode 100644 index ac71243..0000000 --- a/.github/ISSUE_TEMPLATE/04_template_feature.yml +++ /dev/null @@ -1,95 +0,0 @@ -name: 'โœจ Template Feature Request' -description: Suggest new features or improvements for the cookiecutter template itself -labels: [enhancement, template] -title: '[Template Feature] ' - -body: - - type: markdown - attributes: - value: | - ## Template Feature Request - - Suggest improvements for the **cookiecutter template itself** including: - - New cookiecutter options/variables - - Template structure changes - - New post-generation hooks - - Template functionality enhancements - - > **Note:** For improvements to **generated projects** (new nox sessions, tooling updates), use the "Generated Project Feature Request" template instead. - - - type: textarea - id: problem - attributes: - label: ๐ŸŽก Problem or Use Case - description: What problem would this feature solve? What use case would it enable? - placeholder: | - Example: I want to choose between different CI providers during template generation... - validations: - required: true - - - type: textarea - id: solution - attributes: - label: ๐Ÿ’ก Proposed Solution - description: Describe your proposed solution or feature in detail - placeholder: | - Example: Add a new cookiecutter variable 'ci_provider' with options for GitHub Actions, GitLab CI, etc... - validations: - required: true - - - type: dropdown - id: feature_type - attributes: - label: ๐Ÿท๏ธ Feature Type - options: - - New cookiecutter variable/option - - New template files or structure - - New post-generation hooks - - New template nox sessions - - Template documentation improvements - - Template testing improvements - - Other template functionality - validations: - required: true - - - type: textarea - id: implementation - attributes: - label: ๐Ÿ”ง Implementation Ideas - description: How could this feature be implemented? Any technical considerations? - placeholder: | - Example: Modify cookiecutter.json to add the variable, create conditional template files... - validations: - required: false - - - type: textarea - id: alternatives - attributes: - label: ๐Ÿ”€ Alternatives Considered - description: What other approaches have you considered? - placeholder: | - Example: Could use environment variables instead of cookiecutter variables... - validations: - required: false - - - type: dropdown - id: breaking_change - attributes: - label: โš ๏ธ Breaking Change Impact - description: Would this change break existing template usage or generated projects? - options: - - "No - backward compatible" - - "Yes - breaking change" - - "Unsure" - validations: - required: true - - - type: textarea - id: additional_context - attributes: - label: ๐Ÿ“ Additional Context - description: Any other relevant information, examples, or references - placeholder: | - Links to similar implementations, screenshots, or additional details... - validations: - required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml b/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml deleted file mode 100644 index 9be63c2..0000000 --- a/.github/ISSUE_TEMPLATE/05_generated_project_feature.yml +++ /dev/null @@ -1,114 +0,0 @@ -name: '๐Ÿš€ Generated Project Feature Request' -description: Suggest improvements or new features for generated projects (nox sessions, tooling, structure) -labels: [enhancement, generated-project] -title: '[Generated Project Feature] ' - -body: - - type: markdown - attributes: - value: | - ## Generated Project Feature Request - - Suggest improvements for **generated projects** including: - - New nox sessions - - Tooling improvements - - Dependency updates - - Project structure enhancements - - Development workflow improvements - - > **Note:** For improvements to the **cookiecutter template itself** (new template options, generation process), use the "Template Feature Request" template instead. - - - type: textarea - id: problem - attributes: - label: ๐ŸŽก Problem or Use Case - description: What problem would this feature solve for generated projects? - placeholder: | - Example: Generated projects need better support for async testing... - validations: - required: true - - - type: textarea - id: solution - attributes: - label: ๐Ÿ’ก Proposed Solution - description: Describe your proposed solution or feature in detail - placeholder: | - Example: Add pytest-asyncio to default dependencies and configure async test support... - validations: - required: true - - - type: dropdown - id: feature_category - attributes: - label: ๐Ÿท๏ธ Feature Category - options: - - New nox session - - Dependency/tooling updates - - Testing improvements - - Build/packaging enhancements - - Documentation improvements - - Security enhancements - - CI/CD workflow improvements - - Development experience improvements - - Rust extension features - - Container/deployment features - - Project structure improvements - - Other - validations: - required: true - - - type: dropdown - id: affects_rust - attributes: - label: ๐Ÿฆ€ Rust Extension Impact - description: Does this feature affect Rust extension projects? - options: - - "No - Python only" - - "Yes - Rust extension projects" - - "Both Python and Rust projects" - validations: - required: true - - - type: textarea - id: implementation - attributes: - label: ๐Ÿ”ง Implementation Ideas - description: How could this be implemented in the generated project template? - placeholder: | - Example: Modify pyproject.toml dependencies, add new nox session in noxfile.py... - validations: - required: false - - - type: textarea - id: examples - attributes: - label: ๐Ÿ”— Examples or References - description: Links to similar implementations or examples from other projects - placeholder: | - Example: https://github.com/example/project implements this feature... - validations: - required: false - - - type: dropdown - id: breaking_change - attributes: - label: โš ๏ธ Breaking Change Impact - description: Would this change break existing generated projects or require migration? - options: - - "No - backward compatible" - - "Yes - breaking change requiring migration" - - "Only affects new projects" - - "Unsure" - validations: - required: true - - - type: textarea - id: additional_context - attributes: - label: ๐Ÿ“ Additional Context - description: Any other relevant information about this feature request - placeholder: | - Additional details, use cases, or considerations... - validations: - required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/06_dependency_update.yml b/.github/ISSUE_TEMPLATE/06_dependency_update.yml deleted file mode 100644 index 8c7ebab..0000000 --- a/.github/ISSUE_TEMPLATE/06_dependency_update.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: '๐Ÿ“ฆ Dependency/Tooling Update' -description: Suggest updates to dependencies, tools, or versions used in the template or generated projects -labels: [dependencies, maintenance] -title: '[Dependency Update] ' - -body: - - type: markdown - attributes: - value: | - ## Dependency/Tooling Update - - Suggest updates to: - - Python version ranges - - Tool versions (uv, nox, ruff, pyright, etc.) - - Dependencies in template or generated projects - - Rust toolchain versions (if applicable) - - GitHub Actions versions - - Container base images - - - type: dropdown - id: update_type - attributes: - label: ๐Ÿท๏ธ Update Type - options: - - Python version support (min/max versions) - - Core tooling (uv, nox, ruff, pyright, etc.) - - Development dependencies - - Documentation dependencies - - Security tools (bandit, pip-audit) - - Testing framework updates - - Rust toolchain/dependencies - - GitHub Actions versions - - Container base images - - Other - validations: - required: true - - - type: textarea - id: current_version - attributes: - label: ๐Ÿ“… Current Version/Configuration - description: What is currently being used? - placeholder: | - Example: Python 3.9-3.13, ruff 0.1.0, etc. - validations: - required: true - - - type: textarea - id: proposed_version - attributes: - label: โฌ†๏ธ Proposed Version/Configuration - description: What should it be updated to? - placeholder: | - Example: Python 3.10-3.13, ruff 0.2.0, etc. - validations: - required: true - - - type: textarea - id: motivation - attributes: - label: ๐ŸŽก Motivation - description: Why should this be updated? - placeholder: | - Example: New version includes security fixes, performance improvements, new features we could use... - validations: - required: true - - - type: dropdown - id: breaking_change - attributes: - label: โš ๏ธ Breaking Change Impact - options: - - "No impact - backward compatible" - - "Minor - affects edge cases only" - - "Major - affects all projects" - - "Requires migration guide" - - "Unsure" - validations: - required: true - - - type: textarea - id: testing_needed - attributes: - label: ๐Ÿงช Testing Considerations - description: What testing would be needed to validate this update? - placeholder: | - Example: Test template generation, run all nox sessions, check CI workflows... - validations: - required: false - - - type: textarea - id: links - attributes: - label: ๐Ÿ”— Links and References - description: Links to release notes, changelogs, or relevant documentation - placeholder: | - Example: https://github.com/project/repo/releases/tag/v1.0.0 - validations: - required: false \ No newline at end of file From 6ea3cfe3a4faf4323bd5582a9197b234751bb640 Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 17:29:05 -0400 Subject: [PATCH 09/18] cicd: attempt at documenting labels to choices --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 32 ++++++++++++++++++- .github/ISSUE_TEMPLATE/02_feature_request.yml | 29 ++++++++++++++++- .github/ISSUE_TEMPLATE/03_documentation.yml | 18 ++++++++++- .../ISSUE_TEMPLATE/04_dependency_update.yml | 19 ++++++++++- 4 files changed, 94 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml index 837d0aa..5bf2f31 100644 --- a/.github/ISSUE_TEMPLATE/01_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -1,8 +1,38 @@ name: '๐Ÿ› Bug Report' description: Report a bug with the template or generated projects -labels: [bug] +labels: [bug, needs-triage] title: '[Bug] ' +# Label Mapping Documentation for GitHub Actions: +# +# Scope mapping (based on issue_scope field): +# - "Template (generation, hooks, template scripts)" โ†’ scope:template +# - "Generated Project (nox, dependencies, tooling)" โ†’ scope:generated +# +# Component mapping (based on issue_category field): +# - "Template - Nox commands" โ†’ component:nox +# - "Template - Post-generation hooks" โ†’ component:hooks +# - "*Rust extension*" โ†’ rust +# - "*CI/CD*" โ†’ component:ci +# - "*Container/Docker*" โ†’ component:container +# - "*Documentation*" โ†’ documentation (remove from primary) +# - "*Testing*" โ†’ component:testing +# - "*Security*" โ†’ component:security +# - "*Dependency*" โ†’ dependencies (add as primary) +# +# Priority mapping (based on severity field): +# - "Critical (blocks all usage)" โ†’ priority:critical +# - "High (blocks major functionality)" โ†’ priority:high +# - "Medium (workaround available)" โ†’ priority:medium +# - "Low (minor inconvenience)" โ†’ priority:low +# +# Environment mapping (when relevant): +# - python_version: "3.9" โ†’ python:3.9, etc. +# - os: "macOS*" โ†’ os:macos, "Linux*" โ†’ os:linux, "Windows*" โ†’ os:windows, "WSL*" โ†’ os:wsl +# +# Feature flags: +# - rust_extension: "Yes" โ†’ rust + body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml index ae05411..46716f7 100644 --- a/.github/ISSUE_TEMPLATE/02_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -1,8 +1,35 @@ name: 'โœจ Feature Request' description: Suggest new features or improvements for the template or generated projects -labels: [enhancement] +labels: [enhancement, needs-triage] title: '[Feature] ' +# Label Mapping Documentation for GitHub Actions: +# +# Scope mapping (based on feature_scope field): +# - "Template (cookiecutter options, generation process)" โ†’ scope:template +# - "Generated Project (nox sessions, tooling, structure)" โ†’ scope:generated +# - "Both" โ†’ scope:both +# +# Component mapping (based on feature_category field): +# - "*nox*" โ†’ component:nox +# - "*hooks*" โ†’ component:hooks +# - "*Rust*" โ†’ rust +# - "*CI/CD*" โ†’ component:ci +# - "*Container*" โ†’ component:container +# - "*Documentation*" โ†’ documentation (add as primary) +# - "*Testing*" โ†’ component:testing +# - "*Security*" โ†’ component:security +# - "*Dependency*" โ†’ dependencies (add as primary) +# +# Priority mapping (based on priority field): +# - "Critical" โ†’ priority:critical +# - "Important" โ†’ priority:high +# - "Nice to have" โ†’ priority:medium +# +# Feature flags: +# - rust_impact: "Yes*" โ†’ rust +# - breaking_change: "Yes - Requires migration" โ†’ breaking-change + body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml index 20a5a4a..212e447 100644 --- a/.github/ISSUE_TEMPLATE/03_documentation.yml +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -1,8 +1,24 @@ name: '๐Ÿ“– Documentation Issue' description: Report documentation issues or suggest improvements -labels: [documentation] +labels: [documentation, needs-triage] title: '[Docs] ' +# Label Mapping Documentation for GitHub Actions: +# +# Scope mapping (based on doc_scope field): +# - "Template (this repository)" โ†’ scope:template +# - "Generated Project (documentation templates)" โ†’ scope:generated +# - "Both" โ†’ scope:both +# +# Priority mapping (based on priority field): +# - "Critical - Incorrect information" โ†’ priority:critical +# - "High - Blocks understanding" โ†’ priority:high +# - "Medium - Affects usability" โ†’ priority:medium +# - "Low - Minor improvement" โ†’ priority:low +# +# Feature flags: +# - affects_rust: "Yes*" โ†’ rust + body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/04_dependency_update.yml b/.github/ISSUE_TEMPLATE/04_dependency_update.yml index 890fc38..f9224a5 100644 --- a/.github/ISSUE_TEMPLATE/04_dependency_update.yml +++ b/.github/ISSUE_TEMPLATE/04_dependency_update.yml @@ -1,8 +1,25 @@ name: '๐Ÿ“ฆ Dependency Update' description: Suggest updates to dependencies, tools, or versions -labels: [dependencies, maintenance] +labels: [dependencies, needs-triage] title: '[Dependency] ' +# Label Mapping Documentation for GitHub Actions: +# +# Scope mapping (based on update_scope field): +# - "Template only" โ†’ scope:template +# - "Generated projects only" โ†’ scope:generated +# - "Both template and generated projects" โ†’ scope:both +# +# Priority mapping (based on urgency field): +# - "Critical - Security vulnerability" โ†’ priority:critical +# - "High - Breaks functionality" โ†’ priority:high +# - "Medium - Improvement needed" โ†’ priority:medium +# - "Low - Nice to have" โ†’ priority:low +# +# Feature flags: +# - affects_rust: "Yes*" โ†’ rust +# - breaking_change: "Major - Significant changes required" โ†’ breaking-change + body: - type: markdown attributes: From 09df676ebc7a10f8914698b5d5851ac9f52629ee Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 17:55:29 -0400 Subject: [PATCH 10/18] cicd: greatly simplify the issue templates in favor of having users add labels manually --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 189 +++--------------- .github/ISSUE_TEMPLATE/02_feature_request.yml | 158 ++------------- .github/ISSUE_TEMPLATE/03_documentation.yml | 106 ++-------- .../ISSUE_TEMPLATE/04_dependency_update.yml | 177 +++------------- 4 files changed, 89 insertions(+), 541 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml index 5bf2f31..43a96b2 100644 --- a/.github/ISSUE_TEMPLATE/01_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -1,53 +1,20 @@ name: '๐Ÿ› Bug Report' description: Report a bug with the template or generated projects -labels: [bug, needs-triage] +labels: [bug] title: '[Bug] ' -# Label Mapping Documentation for GitHub Actions: -# -# Scope mapping (based on issue_scope field): -# - "Template (generation, hooks, template scripts)" โ†’ scope:template -# - "Generated Project (nox, dependencies, tooling)" โ†’ scope:generated -# -# Component mapping (based on issue_category field): -# - "Template - Nox commands" โ†’ component:nox -# - "Template - Post-generation hooks" โ†’ component:hooks -# - "*Rust extension*" โ†’ rust -# - "*CI/CD*" โ†’ component:ci -# - "*Container/Docker*" โ†’ component:container -# - "*Documentation*" โ†’ documentation (remove from primary) -# - "*Testing*" โ†’ component:testing -# - "*Security*" โ†’ component:security -# - "*Dependency*" โ†’ dependencies (add as primary) -# -# Priority mapping (based on severity field): -# - "Critical (blocks all usage)" โ†’ priority:critical -# - "High (blocks major functionality)" โ†’ priority:high -# - "Medium (workaround available)" โ†’ priority:medium -# - "Low (minor inconvenience)" โ†’ priority:low -# -# Environment mapping (when relevant): -# - python_version: "3.9" โ†’ python:3.9, etc. -# - os: "macOS*" โ†’ os:macos, "Linux*" โ†’ os:linux, "Windows*" โ†’ os:windows, "WSL*" โ†’ os:wsl -# -# Feature flags: -# - rust_extension: "Yes" โ†’ rust - body: - type: markdown attributes: value: | - ## Bug Report - - Report issues with either the cookiecutter template or generated projects. + Thanks for taking the time to report a bug! Please provide as much detail as possible. - type: dropdown id: issue_scope attributes: - label: ๐ŸŽฏ Issue Scope - description: Is this a template issue or generated project issue? + label: Is this a template issue or generated project issue? options: - - Template (generation, hooks, template scripts) + - Template (generation, hooks, scripts) - Generated Project (nox, dependencies, tooling) validations: required: true @@ -55,47 +22,18 @@ body: - type: textarea id: description attributes: - label: ๐Ÿ“ Bug Description - description: Clearly describe what went wrong + label: Bug Description + description: A clear and concise description of the bug placeholder: | - A clear and concise description of the bug... - validations: - required: true - - - type: dropdown - id: issue_category - attributes: - label: ๐Ÿท๏ธ Issue Category - description: Select the category that best describes the issue - options: - # Template-specific options - - Template - Cookiecutter prompts/input - - Template - File generation - - Template - Post-generation hooks - - Template - Nox commands (generate-demo, lint, test) - - Template - Documentation/structure - # Generated project options - - Generated - Nox session failures - - Generated - Dependency/package management - - Generated - Build/packaging problems - - Generated - Testing framework issues - - Generated - Documentation build issues - - Generated - Linting/formatting configuration - - Generated - Type checking issues - - Generated - Security scanning problems - - Generated - CI/CD workflow issues - - Generated - Rust extension issues - - Generated - Container/Docker issues - - Generated - Project structure/files - - Other + What went wrong? Please be as specific as possible. validations: required: true - type: textarea id: reproduction attributes: - label: ๐Ÿ”„ Steps to Reproduce - description: Provide clear steps to reproduce the issue + label: Steps to Reproduce + description: How can we reproduce this issue? value: | 1. 2. @@ -106,7 +44,7 @@ body: - type: textarea id: expected_behavior attributes: - label: โœ… Expected Behavior + label: Expected Behavior description: What did you expect to happen? validations: required: true @@ -114,116 +52,37 @@ body: - type: textarea id: actual_behavior attributes: - label: โŒ Actual Behavior + label: Actual Behavior description: What actually happened? validations: required: true - - type: textarea - id: cookiecutter_config - attributes: - label: โš™๏ธ Cookiecutter Configuration - description: Paste your .cookiecutter.json file contents or the options you selected - render: json - placeholder: | - { - "project_name": "my-project", - "add_rust_extension": "no", - ... - } - validations: - required: false - - - type: dropdown - id: rust_extension - attributes: - label: ๐Ÿฆ€ Rust Extension - description: Does your project include Rust extensions? - options: - - "No" - - "Yes" - - "N/A - Template issue" - validations: - required: true - - - type: dropdown - id: python_version - attributes: - label: ๐Ÿ Python Version - description: Which Python version are you using? - options: - - "3.9" - - "3.10" - - "3.11" - - "3.12" - - "3.13" - - "Other (specify in environment)" - validations: - required: true - - - type: dropdown - id: os - attributes: - label: ๐Ÿ’ป Operating System - description: Which OS are you using? - options: - - macOS (Intel) - - macOS (Apple Silicon) - - Linux (Ubuntu/Debian) - - Linux (Fedora/RHEL) - - Linux (Arch) - - Linux (Other) - - Windows 10 - - Windows 11 - - WSL2 - - Other - validations: - required: true - - type: textarea id: environment attributes: - label: ๐Ÿ–ฅ๏ธ Environment Details - description: Additional environment information + label: Environment + description: Please provide relevant environment details value: | - - uv version: - - nox version: - - Cookiecutter version: - - Template version/commit: - - Other relevant tools: + - OS: + - Python version: + - Cookiecutter version (if template issue): + - Project configuration (rust extension enabled?): validations: required: true - type: textarea - id: error_output + id: logs attributes: - label: ๐Ÿšจ Error Output - description: Paste the complete error message, stack trace, or command output + label: Relevant Logs/Output + description: Please paste any relevant error messages or logs render: shell - placeholder: | - Paste full error output here... validations: required: false - type: textarea - id: workaround + id: additional attributes: - label: ๐Ÿ”ง Workaround - description: If you found a temporary solution, please describe it - placeholder: | - Describe any workaround you discovered... - validations: - required: false - - - type: dropdown - id: severity - attributes: - label: โšก Severity - description: How severe is this issue? - options: - - Critical (blocks all usage) - - High (blocks major functionality) - - Medium (workaround available) - - Low (minor inconvenience) + label: Additional Context + description: Any other information that might be helpful validations: - required: true \ No newline at end of file + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml index 46716f7..d53855a 100644 --- a/.github/ISSUE_TEMPLATE/02_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -1,51 +1,21 @@ name: 'โœจ Feature Request' -description: Suggest new features or improvements for the template or generated projects -labels: [enhancement, needs-triage] +description: Suggest new features or improvements +labels: [enhancement] title: '[Feature] ' -# Label Mapping Documentation for GitHub Actions: -# -# Scope mapping (based on feature_scope field): -# - "Template (cookiecutter options, generation process)" โ†’ scope:template -# - "Generated Project (nox sessions, tooling, structure)" โ†’ scope:generated -# - "Both" โ†’ scope:both -# -# Component mapping (based on feature_category field): -# - "*nox*" โ†’ component:nox -# - "*hooks*" โ†’ component:hooks -# - "*Rust*" โ†’ rust -# - "*CI/CD*" โ†’ component:ci -# - "*Container*" โ†’ component:container -# - "*Documentation*" โ†’ documentation (add as primary) -# - "*Testing*" โ†’ component:testing -# - "*Security*" โ†’ component:security -# - "*Dependency*" โ†’ dependencies (add as primary) -# -# Priority mapping (based on priority field): -# - "Critical" โ†’ priority:critical -# - "Important" โ†’ priority:high -# - "Nice to have" โ†’ priority:medium -# -# Feature flags: -# - rust_impact: "Yes*" โ†’ rust -# - breaking_change: "Yes - Requires migration" โ†’ breaking-change - body: - type: markdown attributes: value: | - ## Feature Request - - Suggest improvements for either the cookiecutter template or generated projects. + Thanks for suggesting a feature! Please help us understand your idea. - type: dropdown id: feature_scope attributes: - label: ๐ŸŽฏ Feature Scope - description: Is this for the template or generated projects? + label: Is this for the template or generated projects? options: - - Template (cookiecutter options, generation process) - - Generated Project (nox sessions, tooling, structure) + - Template (new options, generation features) + - Generated Project (tooling, structure) - Both validations: required: true @@ -53,138 +23,52 @@ body: - type: textarea id: problem attributes: - label: ๐ŸŽฏ Problem Statement - description: What problem would this feature solve? What use case would it enable? + label: Problem Statement + description: What problem does this feature solve? placeholder: | - Describe the problem or use case this feature addresses... + Describe the problem or use case this addresses... validations: required: true - type: textarea id: solution attributes: - label: ๐Ÿ’ก Proposed Solution - description: Describe your proposed solution or feature in detail + label: Proposed Solution + description: How would you solve this problem? placeholder: | - Describe how this feature would work... - validations: - required: true - - - type: dropdown - id: feature_category - attributes: - label: ๐Ÿท๏ธ Feature Category - description: Select the category that best describes this feature - options: - # Template features - - Template - New cookiecutter variable/option - - Template - New template files or structure - - Template - New post-generation hooks - - Template - New nox sessions - - Template - Documentation improvements - - Template - Testing improvements - # Generated project features - - Generated - New nox session - - Generated - Dependency/tooling updates - - Generated - Testing improvements - - Generated - Build/packaging enhancements - - Generated - Documentation improvements - - Generated - Security enhancements - - Generated - CI/CD workflow improvements - - Generated - Development experience - - Generated - Rust extension features - - Generated - Container/deployment features - - Generated - Project structure improvements - - Other - validations: - required: true - - - type: dropdown - id: rust_impact - attributes: - label: ๐Ÿฆ€ Rust Extension Impact - description: Does this feature affect Rust extension projects? - options: - - "No - Python only" - - "Yes - Rust extension projects only" - - "Yes - Both Python and Rust projects" - - "N/A - Template feature" + Describe your proposed solution... validations: required: true - - type: textarea - id: implementation - attributes: - label: ๐Ÿ”ง Implementation Ideas - description: How could this feature be implemented? Any technical considerations? - placeholder: | - Describe potential implementation approaches... - validations: - required: false - - type: textarea id: alternatives attributes: - label: ๐Ÿ”„ Alternatives Considered + label: Alternatives Considered description: What other approaches have you considered? - placeholder: | - List any alternative solutions you've considered... validations: required: false - - type: textarea - id: examples - attributes: - label: ๐Ÿ”— Examples or References - description: Links to similar implementations or examples from other projects - placeholder: | - - https://github.com/example/project - - Similar feature in X project... - validations: - required: false - - - type: dropdown + - type: checkboxes id: breaking_change attributes: - label: โš ๏ธ Breaking Change - description: Would this change break existing usage? + label: Would this be a breaking change? options: - - "No - Fully backward compatible" - - "Yes - Requires migration" - - "Only affects new projects" - - "Unsure" - validations: - required: true - - - type: dropdown - id: priority - attributes: - label: ๐Ÿ“Š Priority - description: How important is this feature to you? - options: - - "Nice to have" - - "Important" - - "Critical" - validations: - required: true + - label: This change would break existing functionality + required: false - type: checkboxes id: contribution attributes: - label: ๐Ÿค Contribution - description: Are you willing to contribute to this feature? + label: Contribution + description: Are you willing to help implement this feature? options: - label: I am willing to submit a PR for this feature required: false - - label: I am willing to help test this feature - required: false - type: textarea - id: additional_context + id: additional attributes: - label: ๐Ÿ“ Additional Context + label: Additional Context description: Any other relevant information about this feature request - placeholder: | - Additional details, use cases, or considerations... validations: required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml index 212e447..c9cfd78 100644 --- a/.github/ISSUE_TEMPLATE/03_documentation.yml +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -1,137 +1,61 @@ name: '๐Ÿ“– Documentation Issue' description: Report documentation issues or suggest improvements -labels: [documentation, needs-triage] +labels: [documentation] title: '[Docs] ' -# Label Mapping Documentation for GitHub Actions: -# -# Scope mapping (based on doc_scope field): -# - "Template (this repository)" โ†’ scope:template -# - "Generated Project (documentation templates)" โ†’ scope:generated -# - "Both" โ†’ scope:both -# -# Priority mapping (based on priority field): -# - "Critical - Incorrect information" โ†’ priority:critical -# - "High - Blocks understanding" โ†’ priority:high -# - "Medium - Affects usability" โ†’ priority:medium -# - "Low - Minor improvement" โ†’ priority:low -# -# Feature flags: -# - affects_rust: "Yes*" โ†’ rust - body: - type: markdown attributes: value: | - ## Documentation Issue - - Report problems or suggest improvements for documentation. - - - type: dropdown - id: doc_scope - attributes: - label: ๐ŸŽฏ Documentation Scope - description: Which documentation area is this about? - options: - - Template (this repository) - - Generated Project (documentation templates) - - Both - validations: - required: true + Help us improve our documentation! - type: dropdown id: doc_type attributes: - label: ๐Ÿ“ Documentation Type - options: - - README files - - API/code documentation - - Usage guides/tutorials - - Configuration documentation - - Troubleshooting guides - - Build/deployment documentation - - Development setup - - Contributing guidelines - - Other - validations: - required: true - - - type: dropdown - id: issue_type - attributes: - label: ๐Ÿท๏ธ Issue Type + label: What type of documentation issue is this? options: - Missing documentation - Incorrect/outdated information - Unclear explanation - - Documentation build failure - Broken links - - Formatting issues - - Suggestion for improvement - - Translation issue + - Other improvement validations: required: true - type: textarea id: description attributes: - label: ๐Ÿ“ Issue Description - description: Describe the documentation problem and suggest improvements + label: Description + description: Describe the documentation issue placeholder: | - Clear description of the documentation issue... + What's wrong with the documentation? What needs to be improved? validations: required: true - type: input id: link attributes: - label: ๐Ÿ”— Documentation Link + label: Documentation Link description: Link to the problematic documentation (if applicable) - placeholder: https://cookiecutter-robust-python.readthedocs.io/en/latest/... + placeholder: https://... validations: required: false - - type: dropdown - id: affects_rust - attributes: - label: ๐Ÿฆ€ Rust Extension - description: Does this documentation issue affect Rust extension projects? - options: - - "No - Python only" - - "Yes - Rust extension specific" - - "Yes - Both Python and Rust" - - "N/A" - validations: - required: true - - - type: dropdown - id: priority - attributes: - label: ๐Ÿ“Š Priority - description: How important is this documentation fix? - options: - - "Low - Minor improvement" - - "Medium - Affects usability" - - "High - Blocks understanding" - - "Critical - Incorrect information" - validations: - required: true - - type: textarea - id: suggested_improvement + id: suggestion attributes: - label: โœจ Suggested Improvement - description: How can this documentation be improved? What would you like to see added or changed? + label: Suggested Improvement + description: How would you improve this documentation? placeholder: | - Specific suggestions for improvement... + What changes would make this clearer or more helpful? validations: required: false - type: checkboxes id: contribution attributes: - label: ๐Ÿค Contribution + label: Contribution description: Are you willing to help improve this documentation? options: - label: I am willing to submit a PR to fix this documentation - required: false + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/04_dependency_update.yml b/.github/ISSUE_TEMPLATE/04_dependency_update.yml index f9224a5..6bb86ad 100644 --- a/.github/ISSUE_TEMPLATE/04_dependency_update.yml +++ b/.github/ISSUE_TEMPLATE/04_dependency_update.yml @@ -1,188 +1,69 @@ name: '๐Ÿ“ฆ Dependency Update' description: Suggest updates to dependencies, tools, or versions -labels: [dependencies, needs-triage] +labels: [dependencies] title: '[Dependency] ' -# Label Mapping Documentation for GitHub Actions: -# -# Scope mapping (based on update_scope field): -# - "Template only" โ†’ scope:template -# - "Generated projects only" โ†’ scope:generated -# - "Both template and generated projects" โ†’ scope:both -# -# Priority mapping (based on urgency field): -# - "Critical - Security vulnerability" โ†’ priority:critical -# - "High - Breaks functionality" โ†’ priority:high -# - "Medium - Improvement needed" โ†’ priority:medium -# - "Low - Nice to have" โ†’ priority:low -# -# Feature flags: -# - affects_rust: "Yes*" โ†’ rust -# - breaking_change: "Major - Significant changes required" โ†’ breaking-change - body: - type: markdown attributes: value: | - ## Dependency/Tooling Update - - Suggest updates to dependencies, tools, or versions used in the template or generated projects. - - - type: dropdown - id: update_scope - attributes: - label: ๐ŸŽฏ Update Scope - description: Does this affect the template, generated projects, or both? - options: - - Template only - - Generated projects only - - Both template and generated projects - validations: - required: true - - - type: dropdown - id: update_type - attributes: - label: ๐Ÿท๏ธ Update Type - options: - - Python version support - - Core tooling (uv, nox, ruff, pyright) - - Development dependencies - - Documentation dependencies - - Security tools (bandit, pip-audit) - - Testing frameworks - - Rust toolchain/dependencies - - GitHub Actions - - Container base images - - Other - validations: - required: true + Suggest dependency or tooling updates. - type: input - id: package_name + id: package attributes: - label: ๐Ÿ“ฆ Package/Tool Name - description: Name of the package or tool to update - placeholder: ruff, uv, pytest, etc. + label: Package/Tool Name + description: What needs to be updated? + placeholder: e.g., ruff, pytest, Python version validations: required: true - type: input id: current_version attributes: - label: ๐Ÿ“… Current Version - description: Current version or version range - placeholder: "0.1.0, >=3.9, etc." + label: Current Version + placeholder: e.g., 0.1.0, >=3.9 validations: required: true - type: input id: proposed_version attributes: - label: โฌ†๏ธ Proposed Version - description: Proposed new version or version range - placeholder: "0.2.0, >=3.10, etc." + label: Proposed Version + placeholder: e.g., 0.2.0, >=3.10 validations: required: true - - type: dropdown - id: update_reason - attributes: - label: ๐ŸŽฏ Primary Reason - description: Main reason for this update - options: - - Security fix - - Bug fixes - - New features we need - - Performance improvements - - EOL/deprecation - - Dependency compatibility - - Ecosystem alignment - - Other - validations: - required: true - - - type: dropdown - id: urgency + - type: textarea + id: reason attributes: - label: โšก Urgency - description: How urgent is this update? - options: - - "Critical - Security vulnerability" - - "High - Breaks functionality" - - "Medium - Improvement needed" - - "Low - Nice to have" + label: Update Reason + description: Why should this be updated? + placeholder: | + Security fix, new features, performance improvements, etc. validations: required: true - - type: dropdown + - type: checkboxes id: breaking_change attributes: - label: โš ๏ธ Breaking Change - description: Would this update introduce breaking changes? + label: Breaking Change options: - - "No - Fully backward compatible" - - "Minor - Small changes needed" - - "Major - Significant changes required" - - "Unknown - Needs investigation" - validations: - required: true + - label: This update would introduce breaking changes + required: false - - type: dropdown - id: affects_rust + - type: checkboxes + id: security attributes: - label: ๐Ÿฆ€ Rust Extension Impact - description: Does this update affect Rust extension projects? + label: Security Update options: - - "No - Python only" - - "Yes - Rust projects only" - - "Yes - Both Python and Rust" - - "N/A" - validations: - required: true - - - type: textarea - id: motivation - attributes: - label: ๐Ÿ“ Detailed Motivation - description: Explain why this update is needed and what benefits it provides - placeholder: | - Detailed explanation of why this update is beneficial... - validations: - required: true - - - type: textarea - id: testing_needed - attributes: - label: ๐Ÿงช Testing Plan - description: What testing would be needed to validate this update? - placeholder: | - - Test template generation with both Python and Rust options - - Run all nox sessions - - Check CI workflows - - Test on multiple OS/Python versions - validations: - required: false + - label: This is a security-related update + required: false - type: textarea - id: links + id: additional attributes: - label: ๐Ÿ”— References - description: Links to release notes, changelogs, or relevant documentation - placeholder: | - - Release notes: https://... - - Changelog: https://... - - Migration guide: https://... + label: Additional Information + description: Any other relevant details (migration guide, testing needed, etc.) validations: - required: false - - - type: checkboxes - id: contribution - attributes: - label: ๐Ÿค Contribution - description: Are you willing to help with this update? - options: - - label: I am willing to submit a PR for this update - required: false - - label: I am willing to help test this update - required: false \ No newline at end of file + required: false \ No newline at end of file From 6a557cb6b4738cade513951eafc0f346fe351332 Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 17:56:20 -0400 Subject: [PATCH 11/18] chore: add missing end of file newlines --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 16 ++++++++-------- .github/ISSUE_TEMPLATE/02_feature_request.yml | 2 +- .github/ISSUE_TEMPLATE/03_documentation.yml | 2 +- .github/ISSUE_TEMPLATE/04_dependency_update.yml | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml index 43a96b2..daae9eb 100644 --- a/.github/ISSUE_TEMPLATE/01_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -35,9 +35,9 @@ body: label: Steps to Reproduce description: How can we reproduce this issue? value: | - 1. - 2. - 3. + 1. + 2. + 3. validations: required: true @@ -63,10 +63,10 @@ body: label: Environment description: Please provide relevant environment details value: | - - OS: - - Python version: - - Cookiecutter version (if template issue): - - Project configuration (rust extension enabled?): + - OS: + - Python version: + - Cookiecutter version (if template issue): + - Project configuration (rust extension enabled?): validations: required: true @@ -85,4 +85,4 @@ body: label: Additional Context description: Any other information that might be helpful validations: - required: false \ No newline at end of file + required: false diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml index d53855a..df85627 100644 --- a/.github/ISSUE_TEMPLATE/02_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -71,4 +71,4 @@ body: label: Additional Context description: Any other relevant information about this feature request validations: - required: false \ No newline at end of file + required: false diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml index c9cfd78..2d3cf4e 100644 --- a/.github/ISSUE_TEMPLATE/03_documentation.yml +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -58,4 +58,4 @@ body: description: Are you willing to help improve this documentation? options: - label: I am willing to submit a PR to fix this documentation - required: false \ No newline at end of file + required: false diff --git a/.github/ISSUE_TEMPLATE/04_dependency_update.yml b/.github/ISSUE_TEMPLATE/04_dependency_update.yml index 6bb86ad..f3fd529 100644 --- a/.github/ISSUE_TEMPLATE/04_dependency_update.yml +++ b/.github/ISSUE_TEMPLATE/04_dependency_update.yml @@ -66,4 +66,4 @@ body: label: Additional Information description: Any other relevant details (migration guide, testing needed, etc.) validations: - required: false \ No newline at end of file + required: false From fd831773cc680c57fb9cb927a92d7211eb56a518 Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 18:05:21 -0400 Subject: [PATCH 12/18] cicd: simplify the feature request template --- .github/ISSUE_TEMPLATE/02_feature_request.yml | 43 ++++--------------- 1 file changed, 9 insertions(+), 34 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml index df85627..7fe33d5 100644 --- a/.github/ISSUE_TEMPLATE/02_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -21,54 +21,29 @@ body: required: true - type: textarea - id: problem + id: summary attributes: - label: Problem Statement - description: What problem does this feature solve? + label: Feature Summary + description: What feature would you like to see? placeholder: | - Describe the problem or use case this addresses... + A brief description of the feature you're requesting... validations: required: true - type: textarea - id: solution + id: example attributes: - label: Proposed Solution - description: How would you solve this problem? + label: Example + description: How would this look to the end user? placeholder: | - Describe your proposed solution... + Show an example of how this would work or what the user would see/do... validations: required: true - - type: textarea - id: alternatives - attributes: - label: Alternatives Considered - description: What other approaches have you considered? - validations: - required: false - - - type: checkboxes - id: breaking_change - attributes: - label: Would this be a breaking change? - options: - - label: This change would break existing functionality - required: false - - - type: checkboxes - id: contribution - attributes: - label: Contribution - description: Are you willing to help implement this feature? - options: - - label: I am willing to submit a PR for this feature - required: false - - type: textarea id: additional attributes: label: Additional Context description: Any other relevant information about this feature request validations: - required: false + required: false \ No newline at end of file From 97930fa66bbd2cc990c34ba0fad7d7f52d5b8636 Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 18:07:30 -0400 Subject: [PATCH 13/18] cicd: remove dependency update template due to not making sense in most cases and enable blank issues to allow for edge cases --- .../ISSUE_TEMPLATE/04_dependency_update.yml | 69 ------------------- .github/ISSUE_TEMPLATE/config.yml | 2 +- 2 files changed, 1 insertion(+), 70 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/04_dependency_update.yml diff --git a/.github/ISSUE_TEMPLATE/04_dependency_update.yml b/.github/ISSUE_TEMPLATE/04_dependency_update.yml deleted file mode 100644 index f3fd529..0000000 --- a/.github/ISSUE_TEMPLATE/04_dependency_update.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: '๐Ÿ“ฆ Dependency Update' -description: Suggest updates to dependencies, tools, or versions -labels: [dependencies] -title: '[Dependency] ' - -body: - - type: markdown - attributes: - value: | - Suggest dependency or tooling updates. - - - type: input - id: package - attributes: - label: Package/Tool Name - description: What needs to be updated? - placeholder: e.g., ruff, pytest, Python version - validations: - required: true - - - type: input - id: current_version - attributes: - label: Current Version - placeholder: e.g., 0.1.0, >=3.9 - validations: - required: true - - - type: input - id: proposed_version - attributes: - label: Proposed Version - placeholder: e.g., 0.2.0, >=3.10 - validations: - required: true - - - type: textarea - id: reason - attributes: - label: Update Reason - description: Why should this be updated? - placeholder: | - Security fix, new features, performance improvements, etc. - validations: - required: true - - - type: checkboxes - id: breaking_change - attributes: - label: Breaking Change - options: - - label: This update would introduce breaking changes - required: false - - - type: checkboxes - id: security - attributes: - label: Security Update - options: - - label: This is a security-related update - required: false - - - type: textarea - id: additional - attributes: - label: Additional Information - description: Any other relevant details (migration guide, testing needed, etc.) - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5681ad4..1702c37 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,4 @@ -blank_issues_enabled: false +blank_issues_enabled: true contact_links: - name: โ“ Questions & Support url: https://github.com/56kyle/cookiecutter-robust-python/discussions From b817fc972e1588c5de48072b095e9fe6ea5b14be Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 18:09:24 -0400 Subject: [PATCH 14/18] cicd: remove form input redundantly asking if the issue creator is interested in creating a PR --- .github/ISSUE_TEMPLATE/03_documentation.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/03_documentation.yml b/.github/ISSUE_TEMPLATE/03_documentation.yml index 2d3cf4e..1440b8e 100644 --- a/.github/ISSUE_TEMPLATE/03_documentation.yml +++ b/.github/ISSUE_TEMPLATE/03_documentation.yml @@ -50,12 +50,3 @@ body: What changes would make this clearer or more helpful? validations: required: false - - - type: checkboxes - id: contribution - attributes: - label: Contribution - description: Are you willing to help improve this documentation? - options: - - label: I am willing to submit a PR to fix this documentation - required: false From 89fd85d87d94b6cead1e38f2689a32bfcdafb7cb Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 18 Oct 2025 19:32:29 -0400 Subject: [PATCH 15/18] cicd: simplify the bug report template --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 35 +++--------------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml index daae9eb..b8aa435 100644 --- a/.github/ISSUE_TEMPLATE/01_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -14,8 +14,8 @@ body: attributes: label: Is this a template issue or generated project issue? options: - - Template (generation, hooks, scripts) - - Generated Project (nox, dependencies, tooling) + - Template/Cookiecutter + - Generated Project validations: required: true @@ -34,26 +34,8 @@ body: attributes: label: Steps to Reproduce description: How can we reproduce this issue? - value: | - 1. - 2. - 3. - validations: - required: true - - - type: textarea - id: expected_behavior - attributes: - label: Expected Behavior - description: What did you expect to happen? - validations: - required: true - - - type: textarea - id: actual_behavior - attributes: - label: Actual Behavior - description: What actually happened? + placeholder: | + Either a minimum reproducible example or detailed steps. validations: required: true @@ -70,15 +52,6 @@ body: validations: required: true - - type: textarea - id: logs - attributes: - label: Relevant Logs/Output - description: Please paste any relevant error messages or logs - render: shell - validations: - required: false - - type: textarea id: additional attributes: From 95e58ba8fe9ea7913056d232da08deb9c66490df Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 11 Oct 2025 00:45:38 -0400 Subject: [PATCH 16/18] docs: update outdated information and generally improve accuracy --- README.md | 56 ++++++++++++------- docs/getting-started-template-contributing.md | 34 ++++++----- docs/philosophy.md | 17 +++++- docs/quickstart.md | 32 ++++++----- docs/usage.md | 23 ++++---- 5 files changed, 96 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 3940b08..8236d5d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# cookiecutter-robust-python +# Cookiecutter Robust Python A Python project template robust enough to follow up [cookiecutter-hypermodern-python] @@ -8,37 +8,44 @@ A Python project template robust enough to follow up [cookiecutter-hypermodern-p --- -## Usage/Installation +## Quick Start -The only prerequisite for using the template is to [install uv]. +### Prerequisites +The only requirement is [uv]. -From there just cd into the directory you want to create the project in and run: -```terminaloutput +### Create Your Project +Navigate to where you want to create your project and run: + +```bash uvx cruft create https://github.com/56kyle/cookiecutter-robust-python.git ``` -Which will prompt you for a few inputs before generating the project. -```terminaloutput -> [1/15] project_name (robust-python): my-repo-name -> ... + +This will prompt you for a few inputs to customize your project: +``` +[1/15] project_name (robust-python): my-awesome-project +[2/15] package_name (my_awesome_project): +[3/15] friendly_name (My Awesome Project): +... ``` -#### Local Setup +### Project Setup + +After generating your project, set it up for development: -Once you have generated your project, and preferably before opening the IDE, the normal workflow to setup everything would go as follows: -```terminaloutput -cd my-repo-name +```bash +cd my-awesome-project -# Pins the uv python version, generates/syncs a venv, etc. +# Set up virtual environment and install dependencies uvx nox -s setup-venv -# Sets up a git repo w/ a main/develop branch along with an initial commit of everything just generated. +# Initialize git repository with main/develop branches uvx nox -s setup-git -# Sets up the remote reference and ensures main/develop are pushed/synced. Requires that the remote exists (should be empty). -uvx nos -s setup-remote +# Set up remote repository (requires empty remote repo to exist) +uvx nox -s setup-remote ``` -You can also run `uvx nox -t env` for the same effect. +**Quick setup:** Run `uvx nox -t env` to execute all environment setup tasks at once. ## Most Notable Features @@ -46,9 +53,9 @@ You can also run `uvx nox -t env` for the same effect. - Built for supporting most OS's (windows, linux, macos) and all currently supported [python] versions - Platform agnostic CI/CD ([github], [gitlab], [bitbucket]) - CI/CD that parities local [nox] sessions for all [python] -- [maturin] support that can be at any time during the project's lifecycle +- [maturin] support that can be added at any time during the project's lifecycle - Designed to be a maintainable template over time through the use of automated demos and integration tests -- ... and much more! +- Rich documentation explaining tooling decisions and rationale For a general overview of where we are at with this template, please see the [roadmap](#roadmap) section. @@ -127,7 +134,7 @@ to Python's ecosystem overall. That being said, it's generally good practice to avoid the complexity of this dual language system unless you actually need the performance bump for your use case. However knowing ahead of time if performance will be an issue is rather tricky, and a much easier route is to just prepare as though you _might_ swap to it some day. -The [Robust Python Cookiecutter] includes a `include_rust_extensions` flag that not only toggles [maturin] vs a traditional Python package, +The [Robust Python Cookiecutter] includes an `add_rust_extension` flag that not only toggles [maturin] vs a traditional Python package, but that can be used in combination with [cruft] to swap to [maturin] at any time with just about no risk to CI/CD / etc. Additionally, the [Robust Python Cookiecutter] is designed with both normal and [monorepos] in mind. So whether you need to just add @@ -171,18 +178,25 @@ However, Open Source work is draining, and is especially so for a project templa I can guarantee that if the [Robust Python Cookiecutter] ever sees any number of users, I will immediately transfer it to an organization to enable at least a handful of trusted individuals to ensure the project is taken care of. +[bitbucket]: https://bitbucket.org [bitbucket-pipelines]: https://support.atlassian.com/bitbucket-cloud/docs/write-a-pipe-for-bitbucket-pipelines/ [cookiecutter]: https://cookiecutter.readthedocs.io/en/stable/ [cookiecutter-hypermodern-python]: https://github.com/cjolowicz/cookiecutter-hypermodern-python [cookiecutter-robust-python]: https://github.com/56kyle/cookiecutter-robust-python [cruft]: https://cruft.github.io/cruft/ +[github]: https://github.com [github-actions]: https://docs.github.com/en/actions +[gitlab]: https://gitlab.com [hypermodern python cookiecutter]: https://github.com/cjolowicz/cookiecutter-hypermodern-python [just]: https://github.com/casey/just?tab=readme-ov-fil [maturin]: https://github.com/PyO3/maturin +[monorepos]: https://en.wikipedia.org/wiki/Monorepo +[my personal fork]: https://github.com/56kyle/cookiecutter-hypermodern-python +[nox]: https://nox.thea.codes/ [noxfile]: https://github.com/56kyle/cookiecutter-robust-python/blob/main/%7B%7Bcookiecutter.project_name%7D%7D/noxfile.py [poetry]: https://python-poetry.org/docs/ [polars]: https://github.com/pola-rs/polars +[python]: https://www.python.org/ [robust python cookiecutter]: https://github.com/56kyle/cookiecutter-robust-python [ruff]: https://docs.astral.sh/ruff/ [rust]: https://www.rust-lang.org/learn diff --git a/docs/getting-started-template-contributing.md b/docs/getting-started-template-contributing.md index fa24464..aa93c17 100644 --- a/docs/getting-started-template-contributing.md +++ b/docs/getting-started-template-contributing.md @@ -10,32 +10,29 @@ To contribute to the template, you will need: 2. **Python 3.9+**: We recommend using a supported Python version. 3. **uv**: Our chosen dependency manager (see [Dependency Management (02)](topics/02_dependency-management.md)). Install `uv` globally or in a base environment following the official {uv-install}`uv installation guide<>`. 4. **Docker or Podman**: Required for testing the containerization aspects of the generated template (see [Container Build (11)](topics/11_container-build.md), [Dev Containers (17)](topics/17_dev-containers.md)). -5. **Task Automation Tools**: The template itself uses a `noxfile.py` to manage its own development and documentation build workflows. Install `nox`: - ```bash - uv add nox # Ensure you have uv first - ``` +5. **Task Automation Tools**: The template uses `noxfile.py` for development workflows. We use `uvx` to run nox without installing it globally. ## Setting up Your Development Environment 1. **Clone the Template Repository:** ```bash - git clone https://github.com/56kyle/cookiecutter-robust-python.git # **UPDATE WITH TEMPLATE REPO URL** + git clone https://github.com/56kyle/cookiecutter-robust-python.git cd cookiecutter-robust-python ``` 2. **Install Template Development Dependencies:** - The template needs dependencies to run its tests, build its documentation, and check its own code. + Install all dependency groups needed for template development: ```bash - uv sync # This installs deps from the template's pyproject.toml into a .venv + uv sync --all-groups ``` 3. **Install Pre-commit Hooks for the Template:** - To ensure your contributions meet the template's own code quality standards, install the pre-commit hooks for _this template repository_: + Set up pre-commit hooks to maintain code quality: ```bash - uvx nox -s pre-commit -- install # Installs hooks based on the template's .pre-commit-config.yaml + uvx nox -s pre-commit -- install ``` 4. **Set up Dev Container (Optional):** @@ -52,10 +49,10 @@ The template's own `noxfile.py` defines tasks for maintaining the template itsel ``` 2. **Run Core Template Checks:** - This includes linting the template's own Python files (like `noxfile.py`), checking formatting, etc. + Lint and format the template's own Python files: ```bash - uvx nox -s check # Runs the template's internal checks + uvx nox -s lint ``` 3. **Build Template Documentation:** @@ -66,15 +63,17 @@ The template's own `noxfile.py` defines tasks for maintaining the template itsel ``` 4. **Run Template Tests:** - (Assuming the template itself has tests, e.g., testing cookiecutter rendering or noxfile sessions). + Test the template's generation functionality: ```bash - uvx nox -s test # Runs tests for the template itself + uvx nox -s test ``` -5. **Run All Checks and Tests:** +5. **Generate Demo Project:** + Create a demo project to test template functionality: + ```bash - uvx nox # Runs the default sessions defined in noxfile.py (often check and test) + uvx nox -s generate-demo ``` ## Updating Template Version and Releasing @@ -82,10 +81,9 @@ The template's own `noxfile.py` defines tasks for maintaining the template itsel This template uses Calendar Versioning (YYYY.MM.DD) for its own releases. 1. **Ensure Your Branch is Up-to-date:** Pull the latest changes from the main branch. -2. **Run Commitizen Bump for the Template:** (Assuming Commitizen is used for template versioning). Use `uvx` to run Commitizen against the template: +2. **Release the Template:** ```bash - uvx cz bump --changelog # Follow prompts, generates tag/changelog entry - # Alternatively, specify increment e.g., uvx cz bump --changelog --increment major_version_zero + uvx nox -s release-template # Uses Commitizen to bump version and create tags ``` This will update the version string(s) (e.g., in `__version__.py` or `conf.py`), create a Git tag, and potentially update the changelog. 3. **Push Changes and Tags:** Push the commits and the newly created tag to the template repository: diff --git a/docs/philosophy.md b/docs/philosophy.md index 8abd7a3..749a1d5 100644 --- a/docs/philosophy.md +++ b/docs/philosophy.md @@ -40,6 +40,19 @@ These principles form the basis for the evaluation criteria and justifications d ## Solved Issues -The [Robust Python Cookiecutter] also exists to solve a few key issues that were omnipresent in [cookiecutter-hypermodern-python]. +The Robust Python Cookiecutter addresses several key challenges that existed in the original cookiecutter-hypermodern-python: -### +### Template Update Propagation +One major issue with traditional cookiecutter workflows is the difficulty of propagating template updates to existing projects. The Robust Python Cookiecutter includes built-in support for Cruft, enabling projects to receive template updates through manageable pull requests rather than manual recreation. + +### Project Domain Expansion +While pure Python projects are common, many modern Python packages benefit from optional Rust extensions for performance-critical components. The template includes configurable Rust support via Maturin, allowing projects to start as pure Python and add Rust components when needed without architectural disruption. + +### Documentation of Decisions +Rather than just providing tooling, this template documents the reasoning behind each tool choice. This enables maintainers to evaluate whether decisions remain valid as the ecosystem evolves, supporting long-term template maintenance. + +### CI/CD Vendor Independence +The template is designed to work across GitHub Actions, GitLab CI, and Bitbucket Pipelines by centralizing logic in Nox sessions rather than platform-specific workflow syntax. This ensures consistency and portability. + +### Long-term Maintenance Strategy +The template includes comprehensive testing infrastructure with automated demo projects and integration tests, helping ensure changes don't break the generation process and providing confidence in template evolution. diff --git a/docs/quickstart.md b/docs/quickstart.md index 8d7d1b2..aedfc41 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -1,8 +1,8 @@ # Quickstart -This guide provides the absolute minimum steps to get up and running with a project generated by `cookiecutter-robust-python`. It's for developers who want to start coding and use the core workflows right away. +This guide covers the essential steps to get up and running with a project generated by `cookiecutter-robust-python`. Perfect for developers who want to start coding with the core workflows immediately. -For detailed explanations of the tools and the philosophy, see the full documentation. +For detailed tool explanations and project philosophy, see the full documentation. --- @@ -23,10 +23,10 @@ Navigate to the directory you want to create your new project in. cd ~/path/to/my/repos ``` -Generate your project from the template using the given command: +Generate your project from the template: ```bash -uvx cookiecutter gh:56kyle/cookiecutter-robust-python +uvx cruft create https://github.com/56kyle/cookiecutter-robust-python.git ``` Follow the prompts to customize your project. @@ -39,13 +39,13 @@ Navigate to your new project directory: cd your-project-slug ``` -Install dependencies and create the virtual environment using `uv sync`: +Set up the virtual environment and install dependencies: ```bash -uv sync +uvx nox -s setup-venv ``` -This command reads `pyproject.toml`, resolves dependencies from `uv.lock`, installs them into a standard virtual environment (`.venv` by default), and prepares the project. +This sets up a virtual environment with uv and installs all development dependencies. ## 4. Install Pre-commit Hooks @@ -59,25 +59,27 @@ Now, `git commit` will automatically run code formatting and basic linting check ## 5. Run Checks and Tests -Execute the template's core quality checks and tests using `nox` from the project root: +Run quality checks and tests using the nox sessions: ```bash -uvx nox -s check # Runs linters, type checker, security checks -uvx nox -s test # Runs tests and coverage -uvx nox # Runs default tasks (often check and test) +uvx nox -s lint-python # Run Ruff linting +uvx nox -s typecheck # Run Pyright type checking +uvx nox -s security-python # Run Bandit and pip-audit +uvx nox -s tests-python # Run pytest with coverage ``` -These commands use the Task Automation layer defined in `noxfile.py` and ensure checks run correctly in isolated environments using your specified Python version. +These commands run in isolated environments with the proper Python versions as defined in `noxfile.py`. ## 6. Build Documentation -If you need to view the project's generated documentation locally: +Build and serve the project documentation locally: ```bash -uvx nox -s docs +uvx nox -s docs # Build and serve with live reload +uvx nox -s build-docs # Build only (static files) ``` -This builds the project documentation website into the `docs/_build/html` directory. +The `docs` session builds and serves documentation with automatic reload on changes. ## Next Steps diff --git a/docs/usage.md b/docs/usage.md index ce862b1..4800ef7 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -57,14 +57,14 @@ The template provides a suite of tools for maintaining code quality, integrated - **Format Code:** Code formatting and import sorting is handled by {ruff}`Ruff<>` ([Topic 03](topics/03_code-formatting.md)) using the configuration in `.ruff.toml`. Your pre-commit hooks automatically fix these on commit. To format manually: ```bash - uvx nox -s lint # Includes a formatting check - # Or directly via uv run (often requires specific args): uv run ruff format . + uvx nox -s format-python # Format Python code with Ruff + uvx nox -s lint-python # Lint Python code with Ruff (includes formatting check) ``` - **Lint Code:** Linting checks for code style (beyond formatting), errors, potential bugs, and code smells using {ruff}`Ruff<>` and {pydocstyle}`pydocstyle<>` ([Topic 04](topics/04_code-linting.md)). Run checks via Task Automation: ```bash - uvx nox -s lint + uvx nox -s lint-python ``` - **Type Check Code:** Static type analysis using {pyright}`Pyright<>` ([Topic 05](topics/05_type-checking.md)) based on `pyrightconfig.json`: @@ -76,12 +76,15 @@ The template provides a suite of tools for maintaining code quality, integrated - **Security Checks:** Scan for dependency vulnerabilities with {pip-audit}`pip-audit<>` and code security issues with {bandit-bandit}`Bandit<>` ([Topic 08](topics/08_security-checks.md)): ```bash - uvx nox -s security + uvx nox -s security-python ``` - **Run All Core Checks:** ```bash - uvx nox -s check + # Run individual checks: + uvx nox -s format-python lint-python typecheck security-python + # Or use quality tag: + uvx nox -t quality ``` ## Testing @@ -91,7 +94,7 @@ The template uses {pytest-pytest-cov}`pytest<>` ([Topic 06](topics/06_testing-co - **Write Tests:** Place test files (e.g., `test_*.py` or `*_test.py`) in the `tests/` directory. - **Run Tests with Coverage:** ```bash - uvx nox -s test + uvx nox -s tests-python ``` This runs tests across applicable Python versions and measures code coverage with {coveragepy-coverage}`coverage.py<>` ([Topic 06](topics/06_testing-coverage.md)) based on `.coveragerc`. Reports are generated (JUnit XML for CI, terminal summary). @@ -101,11 +104,11 @@ Create and publish your package following Python standards ([Topic 09](topics/09 - **Build Package:** Create standard `sdist` (`.tar.gz`) and `wheel` (`.whl`) files in the `dist/` directory. ```bash - uvx nox -s build + uvx nox -s build-python ``` - **Publish Package:** Upload built packages using {uv}`uv<>`'s publish command. Requires credentials set via environment variables (e.g., `UV_TOKEN` or `TWINE_API_KEY`). ```bash - uvx nox -s publish + uvx nox -s publish-python ``` ## Containerization @@ -114,7 +117,7 @@ Define and build Docker container images for your application ([Topic 11](topics - **Build Application Image:** Uses the `Dockerfile` in the project root. ```bash - uvx nox -s container + uvx nox -s build-container ``` - **Run with Docker Compose:** ```bash @@ -128,7 +131,7 @@ Use {commitizen}`Commitizen<>` ([Topic 12](topics/12_task-automation.md)) via {u - **Bump Version:** Automatically determine the next version (major, minor, patch, etc.) based on commit messages since the last tag, update version strings, and create a Git tag. ```bash - uvx nox -s release -- [major|minor|patch] # e.g., uvx nox -s release -- minor + uvx nox -s setup-release -- [major|minor|patch] # e.g., uvx nox -s setup-release -- minor ``` Follow the prompts. Requires following {conventional-commits}`Conventional Commits<>`. Pushing the resulting tag often triggers the CD pipeline. From 93a4123b83fa1810d629c379f7084ea3bb5ddd7c Mon Sep 17 00:00:00 2001 From: Kyle Oliver Date: Sat, 11 Oct 2025 00:50:49 -0400 Subject: [PATCH 17/18] docs: fix two broken link references --- docs/our-chosen-toolchain.md | 2 +- docs/usage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/our-chosen-toolchain.md b/docs/our-chosen-toolchain.md index 787e98d..c662115 100644 --- a/docs/our-chosen-toolchain.md +++ b/docs/our-chosen-toolchain.md @@ -117,7 +117,7 @@ The true power of this template lies in how these chosen tools work together coh 1. **Configuration:** Defined primarily in `pyproject.toml` and separate tool config files ([01](topics/01_project-structure.md)). 2. **Dependency/Environment Management:** Handled efficiently by {uv}`uv<>`, creating standard virtual environments and managing packages based on `pyproject.toml` and `uv.lock` ([02](topics/02_dependency-management.md)). 3. **Task Automation:** Orchestrated by {nox}`Nox<>`, calling commands from other tools via `uv run` (or `uvx`), providing the single interface for developers and CI/CD to run workflows ([12](topics/12_task-automation.md)). -4. **Code Quality & Testing:** Ensured by {ruff}`Ruff<>` (formatting/linting), {pyright}`Pyright<>` (typing), {pip-audit}`pip-audit<>` (dep security), and {bandit-bandit}`Bandit<>` (code security), along with {pytest-pytest-cov}`pytest<>`/{coveragepy-coverage}`coverage.py<>` for testing. These tools are installed via {uv}`uv<>` and executed via Task Automation ([03](topics/03_code-formatting.md)-[08](topics/08_security-checks.md), orchestrated by [12](topics/12_task-automation.md)). +4. **Code Quality & Testing:** Ensured by {ruff}`Ruff<>` (formatting/linting), {pyright}`Pyright<>` (typing), {pip-audit}`pip-audit<>` (dep security), and {bandit-bandit}`Bandit<>` (code security), along with {pytest-pytest-cov}`pytest<>`/{coveragepy}`coverage.py<>` for testing. These tools are installed via {uv}`uv<>` and executed via Task Automation ([03](topics/03_code-formatting.md)-[08](topics/08_security-checks.md), orchestrated by [12](topics/12_task-automation.md)). 5. **Packaging & Distribution:** Artifacts created via {uv}`uv<>` build using selected backends, and published via {uv}`uv<>` publish, orchestrated by Task Automation ([09](topics/09_packaging-build.md)-[10](topics/10_packaging-publish.md)). 6. **Containerization:** Defined by `Dockerfile`, built by {docker}`Docker<>`/{podman}`Podman<>` (often via `uv` installing deps inside), orchestrated by Task Automation. Local multi-container setups managed by {docker}`Docker Compose<>` ([11](topics/11_container-build.md), [15](topics/15_compose-local.md)). 7. **Automated Workflows:** Triggered by CI/CD platforms (configured to call Task Automation commands), handling matrices, secrets, and reporting ([13](topics/13_ci-orchestration.md)-[14](topics/14_cd-orchestration.md)). diff --git a/docs/usage.md b/docs/usage.md index 4800ef7..34f9abf 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -96,7 +96,7 @@ The template uses {pytest-pytest-cov}`pytest<>` ([Topic 06](topics/06_testing-co ```bash uvx nox -s tests-python ``` - This runs tests across applicable Python versions and measures code coverage with {coveragepy-coverage}`coverage.py<>` ([Topic 06](topics/06_testing-coverage.md)) based on `.coveragerc`. Reports are generated (JUnit XML for CI, terminal summary). + This runs tests across applicable Python versions and measures code coverage with {coveragepy}`coverage.py<>` ([Topic 06](topics/06_testing-coverage.md)) based on `.coveragerc`. Reports are generated (JUnit XML for CI, terminal summary). ## Building and Publishing From 198e4553a3c34e3c0aa53f16064a6b60403acdb6 Mon Sep 17 00:00:00 2001 From: 56kyle <56kyleoliver@gmail.com> Date: Thu, 23 Oct 2025 17:44:01 -0700 Subject: [PATCH 18/18] docs: fix reasoning for using uvx in getting-started-template-contributing.md --- docs/getting-started-template-contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-template-contributing.md b/docs/getting-started-template-contributing.md index aa93c17..433ba41 100644 --- a/docs/getting-started-template-contributing.md +++ b/docs/getting-started-template-contributing.md @@ -10,7 +10,7 @@ To contribute to the template, you will need: 2. **Python 3.9+**: We recommend using a supported Python version. 3. **uv**: Our chosen dependency manager (see [Dependency Management (02)](topics/02_dependency-management.md)). Install `uv` globally or in a base environment following the official {uv-install}`uv installation guide<>`. 4. **Docker or Podman**: Required for testing the containerization aspects of the generated template (see [Container Build (11)](topics/11_container-build.md), [Dev Containers (17)](topics/17_dev-containers.md)). -5. **Task Automation Tools**: The template uses `noxfile.py` for development workflows. We use `uvx` to run nox without installing it globally. +5. **Task Automation Tools**: The template uses `noxfile.py` for development workflows. We use `uvx` to run `nox` so that it automatically installs if needed. ## Setting up Your Development Environment