From e2bb29930072c09aa89718ea3d729df92f27165e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bot=20of=20Thomas=20G=C3=BCttler?= Date: Sun, 7 Jun 2026 04:24:10 +0200 Subject: [PATCH] fix(ci): exclude chaos_monkey_test from regular CI (#518) --- .forgejo/workflows/ci.yml | 9 +--- .forgejo/workflows/deploy.yml | 45 +++---------------- .forgejo/workflows/firebase-tests.yml | 18 +------- .forgejo/workflows/website.yml | 9 +--- ci/main.go | 4 +- .../repositories/email_repository_impl.dart | 32 +++++-------- lib/main.dart | 2 + lib/ui/screens/crash_screen.dart | 1 + test/backend/chaos_monkey_test.dart | 3 ++ test/unit/email_repository_impl_test.dart | 6 +-- test/widget/about_screen_test.dart | 5 ++- 11 files changed, 35 insertions(+), 99 deletions(-) diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index a78ea51..2ea8f0b 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -22,14 +22,7 @@ jobs: created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 95bea84..7ad874a 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -24,14 +24,7 @@ jobs: created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) @@ -174,14 +167,7 @@ for r in data.get('workflow_runs', []): created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) @@ -232,14 +218,7 @@ for r in data.get('workflow_runs', []): created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) @@ -284,14 +263,7 @@ for r in data.get('workflow_runs', []): created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) @@ -341,14 +313,7 @@ for r in data.get('workflow_runs', []): created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) diff --git a/.forgejo/workflows/firebase-tests.yml b/.forgejo/workflows/firebase-tests.yml index 7de2fc2..7022957 100644 --- a/.forgejo/workflows/firebase-tests.yml +++ b/.forgejo/workflows/firebase-tests.yml @@ -23,14 +23,7 @@ jobs: created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) @@ -83,14 +76,7 @@ for r in data.get('workflow_runs', []): created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) diff --git a/.forgejo/workflows/website.yml b/.forgejo/workflows/website.yml index ed48049..ee5c575 100644 --- a/.forgejo/workflows/website.yml +++ b/.forgejo/workflows/website.yml @@ -27,14 +27,7 @@ jobs: created_at=$(curl -sf \ -H "Authorization: token $FORGEJO_TOKEN" \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/tasks?limit=100" \ - | python3 -c " -import sys, json -data = json.load(sys.stdin) -for r in data.get('workflow_runs', []): - if r.get('run_number') == $RUN_NUMBER: - print(r['created_at']) - break -" 2>/dev/null) + | python3 -c "import sys,json;data=json.load(sys.stdin);rs=[r for r in data.get('workflow_runs',[]) if r.get('run_number')==$RUN_NUMBER];print(rs[0]['created_at'] if rs else '')" 2>/dev/null) if [ -n "$created_at" ]; then queued_epoch=$(date -d "$created_at" +%s) wait_seconds=$((runner_start - queued_epoch)) diff --git a/ci/main.go b/ci/main.go index a7b8423..b167724 100644 --- a/ci/main.go +++ b/ci/main.go @@ -539,7 +539,7 @@ func (m *Ci) TestBackend(ctx context.Context) (string, error) { return m.WithStalwart(m.setup(m.backendSrc())). WithExec([]string{"/bin/bash", "-c", `tmp=$(mktemp); trap 'rm -f "$tmp"' EXIT; ` + - `flutter test --concurrency=1 --reporter expanded --no-pub test/backend >"$tmp" 2>&1 || { cat "$tmp"; exit 1; }; ` + + `flutter test --concurrency=1 --reporter expanded --no-pub --exclude-tags=nightly test/backend >"$tmp" 2>&1 || { cat "$tmp"; exit 1; }; ` + `grep -E '^All [0-9]+ tests passed' "$tmp" || tail -1 "$tmp"`}). Stdout(ctx) } @@ -570,7 +570,7 @@ func (m *Ci) ChaosMonkeyBackend(ctx context.Context) (string, error) { return m.WithStalwart(m.setup(m.backendSrc())). WithExec([]string{"/bin/bash", "-c", `tmp=$(mktemp); trap 'rm -f "$tmp"' EXIT; ` + - `flutter test test/backend/chaos_monkey_test.dart --reporter expanded --concurrency=1 --no-pub >"$tmp" 2>&1 || { cat "$tmp"; exit 1; }; ` + + `flutter test test/backend/chaos_monkey_test.dart --reporter expanded --concurrency=1 --no-pub --tags=nightly >"$tmp" 2>&1 || { cat "$tmp"; exit 1; }; ` + `grep -E '^All [0-9]+ tests passed' "$tmp" || tail -1 "$tmp"`}). Stdout(ctx) } diff --git a/lib/data/repositories/email_repository_impl.dart b/lib/data/repositories/email_repository_impl.dart index 911c1a9..60bff5a 100644 --- a/lib/data/repositories/email_repository_impl.dart +++ b/lib/data/repositories/email_repository_impl.dart @@ -2952,16 +2952,12 @@ class EmailRepositoryImpl implements EmailRepository { String? mailboxPath, String query, ) async { - final words = query - .trim() - .split(RegExp(r'\s+')) - .where((w) => w.isNotEmpty) - .toList(); + final words = + query.trim().split(RegExp(r'\s+')).where((w) => w.isNotEmpty).toList(); if (words.isEmpty) return []; final noteConditions = words.map((_) => 'n.note_text LIKE ?').join(' AND '); - final likeVars = - words.map((w) => Variable('%$w%')).toList(); + final likeVars = words.map((w) => Variable('%$w%')).toList(); final extraConditions = StringBuffer(); final extraVars = >[]; @@ -2980,14 +2976,13 @@ class EmailRepositoryImpl implements EmailRepository { ' WHERE $noteConditions$extraConditions' ' ORDER BY e.received_at DESC LIMIT 50'; - final rows = await _db - .customSelect( - sql, - variables: [...likeVars, ...extraVars], - readsFrom: {_db.emails, _db.emailNotes}, - ) - .get(); - final emailRows = await Future.wait(rows.map((r) => _db.emails.mapFromRow(r))); + final rows = await _db.customSelect( + sql, + variables: [...likeVars, ...extraVars], + readsFrom: {_db.emails, _db.emailNotes}, + ).get(); + final emailRows = + await Future.wait(rows.map((r) => _db.emails.mapFromRow(r))); return emailRows.map(_toModel).toList(); } @@ -2997,9 +2992,7 @@ class EmailRepositoryImpl implements EmailRepository { static String _toFtsQuery(String query) { final words = query .trim() - .split(RegExp(r'\s+')) - .where((w) => w.isNotEmpty) - .map((w) => w.replaceAll(RegExp(r'[^\w]'), '')) + .split(RegExp(r'[^\w]+')) .where((w) => w.isNotEmpty) .toList(); if (words.isEmpty) return ''; @@ -3126,8 +3119,7 @@ class EmailRepositoryImpl implements EmailRepository { queryRows.map((r) => _db.emails.mapFromRow(r)), ); - final noteRows = - await _searchEmailsByNotes(accountId, mailboxPath, query); + final noteRows = await _searchEmailsByNotes(accountId, mailboxPath, query); final seen = {}; final merged = []; diff --git a/lib/main.dart b/lib/main.dart index 20c6a2a..5bae652 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -109,6 +109,7 @@ class _SharedInboxAppState extends ConsumerState { theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo), useMaterial3: true, + splashFactory: NoSplash.splashFactory, ), darkTheme: ThemeData( colorScheme: ColorScheme.fromSeed( @@ -116,6 +117,7 @@ class _SharedInboxAppState extends ConsumerState { brightness: Brightness.dark, ), useMaterial3: true, + splashFactory: NoSplash.splashFactory, ), routerConfig: router, ); diff --git a/lib/ui/screens/crash_screen.dart b/lib/ui/screens/crash_screen.dart index 1567556..c23f192 100644 --- a/lib/ui/screens/crash_screen.dart +++ b/lib/ui/screens/crash_screen.dart @@ -57,6 +57,7 @@ class CrashScreen extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( + theme: ThemeData(splashFactory: NoSplash.splashFactory), home: Scaffold( appBar: AppBar( title: const Text('Something went wrong'), diff --git a/test/backend/chaos_monkey_test.dart b/test/backend/chaos_monkey_test.dart index f6715a4..94e1285 100644 --- a/test/backend/chaos_monkey_test.dart +++ b/test/backend/chaos_monkey_test.dart @@ -10,6 +10,9 @@ // CHAOS_ROUNDS (default: 30) — number of random operations to perform // CHAOS_SEED (default: current epoch ms) — seed for reproducibility +@Tags(['nightly']) +library; + import 'dart:io'; import 'dart:math'; diff --git a/test/unit/email_repository_impl_test.dart b/test/unit/email_repository_impl_test.dart index ff24382..f6fc9da 100644 --- a/test/unit/email_repository_impl_test.dart +++ b/test/unit/email_repository_impl_test.dart @@ -514,8 +514,7 @@ void main() { ), ); - final results = - await r.emails.searchEmailsGlobal(null, 'urgent'); + final results = await r.emails.searchEmailsGlobal(null, 'urgent'); expect(results, hasLength(1)); expect(results.first.subject, 'Weekly report'); }); @@ -569,8 +568,7 @@ void main() { ), ); - final results = - await r.emails.searchEmails('acc-1', 'INBOX', 'client'); + final results = await r.emails.searchEmails('acc-1', 'INBOX', 'client'); expect(results, hasLength(1)); expect(results.first.subject, 'Project update'); expect(results.first.mailboxPath, 'INBOX'); diff --git a/test/widget/about_screen_test.dart b/test/widget/about_screen_test.dart index 2c3cdd7..64c5988 100644 --- a/test/widget/about_screen_test.dart +++ b/test/widget/about_screen_test.dart @@ -50,7 +50,10 @@ Widget _buildScreen({List accounts = const []}) { FakeAccountRepository(accounts), ), ], - child: const MaterialApp(home: AboutScreen()), + child: MaterialApp( + theme: ThemeData(splashFactory: NoSplash.splashFactory), + home: const AboutScreen(), + ), ); }