Skip to content

Configure Bull Board UI #58

Configure Bull Board UI

Configure Bull Board UI #58

# Build and push Docker images:
# - main branch: production
# - staging branch: staging
#
# For each service (app, api, process, widget-benevolat, widget-volontariat)
# - use build args to pass environment variables
# - build and push image to GitHub Container Registry
#
# NB:
# - if test fails, the build won't be triggered
name: Build and Push Docker Images
on:
workflow_call:
inputs:
branch:
required: true
type: string
workflow_dispatch:
permissions:
contents: read
packages: write
id-token: write
jobs:
set-env:
name: Determine Github Environment based on branch
runs-on: ubuntu-latest
outputs:
environment_name: ${{ steps.set-env.outputs.environment }}
steps:
- name: Set environment based on branch
id: set-env
env:
HEAD_BRANCH: ${{ inputs.branch || github.ref_name }}
# TODO uncomment
# run: |
# if [[ "$HEAD_BRANCH" == 'main' ]]; then
# echo "environment=production" >> $GITHUB_OUTPUT
# else
# echo "environment=staging" >> $GITHUB_OUTPUT
# fi
run: |
if [[ "$HEAD_BRANCH" == 'main-test' ]]; then
echo "environment=production" >> $GITHUB_OUTPUT
else
echo "environment=staging" >> $GITHUB_OUTPUT
fi
build-and-push:
name: Build and Push
needs: set-env
runs-on: ubuntu-latest
strategy:
matrix:
<<<<<<< HEAD

Check failure on line 58 in .github/workflows/docker-build-push.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/docker-build-push.yml

Invalid workflow file

You have an error in your yaml syntax on line 58
# service: [app, api, process, widget-benevolat, widget-volontariat]
service: [app, api, widget-benevolat, widget-volontariat]
=======
include:
- service: app
- service: process
- service: widget-benevolat
- service: widget-volontariat
- service: api
server_type: api
- service: api
server_type: jobs
>>>>>>> eaaea09 (Split api folder to manage jobs)
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set environment variables for build args
id: vars
run: |
echo "ENV=${{ needs.set-env.outputs.environment_name }}" >> $GITHUB_OUTPUT
echo "short_sha=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT
echo "Building for ${{ needs.set-env.outputs.environment_name }} environment"
- name: Set app build args
id: app_args
run: |
echo "ENV=${{ needs.set-env.outputs.environment_name }}" >> $GITHUB_OUTPUT
if [[ "${{ needs.set-env.outputs.environment_name }}" == 'production' ]]; then
echo "API_URL=${{ vars.API_URL_PRODUCTION }}" >> $GITHUB_OUTPUT
echo "BENEVOLAT_URL=${{ vars.BENEVOLAT_URL_PRODUCTION }}" >> $GITHUB_OUTPUT
echo "VOLONTARIAT_URL=${{ vars.VOLONTARIAT_URL_PRODUCTION }}" >> $GITHUB_OUTPUT
echo "SENTRY_DSN=${{ secrets.SENTRY_DSN_PRODUCTION }}" >> $GITHUB_OUTPUT
else
echo "API_URL=${{ vars.API_URL_STAGING }}" >> $GITHUB_OUTPUT
echo "BENEVOLAT_URL=${{ vars.BENEVOLAT_URL_STAGING }}" >> $GITHUB_OUTPUT
echo "VOLONTARIAT_URL=${{ vars.VOLONTARIAT_URL_STAGING }}" >> $GITHUB_OUTPUT
echo "SENTRY_DSN=${{ secrets.SENTRY_DSN_STAGING }}" >> $GITHUB_OUTPUT
fi
- name: Build and push ${{ matrix.service }} image
uses: docker/build-push-action@v6
with:
context: ./${{ matrix.service }}
file: ./${{ matrix.service }}/Dockerfile.production
push: true
tags: |
<<<<<<< HEAD
ghcr.io/${{ github.repository }}/${{ matrix.service }}:${{ needs.set-env.outputs.environment_name }}
ghcr.io/${{ github.repository }}/${{ matrix.service }}:${{ needs.set-env.outputs.environment_name }}-latest
ghcr.io/${{ github.repository }}/${{ matrix.service }}:${{ needs.set-env.outputs.environment_name }}-${{ steps.vars.outputs.short_sha }}
secrets: |
"sentry_auth_token=${{ secrets.SENTRY_AUTH_TOKEN }}"
build-args: |
ENV=${{ steps.app_args.outputs.ENV }}
API_URL=${{ steps.app_args.outputs.API_URL }}
BENEVOLAT_URL=${{ steps.app_args.outputs.BENEVOLAT_URL }}
VOLONTARIAT_URL=${{ steps.app_args.outputs.VOLONTARIAT_URL }}
SENTRY_DSN=${{ steps.app_args.outputs.SENTRY_DSN }}
=======
${{ matrix.service != 'api' && format('ghcr.io/{0}/{1}:{2}', github.repository, matrix.service, needs.set-env.outputs.environment_name) || format('ghcr.io/{0}/{1}-{2}:{3}', github.repository, matrix.service, matrix.server_type, needs.set-env.outputs.environment_name) }}
${{ matrix.service != 'api' && format('ghcr.io/{0}/{1}:{2}-latest', github.repository, matrix.service, needs.set-env.outputs.environment_name) || format('ghcr.io/{0}/{1}-{2}:{3}-latest', github.repository, matrix.service, matrix.server_type, needs.set-env.outputs.environment_name) }}
${{ matrix.service != 'api' && format('ghcr.io/{0}/{1}:{2}-{3}', github.repository, matrix.service, needs.set-env.outputs.environment_name, steps.vars.outputs.short_sha) || format('ghcr.io/{0}/{1}-{2}:{3}-{4}', github.repository, matrix.service, matrix.server_type, needs.set-env.outputs.environment_name, steps.vars.outputs.short_sha) }}
build-args: |
# API server type
${{ matrix.service == 'api' && format('SERVER_TYPE={0}', matrix.server_type) || '' }}
# App (Vite) variables
${{ matrix.service == 'app' && format('VITE_ENV={0}', steps.app_args.outputs.VITE_ENV) || '' }}
${{ matrix.service == 'app' && format('VITE_API_URL={0}', steps.app_args.outputs.VITE_API_URL) || '' }}
${{ matrix.service == 'app' && format('VITE_BENEVOLAT_URL={0}', steps.app_args.outputs.VITE_BENEVOLAT_URL) || '' }}
${{ matrix.service == 'app' && format('VITE_VOLONTARIAT_URL={0}', steps.app_args.outputs.VITE_VOLONTARIAT_URL) || '' }}
${{ matrix.service == 'app' && format('VITE_SENTRY_DSN={0}', steps.app_args.outputs.VITE_SENTRY_DSN) || '' }}
# Widget Benevolat variables
${{ matrix.service == 'widget-benevolat' && format('ENV={0}', steps.widget_benevolat_args.outputs.ENV) || '' }}
${{ matrix.service == 'widget-benevolat' && format('API_URL={0}', steps.widget_benevolat_args.outputs.API_URL) || '' }}
${{ matrix.service == 'widget-benevolat' && format('SENTRY_DSN={0}', steps.widget_benevolat_args.outputs.SENTRY_DSN) || '' }}
# Widget Volontariat variables
${{ matrix.service == 'widget-volontariat' && format('ENV={0}', steps.widget_volontariat_args.outputs.ENV) || '' }}
${{ matrix.service == 'widget-volontariat' && format('API_URL={0}', steps.widget_volontariat_args.outputs.API_URL) || '' }}
${{ matrix.service == 'widget-volontariat' && format('SENTRY_DSN={0}', steps.widget_volontariat_args.outputs.SENTRY_DSN) || '' }}
>>>>>>> eaaea09 (Split api folder to manage jobs)