Skip to content

Instantly share code, notes, and snippets.

@tcaddy
Created May 11, 2026 00:40
Show Gist options
  • Select an option

  • Save tcaddy/a455cb1d8a8e68c191fcbfcb13009f5f to your computer and use it in GitHub Desktop.

Select an option

Save tcaddy/a455cb1d8a8e68c191fcbfcb13009f5f to your computer and use it in GitHub Desktop.
OpenCode in a container (amd64)

OpenCode in a container (amd64)

The Dockerfile is a little brittle in that it's hardcoded to download amd64 binaries.

FROM debian:stable-slim
RUN \
apt-get update \
&& apt-get install -y \
ca-certificates \
curl \
git \
git \
gpg \
jq \
kubernetes-client \
&& curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | \
gpg --dearmor > /usr/share/keyrings/helm.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" > \
/etc/apt/sources.list.d/helm-stable-debian.list \
&& apt-get update && apt-get install -y helm \
&& KUSTOMIZE_TAG=$(curl -s https://api.github.com/repos/kubernetes-sigs/kustomize/releases/latest | jq -r .tag_name) \
&& KUSTOMIZE_VERSION=$(echo $KUSTOMIZE_TAG | cut -d/ -f2) \
&& curl -L "https://github.com/kubernetes-sigs/kustomize/releases/download/${KUSTOMIZE_TAG}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz" -o kustomize.tar.gz \
&& tar -xzf kustomize.tar.gz \
&& mv kustomize /usr/local/bin/ \
&& rm kustomize.tar.gz \
&& rm -rf /var/lib/apt/lists/*
ARG OPENCODE_VERSION=latest
LABEL com.opencode.version=${OPENCODE_VERSION}
RUN OPENCODE_TAG=${OPENCODE_VERSION} && \
if [ "$OPENCODE_VERSION" = "latest" ]; then \
OPENCODE_TAG=$(curl -sL https://api.github.com/repos/anomalyco/opencode/releases/latest | \
sed -n 's/.*"tag_name": *"\(v[^"]*\)".*/\1/p'); \
else \
OPENCODE_TAG="v${OPENCODE_VERSION}"; \
fi && \
curl -sL "https://github.com/anomalyco/opencode/releases/download/${OPENCODE_TAG}/opencode-linux-x64.tar.gz" \
| tar -xz -C /usr/local/bin/ opencode
WORKDIR /workspace
ENV COLORTERM=truecolor
ENV TERM=xterm-256color
ENV HOME=/tmp/opencode_home
RUN mkdir -p $HOME && chmod 777 $HOME
ENTRYPOINT ["opencode"]
#!/bin/bash
set -euo pipefail
LATEST_TAG=$(curl -sL https://api.github.com/repos/anomalyco/opencode/releases/latest | sed -n 's/.*"tag_name": *"\(v[^"]*\)".*/\1/p')
LATEST_VERSION="${LATEST_TAG#v}"
CURRENT_VERSION=$(docker inspect --format '{{ index .Config.Labels "com.opencode.version" }}' opencode-local 2>/dev/null || echo "0.0.0")
if [[ "$LATEST_VERSION" != "$CURRENT_VERSION" ]]; then
echo "Updating opencode container from $CURRENT_VERSION to $LATEST_VERSION..."
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
docker build --load --progress=plain -t opencode-local \
--build-arg OPENCODE_VERSION="$LATEST_VERSION" \
-f "$PROJECT_ROOT/Dockerfile.opencode" "$PROJECT_ROOT" > /dev/null
else
echo "opencode container is already up to date ($CURRENT_VERSION)."
fi
#!/bin/bash
IMAGE_NAME="opencode-local"
DOCKERFILE="Dockerfile.opencode"
if [[ "$(docker images -q $IMAGE_NAME 2> /dev/null)" == "" ]]; then
echo "Building $IMAGE_NAME..."
docker build --load -t $IMAGE_NAME -f $DOCKERFILE .
fi
exec docker run -it --rm \
-v "$(pwd):/workspace" \
-v "$HOME/.opencode:/tmp/opencode_home/.opencode" \
-v "$HOME/.gitconfig:/etc/gitconfig:ro" \
-v "$HOME/.kube:/tmp/opencode_home/.kube:ro" \
-v "$HOME/.git:/tmp/opencode_home/.git:ro" \
-v "/etc/passwd:/etc/passwd:ro" \
-v "/etc/group:/etc/group:ro" \
-e HOME=/tmp/opencode_home \
-u "$(id -u):$(id -g)" \
$IMAGE_NAME "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment