docker #12
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: docker | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} | |
cancel-in-progress: true | |
on: | |
push: | |
branches: | |
- master | |
paths: | |
- '.github/workflows/docker.yml' | |
- 'utils/docker/**' | |
- 'utils/ffmpeg/**' | |
- 'utils/opencvmini/**' | |
- 'utils/wasi-crypto/**' | |
- 'utils/wasi-nn/**' | |
pull_request: | |
paths: | |
- '.github/workflows/docker.yml' | |
- 'utils/docker/**' | |
- 'utils/ffmpeg/**' | |
- 'utils/opencvmini/**' | |
- 'utils/wasi-crypto/**' | |
- 'utils/wasi-nn/**' | |
schedule: | |
- cron: "0 0 */7 * *" | |
jobs: | |
prep: | |
name: Prepare docker env | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.prep.outputs.version }} | |
docker_image: ${{ steps.prep.outputs.docker_image }} | |
created: ${{ steps.prep.outputs.created }} | |
steps: | |
- name: Prepare docker env | |
id: prep | |
run: | | |
DOCKER_IMAGE=wasmedge/wasmedge | |
VERSION=noop | |
if [ "${{ github.event_name }}" = "schedule" ]; then | |
VERSION=nightly | |
elif [[ $GITHUB_REF == refs/tags/* ]]; then | |
VERSION=${GITHUB_REF#refs/tags/} | |
elif [[ $GITHUB_REF == refs/heads/* ]]; then | |
VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g') | |
if [ "${{ github.event.repository.default_branch }}" = "$VERSION" ]; then | |
VERSION=edge | |
fi | |
elif [[ $GITHUB_REF == refs/pull/* ]]; then | |
VERSION=pr-${{ github.event.number }} | |
fi | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
echo "docker_image=$DOCKER_IMAGE" >> $GITHUB_OUTPUT | |
echo "created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT | |
paths-filter: | |
name: Run paths-filter | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: read | |
outputs: # Set outputs to true if not pull_request | |
ci-image-base: ${{ github.event_name == 'pull_request' && steps.filter.outputs.ci-image-base || 'true' }} | |
manylinux: ${{ github.event_name == 'pull_request' && steps.filter.outputs.manylinux || 'true' }} | |
ubuntu: ${{ github.event_name == 'pull_request' && steps.filter.outputs.ubuntu || 'true' }} | |
steps: | |
- if: ${{ github.event_name == 'pull_request' }} | |
id: filter | |
uses: dorny/paths-filter@v3 | |
with: | |
filters: | | |
ci-image-base: | |
- '.github/workflows/docker.yml' | |
- 'utils/docker/docker-bake.ci-image-base.hcl' | |
- 'utils/docker/Dockerfile.ci-image-base' | |
manylinux: | |
- '.github/workflows/docker.yml' | |
- 'utils/docker/docker-bake.manylinux.hcl' | |
- 'utils/docker/Dockerfile.manylinux**' | |
- 'utils/ffmpeg/**' | |
- 'utils/opencvmini/**' | |
- 'utils/wasi-crypto/**' | |
- 'utils/wasi-nn/**' | |
ubuntu: | |
- '.github/workflows/docker.yml' | |
- 'utils/docker/docker-bake.ubuntu.hcl' | |
- 'utils/docker/Dockerfile.ubuntu-**' | |
- 'utils/ffmpeg/**' | |
- 'utils/opencvmini/**' | |
bake-base-images: | |
needs: | |
- prep | |
- paths-filter | |
name: CI image base | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to DockerHub | |
if: github.event_name != 'pull_request' | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_ACCESS_TOKEN }} | |
# DO NOT skip the whole job to prevent descending jobs to be skipped | |
- if: ${{ needs.paths-filter.outputs.ci-image-base == 'true' }} | |
name: Bake and Push | |
uses: docker/bake-action@v5 | |
with: | |
files: utils/docker/docker-bake.ci-image-base.hcl | |
push: ${{ github.event_name != 'pull_request' }} | |
build-ubuntu-images: | |
needs: | |
- prep | |
- paths-filter | |
- bake-base-images | |
if: ${{ needs.paths-filter.outputs.ubuntu == 'true' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
targets: | |
- default | |
- base-2004-clang-aarch64 | |
name: Ubuntu | |
runs-on: ubuntu-latest | |
container: | |
image: wasmedge/wasmedge:ci-image-base | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to DockerHub | |
if: github.event_name != 'pull_request' | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_ACCESS_TOKEN }} | |
- name: Bake and Push | |
uses: docker/bake-action@v5 | |
with: | |
files: utils/docker/docker-bake.ubuntu.hcl | |
targets: ${{ matrix.targets }} | |
push: ${{ github.event_name != 'pull_request' }} | |
set: | | |
*.labels.org.opencontainers.image.title=${{ github.event.repository.name }} | |
*.labels.org.opencontainers.image.description=${{ github.event.repository.description }} | |
*.labels.org.opencontainers.image.url=${{ github.event.repository.html_url }} | |
*.labels.org.opencontainers.image.source=${{ github.event.repository.clone_url }} | |
*.labels.org.opencontainers.image.revision=${{ github.sha }} | |
*.labels.org.opencontainers.image.version=${{ needs.prep.outputs.version }} | |
*.labels.org.opencontainers.image.created=${{ needs.prep.outputs.created }} | |
build-manylinux-images: | |
needs: | |
- prep | |
- paths-filter | |
- bake-base-images | |
if: ${{ needs.paths-filter.outputs.manylinux == 'true' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: manylinux_2_28 x86_64 | |
docker_tag: manylinux_2_28_x86_64 | |
targets: x86_64,x86_64-plugins | |
host_runner: ubuntu-latest | |
host_container: wasmedge/wasmedge:ci-image-base | |
- name: manylinux_2_28 aarch64 | |
docker_tag: manylinux_2_28_aarch64 | |
targets: aarch64,aarch64-plugins | |
host_runner: linux-arm64-v2 | |
host_container: wasmedge/wasmedge:ci-image-base_aarch64 | |
name: ${{ matrix.name }} | |
runs-on: ${{ matrix.host_runner }} | |
container: | |
image: ${{ matrix.host_container }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to DockerHub | |
if: github.event_name != 'pull_request' | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_ACCESS_TOKEN }} | |
- name: Bake and Push | |
uses: docker/bake-action@v5 | |
with: | |
files: utils/docker/docker-bake.manylinux.hcl | |
targets: ${{ matrix.targets }} | |
push: ${{ github.event_name != 'pull_request' }} | |
set: | | |
*.labels.org.opencontainers.image.title=${{ github.event.repository.name }} | |
*.labels.org.opencontainers.image.description=${{ github.event.repository.description }} | |
*.labels.org.opencontainers.image.url=${{ github.event.repository.html_url }} | |
*.labels.org.opencontainers.image.source=${{ github.event.repository.clone_url }} | |
*.labels.org.opencontainers.image.revision=${{ github.sha }} | |
*.labels.org.opencontainers.image.version=${{ needs.prep.outputs.version }} | |
*.labels.org.opencontainers.image.created=${{ needs.prep.outputs.created }} |