community.mysql/.github/workflows/build-docker-image.yml
2024-06-06 22:20:52 +02:00

242 lines
7.3 KiB
YAML

---
name: Build Docker Image for ansible-test
on: # yamllint disable-line rule:truthy
workflow_call:
inputs:
registry:
required: true
type: string
image_name:
required: true
type: string
context:
required: true
type: string
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
include:
- from: ubuntu2004
db_client: mariadb
python_minor: '8'
connector_name: pymysql
connector_major: '0'
connector_minor: '9'
connector_release: '3'
- from: ubuntu2004
db_client: mariadb
python_minor: '8'
connector_name: mysqlclient
connector_major: '2'
connector_minor: '0'
connector_release: '1'
- from: ubuntu2204
db_client: mariadb
python_minor: '9' # RHEL9 uses 3.9 by default
connector_name: pymysql
# Same ver. as RHEL package python3-PyMySQL
connector_major: '0'
connector_minor: '10'
connector_release: '1'
- from: ubuntu2004
db_client: mariadb
python_minor: '9'
connector_name: mysqlclient
connector_major: '2'
connector_minor: '0'
connector_release: '3'
- from: ubuntu2204
db_client: mariadb
python_minor: '10'
connector_name: pymysql
connector_major: '1'
connector_minor: '0'
connector_release: '2'
- from: ubuntu2204
db_client: mariadb
python_minor: '10'
connector_name: mysqlclient
connector_major: '2'
connector_minor: '1'
connector_release: '1'
- from: ubuntu2204
db_client: mariadb
python_minor: '11' # RHEL9 uses 3.9 by default
connector_name: pymysql
# Same ver. as RHEL package python3.11-PyMySQL
connector_major: '1'
connector_minor: '0'
connector_release: '2'
- from: ubuntu2204
db_client: mariadb
python_minor: '12' # RHEL9 uses 3.9 by default
connector_name: pymysql
# Same ver. as RHEL package python3.12-PyMySQL
connector_major: '1'
connector_minor: '1'
connector_release: '0'
- from: ubuntu2004
db_client: mysql
python_minor: '8'
connector_name: pymysql
connector_major: '0'
connector_minor: '9'
connector_release: '3'
- from: ubuntu2004
db_client: mysql
python_minor: '8'
connector_name: mysqlclient
connector_major: '2'
connector_minor: '0'
connector_release: '1'
- from: ubuntu2004
db_client: mysql
python_minor: '9'
connector_name: pymysql
connector_major: '0'
connector_minor: '10'
connector_release: '1'
- from: ubuntu2004
db_client: mysql
python_minor: '9'
connector_name: mysqlclient
connector_major: '2'
connector_minor: '0'
connector_release: '3'
- from: ubuntu2204
db_client: mysql
python_minor: '10'
connector_name: pymysql
connector_major: '1'
connector_minor: '0'
connector_release: '2'
- from: ubuntu2204
db_client: mysql
python_minor: '10'
connector_name: mysqlclient
connector_major: '2'
connector_minor: '1'
connector_release: '1'
- from: ubuntu2204
db_client: mysql
python_minor: '11' # RHEL9 uses 3.9 by default
connector_name: pymysql
# Same ver. as RHEL package python3.11-PyMySQL
connector_major: '1'
connector_minor: '0'
connector_release: '2'
- from: ubuntu2204
db_client: mysql
python_minor: '12' # RHEL9 uses 3.9 by default
connector_name: pymysql
# Same ver. as RHEL package python3.12-PyMySQL
connector_major: '1'
connector_minor: '1'
connector_release: '0'
env:
connector_version:
"${{ matrix.connector_major }}.\
${{ matrix.connector_minor }}.\
${{ matrix.connector_release }}"
steps:
# Requirement to use 'context' in docker/build-push-action@v3
- name: Checkout repository
uses: actions/checkout@v3
# https://github.com/docker/login-action
- name: Log into registry ghcr.io
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# https://github.com/docker/metadata-action
- name: Extract Docker metadata (tags, labels)
id: meta
uses: docker/metadata-action@v4
with:
images:
" ghcr.io\
/${{ github.repository }}\
/test-container-${{ matrix.db_client }}-\
py3${{ matrix.python_minor }}-\
${{ matrix.connector_name }}${{ matrix.connector_major }}\
${{ matrix.connector_minor }}${{ matrix.connector_release }}"
tags: latest
# Setting up Docker Buildx with docker-container driver is required
# at the moment to be able to use a subdirectory with Git context
#
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
# https://github.com/docker/build-push-action
- name: Build and push Docker image with Buildx
id: build-and-push
uses: docker/build-push-action@v3
with:
context: |
FROM quay.io/ansible/${{ matrix.from }}-test-container:main
RUN apt-get update -y && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y \
--no-install-recommends && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
--no-install-recommends \
python3${{ matrix.python_minor }} \
python3${{ matrix.python_minor }}-dev \
iproute2 \
build-essential \
if [[ "${{ matrix.db_client }}" == "mysql" ]]; then
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \
--no-install-recommends default-libmysqlclient-dev \
mysql-client
else
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \
--no-install-recommends mariadb-client
fi
RUN python3${{ matrix.python_minor }} -m pip install \
--disable-pip-version-check \
--no-cache-dir \
cffi \
${{ matrix.connector_name }}==$connector_version
ENV container=docker
CMD ["/sbin/init"]
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max