Skip to content

Build images

Build images #685

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
cdxgen-image:
additional-image: cdxgen-java
- lang: java11-slim
cdxgen-image:
additional-image: cdxgen-java-slim
- lang: java17
- lang: java17-slim
- 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) || '' }}
- 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) }}
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 }}