From 36e6526af6c5e1367d6496563e280c73d37637e8 Mon Sep 17 00:00:00 2001
From: Bartek Wrona <wrona@syncad.com>
Date: Thu, 4 Jan 2024 20:58:39 +0100
Subject: [PATCH] 1. emsdk image extended by `nvm` tool and preinstalled by
 default LTS node (v18.19.0) 2. Reorganized image definition to make possible
 independent build of images for emscripten boost/openssl and NodeJS+npm
 preinstalled package set.

---
 Dockerfile.emscripten | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/Dockerfile.emscripten b/Dockerfile.emscripten
index 2cede54..93103d1 100644
--- a/Dockerfile.emscripten
+++ b/Dockerfile.emscripten
@@ -3,7 +3,7 @@ ARG EMSCRIPTEN_VERSION=3.1.51
 
 FROM emscripten/emsdk:${EMSCRIPTEN_VERSION} AS pure_emscripten_sdk
 
-FROM pure_emscripten_sdk AS supplemented_tools_sdk
+FROM pure_emscripten_sdk AS supplemented_emscripten_sdk
 
 USER root
 
@@ -15,7 +15,13 @@ RUN apt-get update && \
     autoconf \
     libtool \
     protobuf-compiler && \
-    npm install -g pnpm
+    npm install -g pnpm && \
+    apt-get clean && rm -r /var/lib/apt/lists/*
+
+FROM supplemented_emscripten_sdk AS supplemented_node_sdk
+
+ARG NODEJS_VERSION=v18.19.0
+ENV NODEJS_VERSION=${NODEJS_VERSION}
 
 USER emscripten
 WORKDIR /home/emscripten
@@ -27,10 +33,16 @@ ENV HOME=/home/emscripten
 
 # Preinstall large deps (rare changed) to eliminate pulling them from web each time
 ENV PNPM_HOME="/home/emscripten/.local/share/pnpm"
-ENV PATH="${PNPM_HOME}:${PATH}"
+ENV NVM_DIR="${HOME}/.nvm"
+ENV PATH="${PNPM_HOME}:${NVM_DIR}:${PATH}"
 ENV PLAYWRIGHT_BROWSERS_PATH="${HOME}/pw-browsers"
 
 RUN source "${EMSDK}/emsdk_env.sh" && \
+    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash && \
+    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
+    nvm install "${NODEJS_VERSION}" && \
+    nvm use "${NODEJS_VERSION}" && \
+    pnpm config set store-dir ${PNPM_HOME}/preinstalled-store --global && \
     pnpm add -g \
       playwright@~1.39.0 \
       ts-proto@~1.158.0 \
@@ -56,9 +68,12 @@ WORKDIR /home/emscripten
 ENV PNPM_HOME="/home/emscripten/.local/share/pnpm"
 ENV PATH="${PNPM_HOME}:${PATH}"
 
-RUN pnpm dlx playwright install-deps
+RUN pnpm playwright install-deps && apt-get clean && rm -r /var/lib/apt/lists/*
+
+USER emscripten
+WORKDIR /home/emscripten
 
-FROM supplemented_tools_sdk AS lib_source
+FROM supplemented_emscripten_sdk AS lib_source
 
 ARG BOOST_VERSION_TAG=boost-1.82.0
 ENV BOOST_VERSION_TAG=${BOOST_VERSION_TAG}
@@ -123,7 +138,7 @@ WORKDIR /home/emscripten
 
 RUN /home/emscripten/scripts/prepare_secp256k1-zkp.sh "${TMP_SRC}" "/emsdk/upstream/emscripten/cache/sysroot/"
 
-FROM supplemented_tools_sdk AS emscripten_builder
+FROM supplemented_node_sdk AS emscripten_builder
 
 USER emscripten
 WORKDIR /home/emscripten
-- 
GitLab