build #10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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@v2 | |
- 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 base | |
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: os-base | |
tags: | | |
${{ env.REGISTRY_NAME }}/adhoc/odoo:${{ steps.image-tags.outputs.major }} | |
# Build lower layers | |
# TODO: Upload odoo version. | |
- 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 }}'" | |
} | |
}' |