FROM ubuntu:latest ENV DEBIAN_FRONTEND="noninteractive" # Install basic dependencies RUN apt-get -q -y update && \ apt-get -q -y --no-install-recommends install autoconf automake \ bash build-essential bzip2 ca-certificates curl dpkg-dev file \ g++ gcc git-core imagemagick libbz2-dev libc6-dev libdb-dev libevent-dev \ libffi-dev libgdbm-dev libglib2.0-dev libgmp-dev libjpeg-dev libkrb5-dev \ liblzma-dev libmagickcore-dev libmagickwand-dev libmaxminddb-dev \ libncurses-dev libncurses5-dev libncursesw5-dev libpng-dev libpq-dev \ libreadline-dev libsctp-dev libsqlite3-dev libssl-dev libtool libwebp-dev \ libxml2-dev libxslt-dev libyaml-dev locales make make mercurial patch python3 \ unixodbc-dev unzip wget xz-utils zlib1g-dev zsh gnupg inotify-tools less \ postgresql-client ssh direnv && apt-get -q -y clean ARG LANG=en_NZ.UTF-8 LANGUAGE=en_NZ:en RUN locale-gen ${LANG} ENV LANG ${LANG} ENV LANGUAGE ${LANGUAGE} ENV LC_ALL ${LANG} ARG USERNAME=vscode ARG USER_UID=1000 ARG USER_GID=$USER_UID RUN groupadd --gid ${USER_GID} ${USERNAME} RUN useradd --shell /usr/bin/zsh --uid ${USER_UID} --gid ${USER_GID} -m ${USERNAME} RUN mkdir /workspace && chown ${USERNAME}:${USERNAME} /workspace RUN touch /entrypoint.sh && chown ${USERNAME}:${USERNAME} /entrypoint.sh RUN mkdir -p /var/tmp/history && chown -R ${USERNAME}:${USERNAME} /var/tmp/history RUN mkdir /storage && chown ${USERNAME}:${USERNAME} /storage USER ${USERNAME} ENV HOME=/home/${USERNAME} WORKDIR $HOME # Install oh-my-zsh RUN sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" RUN echo '\neval "$(direnv hook zsh)"' >> ~/.zshrc # Install ASDF ARG ASDF_VERSION=0.10.2 RUN git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v${ASDF_VERSION} && \ echo '\nsource $HOME/.asdf/asdf.sh' >> ~/.bashrc && \ echo '\nsource $HOME/.asdf/asdf.sh' >> ~/.zshrc WORKDIR /workspace/ # Install all the tools specified in the tool versions file. COPY .tool-versions /workspace/ RUN /bin/bash -c 'source ~/.asdf/asdf.sh && \ cat .tool-versions | cut -d \ -f 1 | xargs -n 1 asdf plugin add && \ asdf install && \ cat .tool-versions | xargs -n 2 asdf global' USER vscode # Generate an entrypoint.sh RUN echo '#!/bin/bash' > /entrypoint.sh && \ echo 'source ~/.asdf/asdf.sh' >> /entrypoint.sh && \ echo 'eval "$(direnv hook bash)"' >> /entrypoint.sh && \ echo 'exec "$@"' >> /entrypoint.sh && \ chmod 755 /entrypoint.sh ENTRYPOINT [ "/entrypoint.sh" ] # Prodigious use of asterisk to allow for files which may not exist. COPY .env* Cargo.toml Cargo.lock LICENSE.md README.md outrun outrun-* /workspace/ RUN /bin/bash -c 'if [ -e .envrc ]; then /usr/bin/direnv allow; fi' CMD ["zsh"]