Files
hassio-addons/chatgpt_codex/Dockerfile
2026-07-14 15:58:55 +02:00

158 lines
5.2 KiB
Docker

#============================#
# ALEXBELGIUM'S DOCKERFILE #
#============================#
#=== Home Assistant Addon ===#
#################
# 1 Build Image #
#################
ARG BUILD_FROM
ARG BUILD_VERSION
FROM rust:bookworm AS rtk-builder
RUN set -eux; \
rtk_version="$(git ls-remote --tags --refs --sort=-v:refname \
https://github.com/rtk-ai/rtk.git 'refs/tags/v*' \
| awk -F/ '$3 ~ /^v[0-9]+\.[0-9]+\.[0-9]+$/ { print $3; exit }')"; \
test -n "$rtk_version"; \
git clone --depth 1 --branch "$rtk_version" https://github.com/rtk-ai/rtk.git /src/rtk; \
cd /src/rtk; \
cargo build --release --locked; \
install -D -m 0755 target/release/rtk /out/rtk; \
/out/rtk --version
FROM ${BUILD_FROM}
##################
# 2 Modify Image #
##################
ENV S6_CMD_WAIT_FOR_SERVICES=1 \
S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \
S6_SERVICES_GRACETIME=0 \
HEADROOM_CONTEXT_TOOL=rtk
USER root
VOLUME [ "/sys/fs/cgroup" ]
ARG TEMPLATE_BASE_URL="https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates"
##################
# 3 Install apps #
##################
COPY rootfs/ /
RUN find /etc/cont-init.d /etc/s6-overlay /usr/local/bin \
-type f \( -name "*.sh" -o -name "run" -o -name "finish" -o -path "/usr/local/bin/*" \) \
-print -exec chmod +x {} \;
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
git \
gh \
jq \
less \
nano \
openssh-client \
python3-pip \
ripgrep \
tmux && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Install the latest stable official Codex static binary for the target architecture.
RUN set -eux; \
case "$(dpkg --print-architecture)" in \
amd64) codex_arch="x86_64" ;; \
arm64) codex_arch="aarch64" ;; \
*) echo "Unsupported architecture: $(dpkg --print-architecture)" >&2; exit 1 ;; \
esac; \
archive="/tmp/codex.tar.gz"; \
curl -fsSL --retry 3 --retry-delay 2 \
-o "$archive" \
"https://github.com/openai/codex/releases/latest/download/codex-${codex_arch}-unknown-linux-musl.tar.gz"; \
tar -xzf "$archive" -C /tmp; \
install -m 0755 "/tmp/codex-${codex_arch}-unknown-linux-musl" /usr/local/bin/codex; \
rm -f "$archive" "/tmp/codex-${codex_arch}-unknown-linux-musl"; \
codex --version
# Install the latest stable ttyd binary for the Home Assistant ingress terminal.
RUN set -eux; \
case "$(dpkg --print-architecture)" in \
amd64) ttyd_arch="x86_64" ;; \
arm64) ttyd_arch="aarch64" ;; \
*) echo "Unsupported architecture: $(dpkg --print-architecture)" >&2; exit 1 ;; \
esac; \
curl -fsSL --retry 3 --retry-delay 2 \
-o /usr/local/bin/ttyd \
"https://github.com/tsl0922/ttyd/releases/latest/download/ttyd.${ttyd_arch}"; \
chmod 0755 /usr/local/bin/ttyd; \
ttyd --version
COPY --from=rtk-builder /out/rtk /usr/local/bin/rtk
RUN rtk --version && \
pip3 install --upgrade --break-system-packages --no-cache-dir "headroom-ai[proxy,code,mcp]" && \
headroom --version
ARG MODULES="00-banner.sh 00-global_var.sh 01-custom_script.sh 00-local_mounts.sh 00-smb_mounts.sh 90-dns_set.sh"
RUN curl -fsSL --retry 3 --retry-delay 2 \
-o /ha_automodules.sh "${TEMPLATE_BASE_URL}/ha_automodules.sh" && \
chmod 744 /ha_automodules.sh && \
/ha_automodules.sh "$MODULES" && \
rm /ha_automodules.sh
################
# 4 Entrypoint #
################
RUN curl -fsSL --retry 3 --retry-delay 2 \
-o /ha_entrypoint.sh "${TEMPLATE_BASE_URL}/ha_entrypoint.sh" && \
curl -fsSL --retry 3 --retry-delay 2 \
-o /usr/local/lib/bashio-standalone.sh "${TEMPLATE_BASE_URL}/bashio-standalone.sh" && \
chmod 0777 /ha_entrypoint.sh && \
chmod 0755 /usr/local/lib/bashio-standalone.sh
ENTRYPOINT [ "/usr/bin/env" ]
CMD [ "/ha_entrypoint.sh" ]
############
# 5 Labels #
############
ARG BUILD_ARCH
ARG BUILD_DATE
ARG BUILD_DESCRIPTION
ARG BUILD_NAME
ARG BUILD_REF
ARG BUILD_REPOSITORY
ARG BUILD_VERSION
ENV BUILD_VERSION="${BUILD_VERSION}"
LABEL \
io.hass.name="${BUILD_NAME}" \
io.hass.description="${BUILD_DESCRIPTION}" \
io.hass.arch="${BUILD_ARCH}" \
io.hass.type="addon" \
io.hass.version=${BUILD_VERSION} \
maintainer="alexbelgium (https://github.com/alexbelgium)" \
org.opencontainers.image.title="${BUILD_NAME}" \
org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
org.opencontainers.image.vendor="Home Assistant Add-ons" \
org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \
org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.url="https://github.com/alexbelgium" \
org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/master/chatgpt_codex/README.md" \
org.opencontainers.image.created=${BUILD_DATE} \
org.opencontainers.image.revision=${BUILD_REF} \
org.opencontainers.image.version=${BUILD_VERSION}
#################
# 6 Healthcheck #
#################
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s \
CMD curl -fsS http://127.0.0.1:7681/ > /dev/null || exit 1