Skip to content

Commit

Permalink
Add new GitHub Actions workflow to build multi-arch images and push i…
Browse files Browse the repository at this point in the history
…nto multi registries
  • Loading branch information
yhatt committed Oct 5, 2024
1 parent 2dcad7c commit ee1caae
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 86 deletions.
86 changes: 0 additions & 86 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,6 @@ executors:
- image: cimg/node:<< parameters.version >><<# parameters.browser >>-browsers<</ parameters.browser >>
working_directory: ~/marp-cli

# docker:
# machine:
# image: ubuntu-2204:2023.04.2
# docker_layer_caching: true
# working_directory: ~/marp-cli
# environment:
# DOCKER_BUILDKIT: 1

commands:
install:
parameters:
Expand Down Expand Up @@ -120,58 +112,6 @@ commands:
paths:
- lib

# docker:
# parameters:
# tag:
# type: string
# default: latest
# user:
# type: env_var_name
# default: DOCKER_USER
# pass:
# type: env_var_name
# default: DOCKER_PASS
# machine:
# type: boolean
# default: false
# steps:
# - checkout

# - attach_workspace:
# at: ~/marp-cli

# - unless:
# condition: << parameters.machine >>
# steps:
# - setup_remote_docker:
# version: '20.10.2'

# - run:
# name: Login to Docker Hub
# command: docker login -u ${<< parameters.user >>} -p ${<< parameters.pass >>}

# - run:
# name: Install Docker buildx
# command: |
# docker build --platform=local --quiet -o ~ "https://github.com/docker/buildx.git#v0.8.1"
# mkdir -p ~/.docker/cli-plugins
# mv ~/buildx ~/.docker/cli-plugins/docker-buildx
# environment:
# DOCKER_BUILDKIT: 1

# - run:
# name: Setup QEMU
# command: docker run --privileged --rm tonistiigi/binfmt --install all

# - run:
# name: Build Docker image and push to Docker Hub
# command: |
# docker context create builder
# docker buildx create --use builder
# docker buildx build --no-cache --platform linux/amd64,linux/arm64 --progress plain --push -t marpteam/marp-cli:<< parameters.tag >> .
# environment:
# DOCKER_CLI_EXPERIMENTAL: enabled

jobs:
audit:
executor: node
Expand Down Expand Up @@ -210,35 +150,9 @@ jobs:
- lint
- test

# Docker
# docker-build-latest:
# executor: node
# steps:
# - build

# docker-image-latest:
# executor: docker
# steps:
# - docker:
# tag: latest
# machine: true

# docker-build-tag:
# executor: node
# steps:
# - build

# docker-image-tag:
# executor: docker
# steps:
# - docker:
# tag: $CIRCLE_TAG
# machine: true

workflows:
test:
jobs:
# Test
- audit
- test-node18:
requires:
Expand Down
134 changes: 134 additions & 0 deletions .github/workflows/build-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
name: Build image

on:
push:
branches:
- main
tags:
- v*

env:
GITHUB_CONTAINER_REGISTRY_IMAGE: ghcr.io/marp-team/marp-cli
DOCKER_HUB_REGISTRY_IMAGE: marpteam/marp-cli

jobs:
build:
runs-on: ${{ matrix.runner }}

strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-latest
platform: linux/amd64

# TODO: Change to ARM64 runner for open-sourced project if available (M1 Mac cannot run Docker due to lack of nested virtualization)
- runner: ubuntu-latest
platform: linux/arm64

steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- uses: actions/checkout@v4

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.GITHUB_CONTAINER_REGISTRY_IMAGE }}
${{ env.DOCKER_HUB_REGISTRY_IMAGE }}
# TODO: It is removable if ARM64 runner is available
- 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.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
outputs: 'type=registry,"name=${{ env.GITHUB_CONTAINER_REGISTRY_IMAGE }},${{ env.DOCKER_HUB_REGISTRY_IMAGE }}",push-by-digest=true,name-canonical=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: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.GITHUB_CONTAINER_REGISTRY_IMAGE }}
${{ env.DOCKER_HUB_REGISTRY_IMAGE }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map(select(startswith("${{ env.GITHUB_CONTAINER_REGISTRY_IMAGE }}")) | "-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.GITHUB_CONTAINER_REGISTRY_IMAGE }}@sha256:%s ' *)
docker buildx imagetools create $(jq -cr '.tags | map(select(startswith("${{ env.DOCKER_HUB_REGISTRY_IMAGE }}")) | "-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.DOCKER_HUB_REGISTRY_IMAGE }}@sha256:%s ' *)
- name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.GITHUB_CONTAINER_REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
docker buildx imagetools inspect ${{ env.DOCKER_HUB_REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}

0 comments on commit ee1caae

Please sign in to comment.