Open tonirvega opened 6 months ago
Estructura de dagger modules (Go)
https://docs.dagger.io/manuals/developer/go/882081/module-structure
Login en los providers
Go sdk azure login: https://learn.microsoft.com/en-us/azure/developer/go/azure-sdk-authentication?tabs=bash
Az identity: https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity
Go sdk Aws login: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html
Se han realizado los cambios pertinentes en el workflow de dagger para soportar múltiples registries de docker.
Pull request dagger workflow, ( la mergeé @juanjosevazquezgil) : https://github.com/prefapp/firestarter-workflows/pull/44
Workflow principal: https://github.com/prefapp/firestarter-workflows/pull/47
Se han creado los workflow call:
build_snapshots: https://github.com/prefapp/test-repo-rundagger/blob/main/.github/workflows/build_snapshots.yaml
build_releases: https://github.com/prefapp/test-repo-rundagger/blob/main/.github/workflows/build_releases.yaml
build_images (workflow_dispatch): https://github.com/prefapp/test-repo-rundagger/blob/main/.github/workflows/build_images.yaml
Se ha testeado la construcción de imágenes:
Push a la default branch:
Pre-releases
Dispatch manual
publicación en aws:
Motivación
Se aprecia la necesidad de construir un workflow que unifiqe el build-images actual y el workflow de dagger de construcción de imágenes en un único workflow.
La idea es crear un módulo de dagger que tenga la capacidad de unificar estos dos workflows y de paso establecer un punto central de código reutilizable. Para ello se emplearía dagger como herramienta principal y se propone también un monorepo que contendrá todos los módulos dagger y paquetes de código comunes que se puedan utilizar entre los distintos módulos.
El estándar a seguir sería la estructura de módulos que nos proporciona la herramienta para cada módulo, donde podemos seguir las siguientes referencias:
Doc: https://docs.dagger.io/manuals/developer/go/525021/first-module
Ejemplo de monorepo para módulos de dagger: https://github.com/shykes/daggerverse Nuevo repo: https://github.com/prefapp/daggerverse
Lenguaje de programación
Se explora la posibilidad de realizar el módulo en Go, si se aprecian impedimentos la opción B sería Python.
Información necesaria de publicación
El ACR vendría dado por una variable de entorno a nivel de org :
${{ vars.DOCKER_REGISTRY_SNAPSHOTS }}
: docker registry para imágenes NO FINALES${{ vars.DOCKER_REGISTRY_RELEASES }}
: docker registry para imágenes FINALESel nombre del repositorio de docker vendría dado por el nombre de la org/repositorio ${{ github.repository }}
La autenticación y los permisos se gestionan a través de OIDC
Ejemplo de una imagen tageada:
Nombre del repositorio en github: prefapp/mi-app Nombre del repositorio en el acr: prefapp/mi-app
acrnoreleases-prefapp.azureacr.io/prefapp/mi-app/<tag/short-sha-commit>_<flavour>
acrreleases-prefapp.azureacr.io/prefapp/mi-app/<tag>_<flavour>
Fichero de configuración
GitHub
Los eventos de Github serán procesados por una implementación contenida dentro del workflow de Dagger.
Ésta implementación deberá estar separada a nivel lógico en el módulo de build-images y se podría inyectar la implementación en función del provider en el que se ejecute el workflow de dagger, permitiendo así una inyección de una implementación "dummy" para el desarrollo local también que pueda emular los diferentes providers.
El objetivo de ésta implementación es que dependiendo del evento que se ejecute en Github, se deducirá la tag de la imagen de docker.
Originally posted by @tonirvega in https://github.com/prefapp/features/issues/149#issuecomment-2010348985