From 8e5ac2c4920daa625c8491c554d80db54fa9589a Mon Sep 17 00:00:00 2001 From: "loki-hermes-agent[bot]" <3150032+loki-hermes-agent[bot]@users.noreply.github.com> Date: Wed, 10 Jun 2026 02:22:55 +0300 Subject: [PATCH 1/2] chore: add hermes-agent Dockerfile, .dockerignore, and entry point --- .dockerignore | 23 +++++++++++++++++++++++ Dockerfile | 27 +++++++++++++++++++++++++++ src/agentic_node_ops/processor.py | 4 ++++ 3 files changed, 54 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9d571a0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,23 @@ +# Git +.git/ +.gitignore + +# Documentation and tests (not needed in production image) +docs/ +tests/ +*.md + +# IDE and editor files +.vscode/ +.idea/ +*.swp +*.swo + +# Python cache +__pycache__/ +*.py[cod] +*$py.class + +# Hermes specific +*.jsonl +*.jsonl.offset \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9568c4e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +# Dockerfile for Hermes Agent +FROM python:3.12-slim + +WORKDIR /app + +# Install uv for fast, reliable dependency resolution +COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv + +# Copy project files (explicit uv.lock required for --frozen) +COPY pyproject.toml uv.lock ./ +COPY src/ ./src/ + +# Install production dependencies only +RUN uv sync --frozen --no-dev + +# Ensure logs reach the container log driver immediately +ENV PYTHONUNBUFFERED=1 +ENV ALERTS_JSONL_PATH=/var/hermes/alerts.jsonl +ENV ALERT_OFFSET_PATH=/var/hermes/alerts.jsonl.offset +ENV METRICS_PORT=8091 + +RUN mkdir -p /var/hermes + +# metrics endpoint — implemented in task 2.7 +EXPOSE 8091 + +CMD ["uv", "run", "python", "-m", "agentic_node_ops.processor"] \ No newline at end of file diff --git a/src/agentic_node_ops/processor.py b/src/agentic_node_ops/processor.py index 4f7cc6a..a253510 100644 --- a/src/agentic_node_ops/processor.py +++ b/src/agentic_node_ops/processor.py @@ -187,3 +187,7 @@ def run_processor_loop( """ log.info("Starting alert processor loop (poll interval: %ss)", poll_interval) asyncio.run(_run_loop_async(db, dispatcher, poll_interval)) + + +if __name__ == "__main__": + run_processor_loop() From a8dd51f2edb8a41908651cff328fd83a305ce2e9 Mon Sep 17 00:00:00 2001 From: "loki-hermes-agent[bot]" <3150032+loki-hermes-agent[bot]@users.noreply.github.com> Date: Wed, 10 Jun 2026 23:26:00 +0300 Subject: [PATCH 2/2] chore: pin uv version to 0.5.25 for reproducible builds --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9568c4e..96656d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,8 @@ FROM python:3.12-slim WORKDIR /app -# Install uv for fast, reliable dependency resolution -COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv +# Install uv for fast, reliable dependency resolution (pinned for reproducibility) +COPY --from=ghcr.io/astral-sh/uv:0.5.25 /uv /bin/uv # Copy project files (explicit uv.lock required for --frozen) COPY pyproject.toml uv.lock ./