Skip to content

feat: add non-media service-catalog lane + pipeline wiring#203

Open
clubanderson wants to merge 1 commit into
projectbluefin:mainfrom
clubanderson:feat/service-catalog/nonmedia-pipeline-lane
Open

feat: add non-media service-catalog lane + pipeline wiring#203
clubanderson wants to merge 1 commit into
projectbluefin:mainfrom
clubanderson:feat/service-catalog/nonmedia-pipeline-lane

Conversation

@clubanderson

Copy link
Copy Markdown
Contributor

Summary

Closes #81.

Implements the first non-media service lane in the service-catalog pipeline, proving the base homelab workload contract for network-only print services (OpenPrinting/CUPS class, bluespeed#11).

Changes

Tests

  • tests/service_catalog/nonmedia/__init__.py — package init
  • tests/service_catalog/nonmedia/test_nonmedia_lane.py — 15 tests (13 active + 2 explicit skips for USB/mDNS hardware deferred to feat: split printer-device access and LAN discovery from the base non-media lane #67)
    • Namespace existence, deployment readiness, pod running/labels, PVC Bound, Service on port 631, IPP reachability, env injection (PUID/PGID/TZ), rollout persistence, observability artifact
  • tests/service_catalog/nonmedia/fixtures/nonmedia-pvc.yaml — PVC raw manifest (1Gi RWO)
  • tests/service_catalog/nonmedia/fixtures/nonmedia-service.yaml — Deployment + Service manifests (nginx stub on port 631 for network-only IPP contract)

Argo WorkflowTemplates

  • argo/workflow-templates/homelab-nonmedia-service.yaml — DAG: create-namespace → deploy-fixture → run-tests with onExit: cleanup. Delegates the runner pod to run-incluster-tests/run-pytest.
  • argo/workflow-templates/bluefin-service-catalog-pipeline.yaml — Top-level aggregation pipeline routing lane=nonmedia to the matching WorkflowTemplate; extensible for future lanes.
  • argo/homelab-nonmedia-service.yaml — Workflow submit trigger.

Operator surfaces

  • Justfile: new target run-service-nonmedia under a new Service-catalog workload lanes section.
  • WORKFLOWS.md: homelab-nonmedia-service and bluefin-service-catalog-pipeline contracts documented.
  • RUNBOOK.md: 4 new service-catalog failure mode rows (PVC not Bound, pod Pending, TEST_NAMESPACE unset, namespace finalizer hang).

Out of scope (separate PRs/lanes)

Testing

Lane tests are designed to run inside the cluster via just run-service-nonmedia (submits homelab-nonmedia-service WorkflowTemplate). The fixture keeps the base lane on the network-only contract per issue guidance.

…uefin#81)

- Add tests/service_catalog/nonmedia/ lane: 15 tests (13 active + 2
  explicit skips for USB/mDNS hardware deferred to projectbluefin#67)
- Add raw-manifest fixtures: nonmedia-pvc.yaml + nonmedia-service.yaml
  (nginx stub on port 631 for network-only IPP contract)
- Add argo/workflow-templates/homelab-nonmedia-service.yaml: DAG with
  create-namespace → deploy-fixture → run-tests (onExit cleanup),
  delegates runner pod to run-incluster-tests/run-pytest template
- Add argo/workflow-templates/bluefin-service-catalog-pipeline.yaml:
  top-level aggregation pipeline routing lane=nonmedia to the matching
  WorkflowTemplate; extensible for future lanes
- Add argo/homelab-nonmedia-service.yaml: Workflow submit trigger
- Add Justfile target run-service-nonmedia
- Update WORKFLOWS.md: homelab-nonmedia-service and
  bluefin-service-catalog-pipeline contracts documented
- Update RUNBOOK.md: 4 new service-catalog failure mode rows

Out of scope: USB printer passthrough (projectbluefin#67), avahi mDNS (projectbluefin#67), GPU (projectbluefin#63)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

@hanthor hanthor left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM — well-structured test/infra addition, clean code.

@hanthor hanthor left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Service-catalog lane addition. Merge after foundational #202. LGTM.

@hanthor hanthor left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Architecture issue: pipeline consolidation needed. This PR introduces bluefin-service-catalog-pipeline as a routing DAG, but #202 defines the canonical service-catalog-pipeline which is lane-agnostic. Two pipeline templates with different architectures create maintenance confusion.

Required changes:

  1. Rebase on top of #202. Use the lane-agnostic service-catalog-pipeline from #202 (with lane=nonmedia) rather than a separate routing DAG.
  2. Fix naming: homelab-nonmedia-service vs service-catalog-pipeline conflict. Pick one prefix.
  3. Fix entry point: Justfile recipe calls homelab-nonmedia-service directly, bypassing the pipeline. #204 correctly uses service-catalog-pipeline.

Builds on: #202 (must merge first)

@hanthor hanthor left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: Approved ✅

Part of the structured service-catalog project build-up. Conventional Commits format, referenced issues, consistent with related PRs in the series.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: add the first non-media service lane to the service-catalog pipeline

3 participants