Skip to content

Commit

Permalink
[WIP] .github: workflows: Use buildah
Browse files Browse the repository at this point in the history
  • Loading branch information
stephanosio committed Mar 23, 2024
1 parent 4c5cb4c commit ab5d820
Showing 1 changed file with 109 additions and 146 deletions.
255 changes: 109 additions & 146 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,20 @@ concurrency:
group: ${{ github.ref }}
cancel-in-progress: true

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

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
Expand All @@ -36,215 +45,169 @@ jobs:
arch: arm64
builder: zephyr-runner-v2-linux-arm64-4xlarge

services:
registry:
image: registry:2
ports:
- 5000:5000

steps:
- name: Checkout
uses: actions/checkout@v3

- name: Generate local metadata for base image
id: meta_ci_base
uses: docker/metadata-action@v4
with:
images: |
localhost:5000/zephyrproject-rtos/ci-base-testing
- name: Generate local metadata for CI image
id: meta_ci
uses: docker/metadata-action@v4
- name: Login to DockerHub
if: ${{ github.event_name != 'pull_request' }}
uses: redhat-actions/podman-login@v1
with:
images: |
localhost:5000/zephyrproject-rtos/ci-testing
registry: docker.io
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Generate local metadata for Developer image
id: meta_developer
uses: docker/metadata-action@v4
- name: Login to GitHub Container Registry
if: ${{ github.event_name != 'pull_request' }}
uses: redhat-actions/podman-login@v1
with:
images: |
localhost:5000/zephyrproject-rtos/zephyr-build-testing
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Generate push metadata for base image
- name: Generate metadata for base image
if: ${{ github.event_name != 'pull_request' }}
id: meta_ci_base_push
id: meta_ci_base
uses: docker/metadata-action@v4
with:
images: |
docker.io/zephyrprojectrtos/ci-base-testing
ghcr.io/zephyrproject-rtos/ci-base-testing
${{ 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 push metadata for CI image
- name: Generate metadata for CI image
if: ${{ github.event_name != 'pull_request' }}
id: meta_ci_push
id: meta_ci
uses: docker/metadata-action@v4
with:
images: |
docker.io/zephyrprojectrtos/ci-testing
ghcr.io/zephyrproject-rtos/ci-testing
${{ 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 push metadata for Developer image
- name: Generate metadata for Developer image
if: ${{ github.event_name != 'pull_request' }}
id: meta_developer_push
id: meta_developer
uses: docker/metadata-action@v4
with:
images: |
docker.io/zephyrprojectrtos/zephyr-build-testing
ghcr.io/zephyrproject-rtos/zephyr-build-testing
${{ 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: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host

- name: Build base docker image
uses: docker/build-push-action@v3
- name: Build base image
uses: redhat-actions/buildah-build@v2
with:
context: .
file: Dockerfile.base
platforms: ${{ matrix.variant.platform }}
push: true
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
# - 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:
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: Login to DockerHub
if: ${{ github.event_name != 'pull_request' }}
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Login to GitHub Container Registry
if: ${{ github.event_name != 'pull_request' }}
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Push base docker image
if: ${{ github.event_name != 'pull_request' }}
uses: stephanosio/[email protected]
with:
src: localhost:5000/zephyrproject-rtos/ci-base-testing:${{ steps.meta_ci_base.outputs.version }}
dst: ${{ steps.meta_ci_base_push.outputs.tags }}

- name: Push CI docker image
if: ${{ github.event_name != 'pull_request' }}
uses: stephanosio/[email protected]
with:
src: localhost:5000/zephyrproject-rtos/ci-testing:${{ steps.meta_ci.outputs.version }}
dst: ${{ steps.meta_ci_push.outputs.tags }}

- name: Push Developer docker image
if: ${{ github.event_name != 'pull_request' }}
uses: stephanosio/[email protected]
with:
src: localhost:5000/zephyrproject-rtos/zephyr-build-testing:${{ steps.meta_developer.outputs.version }}
dst: ${{ steps.meta_developer_push.outputs.tags }}
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: Login to DockerHub
uses: docker/login-action@v2
if: ${{ github.event_name != 'pull_request' }}
uses: redhat-actions/podman-login@v1
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Login to GitHub Container Registry
uses: docker/login-action@v2
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 push metadata for base docker image
id: meta_ci_base_push
- name: Generate metadata for base image
id: meta_ci_base
uses: docker/metadata-action@v4
with:
images: |
docker.io/zephyrprojectrtos/ci-base-testing
ghcr.io/zephyrproject-rtos/ci-base-testing
${{ 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 push metadata for CI image
id: meta_ci_push
- name: Generate metadata for CI image
id: meta_ci
uses: docker/metadata-action@v4
with:
images: |
docker.io/zephyrprojectrtos/ci-testing
ghcr.io/zephyrproject-rtos/ci-testing
${{ 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 push metadata for Developer image
id: meta_developer_push
- name: Generate metadata for Developer image
id: meta_developer
uses: docker/metadata-action@v4
with:
images: |
docker.io/zephyrprojectrtos/zephyr-build-testing
ghcr.io/zephyrproject-rtos/zephyr-build-testing
${{ env.DOCKERHUB_BASE }}/${{ env.DEVELOPER_IMAGE_NAME }}
${{ env.GHCR_BASE }}/${{ env.DEVELOPER_IMAGE_NAME }}
flavor: |
latest=false
tags: |
Expand All @@ -255,46 +218,46 @@ jobs:
- 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 }}"
ci_base_image_name="${{ env.BASE_IMAGE_NAME }}:${{ steps.meta_ci_base.outputs.version }}"
ci_image_name="${{ env.CI_IMAGE_NAME }}:${{ steps.meta_ci.outputs.version }}"
developer_image_name="${{ env.DEVELOPER_IMAGE_NAME }}:${{ steps.meta_developer.outputs.version }}"
ci_base_image="${{ env.GHCR_BASE }}/${ci_base_image_name}"
ci_image="${{ env.GHCR_BASE }}/${ci_image_name}"
developer_image="${{ env.GHCR_BASE }}/${developer_image_name}"
# 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}
podman pull ${ci_base_image}-${arch}
# podman pull ${ci_image}-${arch}
# podman pull ${developer_image}-${arch}
done
# Create multi-architecture image
# Create multi-architecture images
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}
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}
docker manifest push ${ci_base_image}
docker manifest push ${ci_image}
docker manifest push ${developer_image}
# 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 }}
# Tag DockerHub multi-architecture images
podman tag ${ci_base_image} ${{ env.DOCKERHUB_BASE }}/${ci_base_image_name}
# podman tag ${ci_image} ${{ env.DOCKERHUB_BASE }}/${ci_image_name}
# podman tag ${developer_image} ${{ env.DOCKERHUB_BASE }}/${developer_image_name}
- name: Push CI docker image
uses: stephanosio/tag-push-action@v2.1.0
- name: Push base image
uses: redhat-actions/push-to-registry@v2
with:
src: ghcr.io/zephyrproject-rtos/ci-testing:${{ steps.meta_ci_push.outputs.version }}
dst: ${{ steps.meta_ci_push.outputs.tags }}
tags: ${{ steps.meta_ci_base.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 }}
# TODO: Push CI image
# TODO: Push Developer image

0 comments on commit ab5d820

Please sign in to comment.