Apariencia
0037. CI backend: cache de node_modules/Prisma con actions/cache, no job+artifact
Estado
Aceptada
Contexto
Tras separar lint y test en jobs paralelos (ADR-0025), cada uno corría su propio npm ci + npx prisma generate de forma independiente (doble trabajo redundante).
Decisión
Cachear node_modules (key = hash de package-lock.json) y el cliente Prisma generado (key = hash de prisma/schema.prisma + package-lock.json) con actions/cache, en vez de un job setup que instale una vez y comparta un artifact. actions/cache tiene cupo propio gratis (~10 GB/repo, auto-evict) y no factura contra la cuota de storage del plan; el artifact sí, y además obligaría a serializar setup → lint/test perdiendo el paralelismo.
Gotcha real encontrado: el path por defecto del cliente generado (node_modules/.prisma/client) es el de Prisma con provider = "prisma-client-js". Este proyecto usa el generator nuevo (provider = "prisma-client", Prisma 6+) con output = "../generated/prisma" (prisma/schema.prisma) — el cliente se genera fuera de node_modules, en <raíz>/generated/prisma. Cachear el path viejo no falla ruidosamente: actions/cache simplemente no encuentra nada que guardar (Path Validation Error silencioso en el step Post Cache ...) y cada run regenera el cliente igual, sin que el cache-hit lo delate salvo mirando el log completo del step.
Consecuencias
Si el proyecto cambia el generator de Prisma o su output en el schema, el path cacheado en ci.yml (generated/prisma) debe actualizarse junto con él — no asumir el default de prisma-client-js.