Skip to content

Commit

Permalink
Docker build with matrix
Browse files Browse the repository at this point in the history
  • Loading branch information
fcladera committed Feb 1, 2024
1 parent 941cad7 commit 322f530
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 114 deletions.
55 changes: 0 additions & 55 deletions .github/workflows/docker-build-jetson.yaml

This file was deleted.

55 changes: 0 additions & 55 deletions .github/workflows/docker-build-x86.yaml

This file was deleted.

133 changes: 133 additions & 0 deletions .github/workflows/docker-build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
name: docker-build

# Only build base when any of the files in the base directory are modified
on:
push:
branches: [master, build_jetson]
tags:
- '*'
workflow_dispatch:
schedule:
- cron: '0 0 * * 0'

jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64

steps:
# -
# name: Free Disk Space
# uses: jlumbroso/free-disk-space@main
# with:
# tool-cache: true
-
name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
-
name: Checkout
uses: actions/checkout@v4
-
name: Set platform-specific build-args
id: set_build_args
run: |
export $(cat build.bash | grep UPSTREAM_X86_64 | sed 's/^export //')
export $(cat build.bash | grep UPSTREAM_AARCH64 | sed 's/^export //')
if [ "${{ matrix.platform }}" = "linux/amd64" ]; then
echo "upstream_image=$UPSTREAM_X86_64" >> $GITHUB_ENV
elif [ "${{ matrix.platform }}" = "linux/arm64" ]; then
echo "upstream_image=$UPSTREAM_AARCH64" >> $GITHUB_ENV
else
echo "Architecture not supported"
exit 1
fi
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: |
kumarrobotics/dcist-master
-
name: Set up QEMU
uses: docker/setup-qemu-action@v3
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v5
with:
context: "{{defaultContext}}:dcist-master"
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
tags: ${{ steps.meta.outputs.tags }}
build-args: upstream_image=${{ env.upstream_image }}
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
-
name: Export digest
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
-
name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest
needs:
- build
steps:
-
name: Download digests
uses: actions/download-artifact@v4
with:
path: /tmp/digests
pattern: digests-*
merge-multiple: true
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
-
name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
-
name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ TL;DR:
- It copies the `ws` main dcist workspace and builds it.
- It provides helper scripts `build.bash`, `run.bash` and `join.bash`

**Important: Only tagged versions are pushed as the `latest` image.**

### How to use?
```
docker pull kumarrobotics/dcist-master:latest
Expand All @@ -25,3 +23,12 @@ docker pull kumarrobotics/dcist-master:latest
```
./build.bash dcist-master
```

### Notes on image building

**Important: Only tagged versions are pushed as the `latest` image.**

Github actions build and push docker images for `kumarrobotics/dcist-master` in
Docker Hub. The upstream image is different for x86_64 and arm64, and it can be
defined in `build.bash`.

6 changes: 4 additions & 2 deletions build.bash
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ set -eo pipefail
# Upstream images for x86_64 and aarch64
# For x86_64, use the CUDA 11.4.3 image
# For aarch64, use the L4T PyTorch image
UPSTREAM_X86_64="nvcr.io/nvidia/cuda:11.4.3-devel-ubuntu20.04"
UPSTREAM_AARCH64="nvcr.io/nvidia/l4t-pytorch:r35.1.0-pth1.13-py3"
# Important: do not modify the variable name as it is used by the Github action
# to build the image
UPSTREAM_X86_64=nvcr.io/nvidia/cuda:11.4.3-devel-ubuntu20.04
UPSTREAM_AARCH64=nvcr.io/nvidia/l4t-pytorch:r35.1.0-pth1.13-py3

# Check that the current user has UID 1000.
if [ $(id -u) -ne 1000 ]
Expand Down

0 comments on commit 322f530

Please sign in to comment.