# Semana 12: integración continua y dependencias. Se usa dentro del contenedor
# del curso.
#
#   make              copia Kallpa en build/kallpa, para probar sin tocar la
#                     original (no descarga nada)
#   make test         revisa los tipos (tsc), corre ESLint y las pruebas
#                     (*.test.ts), que comprueban lo que dice el apunte. No usa
#                     la red: un build que depende de la red no es hermético
#   make tipos        un cambio que pasa las pruebas y no pasa tsc
#   make colision     dos ramas en verde cuyo merge queda en rojo
#   make zona         una prueba que pasa en Lima y falla en UTC
#   make reporte      lo que dice el lockfile de esperado/
#
# Estos usan el registro de npm, y sus resultados cambian con el tiempo. Dejan
# una copia de lo que imprimen en build/salidas/:
#
#   make arbol        instala las seis devDependencies y mira el árbol
#   make runner       npm ci y make check con el PATH de un runner
#   make falta        un paquete sin declarar, que aquí no se nota
#   make lockfile     npm ci cuando el lockfile no coincide o el hash es otro
#   make auditar      npm audit con cada opción, npm outdated y las firmas
#   make fuerza       lo que hace npm audit fix --force
#   make peer         lo que hace TypeScript 7 con typescript-eslint
#   make rangos       el mismo package.json, en dos fechas distintas
#   make sbom         la lista de todo lo instalado
#   make paquetes     cómo se revisa un paquete, y uno que no existe
#
#   make clean        borra build/
#
# Fuera del contenedor, en la terminal de su computadora:
#
#   sh runner-limpio.sh    make check en una imagen de Node sin las herramientas

KALLPA ?= ../../kallpa

.PHONY: all test tipos colision zona reporte arbol runner falta lockfile auditar fuerza peer rangos sbom paquetes clean

all: build/kallpa

build/kallpa:
	mkdir -p build
	cp -r $(KALLPA) $@
	rm -f $@/data/*.db $@/data/*.db-*

test:
	tsc -p .
	eslint .
	node --test "*.test.ts"
	@if [ -d solution ]; then node --test "solution/*.test.ts"; fi

tipos:
	@bash escenarios.sh tipos

colision:
	@bash escenarios.sh colision

zona:
	@bash escenarios.sh zona

reporte:
	@node lockfile-report.ts esperado/package-lock.json

arbol runner falta lockfile auditar fuerza peer rangos sbom paquetes:
	@mkdir -p build/salidas
	@bash registro.sh $@ 2>&1 | tee build/salidas/$@.txt

clean:
	rm -rf build
