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¶
- Ingresando a architecture-it, creamos un nuevo repositorio.
- En el sector
Repository template
seleccionamosarchitecture-it/schema-event-template
.
- Asignamos un nombre al repositorio. Recomendamos utilizar la siguiente nomenclatura
{appname}-schema-events
- 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¶
- El template dispone de el jar de avro para permitir hacer pruebas localmente.
- Solo es necesario subir archivos avdl, no es necesario que se suban los archivos c#, avpr, avsc o .go
- Cualquier duda con respecto a los esquemas dirijase a Schemas
- El idl principal debe siempre tener un namespace con la siguiente nomenclatura
@namespace("Andreani.Appname.Events.Record")
siendo elAppname
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.
El proceso de despliegue de NET realiza lo siguiente:
- Convierte el archivo idl en schemas avro.
- Convierte los archivos avro en clases de C#
- Construye la librería de eventos
- Despliega en github packages.
Resultado
El proceso de despliegue de Go realiza lo siguiente:
- Convierte el archivo idl en schemas avro.
- Convierte los archivos avro en estructuras de Go
- Clona y copia los archivos en el repositorio de los eventos de go
- Realiza el Push al repositorio.
- Se genera un Release subiendo una versión de la librería
Resultado
Podrán validar los archivos generados por el Actions desde la ejecución del mismo.
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 }}