Skip to content

Commit

Permalink
Merge pull request #608 from marp-team/new-docker-image
Browse files Browse the repository at this point in the history
Renew Docker image to change the base from Alpine to Debian slim, and publish also to GitHub Container Registry
  • Loading branch information
yhatt authored Oct 5, 2024
2 parents 3b32d04 + 3f22707 commit f9be4ff
Show file tree
Hide file tree
Showing 7 changed files with 207 additions and 162 deletions.
117 changes: 0 additions & 117 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 All @@ -249,34 +163,3 @@ workflows:
- test-node22:
requires:
- audit

# Docker (latest)
- docker-build-latest:
requires:
- test-node18
- test-node20
- test-node22
filters:
branches:
only: main

- docker-image-latest:
requires:
- docker-build-latest

# Docker (tag)
- docker-build-tag:
filters:
branches:
ignore: /.*/
tags:
only: /^v.*/

- docker-image-tag:
requires:
- docker-build-tag
filters:
branches:
ignore: /.*/
tags:
only: /^v.*/
6 changes: 5 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
**/*
!lib/
!src/
!scripts/
!docker-entrypoint
!LICENSE
!marp-cli.js
!package.json
!package-lock.json
!postcss.config.js
!rollup.config.mjs
!tsconfig.json
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 }}
12 changes: 9 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,33 @@

## [Unreleased]

### Breaking
> [!IMPORTANT]
>
> See also https://github.com/orgs/marp-team/discussions/533 about new changes in Marp Core.
### ⚡️ Breaking

- End-of-Lifed Node.js 16 is no longer supported, and required Node.js 18 and later ([#591](https://github.com/marp-team/marp-cli/pull/591))
- Upgrade Marp Core to [v4.0.0](https://github.com/marp-team/marp-core/releases/v4.0.0) ([#591](https://github.com/marp-team/marp-cli/pull/591))
- The slide container of built-in themes became the block element and adopted safe centering
- Relax HTML allowlist: Allowed a lot of HTML elements and attributes by default
- The container image is now based on Debian instead of Alpine ([#608](https://github.com/marp-team/marp-cli/pull/608))

### Added

- Initial support for Firefox / WebDriver BiDi protocol during conversion ([#565](https://github.com/marp-team/marp-cli/issues/565), [#597](https://github.com/marp-team/marp-cli/pull/597))
- `--browser` and some related options to control the browser for conversion ([#603](https://github.com/marp-team/marp-cli/pull/603))
- Find Chrome and Edge from the host Windows as a fallback when [WSL 2 networking is mirrored mode](https://learn.microsoft.com/windows/wsl/networking#mirrored-mode-networking) ([#604](https://github.com/marp-team/marp-cli/pull/604))
- `--debug` (`-d`) option to CLI interface ([#599](https://github.com/marp-team/marp-cli/pull/599))
- Publish the container image to GitHub Container Registry ([#578](https://github.com/marp-team/marp-cli/issues/578), [#608](https://github.com/marp-team/marp-cli/pull/608))
- CI testing against Node.js v22 ([#591](https://github.com/marp-team/marp-cli/pull/591))

### Changed

- Use [the new headless mode of Chrome](https://developer.chrome.com/docs/chromium/headless) while converting by default ([#593](https://github.com/marp-team/marp-cli/pull/593))
- You can get back to the old headless mode by setting `PUPPETEER_HEADLESS_MODE=old` env.
- Upgrade Marpit to [v3.1.1](https://github.com/marp-team/marpit/releases/tag/v3.1.1) ([#591](https://github.com/marp-team/marp-cli/pull/591))
- Support for CSS nesting
- Use [the new headless mode of Chrome](https://developer.chrome.com/docs/chromium/headless) while converting by default ([#593](https://github.com/marp-team/marp-cli/pull/593))
- You can get back to the old headless mode by setting `PUPPETEER_HEADLESS_MODE=old` env.
- Upgrade development Node.js LTS to v20.17.0 ([#591](https://github.com/marp-team/marp-cli/pull/591))
- Upgrade dependent packages to the latest versions ([#591](https://github.com/marp-team/marp-cli/pull/591), [#598](https://github.com/marp-team/marp-cli/pull/598))
- Migrate ESLint config to flat config ([#606](https://github.com/marp-team/marp-cli/pull/606))
Expand Down
Loading

0 comments on commit f9be4ff

Please sign in to comment.