Production Deployment 4.2.0#248
Conversation
* Upgrade pnpm from v8 to v10 - Update packageManager field to pnpm@10.33.0 via corepack - Migrate `resolutions` to `pnpm.overrides` (canonical pnpm field) - Add `pnpm.onlyBuiltDependencies` for esbuild, sharp, and @sentry/cli (pnpm v10 blocks lifecycle scripts by default) - Update playwright.yml from pnpm/action-setup@v2 (pinned v8) to @v4 - Update AGENTS.md and README.md to reflect pnpm 10 and corepack usage Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * Remove unnecessary type assertions flagged by no-unnecessary-type-assertion lint rule Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Andy Pickler <apickler@andys.macbook.air.lan> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Andy Pickler <apickler@ggj6gqtx00.lan>
…-Nation#223) * feat: add /logs Claude Code skill for auth app Adds a skill to query Cloud Run logs for the f3-auth service with deterministic bash scripts for argument parsing and output formatting. Supports environment selection (staging/prod), severity filters, time ranges, entry limits, and custom gcloud filters. Co-Authored-By: Claude <noreply@anthropic.com> * fix: escape pipe chars in log table and simplify time range handling - Escape | chars in textPayload/jsonPayload via jq gsub to prevent markdown table corruption - Replace redundant TIME_FILTER + --freshness with --freshness only, which is simpler and sufficient for gcloud logging read Co-Authored-By: Claude <noreply@anthropic.com> * fix: accept all gcloud duration suffixes (s, m, h, d, w) in freshness regex Co-Authored-By: Claude <noreply@anthropic.com> * refactor: promote /logs skill to monorepo top-level with multi-app support Move from apps/auth/.claude/skills/logs/ to .claude/skills/logs/ so it works for any Cloud Run app in the monorepo (auth, api, map). App config is driven by apps.conf — add two lines to register a new app. Co-Authored-By: Claude <noreply@anthropic.com> * fix: add gcloud guard and fix array expansion bug in fetch-logs Address preflight code review findings: - P1: replace unsafe ${CUSTOM_FILTERS[*]:-} with explicit loop join - P3: check gcloud CLI is installed before exec Co-Authored-By: Claude <noreply@anthropic.com> * fix: add jq dependency guard in format-logs.sh Matches the gcloud guard pattern in fetch-logs.sh for consistency. Co-Authored-By: Claude <noreply@anthropic.com> * docs: enrich /logs skill with categorized examples and tested configs Add organized example sections (basic, app-specific, volume/time, advanced filters), supported time units, and a tested configurations table showing verified app+env combinations. Co-Authored-By: Claude <noreply@anthropic.com> * fix: promote argument-hint to top-level frontmatter so Claude Code renders placeholder text Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Tackle <damon.vinciguerra@gmail.com>
Prevents Claude Code agent worktrees from being tracked in version control. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…on#229) * Auth app: SSO logout endpoint, onboarding prefill, and fixes - Add /api/oauth/logout endpoint for SSO session termination - Add GET /api/onboarding with isExistingUser flag for prefilling - Fix JWT extractable key for JWKS export - Fix add-client.ts CJS/ESM interop and DATABASE_PORT support - Redirect authorize to /login/email * Bump f3-auth version to 1.1.1 * Fix lint: use nullish coalescing in onboarding route * Apply suggestions from code review Co-authored-by: Patrick Taylor <1963845+pstaylor-patrick@users.noreply.github.com> * Remove duplicate code blocks from reviewer merge * Address PR review comments - Validate logout redirect against registered client origins instead of same-origin only, so cross-origin SSO clients work correctly - Init prefilling as false; set true at fetch start so unauthenticated visitors don't see Loading... indefinitely - Use session?.user?.id consistently in useEffect guard and deps --------- Co-authored-by: Patrick Taylor <1963845+pstaylor-patrick@users.noreply.github.com>
…e helper (F3-Nation#227) * chore: install commitlint packages * chore: add commitlint conventional config * chore: add lefthook commit-msg hook for commitlint * chore(repo): enforce monorepo scopes in commitlint config Require scope on all commits with an allowlist mapped to apps, packages, tooling, and cross-cutting concerns (deps, ci, repo, release). Co-Authored-By: Claude <noreply@anthropic.com> * docs(repo): document conventional commit scopes in AGENTS.md Replace the old free-form commit guidelines with the enforced conventional commit framework: required scopes, scope table, choosing heuristics, and examples. Co-Authored-By: Claude <noreply@anthropic.com> * chore(repo): add commitizen interactive commit helper via pnpm run commit Uses @commitlint/cz-commitlint adapter so the interactive prompts read scopes directly from commitlint.config.mjs — single source of truth. Co-Authored-By: Claude <noreply@anthropic.com> * docs(repo): add tailwind scope to commitlint config docs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(repo): address PR review feedback — add tailwind scope, pin cz version - Add 'tailwind' to commitlint scope-enum (R1) - Pin @commitlint/cz-commitlint to exact version for consistency (R2) Co-Authored-By: Claude <noreply@anthropic.com> * feat(repo): enable multiple scopes in commitizen prompt Allows selecting more than one scope during `pnpm commit` for cross-cutting changes (e.g., `feat(api,auth): ...`). Co-Authored-By: Claude <noreply@anthropic.com> * fix(repo): regenerate pnpm lockfile to match package.json CI was failing because --frozen-lockfile found the lockfile out of date. Co-Authored-By: Claude <noreply@anthropic.com> * fix(repo): remove stray debug text from AGENTS.md Addresses R1 from code review — "arbitrary change made again" was leftover test text that should not be merged. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Andy Pickler <apickler@andys.macbook.air.lan> Co-authored-by: Patrick Taylor <1963845+pstaylor-patrick@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
* fix(auth): allow calls directly to /login/email * chore(auth): version bump to 1.1.2
F3-Nation#230) * chore: add db:proxy script for local Cloud SQL Auth Proxy Registers `pnpm db:proxy` as a convenience script for starting the Cloud SQL Auth Proxy against the non-prod instance. This is a shared concern for all local developers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: add local development setup guide Step-by-step guide covering prerequisites, GCP auth, secrets, Cloud SQL Auth Proxy, migrations, and dev server startup for new contributors. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs(repo): incorporate background proxy service from database-helpers Addresses review feedback from @taterhead247 on PR F3-Nation#230. Adds macOS (launchd) and Linux (systemd) instructions for running Cloud SQL Auth Proxy as a persistent background service. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs(repo): address review findings on local dev setup guide - Create root .env.example with all required variables - Complete the secret mapping table (was missing EMAIL_*, GOOGLE_*, etc.) - Add me app (port 3003) to dev servers table - Fix gcloud version command in prerequisites - Improve secrets script to write directly to .env file Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(repo): add deterministic env generation script - scripts/generate-env.sh pulls staging secrets from GCP Secret Manager and generates a complete .env with sane local-dev defaults - Symlinks .env.local into each app directory for shared config - Never pulls from production — staging only - Add pnpm scripts: env:generate, env:generate:dry-run - Update LOCAL_DEV_SETUP.md to recommend the script as primary path Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(repo): auto-install gcloud and cloud-sql-proxy in db:proxy script pnpm db:proxy now auto-detects and installs missing dependencies: - gcloud CLI (via Homebrew on macOS, SDK installer on Linux) - cloud-sql-proxy (via Homebrew on macOS, direct binary on Linux) Also checks GCP auth and detects port conflicts before starting. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(repo): use port 5433 for Cloud SQL proxy to avoid Docker conflict Port 5432 conflicts with Docker Desktop's Postgres. Default to 5433 for the Cloud SQL Auth Proxy across all scripts and docs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(repo): add db:proxy:install for background daemon setup - pnpm db:proxy:install — sets up launchd (macOS) or systemd (Linux) so the Cloud SQL proxy auto-starts on login, no terminal tab needed - pnpm db:proxy:status — check if the daemon is running - pnpm db:proxy:uninstall — remove the background service - pnpm db:proxy — still works for one-off foreground usage - Fix port 5432 → 5433 in launchd/systemd configs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(repo): rewrite generate-env.sh for macOS bash 3.2 compatibility Replace declare -A (bash 4+) and associative arrays with plain variables. macOS ships with bash 3.2 which doesn't support them. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(repo): address review findings on db-proxy scripts - Fix header comment: default port 5432 → 5433 - Fix port-conflict suggestion: 5433 → 5434 (5433 is the default) - Add sudo for Linux binary install in db-proxy.sh - Fix remaining lsof port references in docs: 5432 → 5433 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(repo): add /dev-setup Claude Code skill for local environment Interactive skill that walks through docs/LOCAL_DEV_SETUP.md steps: - Checks/installs prerequisites (node, pnpm, gcloud, cloud-sql-proxy) - Generates .env from GCP staging secrets - Starts Cloud SQL proxy (foreground or background daemon) - Runs migrations and starts dev servers with health checks Modes: default (full setup), status, fix, reset Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(repo): pull Google Maps key and GCS secrets from GCP in env generation The map and api apps require NEXT_PUBLIC_GOOGLE_API_KEY and GOOGLE_LOGO_BUCKET_* vars that weren't in GCP Secret Manager. Created these secrets in f3-authentication-staging and wired generate-env.sh to pull them automatically. All 3 apps now start cleanly after `pnpm env:generate`. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [MOUNT-57] Update modals and add mobile filter sheet (#21) * Update modals and add mobile filter sheet - Updated various modal components to improve layout and responsiveness, including adjustments to class names for better styling. - Introduced a new MobileFilterSheet component for mobile devices to manage filters more effectively. - Integrated MobileFilterSheet into AOsTable, AreasTable, and other relevant components to enhance user experience on smaller screens. - Adjusted filter handling logic to accommodate the new mobile filter interface. * Enhance admin layout with titles and z-index adjustments - Added a title prop to the Layout component for better page identification across various admin pages. - Updated the z-index for the header to ensure proper stacking context. - Adjusted padding for content areas to improve layout consistency. - Modified several admin pages to utilize the new title feature, enhancing user experience and accessibility. * Add scrollbars in the admin sidebar. (#19) * Update event category handling in forms and modals (#18) - Introduced EVENT_CATEGORY_OPTIONS and EVENT_CATEGORY_LABEL_MAP constants for better management of event categories. - Updated LocationEventForm, AdminEventTypesModal, and AdminWorkoutsModal to utilize the new constants for displaying event category labels. - Improved label formatting to include category descriptions where applicable. * Enhance Google Map component by adding draggable marker and improving center handling logic (#2) * - Updated user router to allow role changes while preventing profile modifications for users outside the admin's managed home region. - Refactored user update logic to streamline authorization checks and ensure existing user data is preserved when unauthorized edits are attempted. - Enhanced tests to validate the new behavior, ensuring that profile fields remain unchanged while roles can still be updated. * Update role uniqueness validation in user management modals and API * fix user tests
… handling (#28) - Replaced individual workout type filters with a national event type filter in the map component. - Updated filter state management to accommodate national event type IDs. - Enhanced the filter data function to check against selected national event types. - Introduced a new API query to fetch active national event types for filtering. - Refactored the UI to use a select component for time and event type filters, improving user experience.
- Added sorting state management to AreasTable, SectorsTable, AllUsersTable, and MyUsersTable components. - Updated query parameters to include sorting options for better data retrieval. - Introduced new sorting schema in the API for consistent handling of sorting across various tables. - Adjusted columns in the workouts table to reflect changes in data structure and sorting capabilities.
… instead of specific options for better maintainability. (#30)
…31) * Update URL validation schemas and enhance modal functionality - Updated the `AdminAOsModal` to simplify query invalidation after updating AOs. - Introduced comprehensive URL validation schemas for website, Facebook, Instagram, and Twitter in the validators package. - Added tests for the new URL schemas to ensure proper validation of various URL formats. * Updated the `render` prop in `FormField` components for Twitter, Facebook, and Instagram to include explicit TypeScript type definitions for the `field` parameter, enhancing type safety and clarity. * Update URL validation schemas for Facebook, Instagram, and Twitter to improve clarity and validation logic, ensuring proper handling of optional URLs and enhancing user experience with more descriptive error messages. * chore(validators): update error messages in URL validation schemas
* Implement admin positions management - Added new `AdminPositionsModal` for managing positions, including creation and editing functionalities. - Introduced `AssignmentsTable` to display and manage user assignments for positions. - Created `PositionsTable` for listing all positions with filtering and pagination capabilities. - Updated `modal-switcher` to include the new positions modal. - Enhanced the API to support position assignments and retrieval with pagination and filtering options. - Added navigation links for positions in the admin panel. - Updated relevant tests to cover new functionalities and ensure robust validation. * Updated tests in `position.test.ts` to create a database-backed admin session, improving test reliability and setup. * style(map): update position assignment tab
|
@dnishiyama , did you mean to go from your high country dev for right into main? |
|
No this is what I intended and what I did last time. I made a staging deployment and then made a production PR. Seems like we are nearly ready to migrate to tag based deployments which would be much better. |
|
Huh. I see some commits in there that were made to the Nation dev branch. So this PR has everything dev has? |
Yes, there isn't a good, clean way to get around that. That happens with trunk deployments too. We can talk about some alternatives on the call today |
…utes (F3-Nation#194) * bringing in the cascade service * added cascade service to event and org routes, added test suite for service * setting cascade isActive to match the series data * added cascade integration test for org deletion * handle cascade where recurrencePattern is not set (defaults to weekly event) * using getCurrentDate as from date in cascade * fixing cascade cleanup * added event integration tests for event cascading * supporting multiple event type propogation * moving webhook notification to after cascade * applying copilot suggestion on org checking before cascading * test cleanups
taterhead247
left a comment
There was a problem hiding this comment.
I ran through maps and api in staging and all looks good. It'd be nice to see a change long. But I won't hold things up for that.
taterhead247
left a comment
There was a problem hiding this comment.
I just saw the test ci failed. Can this be corrected? And adding the change long while you're at it would be great.
* fix(api): making start dates dynamic on test files to properly test cascade service capabilities * fix(api): additional static date fix in test files
…admin positions management
👋 TL;DR
(coming soon)
🔎 Details
(coming soon)
✅ How to Test
(coming soon)
🥜 GIF