GitHub Actions: Crear un Action con NET Core

GitHub Action Crear un Action con NET Cor

En este articulo veremos como crear un Action con NET Core para poder utilizarlos en nuestros workflows de GitHub Actions.

Si te interesa puedes echarle un vistazo a un articulo anterior, GitHub Actions: Guía para utilizar con NET Core, dónde vimos todo lo que debemos saber sobre GitHub Actions.

Crear un Action con una Plantilla de NET Core

Si lo que buscas es una solución rápida, entonces te dejo la siguiente plantilla que creé para que solo tengas que tocar código C# y listo. 👍

https://github.com/lauchacarro/netcore-action-template

Repositorio en GitHub
Repositorio en GitHub

Para empezar a usarlo debes hacer click en el botón “Use this template” y tendremos un repositorio nuevo con todo el código de la plantilla listo para poder ser clonado.

Nuevo repositorio
Nuevo repositorio

Ahora, una vez que lo tengamos clonado podemos empezar a desarrollar nuestro Action.

Indispensable Action.yml para crear un Action

GitHub Actions siempre busca el archivo action.yml en los repositorios. Este archivo es el que contiene la información importante como por ejemplo: el nombre del Action, su descripción, qué parámetros necesita y en que entorno se va a ejecutar.

Lo más importante que debes modificar y/o agregar son los Inputs (los parametros). Pero no hay que modificar Runs, que indica que se va a ejecutar con Node 12 y que se ejecutará el archivo index.js.

Los valores de los parámetros son asignados en los workflows y el Action recibe estos valores en variables de entorno de Node. 🚨No te preocupes🚨, la plantilla está desarrollada justamente para pasar estas variables de entorno al proyecto de NET Core automáticamente.

Carpeta SRC

En la carpeta SRC tenemos un simple proyecto de consola hecho con NET Core 3.1.

Ese proyecto lo único que hace es obtener el valor de un Input e imprimirlo en pantalla.🖥

Si quieres puedes borrar todo el proyecto y armar uno nuevo, pero la ventaja de esta consola es que ya tiene armado para poder acceder a los valores de los Inputs y poder usarlos.

¿Como acceder a los Inputs desde NET Core?

Si decides armar un nuevo proyecto por tu cuenta, entonces te enseño como crear un Action con NET Core y acceder a los parámetros.

Esta plantilla utiliza una simple librería llamada GitHubActionSharp, que está disponible en NuGet.📦

Usarla realmente es bastante fácil así que les dejo 5 pasos como si tuvieran que armar el código desde 0, pero esto mismo ya esta hecho en el repositorio.

Paso 1:

Creas un enum, cuyos campos sean nombres descriptivos para el desarrollador.

Paso 2:

A cada campo del enum lo decoras con el atributo GitHubActionSharp.ParameterAttribute y le indicas que input del action.yml representa.

Paso 3:

En el método Main de la clase Program creas una instancia del objeto GitHubActionSharp.GitHubActionContext, y en el constructor le asignas los argumentos que recibe el método Main.

Paso 4:

Una linea abajo del paso anterior, ejecutas el metodo GitHubActionSharp.GitHubActionContext.LoadParameters()

Este método ordena los argumentos pasados en el constructor del paso anterior en un diccionario para que sea de fácil acceso.

Paso 5:

Cuando sea necesario utilizas el método GitHubActionSharp.GitHubActionContext.GetParameter(Enum @enum)

A ese método le pasas como parámetro un campo del enum creado en el Paso 1. Es importante que el campo del enum tenga el atributo mencionado, ya que con ese decorador va a buscar el valor de los inputs obtenidos del Action.

Resultado Final

A tener en cuenta al usar este template:

  • Solo podes tener un archivo csproj, osea podes tener solo un proyecto.
  • En los workflows que utilicen tu action, no pueden asignar arrays a los inputs.
  • Evitar que los valores de los inputs comiencen con un guion (“-“).
  • En la carpeta workflows-samples hay un workflow de ejemplo, deberias adaptarlo para que se ajuste a tu nuevo action.