Introducción
FIELDNOTES ya tiene una prueba correcta para visitantes, pero su script local puede continuar después de un fallo y publicar un paquete diferente. Debes conectar la decisión con la entrega real.
Este entorno nuevo incluye las comprobaciones completadas del primer laboratorio y el sitio publicado sin cambios. Repararás un pequeño flujo Bash, rechazarás una entrada defectuosa, publicarás una válida y demostrarás que editar borradores después no cambia el paquete guardado. Las pestañas Workstation, Live Website y Candidate Preview están preparadas. Es un flujo local de aprendizaje, no GitHub Actions ni una barrera de seguridad de producción.
Hacer que un fallo detenga la publicación
En este paso, harás que un mismo argumento candidato pase por prueba y publicación. Empieza en Live Website. Abre la exposición, Plan your visit y la descarga del visitante. La entrada actual es East gate. Vuelve al inicio con FIELDNOTES.
Cambia a Workstation. cat muestra el flujo proporcionado:
cat pipeline.sh
El script inicial hace una comprobación e intenta publicar el paquete fijo packages/candidate.tar.gz. Las líneas independientes continúan aunque falle la anterior. El publicador también rechaza paquetes no probados; aun así debes hacer que el flujo devuelva un fallo y pase la entrada prevista a ambas etapas.
Bash guarda el primer argumento en $1. candidate="$1" lo guarda en una variable. "$candidate" expande ese valor como un solo argumento, incluso si la ruta contiene espacios. && ejecuta el siguiente comando únicamente si el anterior termina con estado cero. Cero significa éxito; un valor distinto de cero significa fallo. El último comando ejecutado determina el resultado de este pequeño script.
Sustituye el script completo con el método de documento incrustado del primer laboratorio. El último BASH termina el bloque literal:
cat > pipeline.sh <<'BASH'
#!/bin/bash
candidate="$1"
python3 tools.py check "$candidate" &&
python3 tools.py publish "$candidate"
BASH
#!/bin/bash identifica el intérprete. Lo ejecutarás explícitamente con bash, por lo que no necesitas cambiar permisos de ejecución. Los dos comandos reciben exactamente el mismo argumento de paquete. No añadas || true, elimines comprobaciones ni sustituyas el argumento por un paquete válido fijo.
Prueba un candidato defectuoso; este fallo es intencionado:
bash pipeline.sh packages/wrong.tar.gz
Espera FAIL: Wrong visitor guide content sin ninguna línea Published. Consulta inmediatamente el estado: $? es el estado de salida del comando anterior y echo lo muestra. Ejecuta esto por separado, justo después del flujo:
echo $?
Espera 1. Cualquier comando intermedio reemplazaría ese estado. En Live Website, recarga y sigue los enlaces de visita y descarga: la referencia saludable sigue disponible. Rechazar una publicación debe dejar el servicio funcionando.
Si aparece un error de sintaxis Bash, vuelve a leer el archivo guardado y restaura la receta mostrada. Un script roto no demuestra una barrera eficaz. El siguiente paso probará que también acepta una entrada válida.
Publicar el paquete que probaste
En este paso, permitirás que un candidato válido llegue al sitio publicado y distinguirás los bytes guardados del paquete de una copia de trabajo editable. Empieza en Workstation.
El paquete proporcionado packages/candidate.tar.gz se creó a partir de drafts/ durante la preparación. El flujo debe utilizar ese paquete guardado, sin reconstruirlo con lo que contengan después los borradores.
Primero comprueba explícitamente el candidato:
python3 tools.py check packages/candidate.tar.gz
Se muestran el resultado correcto y el identificador del paquete conservado. Simula ahora una edición normal posterior al empaquetado. > reemplaza únicamente este archivo de texto del borrador; echo imprime el texto entre comillas:
echo 'UNREVIEWED DRAFT: use the West gate' > drafts/downloads/guide.txt
Confirma que el borrador cambió:
cat drafts/downloads/guide.txt
Muestra UNREVIEWED DRAFT: use the West gate. Es una edición intencionada solo del borrador. No edites ni reconstruyas el paquete guardado.
Ejecuta el flujo corregido sobre el candidato guardado:
bash pipeline.sh packages/candidate.tar.gz
Espera PASS: visitor checks. Frozen package ... y después Published frozen package ..., con el mismo identificador. El ejecutor prueba una copia conservada y publica exactamente esos bytes; rechaza bytes sin una comprobación correcta. El identificador es evidencia auxiliar, no sustituye la inspección del sitio real.
Cambia a Live Website, vuelve al inicio con FIELDNOTES y recarga. Abre Explore the exhibition, Plan your visit y Download visitor guide. La página y la descarga siguen indicando East gate, pese al cambio no revisado del borrador. Abre también Step-free route y Download access guide; Garden ramp debe conservarse. Comprueba que la ilustración y los estilos estén intactos.
Vuelve a Workstation. curl envía una solicitud HTTP; -sS oculta el progreso pero muestra errores de conexión. 127.0.0.1 significa este entorno y 8081 es el puerto del sitio publicado. Ejecuta estas solicitudes en Workstation, no en la terminal de tu ordenador:
curl -sS http://127.0.0.1:8081/downloads/guide.txt
El cuerpo empieza por FIELDNOTES Visitor Guide e incluye Entrance: East gate. El sitio utiliza, por tanto, el paquete guardado y no el borrador cambiado. Si ves el borrador, revisa qué entrada publica tu flujo y repite el flujo correcto sobre el candidato proporcionado sin modificaciones.
Por último, vuelve a comprobar el rechazo:
bash pipeline.sh packages/missing.tar.gz
Espera el fallo 404 intencionado sin publicación. En Live Website, recarga y vuelve a descargar la guía; el candidato aceptado sigue utilizable. El flujo ha demostrado ambas decisiones. Este ejercicio protege una publicación local de archivos estáticos; no implementa control de acceso, firmas, CI alojada ni reversión de migraciones de bases de datos.
Resumen
Has usado ejecución condicional para detener publicaciones defectuosas, pasado un mismo paquete por ambas etapas y publicado su contenido exacto probado pese a un cambio posterior del borrador. Los recorridos general y accesible siguen disponibles.


