All checks were successful
images / hermes (push) Successful in 1m55s
Upstream ships /opt/hermes (app + .venv + scripts) read-only root, which blocks the agent self-modifying and the gateway auto-installing the WhatsApp bridge's node_modules in place. Add a derived Containerfile layer (FROM the upstream build) that chowns/chmods /opt/hermes writable by the runtime hermes user. Done in the image, not a volume: a volume over /opt/hermes copies-up once then freezes the app, silently defeating AutoUpdate=registry. Persistence stays on the /opt/data volume. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011D3YeWKpjg5bT488fVanCH
35 lines
1.5 KiB
Bash
Executable File
35 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build the Hermes Agent image locally, mirroring what the `images` workflow does.
|
|
#
|
|
# Hermes ships its own Dockerfile, so there is no vendored Containerfile here — we
|
|
# build straight from the upstream git context at a release tag. Override the ref
|
|
# with HERMES_REF (e.g. v0.2.0); empty resolves the latest upstream release.
|
|
set -euo pipefail
|
|
|
|
REGISTRY="${REGISTRY:-git.lair.cafe}"
|
|
IMAGE_NAME="${REGISTRY}/lair/hermes"
|
|
HERMES_REF="${HERMES_REF:-}"
|
|
|
|
if [ -z "${HERMES_REF}" ]; then
|
|
HERMES_REF=$(curl -fsS 'https://api.github.com/repos/NousResearch/hermes-agent/releases/latest' | jq -r '.tag_name // empty')
|
|
[ -n "${HERMES_REF}" ] || HERMES_REF=$(curl -fsS 'https://api.github.com/repos/NousResearch/hermes-agent/tags' | jq -r '.[0].name // empty')
|
|
fi
|
|
[ -n "${HERMES_REF}" ] || { echo "could not resolve an upstream hermes ref"; exit 1; }
|
|
VERSION="${HERMES_REF#v}"
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
BASE="localhost/hermes-upstream:${VERSION}"
|
|
|
|
echo "[1/2] building upstream ${BASE} from NousResearch/hermes-agent#${HERMES_REF}"
|
|
podman build --pull=newer -t "${BASE}" \
|
|
"https://github.com/NousResearch/hermes-agent.git#${HERMES_REF}"
|
|
|
|
echo "[2/2] building derived (writable /opt/hermes) -> ${IMAGE_NAME}:${VERSION}"
|
|
podman build --build-arg BASE="${BASE}" \
|
|
-t "${IMAGE_NAME}:${VERSION}" \
|
|
-t "${IMAGE_NAME}:latest" \
|
|
"${SCRIPT_DIR}"
|
|
|
|
echo "built ${IMAGE_NAME}:${VERSION} and :latest"
|
|
echo "push with: podman push ${IMAGE_NAME}:${VERSION} && podman push ${IMAGE_NAME}:latest"
|