mirror of
https://codeberg.org/Toasterson/solstice-ci.git
synced 2026-04-10 21:30:41 +00:00
This commit introduces gRPC-based log streaming between the VM runner (`solstice-runner`) and orchestrator. Key updates include: - Implemented gRPC server in the orchestrator for receiving and processing runner logs. - Added log streaming and job result reporting in the `solstice-runner` client. - Defined `runner.proto` with messages (`LogItem`, `JobEnd`) and the `Runner` service. - Updated orchestrator to accept gRPC settings and start the server. - Modified cloud-init user data to include gRPC endpoint and request ID for runners. - Enhanced message queue logic to handle job results via `publish_job_result`. - Configured `Cross.toml` for cross-compilation of the runner.
43 lines
2.4 KiB
Markdown
43 lines
2.4 KiB
Markdown
### Solstice CI — Workflow Runner bootstrap and cross builds (MVP)
|
||
|
||
Summary
|
||
- Implemented a minimal VM workflow runner binary (solstice-runner) that the orchestrator’s cloud-init bootstraps and executes inside the guest.
|
||
- The runner is cross-compilable with cross for convenient deployment to local dev VMs.
|
||
|
||
What the runner does (today)
|
||
- Reads job context from env or a small YAML file:
|
||
- Env: SOLSTICE_REPO_URL, SOLSTICE_COMMIT_SHA
|
||
- File: SOLSTICE_JOB_FILE (defaults to /etc/solstice/job.yaml) with keys repo_url and commit_sha
|
||
- Prepares a workspace (default /root/work; overridable with SOLSTICE_WORKDIR).
|
||
- Uses system git to fetch the repository at the exact commit (avoids libgit2 to make cross builds simpler).
|
||
- Executes .solstice/job.sh when present, streaming stdout/stderr. Exits with the script’s exit code.
|
||
- Logs via tracing (stderr), compatible with the serial console setup added to libvirt.
|
||
|
||
Why this design
|
||
- Keeps the guest-side binary very small, with minimal dependencies, easing cross builds.
|
||
- Shelling out to git leverages whatever the base image provides and avoids cross-compiling libgit2.
|
||
- Aligns with the orchestrator’s cloud-init that writes /etc/solstice/job.yaml and exports the same env var names.
|
||
|
||
Build and usage
|
||
- Build all: cargo build --workspace
|
||
- Build only the runner: cargo build -p workflow-runner
|
||
- Binary name in target directory: solstice-runner
|
||
|
||
Cross compiling
|
||
- A Cross.toml is provided at the workspace root. Example targets:
|
||
- x86_64-unknown-linux-gnu
|
||
- x86_64-unknown-illumos (requires a recent toolchain with illumos std)
|
||
|
||
Examples:
|
||
- cross build -p workflow-runner --target x86_64-unknown-linux-gnu --release
|
||
- cross build -p workflow-runner --target x86_64-unknown-illumos --release
|
||
|
||
Notes:
|
||
- Ensure the base VM image has /bin/sh and git installed (runner relies on both).
|
||
- On OpenIndiana/illumos images, prefer installing git via pkg or image packaging beforehand; the runner will not attempt to install packages.
|
||
- The orchestrator cloud-init already bootstraps /usr/local/bin/solstice-runner and calls it; set SOLSTICE_RUNNER_URL to point to an HTTP(S) URL hosting the cross-built artifact for quick iteration.
|
||
|
||
Next steps
|
||
- Add optional KDL workflow execution when .solstice/job.sh is absent (parse .solstice/workflow.kdl and run steps).
|
||
- Stream logs back to the orchestrator over gRPC and report final status to the Integration layer.
|
||
- Secrets injection and masking in logs.
|