Skip to content

Nuevo build-images dagger workflow #45

@tonirvega

Description

@tonirvega

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

  1. 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
  1. el nombre del repositorio de docker vendría dado por el nombre de la org/repositorio ${{ github.repository }}

  2. 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/Dockerfile

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.

    • 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())

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

Metadata

Metadata

Labels

epicLarge user story

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions