FROM ubuntu:24.04 LABEL author="Task Venture Capital GmbH " WORKDIR /workspace # important environment variables ENV NODE_VERSION_LTS="24.13.0" NODE_VERSION_STABLE="24.13.0" NVM_DIR="/usr/local/nvm" # Set debconf to run non-interactively and install packages RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \ && apt-get update \ && apt-get upgrade --no-install-recommends -y \ && apt-get install -y -q --no-install-recommends \ # base libs software-properties-common \ apt-transport-https \ build-essential \ ca-certificates \ gpg-agent \ curl \ g++ \ gcc \ git \ make \ openssl \ python3 \ rsync \ ssh \ wget \ unzip \ # puppeteer libasound2t64 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libc6 \ libcairo2 \ libcups2 \ libdbus-1-3 \ libexpat1 \ libfontconfig1 \ libgbm1 \ libgcc-s1 \ libgdk-pixbuf2.0-0 \ libglib2.0-0 \ libgtk-3-0 \ libnspr4 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libstdc++6 \ libx11-6 \ libx11-xcb1 \ libxcb1 \ libxcomposite1 \ libxcursor1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxi6 \ libxrandr2 \ libxrender1 \ libxss1 \ libxtst6 \ ca-certificates \ fonts-liberation \ libayatana-appindicator3-1 \ libnss3 \ lsb-release \ xdg-utils \ # network iputils-ping \ dnsutils \ # chrome && wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \ && apt install -y -q --no-install-recommends ./google-chrome-stable_current_amd64.deb \ # mongodb 8.0 && curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \ gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg \ && echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | \ tee /etc/apt/sources.list.d/mongodb-org-8.0.list \ && apt-get update \ && apt-get install -y -q --no-install-recommends mongodb-org \ && apt-get clean \ && rm -r /var/lib/apt/lists/* # Install nvm with node and npm 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: Prepend to bashrc, before the "[ -z "$PS1" ] && return" line RUN printf '%s\n%s\n%s\n\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"' \ "$(cat /etc/bash.bashrc)" > /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 # prepare pnpm ENV PNPM_HOME="/root/.local/share/pnpm/pnpm" RUN mkdir -p ${PNPM_HOME} ENV PATH="$PNPM_HOME:$PATH" # Now nvm is available directly without sourcing RUN nvm install $NODE_VERSION_STABLE \ && nvm alias default $NODE_VERSION_STABLE \ && nvm use default \ && curl -fsSL https://get.pnpm.io/install.sh | bash - \ && pnpm -v \ && pnpm config set unsafe-perm true ENV NODE_PATH $NVM_DIR/v$NODE_VERSION_STABLE/lib/node_modules ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION_STABLE/bin:$PATH # Install Bun RUN curl -fsSL https://bun.sh/install | bash ENV BUN_INSTALL="/root/.bun" ENV PATH="$BUN_INSTALL/bin:$PATH" # Install Deno RUN curl -fsSL https://deno.land/install.sh | sh ENV DENO_INSTALL="/root/.deno" ENV PATH="$DENO_INSTALL/bin:$PATH" # Set entrypoint to make nvm available in all runtime contexts ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["bash"]