Skip to content

Cache Docker

Cache Docker #248

Workflow file for this run

name: Cache Docker
on:
push:
branches: ["**"]
paths:
- ".github/workflows/cache_docker.yml"
- "docker/dev/**"
pull_request:
branches: ["**"]
paths:
- ".github/workflows/cache_docker.yml"
- "docker/dev/**"
release:
types: [published]
schedule:
# Run at 02:00 UTC every Friday
# https://docs.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events
- cron: "0 2 * * FRI"
workflow_dispatch:
env:
DOCKER_REPO: jslee02/dart-dev # https://hub.docker.com/repository/docker/jslee02/dart-dev
jobs:
ubuntu:
name: ubuntu
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
distro: [jammy, noble, oracular]
dart_version: [v6.15]
platforms: ["linux/amd64,linux/arm64,linux/ppc64le,linux/s390x"]
build_min: [OFF]
env:
UBUNTU_VERSION: ${{ matrix.distro }}
DART_VERSION: ${{ matrix.dart_version }}
steps:
# https://github.com/marketplace/actions/docker-setup-qemu
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# https://github.com/marketplace/actions/docker-setup-buildx
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# https://github.com/marketplace/actions/docker-login
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# https://github.com/marketplace/actions/build-and-push-docker-images
- name: Build and push (min)
id: docker_build_min
uses: docker/build-push-action@v6
if: ${{ matrix.build_min == 'ON' }}
with:
file: ./docker/dev/${{ env.DART_VERSION }}/Dockerfile.ubuntu.${{ env.UBUNTU_VERSION }}-min
platforms: ${{ matrix.platforms }}
push: true
tags: ${{ env.DOCKER_REPO }}:ubuntu-${{ env.UBUNTU_VERSION }}-min-${{ env.DART_VERSION }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v6
with:
file: ./docker/dev/${{ env.DART_VERSION }}/Dockerfile.ubuntu.${{ env.UBUNTU_VERSION }}
platforms: ${{ matrix.platforms }}
push: true
tags: ${{ env.DOCKER_REPO }}:ubuntu-${{ env.UBUNTU_VERSION }}-${{ env.DART_VERSION }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
# Manylinux min
manylinux_min:
name: manylinux (min)
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
dockerfile: [Dockerfile.manylinux_2_28_x86_64]
base_image: [quay.io/pypa/manylinux_2_28_x86_64]
image: [manylinux_2_28_x86_64]
platforms: ["linux/amd64"]
dart_version: [v6.15]
experimental: [false]
include:
- dockerfile: Dockerfile.manylinux_2_28_aarch64-min
base_image: quay.io/pypa/manylinux_2_28_aarch64
image: manylinux_2_28_aarch64-min
platforms: "linux/arm64"
dart_version: v6.15
experimental: false
- dockerfile: Dockerfile.manylinux_2_28_ppc64le-min
base_image: quay.io/pypa/manylinux_2_28_ppc64le
image: manylinux_2_28_ppc64le-min
platforms: "linux/ppc64le"
dart_version: v6.15
experimental: false
- dockerfile: Dockerfile.manylinux_2_28_s390x-min
base_image: quay.io/pypa/manylinux_2_28_s390x
image: manylinux_2_28_s390x-min
platforms: "linux/s390x"
dart_version: v6.15
experimental: false
steps:
# https://github.com/marketplace/actions/docker-setup-qemu
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# https://github.com/marketplace/actions/docker-setup-buildx
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# https://github.com/marketplace/actions/docker-login
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# https://github.com/marketplace/actions/build-and-push-docker-images
- name: Build and push
id: docker_build
uses: docker/build-push-action@v6
with:
file: ./docker/dev/${{ matrix.dart_version }}/${{ matrix.dockerfile }}
platforms: ${{ matrix.platforms }}
build-args: BASE_IMAGE=${{ matrix.base_image }}
push: true
tags: ${{ env.DOCKER_REPO }}:${{ matrix.image }}-${{ matrix.dart_version }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
# Manylinux
manylinux:
name: manylinux
needs: [manylinux_min]
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
dockerfile: [Dockerfile.manylinux_2_28_aarch64]
base_image: ["jslee02/dart-dev:manylinux_2_28_aarch64-min-v6.15"]
image: [manylinux_2_28_aarch64]
platforms: ["linux/arm64"]
dart_version: [v6.15]
experimental: [false]
include:
- dockerfile: Dockerfile.manylinux_2_28_ppc64le
base_image: jslee02/dart-dev:manylinux_2_28_ppc64le-min-v6.15
image: manylinux_2_28_ppc64le
platforms: "linux/ppc64le"
dart_version: v6.15
experimental: false
- dockerfile: Dockerfile.manylinux_2_28_s390x
base_image: jslee02/dart-dev:manylinux_2_28_s390x-min-v6.15
image: manylinux_2_28_s390x
platforms: "linux/s390x"
dart_version: v6.15
experimental: false
steps:
# https://github.com/marketplace/actions/docker-setup-qemu
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# https://github.com/marketplace/actions/docker-setup-buildx
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# https://github.com/marketplace/actions/docker-login
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# https://github.com/marketplace/actions/build-and-push-docker-images
- name: Build and push
id: docker_build
uses: docker/build-push-action@v6
with:
file: ./docker/dev/${{ matrix.dart_version }}/${{ matrix.dockerfile }}
platforms: ${{ matrix.platforms }}
build-args: BASE_IMAGE=${{ matrix.base_image }}
push: true
tags: ${{ env.DOCKER_REPO }}:${{ matrix.image }}-${{ matrix.dart_version }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
# Tracy Profiler
tracy:
name: tracy profiler
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
dart_version: [v6.15]
build_min: [ON]
env:
OS_VERSION: tracy
DART_VERSION: ${{ matrix.dart_version }}
steps:
# https://github.com/marketplace/actions/docker-setup-qemu
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# https://github.com/marketplace/actions/docker-setup-buildx
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# https://github.com/marketplace/actions/docker-login
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# https://github.com/marketplace/actions/build-and-push-docker-images
- name: Build and push
id: docker_build
uses: docker/build-push-action@v6
with:
file: ./docker/dev/${{ env.DART_VERSION }}/Dockerfile.${{ env.OS_VERSION }}
push: true
tags: ${{ env.DOCKER_REPO }}:${{ env.OS_VERSION }}-${{ env.DART_VERSION }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}