Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
c9f5d67
modified cookiecutter to fit into baseline app development needs
GameSetAndMatch Jun 6, 2023
e17be1c
updated README
GameSetAndMatch Jun 6, 2023
6ec31c8
updated readme
GameSetAndMatch Jun 6, 2023
a3f233b
Update README.md
GameSetAndMatch Jun 6, 2023
64c8766
added teamwork secrets as strings
GameSetAndMatch Jun 6, 2023
6602aaa
Merge branch 'main' of github.com:Baseline-quebec/baseline-app-cookie…
GameSetAndMatch Jun 6, 2023
71c40a7
commented teamwork integration
GameSetAndMatch Jun 6, 2023
2906c06
added teamwork back to cookie cutter
GameSetAndMatch Jun 6, 2023
ea0b2c0
commented secrets
GameSetAndMatch Jun 7, 2023
582a6f5
added token as string
GameSetAndMatch Jun 7, 2023
e44ed07
removed secrets
GameSetAndMatch Jun 7, 2023
0302490
test secrets github
GameSetAndMatch Jun 7, 2023
36c58c0
added secret variables in a txt file for teamwork
GameSetAndMatch Jun 7, 2023
693b534
removed variables and added documentation on how to set the variables
GameSetAndMatch Jun 7, 2023
9630607
removed variables file
GameSetAndMatch Jun 7, 2023
3a31b0a
added teamwork step in the README.md
GameSetAndMatch Jun 7, 2023
70d5778
moved dependabot to increase instead
GameSetAndMatch Jul 28, 2023
5544a2e
Update precommit and customize linter rules (#1)
jsleb333 Sep 7, 2023
39b02f2
Merge branch 'main' of github.com:radix-ai/poetry-cookiecutter into dev
GameSetAndMatch Jan 5, 2024
a34df92
Merge pull request #3 from Baseline-quebec/dev
GameSetAndMatch Jan 5, 2024
6e56c2f
updated values
GameSetAndMatch Jan 5, 2024
a03c952
Merge branch 'dev'
GameSetAndMatch Jan 5, 2024
273a334
removed endif
GameSetAndMatch Jan 5, 2024
5d45043
add raw condition to .github/workflows/teamwork.yml
GameSetAndMatch Jan 5, 2024
cedb8fc
update postgenproject
GameSetAndMatch Jan 5, 2024
127365b
update linting
GameSetAndMatch Jan 5, 2024
4f08bf5
update readme
GameSetAndMatch Jan 5, 2024
c70f91f
update README
GameSetAndMatch Jan 5, 2024
d836eb2
removed strings
GameSetAndMatch Jan 5, 2024
4a354e6
test-cookie-cutter
GameSetAndMatch Jan 5, 2024
535c341
removed error
GameSetAndMatch Jan 5, 2024
ccc4b07
Merge pull request #4 from Baseline-quebec/insights-from-librairie-ma…
GameSetAndMatch Jan 5, 2024
9a24851
updated teamwork uri
GameSetAndMatch Jan 5, 2024
9a873fe
Merge branch 'insights-from-librairie-martin-update-30696964'
GameSetAndMatch Jan 5, 2024
153a100
updated uri
GameSetAndMatch Jan 5, 2024
14e1d67
added ,
GameSetAndMatch Jan 5, 2024
ce3d7b0
updated repo with geothentic-vrp preferences
GameSetAndMatch Feb 6, 2024
0de9a8e
Merge pull request #5 from Baseline-quebec/update-coverage
GameSetAndMatch Feb 6, 2024
28c95a5
updated with ruff rules
GameSetAndMatch Feb 6, 2024
ebfa3f4
Merge branch 'update-coverage'
GameSetAndMatch Feb 6, 2024
5724f2f
Merge remote-tracking branch 'poetry-cookiecutter/main' into internal…
GameSetAndMatch May 31, 2024
284c3e9
feat(project.py): update with new poetry cookiecutter update
GameSetAndMatch May 31, 2024
bfbbeee
feat(project.py): updated with custom parameters
GameSetAndMatch May 31, 2024
0443ab7
feat(test.yml): removed support for package
GameSetAndMatch May 31, 2024
88749b4
feat(test.yml): removed pacakge
GameSetAndMatch May 31, 2024
f2349dd
fix(test.yml): removed docker push
GameSetAndMatch May 31, 2024
e52ba5a
feat(project.py): removed everything about private package
GameSetAndMatch May 31, 2024
491f1fa
fix(README.md): fixed jinja template
GameSetAndMatch Jun 3, 2024
b42b3eb
fix(README.md): fix private
GameSetAndMatch Jun 3, 2024
b33528f
fix(devcontainer.json): Add warn level everywhere
GameSetAndMatch Jun 3, 2024
bd018b5
fix(pyproject.toml): updated with lint.pylint
GameSetAndMatch Jun 3, 2024
76ce8e4
fix(pyproject.toml): updated ruff
GameSetAndMatch Jun 3, 2024
dcfc7ef
fix(pyproject.toml): removed lint ruff
GameSetAndMatch Jun 3, 2024
641c59f
fix(pyproject.toml): removed furb
GameSetAndMatch Jun 3, 2024
779aa4f
fix(pyproject): fixed assert in tests
GameSetAndMatch Jun 4, 2024
ea4b062
refactor(cookiecutter.json): made strict mode first
GameSetAndMatch Jun 4, 2024
378d587
fix(README.md): removed unused doc
GameSetAndMatch Jun 4, 2024
5e76dbf
fix(project): reformated files to pass ruff check
GameSetAndMatch Jun 4, 2024
4bb4ccf
fix(pyproject.toml): removed rule that conflicts with the formatter
GameSetAndMatch Jun 4, 2024
89295b5
fix(project): fixed files so they pass ruff
GameSetAndMatch Jun 4, 2024
5137d5f
Update cli.py
GameSetAndMatch Jun 4, 2024
6f96bd3
Merge pull request #8 from Baseline-quebec/internal-changes
GameSetAndMatch Jun 4, 2024
ec77b08
fix(docker-compose.yml): add dev service
GameSetAndMatch Jun 7, 2024
8aefd99
fix(docker-compose.yml): removed duplicated text
GameSetAndMatch Jun 7, 2024
2a039e1
fix(docker-compose.yml): add local port to dev service
GameSetAndMatch Jun 7, 2024
44d7871
Merge pull request #9 from Baseline-quebec/add-dev-docker-compose
GameSetAndMatch Jun 7, 2024
aa71fe2
feat(pyproject.toml): add ruff rule to allow unused *args and **kwarg…
jsleb333 Jun 18, 2024
1d1d945
feat(project): update with base repo
GameSetAndMatch Sep 26, 2024
e4c0e8e
Merge pull request #11 from Baseline-quebec/update-with-base-repo
GameSetAndMatch Sep 30, 2024
e13dc5f
Update .pre-commit-config.yaml to avoid problems with docs and PDF (#13)
jsleb333 Jan 16, 2025
03f582f
feat(pre-commit): update precommit hooks (#15)
jsleb333 May 2, 2025
0f2673d
Small updates (#16)
Vince250598 Jun 2, 2025
fcea9b5
fix(pyproject.toml): remove src from testpaths (#17)
Vince250598 Jun 6, 2025
b76c2bb
feat: sprint 2 — cookiecutter enhancements (14 items) (#19)
davebulaval Feb 21, 2026
3d4367e
docs: remove emojis from README and add how-to section (#20)
davebulaval Feb 21, 2026
c112ec8
feat: sprint 3 — template improvements (10 items) (#21)
davebulaval Feb 21, 2026
37cd145
docs: improve README, CONTRIBUTING, and add CLAUDE.md template (#22)
davebulaval Feb 21, 2026
4a0fbc1
feat: ajouter detect-secrets au pre-commit pour bloquer les credentia…
davebulaval Feb 24, 2026
7900573
docs: documenter detect-secrets dans CONTRIBUTING et CHANGELOG (#25)
davebulaval Feb 24, 2026
1e9237e
feat: enhance .editorconfig and add .gitattributes
Feb 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Poetry Cookiecutter",
"image": "mcr.microsoft.com/vscode/devcontainers/python:3.10",
"name": "Baseline app Cookiecutter",
"image": "mcr.microsoft.com/vscode/devcontainers/python:3.12",
"onCreateCommand": "pip install commitizen cruft pre-commit && pre-commit install --install-hooks",
"remoteUser": "vscode",
"customizations": {
Expand Down
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @davebulaval @dpothier
42 changes: 42 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
version: 2

updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
commit-message:
prefix: "ci"
include: scope
groups:
ci-dependencies:
patterns:
- "*"
update-types:
- "minor"
- "patch"
ci-major-updates:
patterns:
- "*"
update-types:
- "major"
- package-ecosystem: pip
directory: /
schedule:
interval: monthly
commit-message:
prefix: "chore"
prefix-development: "build"
include: scope
groups:
dependencies:
patterns:
- "*"
update-types:
- "minor"
- "patch"
major-updates:
patterns:
- "*"
update-types:
- "major"
14 changes: 14 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## Summary

-

## Test plan

- [ ] `pytest tests/ -v` passes locally
- [ ] YAML files are valid
- [ ] Generated project passes `ruff check` and `ruff format --check`

## Checklist

- [ ] I have performed a self-review of my changes
- [ ] PR title follows [Conventional Commits](https://www.conventionalcommits.org/)
30 changes: 30 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: CI

on:
push:
branches: [main]
pull_request:

jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.12", "3.13"]

name: Unit tests — Python ${{ matrix.python-version }}

steps:
- uses: actions/checkout@v6

- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip

- name: Install dependencies
run: pip install cookiecutter pytest pyyaml

- name: Run tests
run: pytest tests/ -v
19 changes: 19 additions & 0 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: PR

on:
pull_request:
types: [edited, opened, reopened, synchronize]

jobs:
title:
runs-on: ubuntu-latest
name: Check PR title
steps:
- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Check PR title
run: |
pip install commitizen
cz check --message "${{ github.event.pull_request.title }}"
39 changes: 20 additions & 19 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Test
name: Integration

on:
push:
Expand All @@ -13,34 +13,45 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
project-type: ["app", "package"]
python-version: ["3.12", "3.13"]
include:
- python-version: "3.12"
variant: full
extra-context: '{"project_type": "app", "project_name": "My Project", "python_version": "3.12", "with_fastapi_api": "1", "with_typer_cli": "1", "with_sentry": "0"}'
- python-version: "3.13"
variant: minimal
extra-context: '{"project_type": "app", "project_name": "My Project", "python_version": "3.13", "with_fastapi_api": "0", "with_typer_cli": "0", "with_sentry": "0"}'

name: Python ${{ matrix.python-version }} ${{ matrix.project-type }}
name: Python ${{ matrix.python-version }} ${{ matrix.variant }}

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
path: template

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.9"
python-version: "3.12"
cache: pip

- name: Scaffold Python project
run: |
pip install --no-input cruft
cruft create --no-input --extra-context '{"project_type": "${{ matrix.project-type }}", "project_name": "My Project", "python_version": "3.9", "__docker_image":"radixai/python-gpu:$PYTHON_VERSION-cuda11.8", "with_fastapi_api": "1", "with_typer_cli": "1"}' ./template/
cruft create --no-input --extra-context '${{ matrix.extra-context }}' ./template/

- name: Verify cruft link
run: cruft check
working-directory: ./my-project/

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 21
node-version: 22

- name: Install @devcontainers/cli
run: npm install --location=global @devcontainers/cli@0.58.0
run: npm install --location=global @devcontainers/cli@latest

- name: Start Dev Container with Python ${{ matrix.python-version }}
run: |
Expand All @@ -56,13 +67,3 @@ jobs:

- name: Test project
run: devcontainer exec --workspace-folder my-project poe test

- name: Build app Docker image
if: ${{ matrix.project-type == 'app' }}
uses: docker/build-push-action@v5
with:
build-args: |
SOURCE_BRANCH=${{ env.GITHUB_REF }}
SOURCE_COMMIT=${{ env.GITHUB_SHA }}
context: ./my-project/
target: app
27 changes: 27 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,19 @@ default_install_hook_types: [commit-msg, pre-commit]
default_stages: [commit, manual]
fail_fast: true
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-yaml
args: [--allow-multiple-documents, --unsafe]
- id: check-toml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/rhysd/actionlint
rev: v1.7.11
hooks:
- id: actionlint
files: ^\.github/workflows/
- repo: local
hooks:
- id: commitizen
Expand All @@ -12,3 +25,17 @@ repos:
require_serial: true
language: system
stages: [commit-msg]
- id: ruff-check
name: ruff check
entry: ruff check
args: ["--force-exclude"]
language: system
types_or: [python, pyi]
pass_filenames: false
- id: ruff-format
name: ruff format
entry: ruff format
args: [--force-exclude, --check]
language: system
types_or: [python, pyi]
pass_filenames: false
80 changes: 80 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

### Added

- `CLAUDE.md` template for AI-assisted development in generated projects
- `pull_request_template.md` for the cookiecutter repo itself
- `CODEOWNERS` file (@davebulaval, @dpothier)
- Fast CI workflow (`ci.yml`) — unit tests on Python 3.12 + 3.13 (~20s)
- PR title check workflow (`pr.yml`) — conventional commits validation
- Integration test matrix — full (FastAPI + Typer) and minimal (bare) variants
- Cruft link verification step in integration tests
- codespell linter in pre-commit and pyproject.toml
- MkDocs Material for documentation (replaces pdoc)
- PR title check workflow for generated projects (`pr.yml`)
- `detect-secrets` (Yelp) pre-commit hook to block accidental credential commits
- `actionlint` pre-commit hook for GitHub Actions validation
- `ruff-check` and `ruff-format` pre-commit hooks for template code
- `pre-commit-hooks` (check-yaml, check-toml, end-of-file-fixer, trailing-whitespace)
- 71 unit tests for template generation (up from 0)

### Changed

- Conditionalized generated README sections (API, CLI, Docker) with Jinja
- Rewrote root README with CI badges, project structure, and developer guide
- Rewrote generated README: concise, dynamic, references MkDocs
- Modernized integration workflow: checkout v6, pip cache, renamed to "Integration"
- Fixed generated CONTRIBUTING.md typos and added codespell to tools list
- Fixed `.env.sample` reference to `.env.example` in generated README

### Fixed

- ruff lint errors in generated code (FURB171, PLC0415, PLR2004, PLR6201, B007, PERF102)
- codespell false positives (Jupyter) and real typos (developpement, developpers, formater)
- Jinja whitespace in cli.py imports causing ruff format failure
- Unused `import sys` and stale noqa comments (S310, BLE001) in cli.py
- Coverage failure in minimal config (added settings test)

---

## Sprint 2 — Cookiecutter Enhancements

### Added

- pydantic-settings integration (replaces python-decouple) with `.env.example`
- Pydantic models (`models.py`) and service layer (`services.py`) stubs
- Rich API stubs: health endpoint, CRUD items, exception handlers, request logging middleware
- Rich CLI stubs: `info` command with Rich table, `greet` command with `Annotated`
- `.editorconfig` for cross-IDE consistency
- `.vscode/launch.json` with FastAPI, pytest, and current-file debug configs
- `CHANGELOG.md` for generated projects (Keep a Changelog format)
- `pre_gen_project.py` hook for input validation
- Sentry SDK integration (`with_sentry` parameter)
- Multi-Python CI matrix (tests on selected version + 3.13)
- Docker `HEALTHCHECK` instruction (conditional on FastAPI)
- pytest-asyncio support (conditional on FastAPI)

### Changed

- Replaced python-decouple with pydantic-settings
- Rewrote `api.py` with dependency injection, structured error handling, and logging
- Rewrote `cli.py` with `@app.callback()` and `Annotated` pattern
- Rewrote BDD test stubs for new API and CLI
- Renamed `.env_sample` to `.env.example`
- Removed Teamwork integration (workflow + PR template link)

### Fixed

- 5 P0 bugs that broke template generation
- pytest-bdd feature file paths
- pre-commit hook compatibility (pygrep-hooks tag, `--pytest-test-first`)
- ruff preview mode compliance (DOC201, DOC501, FAST001, PLR6301, etc.)
- mypy strict mode compliance
- typeguard conflict with typer.Context
Loading