feat: a lot of stuff
This commit is contained in:
+31
-24
@@ -3,19 +3,16 @@
|
|||||||
ARG UBUNTU_VERSION=26.04
|
ARG UBUNTU_VERSION=26.04
|
||||||
FROM ubuntu:${UBUNTU_VERSION}
|
FROM ubuntu:${UBUNTU_VERSION}
|
||||||
|
|
||||||
ARG OPENCODE_VERSION=1.18.32
|
|
||||||
ARG NODE_VERSION=24.21.0
|
ARG NODE_VERSION=24.21.0
|
||||||
|
|
||||||
ARG DEV_UID=1000
|
ARG DEV_UID=1000
|
||||||
ARG DEV_GID=1000
|
ARG DEV_GID=1000
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive \
|
# Move the pre-existing ubuntu user/group away from 1000:1000
|
||||||
HOME=/home/dev \
|
RUN groupmod --gid 1234 ubuntu \
|
||||||
EDITOR=nvim \
|
&& usermod --uid 1234 --gid 1234 ubuntu
|
||||||
VISUAL=nvim \
|
|
||||||
PIP_CACHE_DIR=/home/dev/.cache/pip \
|
|
||||||
NPM_CONFIG_CACHE=/home/dev/.npm
|
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
# System packages
|
# System packages
|
||||||
@@ -56,17 +53,32 @@ RUN apt-get update \
|
|||||||
&& update-alternatives --set javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac \
|
&& update-alternatives --set javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac \
|
||||||
# && rm -rf /var/lib/apt/lists/*
|
# && rm -rf /var/lib/apt/lists/*
|
||||||
&& echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen \
|
&& echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen \
|
||||||
|
&& echo 'root:admin' | chpasswd \
|
||||||
&& locale-gen
|
&& locale-gen
|
||||||
|
|
||||||
# Runtime user
|
# Runtime user
|
||||||
RUN groupadd --gid 1001 dev \
|
RUN groupadd --gid "${DEV_GID}" dev \
|
||||||
&& useradd \
|
&& useradd \
|
||||||
--uid 1001 \
|
--uid "${DEV_UID}" \
|
||||||
--gid 1001 \
|
--gid "${DEV_GID}" \
|
||||||
--create-home \
|
--create-home \
|
||||||
--shell /bin/bash \
|
--shell /bin/bash \
|
||||||
dev
|
dev
|
||||||
|
|
||||||
|
# Node.js + OpenCode
|
||||||
|
RUN curl -fsSLO \
|
||||||
|
"https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz" \
|
||||||
|
&& tar -xJf \
|
||||||
|
"node-v${NODE_VERSION}-linux-x64.tar.xz" \
|
||||||
|
-C /usr/local \
|
||||||
|
--strip-components=1 \
|
||||||
|
&& rm "node-v${NODE_VERSION}-linux-x64.tar.xz" \
|
||||||
|
&& echo -n "node version: " && node --version \
|
||||||
|
&& echo -n "npm version: " && npm --version \
|
||||||
|
&& npm install -g @opencode/cli \
|
||||||
|
&& echo -n "opencode version: " && opencode --version \
|
||||||
|
&& npm cache clean --force
|
||||||
|
|
||||||
# User directories
|
# User directories
|
||||||
RUN mkdir -p \
|
RUN mkdir -p \
|
||||||
/workspace \
|
/workspace \
|
||||||
@@ -80,24 +92,19 @@ RUN mkdir -p \
|
|||||||
/workspace \
|
/workspace \
|
||||||
/home/dev
|
/home/dev
|
||||||
|
|
||||||
# Node.js + OpenCode
|
RUN printf '%s\n' 'shopt -s dotglob' >> /etc/bash.bashrc
|
||||||
RUN curl -fsSLO \
|
|
||||||
"https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz" \
|
|
||||||
&& tar -xJf \
|
|
||||||
"node-v${NODE_VERSION}-linux-x64.tar.xz" \
|
|
||||||
-C /usr/local \
|
|
||||||
--strip-components=1 \
|
|
||||||
&& rm \
|
|
||||||
"node-v${NODE_VERSION}-linux-x64.tar.xz" \
|
|
||||||
&& node --version \
|
|
||||||
&& npm --version \
|
|
||||||
&& npm install --global "opencode-ai@${OPENCODE_VERSION}" \
|
|
||||||
&& opencode --version \
|
|
||||||
&& npm cache clean --force
|
|
||||||
|
|
||||||
# Runtime
|
# Runtime
|
||||||
USER dev
|
USER dev
|
||||||
|
|
||||||
|
ENV HOME=/home/dev \
|
||||||
|
EDITOR=nvim \
|
||||||
|
VISUAL=nvim \
|
||||||
|
PIP_CACHE_DIR=/home/dev/.cache/pip \
|
||||||
|
NPM_CONFIG_CACHE=/home/dev/.npm
|
||||||
|
|
||||||
|
RUN echo 'for f in /host-bash/*; do [ -r "$f" ] && source "$f"; done' >> ~/.bashrc
|
||||||
|
|
||||||
WORKDIR /workspace
|
WORKDIR /workspace
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/bin/opencode-dev-entrypoint"]
|
ENTRYPOINT ["/usr/local/bin/opencode-dev-entrypoint"]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|||||||
cd "$SCRIPT_DIR"
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
UBUNTU_VERSION="${UBUNTU_VERSION:-26.04}"
|
UBUNTU_VERSION="${UBUNTU_VERSION:-26.04}"
|
||||||
OPENCODE_VERSION=$(curl -fsSI https://github.com/anomalyco/opencode/releases/latest | sed -n 's/^location:.*\/tag\/v\{0,1\}\(.*\)\r$/\1/ip')
|
# OPENCODE_VERSION=$(curl -fsSI https://github.com/anomalyco/opencode/releases/latest | sed -n 's/^location:.*\/tag\/v\{0,1\}\(.*\)\r$/\1/ip')
|
||||||
NODE_VERSION=$(curl -fsSL https://nodejs.org/dist/index.json | sed -n 's/.*"version":"v\([^"]*\)".*"lts":".*".*/\1/p' | head -n 1)
|
NODE_VERSION=$(curl -fsSL https://nodejs.org/dist/index.json | sed -n 's/.*"version":"v\([^"]*\)".*"lts":".*".*/\1/p' | head -n 1)
|
||||||
|
|
||||||
IMAGE_REPO="${IMAGE_REPO:-localhost/opencode-dev}"
|
IMAGE_REPO="${IMAGE_REPO:-localhost/opencode-dev}"
|
||||||
@@ -48,7 +48,6 @@ if [ ${DRY_RUN} == false ]; then
|
|||||||
podman build \
|
podman build \
|
||||||
"${NO_CACHE[@]}" \
|
"${NO_CACHE[@]}" \
|
||||||
--build-arg "UBUNTU_VERSION=${UBUNTU_VERSION}" \
|
--build-arg "UBUNTU_VERSION=${UBUNTU_VERSION}" \
|
||||||
--build-arg "OPENCODE_VERSION=${OPENCODE_VERSION}" \
|
|
||||||
--build-arg "NODE_VERSION=${NODE_VERSION}" \
|
--build-arg "NODE_VERSION=${NODE_VERSION}" \
|
||||||
--build-arg "DEV_UID=${DEV_UID}" \
|
--build-arg "DEV_UID=${DEV_UID}" \
|
||||||
--build-arg "DEV_GID=${DEV_GID}" \
|
--build-arg "DEV_GID=${DEV_GID}" \
|
||||||
@@ -58,5 +57,5 @@ if [ ${DRY_RUN} == false ]; then
|
|||||||
echo
|
echo
|
||||||
echo "Built: $IMAGE"
|
echo "Built: $IMAGE"
|
||||||
else
|
else
|
||||||
echo "running: podman build ${NO_CACHE[@]} --build-arg UBUNTU_VERSION=${UBUNTU_VERSION} --build-arg OPENCODE_VERSION=${OPENCODE_VERSION} --build-arg NODE_VERSION=${NODE_VERSION} -t $IMAGE"
|
echo "running: podman build ${NO_CACHE[@]} --build-arg UBUNTU_VERSION=${UBUNTU_VERSION} --build-arg NODE_VERSION=${NODE_VERSION} -t $IMAGE"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -5,24 +5,35 @@ SCRIPT_DIR=$(realpath -- "$(dirname -- "${BASH_SOURCE[0]}")")
|
|||||||
echo "Script dir: ${SCRIPT_DIR}"
|
echo "Script dir: ${SCRIPT_DIR}"
|
||||||
|
|
||||||
BASE_DIR="${OPENCODE_DEV_HOME:-$HOME/opencode-dev}"
|
BASE_DIR="${OPENCODE_DEV_HOME:-$HOME/opencode-dev}"
|
||||||
PROJECTS_DIR="$BASE_DIR/projects"
|
|
||||||
IMAGE_REPO="${IMAGE_REPO:-localhost/opencode-dev}"
|
IMAGE_REPO="${IMAGE_REPO:-localhost/opencode-dev}"
|
||||||
# OPENCODE_VERSION="${OPENCODE_VERSION:-1.18.32}"
|
# OPENCODE_VERSION="${OPENCODE_VERSION:-1.18.32}"
|
||||||
# IMAGE_TAG="${IMAGE_TAG:-${OPENCODE_VERSION}}"
|
# IMAGE_TAG="${IMAGE_TAG:-${OPENCODE_VERSION}}"
|
||||||
IMAGE="${IMAGE_REPO}"
|
IMAGE="${IMAGE_REPO}"
|
||||||
|
|
||||||
mkdir -p \
|
# Folders
|
||||||
"$BASE_DIR/opencode-config" \
|
PROJECTS_DIR="${PROJECT_DIR:-$BASE_DIR/projects}"
|
||||||
"$BASE_DIR/opencode-data" \
|
OPC_CONFIG="${OPENCODE_CONFIG:-$BASE_DIR/opencode-config}"
|
||||||
"$BASE_DIR/opencode-cache" \
|
OPC_DATA="${OPENCODE_SHARE_DATA:-$BASE_DIR/opencode-data}"
|
||||||
"$BASE_DIR/m2" \
|
OPC_CACHE="${OPENCODE_CACHE:-$BASE_DIR/opencode-cache}"
|
||||||
"$BASE_DIR/npm-cache" \
|
M2_FOLDER="${M2_FOLDER:-$BASE_DIR/m2}"
|
||||||
"$BASE_DIR/pip-cache" \
|
NPM_CACHE="${NPM_CACHE:-$BASE_DIR/npm-cache}"
|
||||||
"$BASE_DIR/certs" \
|
PIP_CACHE="${PIP_CACHE:-$BASE_DIR/pip-cache}"
|
||||||
"$BASE_DIR/bash" \
|
CERTIFICATES="${CERTIFICATES:-$BASE_DIR/certs}"
|
||||||
"$PROJECTS_DIR"
|
BASH_FOLDER="${BASH_FOLDER:-$BASE_DIR/bash}"
|
||||||
|
|
||||||
chmod -R 777 "$BASE_DIR"
|
mkdir -p \
|
||||||
|
"$BASE_DIR" \
|
||||||
|
"$PROJECTS_DIR" \
|
||||||
|
"$OPC_CONFIG" \
|
||||||
|
"$OPC_DATA" \
|
||||||
|
"$OPC_CACHE" \
|
||||||
|
"$M2_FOLDER" \
|
||||||
|
"$NPM_CACHE" \
|
||||||
|
"$PIP_CACHE" \
|
||||||
|
"$CERTIFICATES" \
|
||||||
|
"$BASH_FOLDER"
|
||||||
|
|
||||||
|
# chmod -R 777 "$BASE_DIR"
|
||||||
|
|
||||||
if [[ ! -f "$HOME/.gitconfig" ]]; then
|
if [[ ! -f "$HOME/.gitconfig" ]]; then
|
||||||
echo "WARNING: $HOME/.gitconfig does not exist; Git will use container defaults." >&2
|
echo "WARNING: $HOME/.gitconfig does not exist; Git will use container defaults." >&2
|
||||||
@@ -64,17 +75,18 @@ ARGS=(
|
|||||||
-e "HOST_LANG=${LANG:-C.UTF-8}"
|
-e "HOST_LANG=${LANG:-C.UTF-8}"
|
||||||
-e "HOST_LC_ALL=${LC_ALL:-}"
|
-e "HOST_LC_ALL=${LC_ALL:-}"
|
||||||
-e "START_DIR=${START_DIR}"
|
-e "START_DIR=${START_DIR}"
|
||||||
-v "$BASE_DIR/opencode-config:/home/dev/.config/opencode:rw"
|
|
||||||
-v "$BASE_DIR/opencode-data:/home/dev/.local/share/opencode:rw"
|
-v "$OPC_CONFIG:/home/dev/.config/opencode:rw"
|
||||||
-v "$BASE_DIR/opencode-cache:/home/dev/.cache/opencode:rw"
|
-v "$OPC_DATA:/home/dev/.local/share/opencode:rw"
|
||||||
-v "$BASE_DIR/m2:/home/dev/.m2:rw"
|
-v "$OPC_CACHE:/home/dev/.cache/opencode:rw"
|
||||||
-v "$BASE_DIR/npm-cache:/home/dev/.npm:rw"
|
-v "$M2_FOLDER:/home/dev/.m2:rw"
|
||||||
-v "$BASE_DIR/pip-cache:/home/dev/.cache/pip:rw"
|
-v "$NPM_CACHE:/home/dev/.npm:rw"
|
||||||
-v "$BASE_DIR/certs:/host-certs:ro"
|
-v "$PIP_CACHE:/home/dev/.cache/pip:rw"
|
||||||
|
-v "$CERTIFICATES:/host-certs:ro"
|
||||||
-v "$PROJECTS_DIR:/workspace:rw"
|
-v "$PROJECTS_DIR:/workspace:rw"
|
||||||
-v "$HOME/.gitconfig:/home/dev/.gitconfig:ro"
|
-v "$HOME/.gitconfig:/home/dev/.gitconfig:ro"
|
||||||
-v "$HOME/.ssh:/home/dev/.ssh:ro"
|
-v "$HOME/.ssh:/home/dev/.ssh:ro"
|
||||||
-v "$BASE_DIR/bash:/host-bash:ro"
|
-v "$BASH_FOLDER:/host-bash:ro"
|
||||||
-v "$SCRIPT_DIR/entrypoint.sh:/usr/local/bin/opencode-dev-entrypoint:ro"
|
-v "$SCRIPT_DIR/entrypoint.sh:/usr/local/bin/opencode-dev-entrypoint:ro"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user