DEV Community

Cover image for ¡Como utilizar javascript en Github Actions y hacer un cocktail!
victorargento
victorargento

Posted on

¡Como utilizar javascript en Github Actions y hacer un cocktail!

Hace tiempo que venía pensado en como podría ejecutar un bloque de código de Javascript en un step de Github Actions, ya que muchas veces se me hace incómodo tratar datos con comandos de Bash. Cuando me veo en estos casos, siempre digo: ¡Qué fácil sería hacer esto con Javascript! Una tarde me puse a ver si esto era capaz, tras varias pruebas me di cuenta de que sí que era posible.

Gracias a que los Runners de Github nativamente contienen Node.js podemos ejecutar los scripts sin problema, e incluso si utilizamos la versión v18 de Node.js podremos hacer uso de node-fetch para hacer peticiones dentro de nuestros scripts.

Para llamar a las variables que tenemos dentro del script desde otro step, deberemos hacer console.logs de los valores de la siguiente forma:

console.log(::set-output name=NOMBRE_VARIABLE_GITHUB_ACTION::${nombreVariableJavascript})

Después añadiremos al mismo step un campo llamado id con el valor que identifique al script. El valor lo podremos llamar tal que así.

echo ${{ steps.id_step.outputs.NOMBRE_VARIABLE_GITHUB_ACTION }}

Para pasar inputs al script de Javascript, deberá ser a base de variables de entorno dentro del step, ya que pasárselas como argumentos no funciona correctamente.

Aquí se puede ver un breve ejemplo de como se haría.

name: Greet myself
on:
  push:
jobs:
  greet:
    runs-on: ubuntu-latest
    steps:
      - name: Get name
        run: |
          console.log(`::set-output name=name::${process.env.ENV_NAME}`)
        shell: node {0}
        id: greet
        env:
          ENV_NAME: victor

      - name: Hello Victor
        run: echo hello ${{ steps.greet.outputs.name }}
Enter fullscreen mode Exit fullscreen mode

En mi repositorio de Github he subido una action que nos devuelve la receta para hacer un cocktail y hacemos uso de un script de Javascript.

Image description

Top comments (0)