# syntax=docker/dockerfile:1.7 ARG OPENSUSE_IMAGE=opensuse/tumbleweed ARG DOCKER_CLI_VERSION=29-cli FROM docker:${DOCKER_CLI_VERSION} AS docker-cli FROM ${OPENSUSE_IMAGE} AS dev ARG NODEJS_MAJOR=22 ARG NODEJS_REPO=auto ARG PI_WEB_EXTRA_ZYPPER_PACKAGES="" ARG PI_WEB_UID=1000 ARG PI_WEB_GID=1000 SHELL ["/bin/bash", "-o", "pipefail", "-c"] ENV NODE_ENV=development \ PATH=/workspace/node_modules/.bin:$PATH \ NPM_CONFIG_UPDATE_NOTIFIER=false \ NPM_CONFIG_CACHE=/data/npm-cache \ HOME=/data/home \ XDG_CONFIG_HOME=/data/config \ PI_WEB_DATA_DIR=/data/pi-web \ PI_WEB_SESSIOND_SOCKET=/data/pi-web/sessiond.sock \ PI_CODING_AGENT_DIR=/data/pi-agent \ HOSTEXEC_IMAGE=alpine:3.22 \ SHELL=/bin/bash \ TERM=xterm-256color COPY docker/bin/install-opensuse-base /usr/local/sbin/install-pi-web-opensuse-base RUN chmod 0755 /usr/local/sbin/install-pi-web-opensuse-base \ && install-pi-web-opensuse-base WORKDIR /workspace COPY package.json package-lock.json ./ COPY scripts/install-git-hooks.mjs scripts/install-git-hooks.mjs RUN npm ci \ && ln -sf /workspace/node_modules/.bin/pi /usr/local/bin/pi \ && npm cache clean --force \ && chmod -R a+rwX /workspace/node_modules /data \ && chmod 0777 /workspace COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker COPY --from=docker-cli /usr/local/libexec/docker/cli-plugins /usr/local/libexec/docker/cli-plugins COPY docker/bin/hostexec /usr/local/bin/hostexec RUN chmod 0755 /usr/local/bin/hostexec COPY docker/custom-image.d/ /tmp/pi-web-custom-image.d/ RUN bash -euxo pipefail -c '\ shopt -s nullglob; \ for script in /tmp/pi-web-custom-image.d/*.sh; do \ echo "Running PI WEB custom image hook: ${script}"; \ bash "${script}"; \ done; \ rm -rf /tmp/pi-web-custom-image.d; \ zypper clean --all; \ rm -rf /var/cache/zypp/* \ ' EXPOSE 8504 8505 ENTRYPOINT ["tini", "--"] CMD ["npm", "run", "dev"]