olsitec-foundation platform repo
Find a file
Andreas Niemann 82c34c9a42 fix(network): ignore ipamConfigs drift so up --refresh can't recreate the net
Close the known gap. Docker auto-assigns the subnet's first host (.1) as the
bridge gateway — a field we never declared — so `pulumi up --refresh` surfaced
it as a spurious foundation-net ipamConfigs drift. `gateway` is a ForceNew
input, so reconciling it (whether by declaring it OR by applying the refreshed
diff) REPLACES the network and disconnects every container. (Verified: adding
the gateway turned a clean plan into a network + 6-container + commands
replacement.)

The IPAM is immutable by design (subnet fixed by CONTRACT_003), so ignore
drift on it: ignoreChanges:["ipamConfigs"]. Plain `up` stays clean (44
unchanged) and `up --refresh` no longer wants to recreate the network/containers.

Residual, NON-destructive: `preview --refresh` still shows pessimistic
"~triggers" replaces on the vault-init + credential-writer commands, because a
refreshed container.id resolves to [unknown] in the preview (a Pulumi
preview artifact). At real apply the id is known + unchanged; worst case the
commands re-run idempotently. Documented for CI (T14).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 23:36:50 +02:00
.forgejo/workflows chore: scaffold olsitec-foundation mono-repo 2026-06-30 17:10:46 +02:00
backup feat(backup): age at-rest encryption of bundles (CONTRACT_004 §4.3) 2026-06-30 23:23:38 +02:00
bootstrap fix(network): ignore ipamConfigs drift so up --refresh can't recreate the net 2026-06-30 23:36:50 +02:00
containers/caddy-cloudflare feat(bootstrap): caddy public ingress + DNS-01 TLS (T07) 2026-06-30 21:54:12 +02:00
documentation docs(session): HANDOVER — next-session prompt (Wave 2 done, T11/T13/T14/T15 + gaps next) 2026-06-30 22:51:31 +02:00
dr chore: scaffold olsitec-foundation mono-repo 2026-06-30 17:10:46 +02:00
offsite-backup feat(offsite-backup): olsitec-foundation bucket + scoped creds on home MinIO 2026-06-30 20:34:55 +02:00
packages feat(provision): Phase-0 throwaway test VM via vendored @olsitec/pulumi-hetzner 2026-06-30 18:57:54 +02:00
preflight feat(preflight): host/toolchain validation + VERSIONS pin-file — T01 2026-06-30 18:00:26 +02:00
provision feat(backup): age at-rest encryption of bundles (CONTRACT_004 §4.3) 2026-06-30 23:23:38 +02:00
.gitignore feat(offsite-backup): olsitec-foundation bucket + scoped creds on home MinIO 2026-06-30 20:34:55 +02:00
bun.lock feat(bootstrap): postgres data-plane + remote helper (T03) 2026-06-30 21:10:34 +02:00
package.json feat(offsite-backup): olsitec-foundation bucket + scoped creds on home MinIO 2026-06-30 20:34:55 +02:00
README.md chore: scaffold olsitec-foundation mono-repo 2026-06-30 17:10:46 +02:00
VERSIONS feat(bootstrap): forgejo actions runner (T10) 2026-06-30 22:38:37 +02:00

olsitec-foundation

The self-hosting platform "egg": a single Pulumi project that brings up Forgejo (+ Actions + OCI/npm registry), PostgreSQL, HashiCorp Vault, RustFS (S3), and a reverse proxy as plain OCI containers on one VM — recoverable from {a VM, this repo, the master passphrase}.

This is Layer 0. Kubernetes, ArgoCD and everything else are Layer-1 consumers of this foundation (see ADR-004).

Layout

  • bootstrap/ — the egg Pulumi project (phases, components, config).
  • packages/ — shared, publishable Pulumi modules (@olsitec/pulumi-*).
  • preflight/ — host & toolchain validation (run before any deploy).
  • backup/, dr/ — backup + disaster-recovery automation.
  • .forgejo/workflows/ — CI (preflight, pulumi preview/up, backup-verify).
  • documentation/ — planning, ADRs, contracts, baseline overlay. Read documentation/000_baseline.md and documentation/000_TOPOLOGY.md first.

Status

Planning complete (PLAN-001 vision, PLAN-002 strategy, ADR-004/005 accepted). Implementation not yet started — next step is T00 (contracts) per PLAN-002 §10.

Recovery in one line

git clone this repo → set PULUMI_CONFIG_PASSPHRASE./preflight/preflight.shpulumi up → restore latest offsite backup. Full procedure: dr/RUNBOOK.md (TBD, task T13).