Skip to content

Commit

Permalink
use --platform to consolidate dockerfiles
Browse files Browse the repository at this point in the history
  • Loading branch information
thom-nic committed Oct 31, 2023
1 parent 28a7198 commit ed59284
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 196 deletions.
26 changes: 20 additions & 6 deletions .github/workflows/build-pack-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,35 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
arch: [x64, arm, arm64, alpine, alpine-arm, alpine-arm64]
platform: [linux/amd64, linux/arm64/v8, linux/arm/v7]
steps:
- uses: actions/checkout@v2
- uses: docker/setup-qemu-action@v1
with:
image: tonistiigi/binfmt:latest
platforms: arm,arm64 #all
- run: docker build . -f ./Dockerfile-${{ matrix.arch }}
--tag node-bcrypt-builder-${{ matrix.arch }}
- run: docker create --name node-bcryptjs-builder node-bcrypt-builder-${{ matrix.arch }}
platforms: arm,arm64

- run: docker build .
--tag node-bcrypt-builder
--platform ${{ matrix.platform }}
- run: docker create node-bcrypt-builder
--platform ${{ matrix.platform }}
--name node-bcryptjs-builder
- run: docker cp "node-bcryptjs-builder:/usr/local/opt/bcrypt-js/prebuilds" .

# build for Alpine:
- run: docker build -f Dockerfile-alpine .
--tag node-bcrypt-builder-alpine
--platform ${{ matrix.platform }}
- run: docker create node-bcrypt-builder-alpine
--platform ${{ matrix.platform }}
--name node-bcryptjs-builder-alpine
- run: docker cp "node-bcryptjs-builder-alpine:/usr/local/opt/bcrypt-js/prebuilds" .

- run: find prebuilds
- uses: actions/upload-artifact@v2
with:
name: prebuild-${{ matrix.arch }}
name: prebuild-${{ matrix.platform }}
path: ./prebuilds

pack:
Expand Down
21 changes: 17 additions & 4 deletions Dockerfile-arm → Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
# Usage:
#
# docker build -t bcryptjs-linux-arm-builder -f Dockerfile-arm .
# docker create --name donut bcryptjs-linux-arm-builder
# docker build -t bcryptjs-builder .
# CONTAINER=$(docker create bcryptjs-builder)
# # Then copy the artifact to your host:
# docker cp donut:/usr/local/opt/bcrypt-js/prebuilds .
# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" .
# docker rm "$CONTAINER"
#
# Use --platform to build cross-platform i.e. for ARM:
#
# docker build -t bcryptjs-builder --platform "linux/arm64/v8" .
# CONTAINER=$docker create --platform "linux/arm64/v8" bcryptjs-builder)
# # this copies the prebuilds/linux-arm artifacts
# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" .
# docker rm "$CONTAINER"


FROM arm32v7/node:16-bullseye
ARG FROM_IMAGE=node:18-bullseye
#ARG FROM_IMAGE=arm32v7/node:16-bullseye
#ARG FROM_IMAGE=arm64v8/node:16-bullseye
FROM ${FROM_IMAGE}

ENV project bcrypt-js
ENV DEBIAN_FRONTEND noninteractive
Expand Down
3 changes: 2 additions & 1 deletion Dockerfile-alpine
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
# docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" .
# docker rm "$CONTAINER"

FROM node:16-alpine
ARG FROM_IMAGE=node:18-alpine
FROM ${FROM_IMAGE}

ENV project bcrypt-js
ENV DEBIAN_FRONTEND noninteractive
Expand Down
39 changes: 0 additions & 39 deletions Dockerfile-alpine-arm

This file was deleted.

39 changes: 0 additions & 39 deletions Dockerfile-alpine-arm64

This file was deleted.

44 changes: 0 additions & 44 deletions Dockerfile-arm64

This file was deleted.

43 changes: 0 additions & 43 deletions Dockerfile-x64

This file was deleted.

38 changes: 18 additions & 20 deletions build-all.sh
Original file line number Diff line number Diff line change
@@ -1,39 +1,37 @@
#!/bin/bash -ue

CLEAN=${CLEAN:-""}
RUN_TESTS=${RUN_TESTS:-true}
RUN_TESTS=${RUN_TESTS:-true}l

if [ -n "$CLEAN" ]; then
rm -rf build build-tmp*
rm -rf lib/binding
rm -rf prebuilds
fi

npm i
npm i -g prebuildify node-gyp
npm run build
npm ci
#npm run build

# build for linux/x64:
if [ ! -d prebuilds/linux-x64 ]; then
docker build -t bcryptjs-linux-x64-builder -f Dockerfile-x64 --build-arg RUN_TESTS="$RUN_TESTS" .
CONTAINER=$(docker create bcryptjs-linux-x64-builder)
for PLATFORM in linux/amd64 linux/arm64/v8 linux/arm/v7; do
echo -- build for $PLATFORM --
BUILDER_NAME="bcryptjs-${PLATFORM//\/-}-builder"
docker build -t "$BUILDER_NAME" \
--build-arg RUN_TESTS="$RUN_TESTS" \
--platform "$PLATFORM" .
CONTAINER=$(docker create --platform "$PLATFORM" "$BUILDER_NAME")
docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" .
docker rm "$CONTAINER"
fi

# build for linux/arm32:
if [ ! -d prebuilds/linux-arm ]; then
docker build -t bcryptjs-linux-arm-builder -f Dockerfile-arm --build-arg RUN_TESTS="$RUN_TESTS" .
CONTAINER=$(docker create --platform linux/arm/v7 bcryptjs-linux-arm-builder)
echo -- build for $PLATFORM Alpine --
BUILDER_NAME="bcryptjs-${PLATFORM//\/-}-alpine-builder"
docker build -t "$BUILDER_NAME" -f Dockerfile-alpine \
--build-arg RUN_TESTS="$RUN_TESTS" \
--platform "$PLATFORM" .
CONTAINER=$(docker create --platform "$PLATFORM" "$BUILDER_NAME")
docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" .
docker rm "$CONTAINER"
fi

# build for linux/arm64:
if [ ! -d prebuilds/linux-arm64 ]; then
docker build -t bcryptjs-linux-arm64-builder -f Dockerfile-arm64 --build-arg RUN_TESTS="$RUN_TESTS" .
CONTAINER=$(docker create --platform linux/arm64/v8 bcryptjs-linux-arm64-builder)
docker cp "$CONTAINER:/usr/local/opt/bcrypt-js/prebuilds" .
docker rm "$CONTAINER"
fi
done

ls -lF prebuilds/

0 comments on commit ed59284

Please sign in to comment.