FROM alpine:latest LABEL author="Task Venture Capital GmbH " WORKDIR /workspace # Important environment variables ENV NODE_VERSION_LTS="20.18.2" \ NVM_DIR="/usr/local/nvm" \ DENO_INSTALL="/root/.deno" \ NVM_NODEJS_ORG_MIRROR="https://unofficial-builds.nodejs.org/download/release" # Install required packages for NVM and Node.js # Note: libgcc is required for Deno's glibc compatibility RUN apk add --no-cache \ bash \ curl \ git \ ca-certificates \ unzip \ libstdc++ \ libgcc # Install glibc for Deno compatibility (Deno only provides glibc builds, not musl) # Using sgerrand's glibc package for Alpine RUN curl -fsSL -o /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \ && curl -fsSL -o glibc-2.35-r1.apk https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r1/glibc-2.35-r1.apk \ && curl -fsSL -o glibc-bin-2.35-r1.apk https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r1/glibc-bin-2.35-r1.apk \ && apk add --no-cache --force-overwrite glibc-2.35-r1.apk glibc-bin-2.35-r1.apk \ && rm glibc-2.35-r1.apk glibc-bin-2.35-r1.apk # Install NVM (latest version for better Alpine/musl support) RUN mkdir -p $NVM_DIR && curl https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash # Make nvm available globally in all bash shells (interactive + non-interactive) # IMPORTANT: Create /etc/bash.bashrc with nvm initialization RUN printf '%s\n%s\n%s\n' \ 'export NVM_DIR="/usr/local/nvm"' \ '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' \ '[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"' \ > /etc/bash.bashrc # Copy nvm wrapper scripts from support directory COPY image_support_files/bash-with-nvm /usr/local/bin/bash-with-nvm COPY image_support_files/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh RUN chmod +x /usr/local/bin/bash-with-nvm /usr/local/bin/docker-entrypoint.sh # Use wrapper for RUN commands to enable nvm SHELL ["/usr/local/bin/bash-with-nvm"] # Enable nvm for runtime bash commands (CI/CD workflows) ENV BASH_ENV=/etc/bash.bashrc # Install Node.js LTS via NVM and Deno RUN nvm install $NODE_VERSION_LTS \ && nvm alias default $NODE_VERSION_LTS \ && nvm use default \ && curl -fsSL https://deno.land/install.sh | sh ENV PATH="$DENO_INSTALL/bin:$NVM_DIR/versions/node/v$NODE_VERSION_LTS/bin:$PATH" ENV NODE_PATH=$NVM_DIR/v$NODE_VERSION_LTS/lib/node_modules # Set entrypoint to make nvm available in all runtime contexts ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["bash"]