-
Notifications
You must be signed in to change notification settings - Fork 0
Description
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 FINALES
-
el 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
snapshots:
default:
build_args:
ARG_1: "VALUE_A"
dockerfile: docker/Dockerfile
other-flavour:
build_args:
ARG_2: "VALUE_2"
dockerfile: docker/Dockerfile
releases:
default:
build-always: true
extra-registries:
- name: releases-prefapp-extra.azurecr.io
repository: prefapp/mi-app
build_args:
GENERATE_SOURCEMAP: "true"
secrets:
MY_TOKEN: my-keyvault.vault.azure.net/secrets/my-token
AWS_TOKEN: arn:...:parameters/my-token
dockerfile: docker/DockerfileGitHub
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.
- Eventos:
- push/pull request con label autodeploy: Se tagea la imagen con el sha del comimt
- release/prerelease: Se tagea la imagen con la tag producida por la release/prerelease
- En todos los eventos se añade la siguiente metainformación en las imaǵenes:
- source.code.revision: sha commit
- repository.name: ${{github.repository}}
- build.date: (now())
- Eventos:
Originally posted by @tonirvega in https://github.com/prefapp/features/issues/149#issuecomment-2010348985
### Tasks
- [ ] Crear setup inicial de monorepo
- [ ] Crear módulo build-images