Skip to content

Move to GHCR for caching (#496) #975

Move to GHCR for caching (#496)

Move to GHCR for caching (#496) #975

Workflow file for this run

name: Dockerfiles
# Test and push dockerfiles when they change.
# Test for pull request, push dockerfiles when merged into main.
on:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: "0 0 1 * *"
push:
branches:
- main
paths:
- '**.Dockerfile'
- .github/workflows/docker.yml
pull_request:
workflow_dispatch:
# Cancel in-progress funs of the same workflow
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.x
cache: pip
- name: Verify dockerfiles
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
./generate.py
git diff --exit-code
docker:
needs: generate
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- label: ros
tag: noetic
target: base
platforms: "linux/amd64,linux/arm64"
- label: ros
tag: noetic
target: dev
platforms: "linux/amd64,linux/arm64"
- label: ros
tag: noetic
target: full
platforms: "linux/amd64,linux/arm64"
- label: ros
tag: noetic
target: gazebo
platforms: "linux/amd64"
- label: ros2
tag: rolling
target: base
platforms: "linux/amd64"
- label: ros2
tag: rolling
target: dev
platforms: "linux/amd64"
- label: ros2
tag: rolling
target: full
platforms: "linux/amd64"
- label: ros2
tag: rolling
target: gazebo
platforms: "linux/amd64"
- label: ros2
tag: jazzy
target: base
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: jazzy
target: dev
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: jazzy
target: full
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: jazzy
target: gazebo
platforms: "linux/amd64"
- label: ros2
tag: iron
target: base
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: iron
target: dev
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: iron
target: full
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: iron
target: gazebo
platforms: "linux/amd64"
- label: ros2
tag: iron-cuda
target: base
platforms: "linux/amd64"
- label: ros2
tag: iron-cuda
target: dev
platforms: "linux/amd64"
- label: ros2
tag: iron-cuda
target: full
platforms: "linux/amd64"
- label: ros2
tag: iron-cuda
target: gazebo
platforms: "linux/amd64"
- label: ros2
tag: humble
target: base
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: humble
target: dev
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: humble
target: full
platforms: "linux/amd64,linux/arm64"
- label: ros2
tag: humble
target: gazebo
platforms: "linux/amd64"
- label: ros2
tag: humble-cuda
target: base
platforms: "linux/amd64"
- label: ros2
tag: humble-cuda
target: dev
platforms: "linux/amd64"
- label: ros2
tag: humble-cuda
target: full
platforms: "linux/amd64"
- label: ros2
tag: humble-cuda
target: gazebo
platforms: "linux/amd64"
- label: gazebo
tag: gazebo11
target: base
platforms: "linux/amd64"
- label: gazebo
tag: gazebo11
target: dev
platforms: "linux/amd64"
- label: ignition
tag: fortress
target: base
platforms: "linux/amd64"
- label: ignition
tag: fortress
target: dev
platforms: "linux/amd64"
- label: ignition
tag: citadel
target: base
platforms: "linux/amd64"
- label: ignition
tag: citadel
target: dev
platforms: "linux/amd64"
- label: gz
tag: harmonic
target: base
platforms: "linux/amd64"
- label: gz
tag: harmonic
target: dev
platforms: "linux/amd64"
- label: gz
tag: harmonic-cuda
target: base
platforms: "linux/amd64"
- label: gz
tag: harmonic-cuda
target: dev
platforms: "linux/amd64"
- label: gz
tag: garden
target: base
platforms: "linux/amd64"
- label: gz
tag: garden
target: dev
platforms: "linux/amd64"
- label: gz
tag: garden-cuda
target: base
platforms: "linux/amd64"
- label: gz
tag: garden-cuda
target: dev
platforms: "linux/amd64"
steps:
- uses: actions/checkout@v4
- name: Filter build
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
docker:
- ${{ matrix.label }}/${{ matrix.tag }}.Dockerfile
- name: Set current date
id: date
run: |
echo "date=$(date +%Y-%m-%d)" >> "$GITHUB_OUTPUT"
- name: Use current date
run: |
echo "Current date is ${{ steps.date.outputs.date }}"
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
if: ${{ steps.filter.outputs.docker == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
with:
push: ${{ github.ref == 'refs/heads/main' }}
file: ${{ matrix.label }}/${{ matrix.tag }}.Dockerfile
target: ${{ matrix.target }}
platforms: ${{ matrix.platforms }}
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.label }}:${{ matrix.tag }}-${{ matrix.target }}
${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.label }}:${{ matrix.tag }}-${{ matrix.target }}-${{ steps.date.outputs.date }}
ghcr.io/${{ github.repository_owner }}/${{ matrix.label }}:${{ matrix.tag }}-${{ matrix.target }}
cache-from: |
type=registry,ref=ghcr.io/${{ github.repository_owner }}/${{ matrix.label }}:${{ matrix.tag }}-buildcache
cache-to: |
type=registry,ref=ghcr.io/${{ github.repository_owner }}/${{ matrix.label }}:${{ matrix.tag }}-buildcache,mode=max
complete:
needs:
- generate
- docker
runs-on: ubuntu-latest
steps:
- name: Check
run: echo "Completed successfully!"