Skip to content

Build images

Build images #687

name: Upload base images
on:
schedule:
- cron: "0 8 * * *"
push:
branches:
- master
tags:
- 'v*'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
REPO: ghcr.io
TAG: v11
TEAM: cyclonedx
jobs:
images:
if: github.repository == 'CycloneDX/cdxgen'
strategy:
fail-fast: true
matrix:
image:
# - lang: dotnet6
# fix-qemu: true
# skip-arm: true
# base-image:
# additional-image: bci-dotnet
# cdxgen-image:
# additional-image: cdxgen-dotnet
# - lang: dotnet6
# distro: debian
#
# - lang: dotnet7
# skip-arm: true
#
# - lang: dotnet8
# skip-arm: true
#
# - lang: dotnet8
# distro: debian
#
# - lang: dotnet9
# skip-arm: true
#
# - lang: dotnet9
# distro: debian
#
# - lang: java8
# distro: temurin
- lang: java11
runner: [ 'self-hosted', 'Linux', 'ARM64' ]
base-image:
additional-image: java11-slim
cdxgen-image:
additional-image: cdxgen-java
additional-image2: cdxgen-java11-slim
additional-image3: cdxgen-java-slim
- lang: java17
runner: [ 'self-hosted', 'Linux' ]
- lang: java17-slim
runner: [ 'self-hosted', 'Linux' ]
# - lang: java21
# distro: temurin
#
# - lang: node20
# cdxgen-image:
# additional-image: cdxgen-node
#
# - lang: python36
#
# - lang: python39
# distro: opensuse
#
# - lang: python310
# distro: opensuse
#
# - lang: python311
#
# - lang: python312
# base-image:
# lang: lang
# cdxgen-image:
# additional-image: cdxgen-python
#
# - lang: ruby25
# fix-qemu: true
# skip-arm: true
# base-image:
# name: sle
#
# - lang: ruby26
# distro: debian
# runner: macos-hosted
# skip-arm: true
#
# - lang: ruby33
# distro: debian
# runner: macos-hosted
#
# - lang: ruby34
# distro: debian
# runner: macos-hosted
#
# - lang: swift6
# distro: debian
# runner: macos-hosted
# base-image:
# additional-image: debian-swift
# cdxgen-image:
# additional-image: cdxgen-debian-swift
#
# - lang: rolling
# distro: opensuse
# base-image:
# lang: lang
# cdxgen-image:
# skip-tags: true
runs-on: ${{ matrix.image.runner || 'ubuntu-24.04' }}
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
if: ${{ ! matrix.image.runner }}
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
if: ${{ ! matrix.image.runner }}
uses: docker/setup-buildx-action@v3
- name: QEMU workaround
if: matrix.image.fix-qemu
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Base image
- name: Extract metadata (tags, labels) for Docker base-image
id: base-metadata
uses: docker/metadata-action@v5
with:
images: |
${{ env.REPO }}/${{ env.TEAM }}/${{ matrix.image.base-image.name || matrix.image.distro || 'bci' }}-${{ matrix.image.base-image.lang || matrix.image.lang }}
${{ matrix.image.base-image.additional-image && format('{0}/{1}/{2}', env.REPO, env.TEAM, matrix.image.base-image.additional-image) || '' }}
- name: Build and push Docker base-image
uses: docker/build-push-action@v5
with:
context: .
file: ci/base-images/${{ matrix.image.distro || 'sle' }}/Dockerfile.${{ matrix.image.lang }}
platforms: linux/amd64${{ ! matrix.image.skip-arm && ',linux/arm64' || '' }}
push: true
tags: ${{ steps.base-metadata.outputs.tags }}
labels: ${{ steps.base-metadata.outputs.labels }}
# cdxgen image
- name: Extract metadata (tags, labels) for Docker cdxgen-image
id: cdxgen-metadata
uses: docker/metadata-action@v5
with:
images: |
${{ env.REPO }}/${{ env.TEAM }}/cdxgen${{ matrix.image.distro && format('-{0}', matrix.image.distro) }}-${{ matrix.image.lang }}
${{ matrix.image.cdxgen-image.additional-image && format('{0}/{1}/{2}', env.REPO, env.TEAM, matrix.image.cdxgen-image.additional-image) || '' }}
${{ matrix.image.cdxgen-image.additional-image2 && format('{0}/{1}/{2}', env.REPO, env.TEAM, matrix.image.cdxgen-image.additional-image2) || '' }}
${{ matrix.image.cdxgen-image.additional-image3 && format('{0}/{1}/{2}', env.REPO, env.TEAM, matrix.image.cdxgen-image.additional-image3) || '' }}
- name: Build and push Docker cdxgen-image for master
uses: docker/build-push-action@v5
if: github.ref == 'refs/heads/master'
with:
context: .
file: ci/base-images/cdxgen/${{ matrix.image.distro }}/Dockerfile.${{ matrix.image.lang }}
platforms: linux/amd64${{ ! matrix.image.skip-arm && ',linux/arm64' || '' }}
push: true
tags: |
${{ env.REPO }}/${{ env.TEAM }}/cdxgen${{ matrix.image.distro && format('-{0}', matrix.image.distro) }}-${{ matrix.image.lang }}:${{ env.TAG }}
${{ matrix.image.cdxgen-image.additional-image && format('{0}/{1}/{2}:{3}', env.REPO, env.TEAM, matrix.image.cdxgen-image.additional-image, env.TAG) }}
${{ matrix.image.cdxgen-image.additional-image2 && format('{0}/{1}/{2}:{3}', env.REPO, env.TEAM, matrix.image.cdxgen-image.additional-image2, env.TAG) }}
${{ matrix.image.cdxgen-image.additional-image3 && format('{0}/{1}/{2}:{3}', env.REPO, env.TEAM, matrix.image.cdxgen-image.additional-image3, env.TAG) }}
labels: ${{ steps.cdxgen-metadata.outputs.labels }}
- name: Build and push Docker cdxgen-image for tag
uses: docker/build-push-action@v5
# if: ${{ startsWith(github.ref, 'refs/tags/') && ! matrix.image.cdxgen-image.skip-tags }}
with:
context: .
file: ci/base-images/cdxgen/${{ matrix.image.distro }}/Dockerfile.${{ matrix.image.lang }}
platforms: linux/amd64${{ ! matrix.image.skip-arm && ',linux/arm64' || '' }}
push: true
tags: ${{ steps.cdxgen-metadata.outputs.tags }}
labels: ${{ steps.cdxgen-metadata.outputs.labels }}