Skip to content

[WIP] .github: workflows: Use buildah #69

[WIP] .github: workflows: Use buildah

[WIP] .github: workflows: Use buildah #69

Workflow file for this run

name: CI
on:
push:
branches:
- testing-main
- v*-branch
tags:
- v*
pull_request:
branches:
- testing-main
- v*-branch
permissions:
packages: write
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Build (${{ matrix.variant.platform }})
runs-on:
group: ${{ matrix.variant.builder }}
container:
image: ghcr.io/zephyrproject-rtos/image-build:v1.0.0
strategy:
fail-fast: true
matrix:
variant:
- platform: linux/amd64
arch: amd64
builder: zephyr-runner-v2-linux-x64-4xlarge
- platform: linux/arm64
arch: arm64
builder: zephyr-runner-v2-linux-arm64-4xlarge
env:
DOCKERHUB_BASE: docker.io/zephyrprojectrtos
GHCR_BASE: ghcr.io/zephyrproject-rtos
BASE_IMAGE_NAME: ci-base-testing
CI_IMAGE_NAME: ci-testing
DEVELOPER_IMAGE_NAME: zephyr-build-testing
steps:
- name: Checkout
uses: actions/checkout@v3
# - name: Set up build environment
# run: |
# # Install Podman.
# dnf -y install podman
# # Use VFS storage driver because FUSE is not available inside
# # unprivileged runner containers.
# sed -i 's/driver = .*/driver = "vfs"/' /etc/containers/storage.conf
# # Set XDG_RUNTIME_DIR to ensure that Podman correctly resolves temporary
# # directory path.
# export XDG_RUNTIME_DIR="/tmp/users/$(id -u)"
# mkdir -p $XDG_RUNTIME_DIR
# echo "XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR" >> $GITHUB_ENV
# # Create a dummy Docker config file because podman-login action
# # requires it.
# mkdir -p $HOME/.docker
# echo '{ "auths": {} }' > $HOME/.docker/config.json
- name: Login to DockerHub
if: ${{ github.event_name != 'pull_request' }}
uses: redhat-actions/podman-login@v1
with:
registry: docker.io
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
if: ${{ github.event_name != 'pull_request' }}
uses: redhat-actions/podman-login@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate metadata for base image
if: ${{ github.event_name != 'pull_request' }}
id: meta_ci_base
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_BASE }}/${{ env.BASE_IMAGE_NAME }}
${{ env.GHCR_BASE }}/${{ env.BASE_IMAGE_NAME }}
flavor: |
latest=false
suffix=-${{ matrix.variant.arch }}
tags: |
type=ref,event=branch
type=ref,event=tag
- name: Generate metadata for CI image
if: ${{ github.event_name != 'pull_request' }}
id: meta_ci
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_BASE }}/${{ env.CI_IMAGE_NAME }}
${{ env.GHCR_BASE }}/${{ env.CI_IMAGE_NAME }}
flavor: |
latest=false
suffix=-${{ matrix.variant.arch }}
tags: |
type=ref,event=branch
type=ref,event=tag
- name: Generate metadata for Developer image
if: ${{ github.event_name != 'pull_request' }}
id: meta_developer
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_BASE }}/${{ env.DEVELOPER_IMAGE_NAME }}
${{ env.GHCR_BASE }}/${{ env.DEVELOPER_IMAGE_NAME }}
flavor: |
latest=false
suffix=-${{ matrix.variant.arch }}
tags: |
type=ref,event=branch
type=ref,event=tag
- name: Build base image
uses: redhat-actions/buildah-build@v2
with:
context: .
containerfiles: Dockerfile.base
tags: ${{ steps.meta_ci_base.outputs.tags }}
labels: ${{ steps.meta_ci_base.outputs.labels }}
# - name: Build CI image
# uses: docker/build-push-action@v3
# with:
# context: .
# file: Dockerfile.ci
# platforms: ${{ matrix.variant.platform }}
# push: true
# tags: ${{ steps.meta_ci.outputs.tags }}
# labels: ${{ steps.meta_ci.outputs.labels }}
# build-args: |
# BASE_IMAGE=localhost:5000/zephyrproject-rtos/ci-base-testing:${{ steps.meta_ci_base.outputs.version }}
# - name: Build Developer image
# uses: docker/build-push-action@v3
# with:
# context: .
# file: Dockerfile.devel
# platforms: ${{ matrix.variant.platform }}
# push: true
# tags: ${{ steps.meta_developer.outputs.tags }}
# labels: ${{ steps.meta_developer.outputs.labels }}
# build-args: |
# BASE_IMAGE=localhost:5000/zephyrproject-rtos/ci-testing:${{ steps.meta_ci.outputs.version }}
- name: Push base image
uses: redhat-actions/push-to-registry@v2
with:
tags: ${{ steps.meta_ci_base.outputs.tags }}
merge:
name: Merge
runs-on:
group: zephyr-runner-v2-linux-x64-4xlarge
container:
image: ghcr.io/zephyrproject-rtos/image-build:v1.0.0
needs: build
if: ${{ github.event_name != 'pull_request' }}
steps:
# - name: Set up build environment
# run: |
# # Install Podman.
# dnf -y install podman
# # Use VFS storage driver because FUSE is not available inside
# # unprivileged runner containers.
# sed -i 's/driver = .*/driver = "vfs"/' /etc/containers/storage.conf
# # Set XDG_RUNTIME_DIR to ensure that Podman correctly resolves temporary
# # directory path.
# export XDG_RUNTIME_DIR="/tmp/users/$(id -u)"
# mkdir -p $XDG_RUNTIME_DIR
# echo "XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR" >> $GITHUB_ENV
# # Create a dummy Docker config file because podman-login action
# # requires it.
# mkdir -p $HOME/.docker
# echo '{ "auths": {} }' > $HOME/.docker/config.json
- name: Login to DockerHub
if: ${{ github.event_name != 'pull_request' }}
uses: redhat-actions/podman-login@v1
with:
registry: docker.io
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
if: ${{ github.event_name != 'pull_request' }}
uses: redhat-actions/podman-login@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate metadata for base image
id: meta_ci_base
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_BASE }}/${{ env.BASE_IMAGE_NAME }}
${{ env.GHCR_BASE }}/${{ env.BASE_IMAGE_NAME }}
flavor: |
latest=false
tags: |
type=ref,event=branch
type=ref,event=tag
type=raw,value=latest,enable={{is_default_branch}}
- name: Generate metadata for CI image
id: meta_ci
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_BASE }}/${{ env.CI_IMAGE_NAME }}
${{ env.GHCR_BASE }}/${{ env.CI_IMAGE_NAME }}
flavor: |
latest=false
tags: |
type=ref,event=branch
type=ref,event=tag
type=raw,value=latest,enable={{is_default_branch}}
- name: Generate metadata for Developer image
id: meta_developer
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_BASE }}/${{ env.DEVELOPER_IMAGE_NAME }}
${{ env.GHCR_BASE }}/${{ env.DEVELOPER_IMAGE_NAME }}
flavor: |
latest=false
tags: |
type=ref,event=branch
type=ref,event=tag
type=raw,value=latest,enable={{is_default_branch}}
- name: Create multi-architecture image
run: |
archs=(amd64 arm64)
ci_base_image="${{ env.GHCR_BASE }}/${{ env.BASE_IMAGE_NAME }}:${{ steps.meta_ci_base.outputs.version }}"
ci_image="${{ env.GHCR_BASE }}/${{ env.CI_IMAGE_NAME }}:${{ steps.meta_ci.outputs.version }}"
developer_image="${{ env.GHCR_BASE }}/${{ env.DEVELOPER_IMAGE_NAME }}:${{ steps.meta_developer.outputs.version }}"
# Pull architecture-specific images
for arch in ${archs[@]}; do
podman pull ${ci_base_image}-${arch}
podman pull ${ci_image}-${arch}
podman pull ${developer_image}-${arch}
done
# Create multi-architecture image
for arch in ${archs[@]}; do
ci_base_image_amend_flags+="--amend ${ci_base_image}-${arch} "
ci_image_amend_flags+="--amend ${ci_image}-${arch} "
developer_image_amend_flags+="--amend ${developer_image}-${arch} "
done
podman manifest create ${ci_base_image} ${ci_base_image_amend_flags}
podman manifest create ${ci_image} ${ci_image_amend_flags}
podman manifest create ${developer_image} ${developer_image_amend_flags}
podman manifest push ${ci_base_image}
podman manifest push ${ci_image}
podman manifest push ${developer_image}
# - name: Push base docker image
# uses: stephanosio/[email protected]
# with:
# src: ghcr.io/zephyrproject-rtos/ci-base-testing:${{ steps.meta_ci_base_push.outputs.version }}
# dst: ${{ steps.meta_ci_base_push.outputs.tags }}
# - name: Push CI docker image
# uses: stephanosio/[email protected]
# with:
# src: ghcr.io/zephyrproject-rtos/ci-testing:${{ steps.meta_ci_push.outputs.version }}
# dst: ${{ steps.meta_ci_push.outputs.tags }}
# - name: Push Developer docker image
# uses: stephanosio/[email protected]
# with:
# src: ghcr.io/zephyrproject-rtos/zephyr-build-testing:${{ steps.meta_developer_push.outputs.version }}
# dst: ${{ steps.meta_developer_push.outputs.tags }}