Merge pull request #3 from bponders12-cell/chore/ci-hardening-phase-1
chore(ci): add website, relay, and backend PR validation
This commit is contained in:
commit
d3caf37bb2
|
|
@ -0,0 +1,50 @@
|
|||
## Purpose
|
||||
<!-- What problem, bug, or feature does this PR address? -->
|
||||
|
||||
## Related Issue
|
||||
<!-- Closes # or Fixes # -->
|
||||
Closes #
|
||||
|
||||
## Changes
|
||||
<!-- High-level bullet points of what code changed -->
|
||||
|
||||
## Architecture Impact
|
||||
<!-- What subsystem or data flow is affected? -->
|
||||
|
||||
## Risk Boundaries
|
||||
<!-- Check all subsystems touched by this PR -->
|
||||
- [ ] Telemetry acquisition (FROZEN 20 Hz pipeline)
|
||||
- [ ] Sensor fusion / lean angle
|
||||
- [ ] GNSS / speed processing
|
||||
- [ ] Ride persistence / state machine
|
||||
- [ ] Database / Drift Schema 7
|
||||
- [ ] Authentication / security rules
|
||||
- [ ] Website (Next.js / Founder Portal / Ops Console)
|
||||
- [ ] Backend / FastAPI API
|
||||
- [ ] Routing / Waze relay
|
||||
- [ ] None
|
||||
|
||||
## Database Impact
|
||||
<!-- Schema version, migration logic, or None. Never change Schema 7 without explicit migration tests. -->
|
||||
None
|
||||
|
||||
## Validation Actually Executed
|
||||
<!-- IMPORTANT: List only exact commands actually executed in this session. NEVER state "all tests pass" unless specifically executed. -->
|
||||
```bash
|
||||
# Example:
|
||||
# flutter analyze
|
||||
# flutter test
|
||||
# flutter build apk --debug
|
||||
# npm --prefix website run build
|
||||
# npm --prefix server/waze_relay test
|
||||
```
|
||||
|
||||
## Manual Testing
|
||||
<!-- What manual, physical device, or browser testing was performed, if any? -->
|
||||
|
||||
## Review Focus
|
||||
<!-- Specific files, security boundaries, or edge cases reviewers should inspect closely. -->
|
||||
|
||||
## Documentation
|
||||
- [ ] Documentation updated
|
||||
- [ ] Documentation not required for this change
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
name: MotorSignal Backend CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: backend-ci-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
backend-api-tests:
|
||||
name: Backend API tests
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: backend/motorsignal_api
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
cache-dependency-path: backend/motorsignal_api/requirements.lock
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.lock pytest httpx
|
||||
|
||||
- name: Run Firebase Auth signature and claims tests
|
||||
run: python tests/test_firebase_auth.py
|
||||
|
||||
- name: Run isolated API and Operations unit tests
|
||||
run: |
|
||||
pytest tests/test_ops_support.py tests/test_ops_incidents.py tests/test_legacy_admin_retirement.py -v
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
name: MotorSignal Waze Relay CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: waze-relay-ci-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
waze-relay-tests:
|
||||
name: Waze relay tests
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: server/waze_relay
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '22'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: server/waze_relay/package-lock.json
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run relay tests
|
||||
run: npm test
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
name: MotorSignal Website CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: website-ci-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
website-build-and-tests:
|
||||
name: Website build and regression tests
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: website
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '22'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: website/package-lock.json
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build Next.js application
|
||||
run: npm run build
|
||||
|
||||
- name: Run Founder Portal tests
|
||||
run: node tests/founder-portal.test.cjs
|
||||
|
||||
- name: Run Operations Console tests
|
||||
run: node tests/ops-experience.test.cjs
|
||||
|
||||
- name: Run Responsive Layout tests
|
||||
run: node tests/responsive-layout.test.cjs
|
||||
|
||||
- name: Run Navigation and Auth tests
|
||||
run: node tests/navigation-auth.cjs
|
||||
|
|
@ -7,7 +7,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:app_links/app_links.dart';
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'package:mcp_toolkit/mcp_toolkit.dart';
|
||||
import 'firebase_options.dart';
|
||||
import 'core/theme/theme.dart';
|
||||
import 'core/theme/theme_mode_provider.dart';
|
||||
|
|
@ -24,10 +23,6 @@ Future<void> main() async {
|
|||
WidgetsFlutterBinding.ensureInitialized();
|
||||
}
|
||||
|
||||
MCPToolkitBinding.instance
|
||||
..initialize()
|
||||
..initializeFlutterToolkit();
|
||||
|
||||
try {
|
||||
await Firebase.initializeApp(
|
||||
options: DefaultFirebaseOptions.currentPlatform,
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import flutter_tts
|
|||
import geolocator_apple
|
||||
import google_sign_in_ios
|
||||
import in_app_purchase_storekit
|
||||
import intentcall_platform
|
||||
import package_info_plus
|
||||
import share_plus
|
||||
import shared_preferences_foundation
|
||||
|
|
@ -31,7 +30,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
||||
FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin"))
|
||||
InAppPurchasePlugin.register(with: registry.registrar(forPlugin: "InAppPurchasePlugin"))
|
||||
IntentCallPlatformPlugin.register(with: registry.registrar(forPlugin: "IntentCallPlatformPlugin"))
|
||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
|
|
|
|||
72
pubspec.lock
72
pubspec.lock
|
|
@ -297,14 +297,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
dart_mcp:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_mcp
|
||||
sha256: "852b51da915d679be8d051e2e3b6c68ed19fe685f1c676bb35272a2d73ceac7a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.2"
|
||||
dart_style:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -491,14 +483,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.0.2"
|
||||
flutter_mcp_toolkit_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_mcp_toolkit_core
|
||||
sha256: fc61b977983b0615b84c27404db86c18bb703af519867b51fb72136f95682148
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.1.0"
|
||||
flutter_native_splash:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
|
|
@ -589,14 +573,6 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
from_json_to_json:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: from_json_to_json
|
||||
sha256: a29219df65cd20b1b17be8141ee51b3103d1cd95b192b7512139f3ae44775f49
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.0"
|
||||
geoclue:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -877,30 +853,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.11+2"
|
||||
intentcall_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: intentcall_core
|
||||
sha256: "10363edd11dab107d83d5126decec03d07ab6bf9fa4685a62f9f9d9c0af13cea"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.0"
|
||||
intentcall_platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: intentcall_platform
|
||||
sha256: a14d533b5ab2413c67ce2f943b56ab2a335a1a46b88a00ae62d72fafc6cacf50
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.0"
|
||||
intentcall_schema:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: intentcall_schema
|
||||
sha256: "7fd95e20f8d32f5ffe6c9cd4058d3fbf513c52dff69a63d9c4c8f4bf2810f842"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.0"
|
||||
intl:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -917,14 +869,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.5"
|
||||
is_dart_empty_or_not:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: is_dart_empty_or_not
|
||||
sha256: "1454632c2b961175d4c2807310713cbcbd054a51e63c545dc86c3eb9b2b061b0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.0"
|
||||
jni:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -957,14 +901,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.12.0"
|
||||
json_rpc_2:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: json_rpc_2
|
||||
sha256: "82dfd37d3b2e5030ae4729e1d7f5538cbc45eb1c73d618b9272931facac3bec1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.0"
|
||||
latlong2:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -1061,14 +997,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
mcp_toolkit:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: mcp_toolkit
|
||||
sha256: "75713760da19ef3b0b370e572d7714d51346f2411221ecce86fc5555918c0f2b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.1.0"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -66,7 +66,6 @@ dependencies:
|
|||
flutter_secure_storage: ^10.2.1
|
||||
in_app_purchase: 3.3.0
|
||||
marionette_flutter: ^0.6.0
|
||||
mcp_toolkit: ^5.1.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
|
|
|||
Loading…
Reference in New Issue