Conversation
Bumps the client-dependencies group in /client with 3 updates: [react-hook-form](https://github.com/react-hook-form/react-hook-form), [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) and [eslint](https://github.com/eslint/eslint). Updates `react-hook-form` from 7.71.1 to 7.71.2 - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](react-hook-form/react-hook-form@v7.71.1...v7.71.2) Updates `@eslint/js` from 9.39.2 to 9.39.3 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/commits/v9.39.3/packages/js) Updates `eslint` from 9.39.2 to 9.39.3 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v9.39.2...v9.39.3) --- updated-dependencies: - dependency-name: react-hook-form dependency-version: 7.71.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: client-dependencies - dependency-name: "@eslint/js" dependency-version: 9.39.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: client-dependencies - dependency-name: eslint dependency-version: 9.39.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: client-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps the server-dependencies group in /server with 4 updates: [pydantic-settings](https://github.com/pydantic/pydantic-settings), [greenlet](https://github.com/python-greenlet/greenlet), [ruff](https://github.com/astral-sh/ruff) and [ty](https://github.com/astral-sh/ty). Updates `pydantic-settings` from 2.13.0 to 2.13.1 - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](pydantic/pydantic-settings@v2.13.0...v2.13.1) Updates `greenlet` from 3.3.1 to 3.3.2 - [Changelog](https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst) - [Commits](python-greenlet/greenlet@3.3.1...3.3.2) Updates `ruff` from 0.15.1 to 0.15.2 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.15.1...0.15.2) Updates `ty` from 0.0.17 to 0.0.18 - [Release notes](https://github.com/astral-sh/ty/releases) - [Changelog](https://github.com/astral-sh/ty/blob/main/CHANGELOG.md) - [Commits](astral-sh/ty@0.0.17...0.0.18) --- updated-dependencies: - dependency-name: pydantic-settings dependency-version: 2.13.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: server-dependencies - dependency-name: greenlet dependency-version: 3.3.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: server-dependencies - dependency-name: ruff dependency-version: 0.15.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: server-dependencies - dependency-name: ty dependency-version: 0.0.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: server-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…/stage/client-dependencies-bc6fe7a1f7 Bump the client-dependencies group in /client with 3 updates
…ver-dependencies-09593107bb Bump the server-dependencies group in /server with 4 updates
merge dev into stage
Bumps the npm_and_yarn group with 1 update in the /client directory: [rollup](https://github.com/rollup/rollup). Updates `rollup` from 4.54.0 to 4.59.0 - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](rollup/rollup@v4.54.0...v4.59.0) --- updated-dependencies: - dependency-name: rollup dependency-version: 4.59.0 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com>
…/npm_and_yarn-b2936519f3 Bump rollup from 4.54.0 to 4.59.0 in /client in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the /client directory: [minimatch](https://github.com/isaacs/minimatch). Updates `minimatch` from 3.1.2 to 3.1.5 - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](isaacs/minimatch@v3.1.2...v3.1.5) --- updated-dependencies: - dependency-name: minimatch dependency-version: 3.1.5 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com>
…ver-dependencies-ad3c850ba6 Bump the server-dependencies group in /server with 3 updates
…root-dependencies-df75d2fd4d Bump the root-dependencies group with 2 updates
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
merge dev into stage
|
This pull request sets up GitHub code scanning for this repository. Once the scans have completed and the checks have passed, the analysis results for this pull request branch will appear on this overview. Once you merge this pull request, the 'Security' tab will show more code scanning analysis results (for example, for the default branch). Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results. For more information about GitHub code scanning, check out the documentation. |
There was a problem hiding this comment.
Pull request overview
This PR merges changes from stage into main, primarily refactoring the server to use dependency-injected Settings (instead of a global settings singleton), adding coverage/type-check tooling, expanding test coverage, and adding client-side theming support.
Changes:
- Server: introduce
get_settings()+ DI throughout services/dependencies; add app factory (create_app) and update logging/health endpoints. - Tooling/CI: add Pyright + pytest-cov + coverage config; update Makefile targets and CI workflows to run coverage.
- Client: add theme toggling (
next-themes) and migrate several UI primitive imports toradix-ui; regenerate API client for new endpoints.
Reviewed changes
Copilot reviewed 88 out of 100 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| server/uv.lock | Updates Python dependency lock (adds pyright/coverage/pytest-cov, bumps packages). |
| server/pyproject.toml | Adds deps + pyright/coverage tool config. |
| server/makefile | Adds cov/open-cov, switches check to pyright, renames migrate target. |
| server/conftest.py | Registers new pytest fixtures (logging/settings). |
| server/app/tests/test_main.py | Adds test verifying app.main import behavior. |
| server/app/tests/services/test_email.py | Updates email tests for new service signatures/settings fixture. |
| server/app/tests/services/auth/test_request_access.py | Updates tests for settings injection + background task args. |
| server/app/tests/services/auth/test_login.py | Updates login tests for settings injection. |
| server/app/tests/fixtures/settings.py | Adds centralized test Settings fixture and disables env file loading. |
| server/app/tests/fixtures/overrides.py | Refactors settings/email override fixtures (no global mutation). |
| server/app/tests/fixtures/logging.py | Adds root logger restoration fixture for logging tests. |
| server/app/tests/fixtures/database.py | Improves test DB setup; flags migrations as testing; safer rollback. |
| server/app/tests/fixtures/client.py | Builds test app via factory + overrides get_settings/get_db. |
| server/app/tests/core/test_logging.py | Adds tests for setup_logging behavior and file output. |
| server/app/tests/core/test_handlers.py | Adds tests for exception handler prod vs non-prod behavior. |
| server/app/tests/core/test_config.py | Adds tests for settings validation/caching and env-specific behavior. |
| server/app/tests/core/security/test_verify_jwt.py | Adds verify_jwt tests with settings-driven secrets. |
| server/app/tests/core/security/test_get_token.py | Adds token retrieval tests for registration/reset tokens. |
| server/app/tests/core/security/test_expire_tokens.py | Adds tests for expiring existing tokens. |
| server/app/tests/core/security/test_create_token.py | Adds tests for token creation helpers/wrappers. |
| server/app/tests/core/security/test_create_jwt.py | Adds tests for JWT creation helpers/wrappers. |
| server/app/tests/core/security/test_create_access_token.py | Removes old access token test (superseded by new suite). |
| server/app/tests/core/security/test_authenticate_user.py | Updates auth tests; renames one test case. |
| server/app/tests/core/dependencies/test_get_sessionmaker.py | Adds tests for cached sessionmaker behavior. |
| server/app/tests/core/dependencies/test_get_db.py | Adds tests for get_db(settings) yielding configured session. |
| server/app/tests/core/dependencies/test_get_current_user.py | Updates dependency tests for settings injection + JWT helpers. |
| server/app/tests/core/dependencies/test_get_current_admin.py | Updates admin dependency tests to use settings fixture. |
| server/app/tests/api/utilities.py | Refactors test request helper and admin login helper (settings-aware). |
| server/app/tests/api/test_user_get_current_user.py | Updates API tests to use login_admin(..., settings). |
| server/app/tests/api/test_feedback_create_feedback.py | Adds API tests for feedback creation endpoint. |
| server/app/tests/api/health/test_get_health.py | Adds status-code comment; no logic change. |
| server/app/tests/api/health/test_get_db_health.py | Adds API test for new /api/health/db endpoint. |
| server/app/tests/api/auth/test_reset_password.py | Updates tests for settings fixture + status code constant. |
| server/app/tests/api/auth/test_request_access.py | Updates expected 422 status constant. |
| server/app/tests/api/auth/test_register.py | Updates tests for settings fixture + status code constant. |
| server/app/tests/api/auth/test_refresh_token.py | Updates test to use settings-aware login helper. |
| server/app/tests/api/auth/test_logout.py | Updates test to use settings-aware login helper. |
| server/app/tests/api/auth/test_login.py | Updates tests for settings fixture + status code constant. |
| server/app/tests/api/auth/test_forgot_password.py | Updates test signature to use settings fixture. |
| server/app/tests/api/admin/test_update_access_request_status.py | Updates admin API tests for settings injection. |
| server/app/tests/api/admin/test_get_users.py | Updates admin API tests for settings injection + typing ignores. |
| server/app/tests/api/admin/test_get_access_requests.py | Updates admin API tests for settings injection + typing ignores. |
| server/app/services/github.py | Makes GitHub service settings-driven via DI and call-time settings arg. |
| server/app/services/feedback.py | Passes settings into feedback storage + GitHub issue creation. |
| server/app/services/email.py | Makes email service settings-driven via DI; updates send signatures. |
| server/app/services/auth.py | Threads settings through auth flows (JWT/email/background tasks). |
| server/app/services/admin.py | Threads settings through admin flow for email background tasks. |
| server/app/migrations/versions/2025_12_22_1054-b38ada12f56b_seed_admin_user.py | Adds test-mode branch to avoid reading .env during test migrations. |
| server/app/migrations/env.py | Switches migrations config to get_settings() instead of global settings. |
| server/app/main.py | Simplifies to app factory usage (fastapi_app, app = create_app()). |
| server/app/core/security.py | Refactors security helpers to require settings; improves typing. |
| server/app/core/logging.py | Refactors logging setup to accept params instead of global settings. |
| server/app/core/handlers.py | Makes prod/non-prod error detail behavior app-state driven. |
| server/app/core/dependencies.py | Makes DB/session/JWT dependencies settings-driven; adds cached sessionmaker. |
| server/app/core/config.py | Introduces cached get_settings() and is_prod_like; adjusts settings model. |
| server/app/api/endpoints/health.py | Adds /api/health/db endpoint that validates DB connectivity. |
| server/app/api/endpoints/feedback.py | Passes settings into background task for feedback creation. |
| server/app/api/endpoints/auth.py | Threads settings into auth endpoints and cookie behavior. |
| server/app/api/endpoints/admin.py | Threads settings into admin endpoint to support email flows. |
| server/app/init.py | Adds create_app() factory; installs swagger dark in non-prod-like envs. |
| server/.gitignore | Ignores .coverage output. |
| scripts/generate_api.sh | Suppresses logging while importing app for OpenAPI generation. |
| package.json | Adds check:py and runs pyright in lint/lint-staged. |
| package-lock.json | Updates dev tooling deps (lint-staged/npm-check-updates/etc.). |
| client/src/main.tsx | Wraps app with ThemeProvider. |
| client/src/layout/AppLayout.tsx | Adds theme mode toggle control to layout. |
| client/src/components/ui/separator.tsx | Switches separator primitive import to radix-ui. |
| client/src/components/ui/select.tsx | Switches select primitive import to radix-ui. |
| client/src/components/ui/popover.tsx | Switches popover primitive import to radix-ui. |
| client/src/components/ui/label.tsx | Switches label primitive import to radix-ui. |
| client/src/components/ui/dropdown-menu.tsx | Switches dropdown menu primitive import to radix-ui. |
| client/src/components/ui/dialog.tsx | Switches dialog primitive import to radix-ui. |
| client/src/components/ui/checkbox.tsx | Switches checkbox primitive import to radix-ui. |
| client/src/components/ui/button.tsx | Switches Slot usage to radix-ui API (Slot.Root). |
| client/src/components/ui/badge.tsx | Switches Slot usage to radix-ui API (Slot.Root). |
| client/src/components/ModeToggle.tsx | Adds theme mode dropdown UI using next-themes. |
| client/src/api/generated/zod.gen.ts | Regenerates Zod schemas (includes new db health endpoint + minor schema changes). |
| client/src/api/generated/types.gen.ts | Regenerates TS API types (adds GetDbHealth*). |
| client/src/api/generated/sdk.gen.ts | Regenerates SDK (adds HealthService.getDbHealth). |
| client/src/api/generated/index.ts | Re-exports newly generated endpoint types. |
| client/src/api/generated/core/params.gen.ts | Fixes empty-slot stripping logic for array params. |
| client/src/api/generated/client/types.gen.ts | Allows async CreateClientConfig and exposes onRequest. |
| client/src/api/generated/client.gen.ts | Aligns CreateClientConfig type with async support. |
| client/src/App.tsx | Removes hard-coded toaster theme (to follow app theme). |
| client/package.json | Adds radix-ui, bumps assorted deps. |
| .vscode/settings.json | Enables nearest Python analysis configuration. |
| .prettierignore | Ignores server/htmlcov/ and server/logs/. |
| .github/workflows/test-server.yml | Renames workflow and runs tests via make cov. |
| .github/workflows/merge-main-into-stage.yml | Renames workflow/job for clarity. |
| .github/workflows/generate-api.yml | Renames workflow/job, adds macOS keychain unlock, adjusts env creation. |
| .github/workflows/format-and-lint.yml | Renames workflow/job and updates trigger workflow name. |
| .github/workflows/deploy.yml | Renames workflow/jobs for clarity and updates reusable workflow wiring. |
| .github/workflows/deploy-server.yml | Renames reusable workflow and job. |
| .github/workflows/deploy-infra.yml | Renames reusable workflow and job. |
| .github/workflows/deploy-client.yml | Renames reusable workflow and job. |
| .github/workflows/codeql.yml | Renames workflow/job for clarity. |
| .github/workflows/build.yml | Renames workflow/jobs for clarity. |
No description provided.