Saltar a contenido

Generar librería de eventos

Autor Olivera Lucas.

Repositorio Template de schemas eventos

En la organización de architecture-it se implementó un repositorio template donde tenemos la base para automatizar los procesos de construcción y publicación de las librerías de Net core y el registro de los esquemas en apicurio registry.

A tener en cuenta

Cabe mencionar que los repositorios de eventos van a ser mantenidos y supervisados por los equipos. Cada publicador generará su repositorio de eventos.

Crear nuevo repo de eventos

1 Creamos el nuevo repo

  1. Ingresando a architecture-it, creamos un nuevo repositorio.
  2. En el sector Repository template seleccionamos architecture-it/schema-event-template.

ci

  1. Asignamos un nombre al repositorio. Recomendamos utilizar la siguiente nomenclatura {appname}-schema-events
  2. El repo que nos crea tiene la siguiente estructura
├───.github
│   └───workflows
├───idl

2 Adaptamos el template

1- Modificar el contenido del archivo .github/workflows/publish.yml, se debe proporcionar los correctos nombres de el directorio y el archivo avdl que se construirá.

env:
  GITHUB_PROJECT_OWNER: 'appname' # working directory remplace {appname}
  SOURCE_EVENTS_FILE_IDL: 'idl/{Example}.avdl' # archivo avdl remplace {Example}

ATENCIÓN: El appname debe siempre comenzar en mayuscula y se debe reespetar en el namespace del idl.

Comentarios

  1. El template dispone de el jar de avro para permitir hacer pruebas localmente.
  2. Solo es necesario subir archivos avdl, no es necesario que se suban los archivos c#, avpr, avsc o .go
  3. Cualquier duda con respecto a los esquemas dirijase a Schemas
  4. El idl principal debe siempre tener un namespace con la siguiente nomenclatura @namespace("Andreani.Appname.Events.Record") siendo el Appname siempre debe comenzar por mayuscula. Ejemplo: @namespace("Andreani.BillingASN.Events.Record")

Despliegue

En el momento que se realice un push a la rama main y se haya modificado algún archivo de la carpeta /idl se ejecutará el proceso de despliegue.

ci

El proceso de despliegue de NET realiza lo siguiente:

  1. Convierte el archivo idl en schemas avro.
  2. Convierte los archivos avro en clases de C#
  3. Construye la librería de eventos
  4. Despliega en github packages.

Resultado

ci

El proceso de despliegue de Go realiza lo siguiente:

  1. Convierte el archivo idl en schemas avro.
  2. Convierte los archivos avro en estructuras de Go
  3. Clona y copia los archivos en el repositorio de los eventos de go
  4. Realiza el Push al repositorio.
  5. Se genera un Release subiendo una versión de la librería

Resultado ci

Podrán validar los archivos generados por el Actions desde la ejecución del mismo.

ci

Al hacer click, nos descargara el Zip con los archivos generados.

GitHub Actions

Se documenta el actions:

name: Publish Avro
on:
  workflow_dispatch: # esto permite correr el flujo manualmente.
  push:
    branches:
      - main
    paths:
      - 'idl/**' # el flujo solo se ejecuta cuando se actualiza la carpeta idl.
env:
  GITHUB_PROJECT_OWNER: appname # reemplace por su appname
  SOURCE_EVENTS_FILE_IDL: 'idl/Example.avdl' # archivo avdl remplace {Example}
jobs:
  avro: # genera los avro
    runs-on: ubuntu-latest
    steps:
      - uses: architecture-it/actions@avro
        with:
          file_idl: ${{ env.SOURCE_EVENTS_FILE_IDL }}
  Net: # publica la librería en nuget
    name: publish lib net
    needs: [avro]
    runs-on: ubuntu-latest
    steps:
      - uses: architecture-it/actions@avro-net
        with: 
          app_name: ${{ env.GITHUB_PROJECT_OWNER }}
          github_token: ${{ secrets.ARQUITECTURA_DEPLOY }}
          PackageVersion: 1.0.$GITHUB_RUN_NUMBER
  Golang: # publica las structs en integracion-schemas-event-go 
    name: publish lib go
    needs: [avro]
    runs-on: ubuntu-latest
    steps:
      - uses: architecture-it/actions@avro-go
        with: 
          app_name: ${{ env.GITHUB_PROJECT_OWNER }}
          github_token: ${{ secrets.ARQUITECTURA_DEPLOY }}