{"id":"69853a471861dac6c40b682f","title":"2026 02 06","path":"how-to/committee/release-notes/2026-02-06","contentMarkdown":"# 06-Feb-2026 — Migrations, Deploy and 3 more areas: 3 features and 2 fixes [#146](https://github.com/nbarrett/ngx-ramblers/issues/146)\n\n## [build 467](https://github.com/nbarrett/ngx-ramblers/actions/runs/21734101569) — [commit 2f149c0](https://github.com/nbarrett/ngx-ramblers/commit/2f149c041a93af53b03e6717466b15b6798d6fe8)\n\n_____\n\n- Add fly.toml to Dockerfile so it's available in deployed environments\n- Simplify fly deployment to read fly.toml directly instead of requiring fallback\n- Fix Environment type usage in env-config and env-core\n- Add FLICKR_SCRAPE_DUMP_DIR to Environment enum\n(ref: #146)\n\n### **secrets**: add database-first secrets loading for deployed servers ([#146](https://github.com/nbarrett/ngx-ramblers/issues/146))\n\nAdd loadSecretsWithFallback and loadSecretsForEnvironmentFromDatabase\nto support reading secrets from the database ENVIRONMENTS config when\nrunning on deployed servers. Falls back to file-based secrets for local\ndevelopment.\nSecrets are built from:\n- Global aws config and secrets from EnvironmentsConfig\n- Per-environment aws, mongo, and secrets from EnvironmentConfig\n- MongoDB URI is constructed from mongo config fields\n\n### **cli**: add GitHub secrets sync command for environment management ([#146](https://github.com/nbarrett/ngx-ramblers/issues/146))\n\nAdd ngx-cli github command with reconcile, sync, and push subcommands\nto manage the CONFIGS_JSON GitHub secret from the database source of truth.\nThis enables regular syncing when environments are created or modified.\n\n### **migrations**: harden geocode updates and defaults ([#146](https://github.com/nbarrett/ngx-ramblers/issues/146))\n\nRelease notes:\n- Migrations: backfill notification config defaults for existing data.\n- Migrations: avoid geocode failures when start location is missing.\n- Migrations: ensure enquiries system role exists in committee config.\n- Setup: extend default committee config and mail model fields.\n- Secrets: auto-pull missing secrets from Fly.io machines via flyctl machine exec.\n- Secrets: three-tier fallback — database, local file, then live Fly.io instance.\n- Secrets: extract shared env parsing to env-parser.ts to avoid circular imports.\n- Secrets: cache pulled secrets to local file for subsequent runs.\n- Config: distinguish expired tokens from missing tokens on admin-only endpoints.\n- Config: return 401 for expired tokens vs 403 for unauthenticated access.\n\n### **paths**: use resolveClientPath for non-vcs file access ([#146](https://github.com/nbarrett/ngx-ramblers/issues/146))\n\nFix path resolution for secrets and configs.json files when running\nin production mode where code executes from ts-gen directory.","contentHtml":"<h1>06-Feb-2026 — Migrations, Deploy and 3 more areas: 3 features and 2 fixes <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/146\">#146</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/21734101569\">build 467</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/2f149c041a93af53b03e6717466b15b6798d6fe8\">commit 2f149c0</a></h2>\n<hr>\n<ul>\n<li>Add fly.toml to Dockerfile so it&#39;s available in deployed environments</li>\n<li>Simplify fly deployment to read fly.toml directly instead of requiring fallback</li>\n<li>Fix Environment type usage in env-config and env-core</li>\n<li>Add FLICKR_SCRAPE_DUMP_DIR to Environment enum\n(ref: #146)</li>\n</ul>\n<h3><strong>secrets</strong>: add database-first secrets loading for deployed servers (<a href=\"https://github.com/nbarrett/ngx-ramblers/issues/146\">#146</a>)</h3>\n<p>Add loadSecretsWithFallback and loadSecretsForEnvironmentFromDatabase\nto support reading secrets from the database ENVIRONMENTS config when\nrunning on deployed servers. Falls back to file-based secrets for local\ndevelopment.\nSecrets are built from:</p>\n<ul>\n<li>Global aws config and secrets from EnvironmentsConfig</li>\n<li>Per-environment aws, mongo, and secrets from EnvironmentConfig</li>\n<li>MongoDB URI is constructed from mongo config fields</li>\n</ul>\n<h3><strong>cli</strong>: add GitHub secrets sync command for environment management (<a href=\"https://github.com/nbarrett/ngx-ramblers/issues/146\">#146</a>)</h3>\n<p>Add ngx-cli github command with reconcile, sync, and push subcommands\nto manage the CONFIGS_JSON GitHub secret from the database source of truth.\nThis enables regular syncing when environments are created or modified.</p>\n<h3><strong>migrations</strong>: harden geocode updates and defaults (<a href=\"https://github.com/nbarrett/ngx-ramblers/issues/146\">#146</a>)</h3>\n<p>Release notes:</p>\n<ul>\n<li>Migrations: backfill notification config defaults for existing data.</li>\n<li>Migrations: avoid geocode failures when start location is missing.</li>\n<li>Migrations: ensure enquiries system role exists in committee config.</li>\n<li>Setup: extend default committee config and mail model fields.</li>\n<li>Secrets: auto-pull missing secrets from Fly.io machines via flyctl machine exec.</li>\n<li>Secrets: three-tier fallback — database, local file, then live Fly.io instance.</li>\n<li>Secrets: extract shared env parsing to env-parser.ts to avoid circular imports.</li>\n<li>Secrets: cache pulled secrets to local file for subsequent runs.</li>\n<li>Config: distinguish expired tokens from missing tokens on admin-only endpoints.</li>\n<li>Config: return 401 for expired tokens vs 403 for unauthenticated access.</li>\n</ul>\n<h3><strong>paths</strong>: use resolveClientPath for non-vcs file access (<a href=\"https://github.com/nbarrett/ngx-ramblers/issues/146\">#146</a>)</h3>\n<p>Fix path resolution for secrets and configs.json files when running\nin production mode where code executes from ts-gen directory.</p>\n"}