Skip to content

Build Docker Containers #42

Build Docker Containers

Build Docker Containers #42

Workflow file for this run

##
## Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
##
## This file is part of MLonMCU.
## See /~https://github.com/tum-ei-eda/mlonmcu.git for further info.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
name: Build Docker Containers
on:
workflow_dispatch:
inputs:
enable_cmake:
description: 'Install up-to-date CMake version'
required: true
default: "true"
version:
description: 'Version Tag'
required: true
default: "latest"
enable_bench:
description: 'Build very large image for benchmarking'
required: true
default: "false"
template:
description: 'Used environment.yml template for benchmarking'
required: true
default: "default"
jobs:
minimal:
name: Build minimal image for CI
runs-on: ubuntu-latest
steps:
- name: Maximize build space
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 32768
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Update package version
run: |
./scripts/update_version.sh
- name: Lowercase repository url
id: lowered
uses: ASzc/change-string-case-action@v6
with:
string: ${{ github.repository }}
- name: Build and push (CMake)
uses: docker/build-push-action@v6
with:
context: .
file: docker/Dockerfile
pull: true
push: true
target: cmake-install
build-args: |
ENABLE_CMAKE=${{ github.event.inputs.enable_cmake}}
MLONMCU_TEMPLATE=${{ github.event.inputs.template }}
cache-from: type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-cmake:${{ github.event.inputs.version }}
cache-to: type=inline
tags: ghcr.io/${{ steps.lowered.outputs.lowercase }}-cmake:${{ github.event.inputs.version }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: docker/Dockerfile
pull: true
push: true
target: mlonmcu-ci
build-args: |
ENABLE_CMAKE=${{ github.event.inputs.enable_cmake}}
MLONMCU_TEMPLATE=${{ github.event.inputs.template }}
cache-from: |
type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-cmake:${{ github.event.inputs.version }}
type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-ci:${{ github.event.inputs.version }}
cache-to: type=inline
tags: ghcr.io/${{ steps.lowered.outputs.lowercase }}-ci:${{ github.event.inputs.version }}
base:
name: Build base image for users
runs-on: ubuntu-latest
needs: minimal
steps:
- name: Maximize build space
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 32768
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Update package version
run: |
./scripts/update_version.sh
- name: Lowercase repository url
id: lowered
uses: ASzc/change-string-case-action@v6
with:
string: ${{ github.repository }}
# - name: Build and push
# uses: docker/build-push-action@v6
# with:
# context: .
# file: docker/Dockerfile
# pull: true
# push: true
# target: mlonmcu
# cache-from: |
# type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-cmake:${{ github.event.inputs.version }}
# type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-ci:${{ github.event.inputs.version }}
# cache-to: type=inline
# tags: ghcr.io/${{ steps.lowered.outputs.lowercase }}:${{ github.event.inputs.version }}
- name: Login to DockerHub
uses: docker/login-action@v3
if: ${{ github.repository == 'tum-ei-eda/mlonmcu' }}
with:
registry: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push to Docker Hub
uses: docker/build-push-action@v6
if: ${{ github.repository == 'tum-ei-eda/mlonmcu' }}
with:
context: .
file: docker/Dockerfile
pull: true
push: true
target: mlonmcu
build-args: |
ENABLE_CMAKE=${{ github.event.inputs.enable_cmake}}
MLONMCU_TEMPLATE=${{ github.event.inputs.template }}
cache-from: |
type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-cmake:${{ github.event.inputs.version }}
type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-ci:${{ github.event.inputs.version }}
cache-to: type=inline
tags: ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_NAMESPACE }}/mlonmcu:${{ github.event.inputs.version }}
bench:
name: Build large image for benchmarking
runs-on: ubuntu-latest
needs: base
if: ${{ github.event.inputs.enable_bench }} == "true"
steps:
- name: Maximize build space
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 32768
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Lowercase repository url
id: lowered
uses: ASzc/change-string-case-action@v6
with:
string: ${{ github.repository }}
# - name: Build and push
# uses: docker/build-push-action@v6
# with:
# context: .
# file: docker/Dockerfile
# pull: true
# # push: true
# target: mlonmcu-bench
# build-args: |
# MLONMCU_TEMPLATE=${{ github.event.inputs.template}}
# cache-from: |
# type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-cmake:${{ github.event.inputs.version }}
# type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-ci:${{ github.event.inputs.version }}
# type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}:${{ github.event.inputs.version }}
# cache-to: type=inline
# tags: ghcr.io/${{ steps.lowered.outputs.lowercase }}-bench:${{ github.event.inputs.version }}
- name: Login to DockerHub
uses: docker/login-action@v3
if: ${{ github.repository == 'tum-ei-eda/mlonmcu' }}
with:
registry: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push to Docker Hub
uses: docker/build-push-action@v6
if: ${{ github.repository == 'tum-ei-eda/mlonmcu' }}
with:
context: .
file: docker/Dockerfile
push: true
target: mlonmcu-bench
build-args: |
ENABLE_CMAKE=${{ github.event.inputs.enable_cmake}}
MLONMCU_TEMPLATE=${{ github.event.inputs.template }}
cache-from: |
type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-cmake:${{ github.event.inputs.version }}
type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}-ci:${{ github.event.inputs.version }}
type=registry,ref=ghcr.io/${{ steps.lowered.outputs.lowercase }}:${{ github.event.inputs.version }}
cache-to: type=inline
tags: ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_NAMESPACE }}/mlonmcu-bench:${{ github.event.inputs.template }}-${{ github.event.inputs.version }}