port pi-devbox v1.1.4–v1.1.6 hardening; bump opencode 1.17.7→1.17.8
Functional (not verbatim) port of the build-provenance, CI-hardening, SSH and shell fixes from the sibling pi-devbox repo, adapted to opencode-devbox's companions and two-variant (base/omos) shape. Defaults unchanged → canonical CI build stays byte-identical apart from the opencode bump and the (cache-free) provenance layer. Fixed: - SSH read-only ~/.ssh ControlPath: setup-lan-access.sh now renders the writable ~/.ssh-local/config sidecar (ControlPath redirect + Include) on EVERY host OS instead of exit 0-ing on native Linux; jump-specific blocks gated behind new NEED_JUMP flag. dssh/dscp + ControlMaster now survive a read-only ~/.ssh on native-Linux hosts. (pi-devbox v1.1.5) - bash history loss in nested/tmux shells: DEVBOX_HIST_SET no longer exported so each shell re-installs its own history -a flush. (pi-devbox v1.1.4) Added: - build provenance: OCI labels + /etc/opencode-devbox/build-manifest.json written from ground truth (opencode --version, installed omos version, /opt/mempalace-toolkit HEAD); wired into build-variant-* and smoke-* jobs; smoke-test.sh asserts manifest + label. (pi-devbox v1.1.6) - scripts/check-base-hash.sh CI guard: fails if a Dockerfile.base ARG *_REF is not folded into the base_tag hash. (pi-devbox v1.1.6) - overridable MEMPALACE_TOOLKIT_REPO build-arg in Dockerfile.base. (v1.1.6) Changed: - resolve-versions: fail-loud validation (SHA / semver) that aborts the release instead of silently falling back to floating main; adds shell: bash (set -o pipefail is illegal under the runner default dash). (pi-devbox v1.1.6) Bumped: - opencode-ai 1.17.7 → 1.17.8 (current npm latest stable). Deferred (needs a decision): opencode.json merge-on-recreate — see CHANGELOG.
This commit is contained in:
+55
-1
@@ -39,7 +39,7 @@ ARG USER_NAME=developer
|
||||
# edit, so the cache-hit class of bug that bit pi-devbox v0.74.0..
|
||||
# v0.75.5 cannot apply here.
|
||||
ARG INSTALL_OPENCODE=true
|
||||
ARG OPENCODE_VERSION=1.17.7
|
||||
ARG OPENCODE_VERSION=1.17.8
|
||||
RUN if [ "${INSTALL_OPENCODE}" = "true" ]; then \
|
||||
NPM_CONFIG_PREFIX=/usr npm install -g opencode-ai@${OPENCODE_VERSION} && \
|
||||
opencode --version ; \
|
||||
@@ -91,4 +91,58 @@ RUN if [ "${INSTALL_OMOS}" = "true" ]; then \
|
||||
NPM_CONFIG_PREFIX=/usr npm install -g oh-my-opencode-slim@${OMOS_VERSION}; \
|
||||
fi
|
||||
|
||||
# ── Build provenance: OCI labels + on-disk manifest ──────────────────
|
||||
# These ARGs are declared LAST, immediately before the layer that uses
|
||||
# them, so a changing BUILD_DATE / RELEASE_TAG / SOURCE_REVISION never
|
||||
# invalidates the expensive npm-install layers above. OPENCODE_VERSION,
|
||||
# OMOS_VERSION and INSTALL_OMOS are already in scope from earlier in this
|
||||
# stage and need no re-declaration; MEMPALACE_TOOLKIT_REF is consumed in
|
||||
# Dockerfile.base, so it is re-declared here only to land in the labels.
|
||||
ARG RELEASE_TAG=dev
|
||||
ARG BUILD_DATE=
|
||||
ARG SOURCE_REVISION=
|
||||
ARG MEMPALACE_TOOLKIT_REF=main
|
||||
|
||||
LABEL org.opencontainers.image.version="${RELEASE_TAG}" \
|
||||
org.opencontainers.image.revision="${SOURCE_REVISION}" \
|
||||
org.opencontainers.image.created="${BUILD_DATE}" \
|
||||
se.jordbo.opencode-devbox.opencode-version="${OPENCODE_VERSION}" \
|
||||
se.jordbo.opencode-devbox.install-omos="${INSTALL_OMOS}" \
|
||||
se.jordbo.opencode-devbox.omos-version="${OMOS_VERSION}" \
|
||||
se.jordbo.opencode-devbox.mempalace-toolkit-ref="${MEMPALACE_TOOLKIT_REF}"
|
||||
|
||||
# The manifest is written from GROUND TRUTH — the live `opencode --version`,
|
||||
# the omos package's installed version (when present), and the actual
|
||||
# checked-out HEAD of /opt/mempalace-toolkit (cloned in the base) — not
|
||||
# merely the intended build-args. That way it also exposes a dependency
|
||||
# that silently resolved to something other than the requested value.
|
||||
# oh-my-opencode-slim is present only in the omos variant (JSON null
|
||||
# otherwise). NOTE: omos is installed under prefix /usr at build time, so
|
||||
# we resolve its dir via `npm root -g` with that prefix rather than the
|
||||
# runtime NPM_CONFIG_PREFIX the base sets for the developer volume.
|
||||
RUN set -e; \
|
||||
mkdir -p /etc/opencode-devbox; \
|
||||
rev() { git -C "$1" rev-parse HEAD 2>/dev/null || echo "unknown"; }; \
|
||||
OPENCODE_V="$(opencode --version 2>/dev/null | head -n1 | tr -d '\r\n')"; \
|
||||
OMOS_REV='null'; \
|
||||
if [ "${INSTALL_OMOS}" = "true" ]; then \
|
||||
OMOS_DIR="$(NPM_CONFIG_PREFIX=/usr npm root -g 2>/dev/null)/oh-my-opencode-slim"; \
|
||||
OMOS_V="$(node -e "process.stdout.write(require('${OMOS_DIR}/package.json').version)" 2>/dev/null || echo unknown)"; \
|
||||
OMOS_REV="\"${OMOS_V}\""; \
|
||||
fi; \
|
||||
{ \
|
||||
echo '{'; \
|
||||
echo " \"release_tag\": \"${RELEASE_TAG}\","; \
|
||||
echo " \"build_date\": \"${BUILD_DATE}\","; \
|
||||
echo " \"source_revision\": \"${SOURCE_REVISION}\","; \
|
||||
echo " \"opencode_version\": \"${OPENCODE_V}\","; \
|
||||
echo " \"components\": {"; \
|
||||
echo " \"opencode\": \"${OPENCODE_V}\","; \
|
||||
echo " \"oh-my-opencode-slim\": ${OMOS_REV},"; \
|
||||
echo " \"mempalace-toolkit\": \"$(rev /opt/mempalace-toolkit)\""; \
|
||||
echo " }"; \
|
||||
echo '}'; \
|
||||
} > /etc/opencode-devbox/build-manifest.json; \
|
||||
echo "── build manifest ──"; cat /etc/opencode-devbox/build-manifest.json
|
||||
|
||||
# WORKDIR / ENTRYPOINT / CMD inherited from base.
|
||||
|
||||
Reference in New Issue
Block a user