Skip to content

build

build #19

Workflow file for this run

name: build
on:
workflow_dispatch:
inputs:
# TODO: skip geoIP check
odoo_target:
description: "Odoo Version"
required: true
type: choice
options:
- "18.0"
default: "18.0"
odoo_build_force:
description: "Use unique numbers to force to rebuild base image"
required: false
type: number
default: 0
odoo_adhoc_build_force:
description: "Use unique numbers to force to rebuild oboo by adhoc image"
required: false
type: number
default: 0
repository_dispatch:
types:
- webhook
concurrency:
# Gruop by Odoo Version
group: ${{ github.event.inputs.odoo_target || github.event.client_payload.odoo_target }}
cancel-in-progress: true
jobs:
geoip:
name: GeoIp
runs-on: ubuntu-latest
steps:
- name: Check if GeoIP has any update
id: get-last-modified
run: |
MAXMIND_UPDATE=$(curl -I -sL -u ${{ secrets.MAXMIND_LICENSE_USR }}:${{ secrets.MAXMIND_LICENSE_KEY }} 'https://download.maxmind.com/geoip/databases/GeoLite2-City/download?suffix=tar.gz' | grep -i 'Last-Modified')
MAXMIND_UPDATE=${MAXMIND_UPDATE#*: }
MAXMIND_UPDATE=$(date -d "$MAXMIND_UPDATE" +"%Y%m%d%H%M%S")
echo "last-modified=$MAXMIND_UPDATE" >> $GITHUB_OUTPUT
outputs:
last-modified: ${{ steps.get-last-modified.outputs.last-modified }}
build:
name: Build
runs-on: ubuntu-latest
needs:
- geoip
env:
ODOO_TARGET: ${{ github.event.inputs.odoo_target || github.event.client_payload.odoo_target }}
ODOO_BUILD: ${{ github.event.inputs.odoo_build_force || github.event.client_payload.odoo_build_force || 0 }}
ODOO_BY_ADHOC_BUILD: ${{ github.event.inputs.odoo_adhoc_build_force || github.event.client_payload.odoo_adhoc_build_force || 0 }}
MAXMIND_GEOIP_UPDATE: ${{ needs.geoip.outputs.last-modified }}
REGISTRY_NAME: "docker.io"
DOCKER_IMAGE: "adhoc/odoo-adhoc"
# TODO: "" remove for prod
DOCKER_IMAGE_TAG_SUFIX: ".next"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Odoo requirements
run: |
curl -Ls https://raw.githubusercontent.com/odoo/odoo/${{ env.ODOO_TARGET }}/requirements.txt -o ${{ env.ODOO_TARGET }}/requirements/odoo/base/requirements.txt
- name: Get odoo build
id: get-odoo-build
run: echo "date=$(/bin/date -u "+%Y%m")" >> $GITHUB_OUTPUT
- name: Get odoo build
id: get-odoo-adhoc-build
run: echo "date=$(/bin/date -u "+%Y.%m.%d")" >> $GITHUB_OUTPUT
- name: image tags
id: image-tags
run: |
IMAGE_FULL=${{ env.REGISTRY_NAME }}/${{ env.DOCKER_IMAGE }}
echo "image=$IMAGE_FULL" >> $GITHUB_OUTPUT
MAJOR_TAG="${{ env.ODOO_TARGET }}${{ env.DOCKER_IMAGE_TAG_SUFIX }}"
echo "major=$MAJOR_TAG" >> $GITHUB_OUTPUT
DAILY_TAG=$MAJOR_TAG.${{ steps.get-odoo-adhoc-build.outputs.date }}
echo "daily=$DAILY_TAG" >> $GITHUB_OUTPUT
echo "daily=$DAILY_TAG" >> $GITHUB_OUTPUT
BUILD_TAG=$DAILY_TAG.${{ github.run_number }}
echo "build=$BUILD_TAG" >> $GITHUB_OUTPUT
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# Login to Docker Hub (for pushing the final image)
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY_NAME }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build dev
uses: docker/build-push-action@v6
with:
cache-from: type=gha
cache-to: type=gha,mode=max
context: .
push: true
secrets: |
MAXMIND_LICENSE_USR=${{ secrets.MAXMIND_LICENSE_USR }}
MAXMIND_LICENSE_KEY=${{ secrets.MAXMIND_LICENSE_KEY }}
SAAS_PROVIDER_URL=${{ secrets.SAAS_PROVIDER_URL }}
SAAS_PROVIDER_TOKEN=${{ secrets.SAAS_PROVIDER_TOKEN }}
GITHUB_BOT_TOKEN=${{ secrets.BOT_TOKEN_GITHUB }}
build-args: |
MAXMIND_UPDATE=${{ env.MAXMIND_UPDATE }}
ODOO_VERSION=${{ env.ODOO_TARGET }}
DOCKER_IMAGE=${{ env.DOCKER_IMAGE }}
ODOO_MINOR_VERSION=${{ steps.get-odoo-adhoc-build.outputs.date }}
ODOO_BUILD=${{ steps.get-odoo-build.outputs.date }}.${{ env.ODOO_BUILD }}
ODOO_BY_ADHOC_BUILD=${{ steps.get-odoo-adhoc-build.outputs.date }}.${{ github.run_number }}.${{ env.ODOO_BY_ADHOC_BUILD }}
target: dev
tags: |
${{ steps.image-tags.outputs.image }}:${{ steps.image-tags.outputs.major }}.dev
${{ steps.image-tags.outputs.image }}:${{ steps.image-tags.outputs.daily }}.dev
${{ steps.image-tags.outputs.image }}:${{ steps.image-tags.outputs.build }}.dev
- name: Build prod
uses: docker/build-push-action@v6
with:
cache-from: type=gha
cache-to: type=gha,mode=max
context: .
push: true
secrets: |
MAXMIND_LICENSE_USR=${{ secrets.MAXMIND_LICENSE_USR }}
MAXMIND_LICENSE_KEY=${{ secrets.MAXMIND_LICENSE_KEY }}
SAAS_PROVIDER_URL=${{ secrets.SAAS_PROVIDER_URL }}
SAAS_PROVIDER_TOKEN=${{ secrets.SAAS_PROVIDER_TOKEN }}
GITHUB_BOT_TOKEN=${{ secrets.BOT_TOKEN_GITHUB }}
build-args: |
MAXMIND_UPDATE=${{ env.MAXMIND_UPDATE }}
ODOO_VERSION=${{ env.ODOO_TARGET }}
DOCKER_IMAGE=${{ env.DOCKER_IMAGE }}
ODOO_MINOR_VERSION=${{ steps.get-odoo-adhoc-build.outputs.date }}
ODOO_BUILD=${{ steps.get-odoo-build.outputs.date }}.${{ env.ODOO_BUILD }}
ODOO_BY_ADHOC_BUILD=${{ steps.get-odoo-adhoc-build.outputs.date }}.${{ github.run_number }}.${{ env.ODOO_BY_ADHOC_BUILD }}
target: prod
tags: |
${{ steps.image-tags.outputs.image }}:${{ steps.image-tags.outputs.major }}
${{ steps.image-tags.outputs.image }}:${{ steps.image-tags.outputs.daily }}
${{ steps.image-tags.outputs.image }}:${{ steps.image-tags.outputs.build }}
outputs:
image-daily-tag: ${{ steps.image-tags.outputs.daily }}
notify:
name: notify that image build is complete
runs-on: ubuntu-latest
needs:
- build
env:
DOCKER_IMAGE: "adhoc/odoo-adhoc"
steps:
- name: notify daily build
id: notify
run: |
curl -X POST -H "Content-Type: application/json" "${{ secrets.SAAS_PROVIDER_URL }}/saas_provider/hubhook/${{ secrets.SAAS_PROVIDER_TOKEN }}" -d '{
"callback_url": "not set",
"repository": {
"repo_name": "'${{ env.DOCKER_IMAGE }}'",
"status": "Active"
},
"push_data": {
"tag": "'${{ needs.build.outputs.image-daily-tag }}'"
}
}'