Linting automatico para terraform con reviewdog y tflint


reviewdog

Introducción

En este artículo vamos a probar cómo lintar y obtener chequeos automáticos en nuestros pull requests de Github para nuestro código de terraform usando reviewdog y la acción tflint de github. Esto es particularmente útil para prevenir cambios no deseados o commits con errores que se mezclen en tu rama principal, sea cual sea. Para que esto funcione solo tenés que configurar una acción de Github en tu repo y listo, no necesitás generar ningún token ni hacer ningún paso extra.


Para hacer el ejemplo más simple, creé este repo con la configuración básica para hacerlo funcionar.


Terraform

Primero necesitamos nuestro código de terraform. Como podés ver, es una instancia ec2 simple en AWS, pero el tipo de instancia no existe, lo vamos a arreglar en un momento.

resource "aws_instance" "ec2_test" {
  ami           = "ari-67b95e0e"
  instance_type = "t1.medium"
}

Github Workflow

Ya que estamos usando Github, podemos aprovechar Actions para correr un linter para nuestro código y marcar nuestro PR si algo está mal.

name: reviewdog
on: [pull_request]
jobs:
  tflint:
    name: runner / tflint
    runs-on: ubuntu-latest

    steps:
      - name: Clone repo
        uses: actions/checkout@master

      # Install latest Terraform manually as
      #  Docker-based GitHub Actions are
      #  slow due to lack of caching
      # Note: Terraform is not needed for tflint
      - name: Install Terraform
        run: |
          brew install terraform

      # Run init to get module code to be able to use `--module`
      - name: Terraform init
        run: |
          terraform init

      # Minimal example
      - name: tflint
        uses: reviewdog/action-tflint@master
        with:
          github_token: ${{ secrets.github_token }}

      # More complex example
      - name: tflint
        uses: reviewdog/action-tflint@master
        with:
          github_token: ${{ secrets.github_token }}
          fail_on_error: "true" # Optional. Fail action if errors are found

Ejemplo de PR

Primero vamos a hacer un PR con un problema para ver cómo falla y cómo funciona el reporte (Para llegar acá podés hacer clic en la pestaña de checks en el PR y luego en el paso de tflint, mirá aquí). img


Uno que realmente funciona

Ya que lo probamos y falló como esperábamos, ahora podemos arreglarlo, y ahora que reviewdog y tflint están contentos con nuestro commit, podemos simplemente mezclarlo (solo cambien de t1 a t2 en el archivo main.tf). img


Notas finales

Para mí, esto parece particularmente útil porque puede capturar muchos errores que a veces son difíciles de detectar a simple vista, especialmente cuando hablamos de errores tipográficos. También es una buena práctica lintar tu código, así que ahí lo tenés. Espero que pruebes esto y tengas en cuenta que reviewdog puede revisar muchos lenguajes diferentes, solo elegí terraform porque es lo que más estoy usando últimamente.


Errata

Si ves algún error o tenés alguna sugerencia, por favor mandame un mensaje así lo arreglo.

También podés ver el código fuente y cambios en el código generado y en las fuentes acá.



No tienes cuenta? Regístrate aqui

Ya registrado? Iniciar sesión a tu cuenta ahora.

Iniciar session con GitHub
Iniciar sesion con Google
  • Comentarios

    Online: 0

Por favor inicie sesión para poder escribir comentarios.

by Gabriel Garrido