Contenido del curso
Funciona en mi local
Introducción a DevSecOps
Seguridad en la arquitectura
- 11

Arquitectura AWS para métricas de Git
02:23 min - 12

Configuración de AWS CLI para Terraform
09:34 min - 13

Terraform IAM: roles y policies automáticos
17:44 min - 14

Modificando main.tf para enlazar módulos IAM en Terraform
06:02 min - 15

Bucket S3 para Lambdas con Terraform
16:44 min - 16

Configuración de Postgres RDS con VPC y seguridad
14:10 min - 17

Lambdas dentro de uma VPC com Terraform
12:29 min - 18

Cómo configurar API Gateway para Lambdas
05:41 min
Evitando vulnerabilidades en el código
- 19

Configuración completa de Auth0 para tokens
07:13 min - 20

Authorizer Lambda con Auth0 y JWT
16:55 min - 21

Conecta Go a Postgres usando AWS Secrets
13:34 min - 22

Conexión segura de Lambdas a Secrets con VPC
11:27 min - 23

Validación de webhooks desde GitHub con user-agent
12:08 min - 24

Cómo validar integridad de webhooks con HMAC
14:32 min
Controles de seguridad sobre datos
Monitoring y alertas
CORS y cierre
Automatiza pruebas en Go con GitHub Actions
Resumen
Automatizar pruebas con GitHub Actions en un proyecto Go te permite ejecutar tests cada vez que alguien hace push, sin depender de comandos manuales. Aquí verás cómo dejar listo un workflow YAML que sincroniza dependencias y corre go test en cada rama, ideal si trabajas con módulos Go y quieres integrar CI desde el primer commit.
¿Cómo resolver inconsistencias en las dependencias de Go?
Antes de tocar GitHub Actions, conviene dejar el proyecto limpio. En Go, las dependencias viven en la carpeta vendor, y cuando cambias de rama o eliminas librerías sin limpiar, aparecen warnings en rojo que rompen la compilación [00:14].
La secuencia para sincronizar es directa:
go mod vendorpara actualizar el contenido del vendor.go mod tidypara depurar dependencias no usadas.- Mantener la carpeta vendor dentro del .gitignore para no versionarla.
¿Qué hace
go mod vendor? Copia todas las dependencias declaradas en el go.mod a una carpeta local llamada vendor, para que el proyecto compile sin descargar nada externo.
¿Cómo escribir una prueba dummy en Go con testify?
Para validar que el pipeline funciona, no necesitas una prueba sofisticada. Basta con un test mínimo que confirme un valor [01:30]. El estándar en Go es nombrar el archivo con el sufijo _test.go, así el compilador lo identifica como archivo de pruebas.
En este caso se usa el submódulo require de testify, que detiene la ejecución si una aserción falla. Lo traes con go get y luego lo importas en tu archivo:
go package main
import ( "testing" "github.com/stretchr/testify/require" )
func TestDummy(t *testing.T) { c := require.New(t) result := "valor" c.Equal("valor", result) }
Las funciones de prueba en Go siempre empiezan con Test y reciben *testing.T. El objeto c que devuelve require.New(t) lleva el contexto de las aserciones [02:45].
¿Por qué usar require en lugar de assert?
require corta la ejecución del test ante el primer fallo, mientras que assert sigue evaluando. Para pruebas críticas donde un fallo invalida los siguientes pasos, require es más limpio.
¿Cómo estructurar el workflow YAML de GitHub Actions?
Los workflows viven en una ruta específica que GitHub reconoce automáticamente: .github/workflows/ en la raíz del repositorio [04:10]. Dentro creas un archivo .yaml con el nombre que prefieras, por ejemplo validate-test.yaml.
Un workflow tiene tres bloques obligatorios:
- name: identifica el workflow.
- on: define el evento que lo dispara, como
pushen ciertas ramas. - jobs: lista los trabajos a ejecutar, cada uno con su sistema operativo y pasos.
¿Qué es un job en GitHub Actions? Es un conjunto de pasos que se ejecutan en una misma máquina virtual. Puedes tener varios jobs en paralelo o encadenados.
¿Qué pasos debe incluir un pipeline de pruebas en Go?
El workflow replica lo que harías a mano en la terminal. Cada paso lleva un name descriptivo y un run o uses con la acción concreta [06:20]:
- Checkout code con
actions/checkout@v4para traer el código de la rama. - Setup Go con
actions/setup-goy la versión1.18para preparar el entorno. - Install dependencies ejecutando
go mod vendordentro del working-directory del proyecto. - Check unit test corriendo
go test ./...para entrar recursivamente a todos los folders.
El patrón ./... es clave: evita modificar el pipeline cada vez que agregas pruebas en nuevos paquetes, porque Go las detecta automáticamente.
¿Cómo queda el archivo YAML completo?
La indentación en YAML es estricta: steps va al mismo nivel que runs-on, y cada paso empieza con un guion [09:50]. Una versión funcional luce así:
yaml name: test-workflow on: push: branches: - '*' jobs: code_validation: runs-on: ubuntu-22.04 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v4 with: go-version: '1.18' - name: Install dependencies working-directory: githubtracker run: go mod vendor - name: Check unit test working-directory: githubtracker run: go test ./... continue-on-error: false
La propiedad continue-on-error: false asegura que si las pruebas fallan, el workflow se marca como fallido. Es el comportamiento esperado en CI: si los tests no pasan, el pipeline no debe seguir.
¿Por qué especificar working-directory?
GitHub Actions ejecuta los comandos desde la raíz del repo por defecto. Si tu código Go vive en una subcarpeta como githubtracker, necesitas indicarle dónde correr go mod vendor y go test, o no encontrará el go.mod.
Una vez que haces push del archivo YAML al repo, GitHub detecta el workflow y lo dispara en cada push siguiente. Si quieres extenderlo a otros lenguajes o eventos, la documentación oficial tiene templates listos para Node, Python, Java y más. ¿Ya tienes un proyecto donde aplicarlo? Cuéntame en los comentarios qué pipeline configuraste primero.