Saltar al contenido

Lo generado y lo versionado

Qué entra en el control de versiones y qué no, por qué el directorio de destino de Cargo es tan grande, la discusión honesta sobre los proyectos nativos de móvil, y las claves que nunca deben viajar en el repositorio.

Lo generado, que es casi todo el peso

.gitignore
# Rust: los artefactos de compilaciónsrc-tauri/target/# el frontenddist/node_modules/# los recursos que produce tu propio proceso de datos, si lo tienessrc-tauri/resources/objects/

src-tauri/target/ es el que sorprende por tamaño: contiene el resultado de compilar tu código y todas las dependencias, en modo depuración y en modo producción por separado, con símbolos. Unos cuantos gigabytes en un proyecto mediano son normales.

Ese peso es también la caché que hace que la segunda compilación tarde segundos en vez de minutos, así que borrarlo para «limpiar» es tirar trabajo, no higiene. Si de verdad hace falta reducirlo, Cargo tiene un subcomando para limpiar solo lo obsoleto, que es mucho mejor idea que borrar el directorio entero.

La discusión de verdad: src-tauri/gen/

Ahí viven los proyectos nativos de iOS y Android que genera el CLI, y es la única entrada de la lista donde hay dos posturas defendibles.

La recomendación práctica: no versionarlo mientras no toques nada a mano, y versionarlo en cuanto empieces a tocarlo, con los secretos revisados. La postura que sale mal es la de por defecto —no versionarlo y tocarlo a mano— porque el trabajo se pierde en silencio, en la máquina de otro, semanas después. La fase XIII vuelve sobre esto con el detalle de qué se toca de verdad.

Los secretos, que es lo que no se puede deshacer

Esta parte es la que importa de verdad, porque los dos apartados anteriores se arreglan borrando y este no: un secreto que llega al historial hay que revocarlo, no borrarlo. Un git rm no lo quita del historial, y aunque se reescriba, hay que asumir que alguien pudo copiarlo.

Los sitios de un proyecto de Tauri donde aparecen secretos:

qué dónde suele acabar qué hacer
La clave privada del updater la genera el CLI y la gente la deja en el proyecto nunca en el repositorio. Va en el gestor de secretos de tu integración continua. Nivel 64
El certificado de firma de macOS exportado como fichero para la integración continua igual: variable de entorno cifrada, no fichero versionado. Nivel 60
El certificado de Windows igual Nivel 62
Credenciales de notarización a veces en un script Nivel 61
Tokens de servicios que use tu core en la configuración, o incrustados en el código ninguna de las dos. Nivel 34 y 48

Y una advertencia específica del framework: la clave pública del updater sí va en tauri.conf.json, y eso es correcto —es pública—. La privada es la que firma, vive fuera, y si se filtra alguien puede servir una actualización que tu aplicación aceptará como legítima. Es el peor secreto que se puede perder de todo el proyecto.

El fichero completo

.gitignore
# generado por Cargosrc-tauri/target/# generado por el frontenddist/node_modules/# proyectos nativos de móvil — ver la discusión de arriba antes de decidirsrc-tauri/gen/# NUNCA: claves y certificados*.key*.p12*.pfx*.cer.env.env.*!.env.example

Las últimas líneas no son de este framework: son de cualquier proyecto que firme algo. Y la penúltima, la exclamación, es la que permite versionar un fichero de ejemplo con los nombres de las variables y ningún valor, que es la forma correcta de documentar qué secretos hace falta configurar.