From f7d570d422f173792e808857e7f378d44266f160 Mon Sep 17 00:00:00 2001 From: Peter Pavlenko Date: Sat, 17 Jan 2026 18:40:35 +0100 Subject: [PATCH 1/2] Update ci.yml to build apks. --- .github/workflows/ci.yml | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5462a48..f140d84 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,10 +10,15 @@ on: jobs: test: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: "17" + - name: Setup Flutter uses: subosito/flutter-action@v2 with: @@ -26,22 +31,24 @@ jobs: - name: Generate Icon Packs run: dart run flutter_iconpicker:generate_packs --packs fontAwesomeIcons - - name: Analyze code - run: flutter analyze - - - name: Run tests - run: flutter test - - - name: Check formatting - run: dart format --set-exit-if-changed . + - name: Analyze and Test + run: | + flutter analyze + flutter test + dart format --set-exit-if-changed . build-android: runs-on: ubuntu-latest needs: test - steps: - uses: actions/checkout@v4 + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: "17" + - name: Setup Flutter uses: subosito/flutter-action@v2 with: @@ -54,5 +61,13 @@ jobs: - name: Generate Icon Packs run: dart run flutter_iconpicker:generate_packs --packs fontAwesomeIcons - - name: Build Android APK - run: flutter build apk --release --no-tree-shake-icons + - name: Build Unsigned APK + run: | + flutter build apk --release --split-per-abi --no-tree-shake-icons \ + --build-number=$((5100 + ${{ github.run_number }})) + + - name: Upload Unsigned APKs + uses: actions/upload-artifact@v4 + with: + name: unsigned-apks + path: build/app/outputs/flutter-apk/*-release.apk From 11343cefacd75420c0125b91d359455b9ad58f5e Mon Sep 17 00:00:00 2001 From: Peter Pavlenko Date: Sat, 17 Jan 2026 18:41:03 +0100 Subject: [PATCH 2/2] fix: Fixed unit test after UI change. --- test/habits/habits_manager_fixed_test.dart | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/test/habits/habits_manager_fixed_test.dart b/test/habits/habits_manager_fixed_test.dart index 6e495a2..3b89742 100644 --- a/test/habits/habits_manager_fixed_test.dart +++ b/test/habits/habits_manager_fixed_test.dart @@ -2,17 +2,16 @@ import 'dart:collection'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; - +import 'package:habo/generated/l10n.dart'; import 'package:habo/habits/habit.dart'; import 'package:habo/habits/habits_manager.dart'; import 'package:habo/model/habit_data.dart'; -import 'package:habo/repositories/habit_repository.dart'; -import 'package:habo/repositories/event_repository.dart'; import 'package:habo/repositories/category_repository.dart'; +import 'package:habo/repositories/event_repository.dart'; +import 'package:habo/repositories/habit_repository.dart'; import 'package:habo/services/backup_service.dart'; import 'package:habo/services/notification_service.dart'; import 'package:habo/services/ui_feedback_service.dart'; -import 'package:habo/generated/l10n.dart'; import 'package:mocktail/mocktail.dart'; class MockHabitRepository extends Mock implements HabitRepository {} @@ -304,12 +303,7 @@ void main() { .thenAnswer((_) async {}); when(() => mockNotificationService.setHabitNotification( any(), any(), any(), any())).thenReturn(null); - when(() => mockUIFeedbackService.showMessageWithAction( - message: any(named: 'message'), - actionLabel: any(named: 'actionLabel'), - onActionPressed: any(named: 'onActionPressed'), - backgroundColor: any(named: 'backgroundColor'), - )).thenReturn(null); + when(() => mockUIFeedbackService.showSuccess(any())).thenReturn(null); // Act habitsManager.unarchiveHabit(1); @@ -319,12 +313,7 @@ void main() { verify(() => mockHabitRepository.updateHabit(any())).called(1); verify(() => mockNotificationService.setHabitNotification( 1, any(), 'Habo', 'Test Habit')).called(1); - verify(() => mockUIFeedbackService.showMessageWithAction( - message: any(named: 'message'), - actionLabel: any(named: 'actionLabel'), - onActionPressed: any(named: 'onActionPressed'), - backgroundColor: any(named: 'backgroundColor'), - )).called(1); + verify(() => mockUIFeedbackService.showSuccess(any())).called(1); }); test('should filter active habits correctly', () {