Skip to content

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

[WIP] .github: workflows: Use buildah

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

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: quay.io/buildah/stable:v1.35.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
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up build environment
run: |
# Install Podman.
dnf -y install podman
# Set XDG_RUNTIME_DIR to ensure that Podman correctly resolves temporary
# directory path.
export XDG_RUNTIME_DIR="/tmp/users/$(id -u)"
echo "XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR" >> $GITHUB_ENV
# Use VFS storage driver because FUSE is not available inside
# unprivileged runner containers.
sed -i 's/driver = .*/driver = "vfs"/' /etc/containers/storage.conf
# - name: Login to DockerHub
# if: ${{ github.event_name != 'pull_request' }}
# run: |
# buildah login -v \
# docker.io \
# -u ${{ secrets.DOCKERHUB_USERNAME }} \
# -p ${{ secrets.DOCKERHUB_TOKEN }}
# - name: Login to GitHub Container Registry
# if: ${{ github.event_name != 'pull_request' }}
# run: |
# buildah login -v \
# ghcr.io \
# -u ${{ github.repository_owner }} \
# -p ${{ secrets.GITHUB_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: |
# docker.io/zephyrprojectrtos/ci-base-testing
ghcr.io/zephyrproject-rtos/ci-base-testing
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: |
# docker.io/zephyrprojectrtos/ci-testing
ghcr.io/zephyrproject-rtos/ci-testing
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: |
# docker.io/zephyrprojectrtos/zephyr-build-testing
ghcr.io/zephyrproject-rtos/zephyr-build-testing
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 docker 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 docker 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
# needs: build
# if: ${{ github.event_name != 'pull_request' }}
# steps:
# - name: Login to DockerHub
# uses: docker/login-action@v2
# with:
# registry: docker.io
# username: ${{ secrets.DOCKERHUB_USERNAME }}
# password: ${{ secrets.DOCKERHUB_TOKEN }}
# - name: Login to GitHub Container Registry
# uses: docker/login-action@v2
# with:
# registry: ghcr.io
# username: ${{ github.repository_owner }}
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: Generate push metadata for base docker image
# id: meta_ci_base_push
# uses: docker/metadata-action@v4
# with:
# images: |
# docker.io/zephyrprojectrtos/ci-base-testing
# ghcr.io/zephyrproject-rtos/ci-base-testing
# flavor: |
# latest=false
# tags: |
# type=ref,event=branch
# type=ref,event=tag
# type=raw,value=latest,enable={{is_default_branch}}
# - name: Generate push metadata for CI image
# id: meta_ci_push
# uses: docker/metadata-action@v4
# with:
# images: |
# docker.io/zephyrprojectrtos/ci-testing
# ghcr.io/zephyrproject-rtos/ci-testing
# flavor: |
# latest=false
# tags: |
# type=ref,event=branch
# type=ref,event=tag
# type=raw,value=latest,enable={{is_default_branch}}
# - name: Generate push metadata for Developer image
# id: meta_developer_push
# uses: docker/metadata-action@v4
# with:
# images: |
# docker.io/zephyrprojectrtos/zephyr-build-testing
# ghcr.io/zephyrproject-rtos/zephyr-build-testing
# 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="ghcr.io/zephyrproject-rtos/ci-base-testing:${{ steps.meta_ci_base_push.outputs.version }}"
# ci_image="ghcr.io/zephyrproject-rtos/ci-testing:${{ steps.meta_ci_push.outputs.version }}"
# developer_image="ghcr.io/zephyrproject-rtos/zephyr-build-testing:${{ steps.meta_developer_push.outputs.version }}"
# # Pull architecture-specific images
# for arch in ${archs[@]}; do
# docker pull ${ci_base_image}-${arch}
# docker pull ${ci_image}-${arch}
# docker 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
# docker manifest create ${ci_base_image} ${ci_base_image_amend_flags}
# docker manifest create ${ci_image} ${ci_image_amend_flags}
# docker manifest create ${developer_image} ${developer_image_amend_flags}
# docker manifest push ${ci_base_image}
# docker manifest push ${ci_image}
# docker 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 }}