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".

lu122131

Luca Bortolotti Lentsch Engineer And Photographer From Lombardia Currently Around the World #lu122131ph