ci: build and push Docker images in Github actions, add arm64 platform

Replaces the previously used Docker Hub autobuild infrastructure.
This allows for more flexible configuration of the build process,
at the expense of some extra maintenance of CI workflow files
required.
This commit is contained in:
Ivan Grokhotkov 2022-05-26 01:07:58 +02:00
parent dc4fcdd2e1
commit fa4256c885
No known key found for this signature in database
GPG Key ID: 1E050E141B280628
3 changed files with 75 additions and 15 deletions

75
.github/workflows/docker.yml vendored Normal file
View File

@ -0,0 +1,75 @@
name: docker
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
on:
push:
branches:
- 'master'
- 'release/*'
tags:
- 'v*.*'
env:
# Platforms to build the image for
BUILD_PLATFORMS: linux/amd64,linux/arm64
DOCKERHUB_REPO: ${{ github.repository_owner }}/idf
jobs:
docker:
# Disable the job in forks
if: ${{ github.repository_owner == 'espressif' }}
runs-on: ubuntu-latest
steps:
# Depending on the branch/tag, set CLONE_BRANCH_OR_TAG variable (used in the Dockerfile
# as a build arg) and TAG_NAME (used when tagging the image).
#
# The following 3 steps cover the alternatives (tag, release branch, master branch):
- name: Set variables (tags)
if: ${{ github.ref_type == 'tag' }}
run: |
echo "CLONE_BRANCH_OR_TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV
echo "TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
- name: Set variables (release branches)
if: ${{ github.ref_type == 'branch' && startsWith(github.ref_name, 'release/') }}
run: |
echo "CLONE_BRANCH_OR_TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV
echo "TAG_NAME=release-${GITHUB_REF_NAME##release/}" >> $GITHUB_ENV
- name: Set variables (main branch)
if: ${{ github.ref_type == 'branch' && github.ref_name == 'master' }}
run: |
echo "CLONE_BRANCH_OR_TAG=master" >> $GITHUB_ENV
echo "TAG_NAME=latest" >> $GITHUB_ENV
# Display the variables set above, just in case.
- name: Check variables
run: |
echo "CLONE_BRANCH_OR_TAG: $CLONE_BRANCH_OR_TAG"
echo "CHECKOUT_REF: $CHECKOUT_REF"
echo "TAG_NAME: $TAG_NAME"
# The following steps are the standard boilerplate from
# https://github.com/marketplace/actions/build-and-push-docker-images
- name: Checkout
uses: actions/checkout@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up QEMU for multiarch builds
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push
uses: docker/build-push-action@v3
with:
context: tools/docker
push: true
tags: ${{ env.DOCKERHUB_REPO }}:${{ env.TAG_NAME }}
platforms: ${{ env.BUILD_PLATFORMS }}
build-args: |
IDF_CLONE_URL=${{ github.server_url }}/${{ github.repository }}.git
IDF_CLONE_BRANCH_OR_TAG=${{ env.CLONE_BRANCH_OR_TAG }}

View File

@ -68,7 +68,6 @@ tools/ci/test_check_kconfigs.py
tools/ci/test_configure_ci_environment.sh tools/ci/test_configure_ci_environment.sh
tools/cmake/convert_to_cmake.py tools/cmake/convert_to_cmake.py
tools/docker/entrypoint.sh tools/docker/entrypoint.sh
tools/docker/hooks/build
tools/esp_app_trace/logtrace_proc.py tools/esp_app_trace/logtrace_proc.py
tools/esp_app_trace/sysviewtrace_proc.py tools/esp_app_trace/sysviewtrace_proc.py
tools/esp_app_trace/test/logtrace/test.sh tools/esp_app_trace/test/logtrace/test.sh

View File

@ -1,14 +0,0 @@
#!/bin/bash
# This file gets executed to build the image on the Docker Hub.
# See https://docs.docker.com/docker-hub/builds/advanced/#build-hook-examples for details.
set -euo pipefail
echo "Building for branch ${SOURCE_BRANCH}, commit ${SOURCE_COMMIT}"
docker build \
--build-arg IDF_CLONE_BRANCH_OR_TAG=${SOURCE_BRANCH} \
--build-arg IDF_CHECKOUT_REF=${SOURCE_COMMIT} \
-f $DOCKERFILE_PATH \
-t $IMAGE_NAME .