[BEEEP] feat: Containerize the DB Seeder utility#7965
Conversation
🤖 Bitwarden Claude Code ReviewOverall Assessment: APPROVE Reviewed the containerization of the SeederUtility CLI: a new multi-stage Dockerfile, a Code Review DetailsNo findings at or above the reporting threshold. Notes considered and dismissed during review:
|
…f-host) Adds a Dockerfile + entrypoint that build the SeederUtility CLI into a runnable container (multi-stage .NET + Rust, self-contained single-file, non-root), so an orchestrator can run data-set seeding as a per-env Job. The utility stays context-agnostic: push/notification config is per-invocation (self-host callers pass globalSettings__selfHosted=true + an installation id; cloud callers pass their notification-hub config), so the same image works for both. Also: - RustSdk: link libsdk.so for linux-arm64 too (was linux-x64 only), so the native crypto lib bundles on Apple Silicon. - SeederUtility: persist DataProtection keys to globalSettings.DataProtection.Directory when set, so seeded records are decryptable by an instance that shares a key ring (e.g. self-host). No-op when unset.
b6aa187 to
972199f
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7965 +/- ##
==========================================
- Coverage 66.03% 61.48% -4.55%
==========================================
Files 2253 2253
Lines 99103 99103
Branches 8960 8960
==========================================
- Hits 65445 60938 -4507
- Misses 31411 36012 +4601
+ Partials 2247 2153 -94 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
🎟️ Tracking
BEEEP
📔 Objective
Packages the SeederUtility CLI as a portable container image so it can run under container orchestration (for example, as a Kubernetes Job). Adds a Dockerfile and entrypoint: a multi-stage .NET + Rust build that produces a self-contained single-file binary and runs as a non-root user.
Two small supporting changes make the image work:
libsdk.soforlinux-arm64as well aslinux-x64, so the native library is bundled on arm64.globalSettings.DataProtection.Directorywhen that path is set (and does nothing when it isn't), so the keys can be shared with other components.