prefapp / firestarter-workflows

Repository with all firestarter workflows
0 stars 0 forks source link

Nuevo build-images dagger workflow #45

Open tonirvega opened 6 months ago

tonirvega commented 6 months ago

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

  3. 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.

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
tonirvega commented 6 months ago

Estructura de dagger modules (Go)

https://docs.dagger.io/manuals/developer/go/882081/module-structure

tonirvega commented 6 months ago

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

tonirvega commented 5 months ago

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:

image

publicación en aws:

image