Block a user
devflow-devcontainer (0.1.6)
Published 2026-10-21 09:07:04 -04:00 by david
Installation
docker pull git.domanico.us/david/devflow-devcontainer:0.1.6sha256:78a4482630b01860540d67327eb73e8493b9ff4b260f561b0243cf1664ca1e09
Image Layers
| # debian.sh --arch 'amd64' out/ 'bookworm' '@1791158400' |
| RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates curl gnupg netbase sq wget ; rm -rf /var/lib/apt/lists/* # buildkit |
| RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends git mercurial openssh-client subversion procps ; rm -rf /var/lib/apt/lists/* # buildkit |
| RUN /bin/sh -c set -ex; apt-get update; apt-get install -y --no-install-recommends autoconf automake bzip2 default-libmysqlclient-dev dpkg-dev file g++ gcc imagemagick libbz2-dev libc6-dev libcurl4-openssl-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 libncurses5-dev libncursesw5-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libtool libwebp-dev libxml2-dev libxslt-dev libyaml-dev make patch unzip xz-utils zlib1g-dev ; rm -rf /var/lib/apt/lists/* # buildkit |
| ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| ENV LANG=C.UTF-8 |
| RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends libbluetooth-dev tk-dev uuid-dev ; rm -rf /var/lib/apt/lists/* # buildkit |
| ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305 |
| ENV PYTHON_VERSION=3.12.15 |
| ENV PYTHON_SHA256=c2c4321961fab0fb999d66e0cecf521c2ab3994c7992873ea99e306c1094fd5a |
| RUN /bin/sh -c set -eux; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; bin="$(readlink -ve /usr/local/bin/python3)"; dir="$(dirname "$bin")"; mkdir -p "/usr/share/gdb/auto-load/$dir"; cp -vL Tools/gdb/libpython.py "/usr/share/gdb/auto-load/$bin-gdb.py"; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit |
| RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit |
| CMD ["python3"] |
| RUN /bin/sh -c apt-get update && export DEBIAN_FRONTEND=noninteractive && apt-get purge -y imagemagick imagemagick-6-common # buildkit |
| RUN /bin/sh -c python3 -m pip install --upgrade gitpython==3.1.60 setuptools==83.0.0 wheel==0.46.3 # buildkit |
| COPY ./scripts/install-subversion.sh /tmp/install-subversion.sh # buildkit |
| RUN /bin/sh -c chmod +x /tmp/install-subversion.sh # buildkit |
| RUN /bin/sh -c /tmp/install-subversion.sh && rm -f /tmp/install-subversion.sh # buildkit |
| COPY meta.env /usr/local/etc/vscode-dev-containers/ # buildkit |
| LABEL version=3.2.6 |
| LABEL dev.containers.id=python |
| LABEL dev.containers.variant=3.12-bookworm |
| LABEL dev.containers.release=v0.4.35 |
| LABEL dev.containers.source=https://github.com/devcontainers/images |
| LABEL dev.containers.timestamp=Fri, 09 Oct 2026 18:56:51 GMT |
| ARG _DEV_CONTAINERS_BASE_IMAGE=dev_container_auto_added_stage_label |
| USER root |
| RUN |1 _DEV_CONTAINERS_BASE_IMAGE=dev_container_auto_added_stage_label /bin/sh -c mkdir -p /tmp/dev-container-features # buildkit |
| COPY /tmp/build-features/ /tmp/dev-container-features # buildkit |
| RUN |1 _DEV_CONTAINERS_BASE_IMAGE=dev_container_auto_added_stage_label /bin/sh -c echo "_CONTAINER_USER_HOME=$( (command -v getent >/dev/null 2>&1 && getent passwd 'root' || grep -E '^root|^[^:]*:[^:]*:root:' /etc/passwd || true) | cut -d: -f6)" >> /tmp/dev-container-features/devcontainer-features.builtin.env && echo "_REMOTE_USER_HOME=$( (command -v getent >/dev/null 2>&1 && getent passwd 'vscode' || grep -E '^vscode|^[^:]*:[^:]*:vscode:' /etc/passwd || true) | cut -d: -f6)" >> /tmp/dev-container-features/devcontainer-features.builtin.env # buildkit |
| RUN |1 _DEV_CONTAINERS_BASE_IMAGE=dev_container_auto_added_stage_label /bin/sh -c cp -ar /tmp/build-features-src/common-utils_0 /tmp/dev-container-features && chmod -R 0755 /tmp/dev-container-features/common-utils_0 && cd /tmp/dev-container-features/common-utils_0 && chmod +x ./devcontainer-features-install.sh && ./devcontainer-features-install.sh && rm -rf /tmp/dev-container-features/common-utils_0 # buildkit |
| RUN |1 _DEV_CONTAINERS_BASE_IMAGE=dev_container_auto_added_stage_label /bin/sh -c cp -ar /tmp/build-features-src/git_1 /tmp/dev-container-features && chmod -R 0755 /tmp/dev-container-features/git_1 && cd /tmp/dev-container-features/git_1 && chmod +x ./devcontainer-features-install.sh && ./devcontainer-features-install.sh && rm -rf /tmp/dev-container-features/git_1 # buildkit |
| ENV NVM_DIR=/usr/local/share/nvm |
| ENV NVM_SYMLINK_CURRENT=true |
| ENV PATH=/usr/local/share/nvm/current/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| RUN |1 _DEV_CONTAINERS_BASE_IMAGE=dev_container_auto_added_stage_label /bin/sh -c cp -ar /tmp/build-features-src/node_2 /tmp/dev-container-features && chmod -R 0755 /tmp/dev-container-features/node_2 && cd /tmp/dev-container-features/node_2 && chmod +x ./devcontainer-features-install.sh && ./devcontainer-features-install.sh && rm -rf /tmp/dev-container-features/node_2 # buildkit |
| ENV PYTHON_PATH=/usr/local/python/current |
| ENV PIPX_HOME=/usr/local/py-utils |
| ENV PIPX_BIN_DIR=/usr/local/py-utils/bin |
| ENV PATH=/usr/local/python/current/bin:/usr/local/py-utils/bin:/usr/local/jupyter:/usr/local/share/nvm/current/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
| RUN |1 _DEV_CONTAINERS_BASE_IMAGE=dev_container_auto_added_stage_label /bin/sh -c cp -ar /tmp/build-features-src/python_3 /tmp/dev-container-features && chmod -R 0755 /tmp/dev-container-features/python_3 && cd /tmp/dev-container-features/python_3 && chmod +x ./devcontainer-features-install.sh && ./devcontainer-features-install.sh && rm -rf /tmp/dev-container-features/python_3 # buildkit |
| ARG _DEV_CONTAINERS_IMAGE_USER=root |
| USER root |
| LABEL devcontainer.metadata=[ {"id":"ghcr.io/devcontainers/features/common-utils:2"}, {"id":"ghcr.io/devcontainers/features/git:1","customizations":{"vscode":{"settings":{"github.copilot.chat.codeGeneration.instructions":[{"text":"This dev container includes an up-to-date version of Git, built from source as needed, pre-installed and available on the `PATH`."}]}}}}, {"id":"ghcr.io/devcontainers/features/node:2","customizations":{"vscode":{"extensions":["dbaeumer.vscode-eslint"],"settings":{"github.copilot.chat.codeGeneration.instructions":[{"text":"This dev container includes `node`, `npm` and `eslint` pre-installed and available on the `PATH` for Node.js and JavaScript development."}]}}}}, {"id":"ghcr.io/devcontainers/features/python:1","customizations":{"vscode":{"extensions":["ms-python.python","ms-python.vscode-pylance","ms-python.autopep8"],"settings":{"github.copilot.chat.codeGeneration.instructions":[{"text":"This dev container includes `python3` and `pip3` pre-installed and available on the `PATH`, along with the Python language extensions for Python development."}],"python.defaultInterpreterPath":"/usr/local/python/current/bin/python","[python]":{"editor.defaultFormatter":"ms-python.autopep8"}}}}}, {"customizations":{"vscode":{"settings":{"python.defaultInterpreterPath":"/usr/local/bin/python"}}},"remoteUser":"vscode"} ] |
| SHELL [/bin/bash -o pipefail -c] |
| COPY /uv /uvx /usr/local/bin/ # buildkit |
| ARG GITLEAKS_VERSION=8.30.1 |
| ARG GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb |
| RUN |2 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb /bin/bash -o pipefail -c apt-get update && apt-get install -y --no-install-recommends tmux ripgrep shellcheck jq && rm -rf /var/lib/apt/lists/* && curl -fsSLo /tmp/gitleaks.tgz "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" && echo "${GITLEAKS_SHA256} /tmp/gitleaks.tgz" | sha256sum -c - && tar -xzf /tmp/gitleaks.tgz -C /usr/local/bin gitleaks && rm /tmp/gitleaks.tgz && chsh -s /usr/bin/zsh vscode && install -d -m 0755 -o vscode -g vscode /home/vscode/.claude && install -d -m 0700 -o vscode -g vscode /home/vscode/.config/devflow # buildkit |
| COPY gitconfig /etc/gitconfig # buildkit |
| USER vscode |
| COPY --chown=vscode:vscode user-gitconfig /home/vscode/.gitconfig # buildkit |
| RUN |2 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb /bin/bash -o pipefail -c install -d -m 0700 /home/vscode/.gnupg /home/vscode/.gnupg/private-keys-v1.d && echo "Placeholder, not a key: it makes Dev Containers skip gpg-agent forwarding (devflow IMG-03, plan 04-14)." > /home/vscode/.gnupg/private-keys-v1.d/README && chmod 0600 /home/vscode/.gnupg/private-keys-v1.d/README # buildkit |
| ENV PATH=/home/vscode/.local/bin:/usr/local/python/current/bin:/usr/local/py-utils/bin:/usr/local/jupyter:/usr/local/share/nvm/current/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin CLAUDE_CONFIG_DIR=/home/vscode/.claude CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1 |
| ARG NODE_VERSION=24.22.0 |
| RUN |3 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb NODE_VERSION=24.22.0 /bin/bash -o pipefail -c source /usr/local/share/nvm/nvm.sh && nvm install "${NODE_VERSION}" && nvm alias default "${NODE_VERSION}" && nvm use default && nvm cache clear # buildkit |
| RUN |3 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb NODE_VERSION=24.22.0 /bin/bash -o pipefail -c test "$(node --version)" = "v${NODE_VERSION}" # buildkit |
| RUN |3 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb NODE_VERSION=24.22.0 /bin/bash -o pipefail -c curl -fsSL https://claude.ai/install.sh | bash -s stable # buildkit |
| COPY --chown=vscode:vscode devflow-*.whl requirements.txt /tmp/devflow/ # buildkit |
| RUN |3 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb NODE_VERSION=24.22.0 /bin/bash -o pipefail -c uv venv --no-cache --python /usr/local/bin/python3.12 /home/vscode/.local/share/devflow-tools/devflow && uv pip install --no-cache --python /home/vscode/.local/share/devflow-tools/devflow/bin/python --require-hashes --no-build -r /tmp/devflow/requirements.txt && uv pip install --no-cache --python /home/vscode/.local/share/devflow-tools/devflow/bin/python --no-deps --no-index /tmp/devflow/devflow-*.whl && uv pip check --python /home/vscode/.local/share/devflow-tools/devflow/bin/python && mkdir -p /home/vscode/.local/bin && ln -s /home/vscode/.local/share/devflow-tools/devflow/bin/{flow,ops,aws-login,devflow-provision-git} /home/vscode/.local/bin/ && rm -rf /tmp/devflow # buildkit |
| RUN |3 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb NODE_VERSION=24.22.0 /bin/bash -o pipefail -c npm install -g @opengsd/gsd-core@latest @bitwarden/cli@2026.10.0 && npm cache clean --force # buildkit |
| RUN |3 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb NODE_VERSION=24.22.0 /bin/bash -o pipefail -c claude plugin marketplace add obra/superpowers-marketplace # buildkit |
| COPY --chown=vscode:vscode tmux.conf /home/vscode/.tmux.conf # buildkit |
| COPY --chown=vscode:vscode terminal-title.zsh /home/vscode/.oh-my-zsh/custom/terminal-title.zsh # buildkit |
| COPY --chown=vscode:vscode ssh-agent-warning.zsh /home/vscode/.oh-my-zsh/custom/ssh-agent-warning.zsh # buildkit |
| RUN |3 GITLEAKS_VERSION=8.30.1 GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb NODE_VERSION=24.22.0 /bin/bash -o pipefail -c claude --version && flow --version && ops --help >/dev/null && aws-login --help >/dev/null && devflow-provision-git --help >/dev/null && gitleaks version && uv --version && node --version && bw --version && gsd-core --help >/dev/null && tmux -V && jq --version && rg --version && shellcheck --version && zsh --version && flow doctor --help >/dev/null && zsh -n /home/vscode/.oh-my-zsh/custom/ssh-agent-warning.zsh && rm -rf /home/vscode/.claude/.claude.json /home/vscode/.claude/backups /home/vscode/.claude/sessions "/home/vscode/.config/Bitwarden CLI" /home/vscode/.npm # buildkit |
| LABEL devcontainer.metadata=[{"remoteUser":"vscode","shutdownAction":"none","containerEnv":{"CLAUDE_CONFIG_DIR":"/home/vscode/.claude","CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN":"1","CLAUDE_CODE_PLUGIN_PREFER_HTTPS":"1"},"postCreateCommand":"sudo chown vscode:vscode /home/vscode/.claude /home/vscode/.config /home/vscode/.config/devflow && flow setup","customizations":{"vscode":{"settings":{"dev.containers.gitCredentialHelperConfigLocation":"none","dev.containers.dockerCredentialHelper":false,"dev.containers.copyGitConfig":false,"remote.localPortHost":"localhost"}}}}] |
Labels
| Key | Value |
|---|---|
| dev.containers.id | python |
| dev.containers.release | v0.4.35 |
| dev.containers.source | https://github.com/devcontainers/images |
| dev.containers.timestamp | Fri, 09 Oct 2026 18:56:51 GMT |
| dev.containers.variant | 3.12-bookworm |
| devcontainer.metadata | [{"remoteUser":"vscode","shutdownAction":"none","containerEnv":{"CLAUDE_CONFIG_DIR":"/home/vscode/.claude","CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN":"1","CLAUDE_CODE_PLUGIN_PREFER_HTTPS":"1"},"postCreateCommand":"sudo chown vscode:vscode /home/vscode/.claude /home/vscode/.config /home/vscode/.config/devflow && flow setup","customizations":{"vscode":{"settings":{"dev.containers.gitCredentialHelperConfigLocation":"none","dev.containers.dockerCredentialHelper":false,"dev.containers.copyGitConfig":false,"remote.localPortHost":"localhost"}}}}] |
| org.opencontainers.image.revision | ad656b332d8b1c854d10f10e45341c875bb664f8 |
| org.opencontainers.image.source | https://git.domanico.us/david/devflow |
| org.opencontainers.image.version | 0.1.6 |
| version | 3.2.6 |