Manteniendo al día el archivo .env

ssh terminal develop python git

Variables de entorno con archivos .env

Actualmente es común y una buena práctica mantener nuestras variables que usamos en nuestros proyectos en archivos ".env". Estos archivos .env son utilizados en frameworks como RoR, Laravel, Django, entre otros, para manejar variable de entorno de nuestra aplicación, evitando hacer un hardcoding de sus valores en nuestros archivos y evitar configuraciones extras como el caso de los virtualenv en python con los hooks postactivate y predeactivate.

El problema

Es bien sabido que NO debemos versionar nuestros archivos .env, con valores ya sea de desarrollo o de producción y por lo mismo es una buena practica mantener un archivo env de ejemplo que SI versionaremos. En este caso nuestro archivo de ejemplo se llama .env.example, en este archivo mantendremos las variables que usamos en nuestro proyecto pero sin los valores reales, pueden o no tener valores de ejemplo.

El problema surge cuando queremos mantener sincronizados nuestro archivo .env de desarrollo con el archivo de ejemplo .env.example.
Podemos olvidar que agregamos alguna nueva variable a nuestro archivo .env y al subir nuestros cambios al sistema de versionamiento nuestros compañeros no verán las nuevas variables que agregamos nosotros.

Una solución

Vamos a aprovechar los hooks de Git, siendo mas especificos, el hook de pre-commit, este hook nos permite realizar una acción previa a realizar un commit en nuestro repositorio local, en este caso ejecutaremos un script de python que:

Para ello en nuestro repositorio del proyecto donde queremos verificar esto, en nuestro directorio .git accediendo a el encontramos un directorio llamado hooks donde encontramos los hooks de ejemplo que git puede usar.
Modificaremos el que se llama pre-commit.sample y lo modificaremos para que ejecute nuestro script de python que realiza la comparación.

Para facilitar la configuración de esto cree un script que automatice la descarga de estos scripts y configuracion de ellos, siempre pueden revisar el contenido de estos scripts antes de descargarlos o ejecutarlos, estan alojados en github.

Para la configuración automática solo deben ejecutar el siguiente comando en terminal, posicionados en el directorio de nuestro proyecto que contiene el directorio .git:

curl https://gist.githubusercontent.com/Jaxmetalmax/\
0816b7ec781686fd60687542f09a9962/raw/\
7dfff0837e05529def0f90dc984bccda48f94976/installcheckenv.sh | bash

el contenido del script que ejecutamos para configurar nuestro hook pre-commit

con esto cuando hagamos un commit en nuestro repositorio primero revisará el estado de los archivos, si todo está correcto el commit se realizará, de lo contrario mostrará un mensaje diciendo que variables faltan o si alguno de los archivos no existe.

Si queremos "evitar" esta comprobación podemos ejecutar lo siguiente al hacer un commit:

git commit --no-verify