Guida all’Automazione dei Template
Cookiecutter • Estensioni Jinja2 • Cruft • Hook • Integrazione CI/CD
1. Setup e Installazione BASE
Nota Fondamentale: Installare cruft installa automaticamente cookiecutter come dipendenza. Non serve installarli separatamente.
pip install cruft jinja2-strcase jinja2-time
Per testare il template localmente senza prompt: cruft create . --no-input
2. Variabili Interne e Nidificate LOGICA
Usa le variabili Nidificate per derivare valori da altri input e le variabili Interne (che iniziano con _) per nascondere configurazioni tecniche all’utente.
{
"project_name": "Mio Progetto",
"project_slug": "{{ cookiecutter.project_name | to_snake }}",
"_extensions": [
"jinja2_strcase.StrcaseExtension",
"jinja2_time.TimeExtension"
],
"_copy_without_render": ["*.png", "assets/*"]
}
3. Estensioni di Potenza FILTERING
Conversione Case (strcase)
| Filtro | Risultato (Input: “Auth API”) |
|---|---|
to_snake |
auth_api |
to_pascal |
AuthApi |
to_camel |
authApi |
to_constant |
AUTH_API |
Date e Tempo (time)
Esempio: Copyright (c) {{ now('local', '%Y') }} per licenze che si aggiornano da sole.
4. Manutenzione con Cruft SYNC
Cruft collega il tuo progetto al template originale tramite il file .cruft.json, permettendo aggiornamenti futuri senza ricreare tutto.
| Comando | Azione |
|---|---|
cruft check |
Verifica se il template è stato aggiornato. |
cruft diff |
Mostra le differenze tra template e progetto. |
cruft update |
Applica le novità del template al tuo codice. |
5. Hook Python AUTOMAZIONE
Script Python nella cartella hooks/ che vengono eseguiti durante la generazione.
# hooks/post_gen_project.py
import os, subprocess
# Inizializza Git automaticamente
subprocess.call(['git', 'init'])
if "{{ cookiecutter.use_docker }}" == "n":
os.remove("Dockerfile")
6. Debug e Metadati Interni DEBUG
Accedi a queste variabili per conoscere l’origine del template. Dump completo: {{ cookiecutter | dictsort }}
| Variabile | Contenuto |
|---|---|
_template |
URL o path sorgente del template. |
_output_dir |
Path assoluto dove viene creato il progetto. |
7. Integrazione GitLab CI/CD DEVOPS
Aggiungi questo al tuo .gitlab-ci.yml per avvisarti se il progetto è rimasto indietro rispetto al template.
check_template_sync:
stage: test
image: python:3.11-slim
script:
- pip install cruft
- cruft check
allow_failure: true
8. Consigli da Esperto
- Raw Blocks: Usa
{% raw %}{{ var }}{% endraw %}per file React/Vue/Terraform. - Nomi Cartelle: Chiama la cartella root del template
{{cookiecutter.project_slug}}. - Commenti JSON: Dato che il JSON non supporta i commenti, usa chiavi come
"_comment": "testo".