Ordered steps to bring up the two clusters from this repo. Steps 1–2 and 6 are in-repo (commit them); the rest run against real clusters and need secret material you hold. Do not skip the pre-merge gate (step 5).
Clusters:
oci-lab— typecloud, bootstraps its own Cilium (CNI-none Talos).unraid-lab— typehomelab-kvm, no inline Cilium.
values/base/harbor.yaml uses harbor.wind-bearded.ts.net, the cluster's
Tailscale MagicDNS name. Update both the externalURL and ingress host together
if the tailnet domain changes.
Fills each cluster's argocd (install), argocd-apps (appset with that
cluster's identity), and — OCI only — cilium block:
mise run oci-lab:generate-manifests
mise run unraid:generate-manifests
git add omni/cluster-templates/patches/oci-lab-inline-manifests.yaml clusters/unraid-lab/omni/inline-manifests.yaml
git commit -m "chore: generate inline-manifests for deploy"Version pins live in omni/scripts/generate-manifests.sh (ARGOCD_VERSION,
CILIUM_VERSION) — override via env to bump.
Apply the Talos machine config with the generated patch through Omni. On first control-plane boot Talos applies the inline-manifests: Argo CD installs, then the seeded root Applications pull the rest of this repo:
argocd-apps— the layering ApplicationSet (chart-apps, valuesbase → type → cluster).argocd-bootstrap— syncsbootstrap/(Tailscale operator).argocd-unraid-raw(unraid only) — syncsclusters/unraid-lab/apps/*/application.yaml(arc-runners).
Apps stay Progressing until these exist. harbor-mirror-robot depends on
Harbor being up (step 7) — create it there, not here.
harbor-admin-password— nsharbor, keyHARBOR_ADMIN_PASSWORD.arc-gha-secret— nsarc-runners, the GitHub App credentials (github_app_id,github_app_installation_id,github_app_private_key).
Generate the App private key yourself; never commit any of these.
Do not merge #17 until both pass:
- unraid-lab: every Argo Application
Synced+Healthy(argocd app list), Harbor and arc-controller included. - OCI: re-sync is a no-op — the restructure must not churn a running
cluster.
argocd app diffshows no changes.
The layering ApplicationSet, validate.py, and the generate tooling land on
main together once the gate is green.
With Harbor reachable at its MagicDNS name:
- Create project
image-factory. - Create the push robot (Image Factory) and the mirror robot; store the mirror
robot creds as secret
harbor-mirror-robot(keysusername,password) in nsarc-runners— this is what step 4 deferred. - Wire OIDC (PocketID) per the image-factory-registry plan.
Detail: syscode-ai-internal-plans/projects/image-factory-registry/plans/2026-07-19-harbor-ghcr-mirror.md.
Apply the omni-on-unraid reconfig (points Image Factory at Harbor, drops the
GITHUB_TOKEN), confirm end-to-end, then revoke the GHCR PAT — last, only after
sign-off.
Detail: syscode-ai-internal-plans/projects/image-factory-registry/handoffs/2026-07-20-omni-image-factory-reconfig.md.