Programming courses at scale require CI systems capable of handling large numbers of concurrent build jobs reliably. Artemis is a learning management system for programming exercises that supports Jenkins and Local CI, both of which couple tightly to its own infrastructure. Hades is a stateless CI system designed for independent scaling and fault isolation, and integrating it with Artemis requires new components on both sides: Artemis needs a build trigger and result ingestion for Hades, and Hades lacks build log aggregation across its build jobs, making complete result delivery impossible.
This thesis presents a complete integration of Hades into Artemis, covering build triggering, log aggregation, and result delivery. The main contributions are (1) a build trigger service and a new result endpoint on the Artemis side to communicate with Hades, (2) an event-driven log aggregation system for Hades to capture logs across all build steps, and expose structurally unified logs for each build job through a queryable API, and (3) a standalone Hades-Artemis Adapter to correlate aggregated logs and test results, and deliver them as structured build results to Artemis.
Two new components address these gaps: the Log Manager within Hades and the standalone Hades-Artemis Adapter, both implemented in Go. The Docker Executor and Kubernetes Operator in Hades are extended to publish logs to the Log Manager. The Log Manager is the central component for log aggregation, it subscribes to per-container log streams, persists them durably to NATS JetStream, making the complete log history of a build job available once all containers have terminated. The adapter combines the aggregated logs and test results into Artemis’s expected format, and delivers the final build result to Artemis via a dedicated ingestion endpoint.