Skip to content

Flutter CI workflow#878

Open
andoriyaprashant wants to merge 1 commit intoZverik:mainfrom
andoriyaprashant:flutterci
Open

Flutter CI workflow#878
andoriyaprashant wants to merge 1 commit intoZverik:mainfrom
andoriyaprashant:flutterci

Conversation

@andoriyaprashant
Copy link
Contributor

Fixes #875

Description:

This PR integrates GitHub Actions for running Flutter tests on every PR and push to the main branch. It ensures automated test execution to improve code reliability and catch issues early.

Changes:

  • Added a CI workflow to run flutter test.
  • Configured dependency caching for faster execution.
  • Ensured tests must pass before merging.

Important Notes:

  • The app_zh.arb file must be encoded in UTF-8 to prevent CI failures (FileSystemException: Failed to decode data using encoding 'utf-8').
  • presets.db should be tracked; otherwise, Flutter CI will fail.

I tried running the tests locally using act, and they are successfully running, producing the following output:

PS E:\Open source projects\every_door> act -j build
time="2025-03-12T11:05:54+05:30" level=info msg="Using docker host 'npipe:////./pipe/docker_engine', and daemon socket 'npipe:////./pipe/docker_engine'"
[Flutter CI/build] 🚀  Start image=catthehacker/ubuntu:act-latest
[Flutter CI/build]   🐳  docker pull image=catthehacker/ubuntu:act-latest platform= username= forcePull=true
[Flutter CI/build]   🐳  docker create image=catthehacker/ubuntu:act-latest platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] network="host"
[Flutter CI/build]   🐳  docker run image=catthehacker/ubuntu:act-latest platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] network="host"
[Flutter CI/build]   🐳  docker exec cmd=[node --no-warnings -e console.log(process.execPath)] user= workdir=
[Flutter CI/build]   ☁  git clone 'https://github.com/subosito/flutter-action' # ref=v2
[Flutter CI/build] ⭐ Run Pre Set up Flutter
[Flutter CI/build]   ☁  git clone 'https://github.com/actions/cache' # ref=v4
[Flutter CI/build]   ☁  git clone 'https://github.com/actions/cache' # ref=v4
[Flutter CI/build]   ✅  Success - Pre Set up Flutter
[Flutter CI/build] ⭐ Run Main actions/checkout@v2
[Flutter CI/build]   🐳  docker cp src=E:\Open source projects\every_door\. dst=/mnt/e/Open source projects/every_door
[Flutter CI/build]   ✅  Success - Main actions/checkout@v2
[Flutter CI/build] ⭐ Run Main Set up Flutter
[Flutter CI/build]   🐳  docker cp src=C:\Users\Prashant\.cache\act/subosito-flutter-action@v2/ dst=/var/run/act/actions/subosito-flutter-action@v2/
[Flutter CI/build] ⭐ Run Main Make setup script executable
[Flutter CI/build]   🐳  docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/1-composite-0.sh] user= workdir=
[Flutter CI/build]   ✅  Success - Main Make setup script executable
[Flutter CI/build] ⭐ Run Main Set action inputs
[Flutter CI/build]   🐳  docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/1-composite-flutter-action.sh] user= workdir=
[Flutter CI/build]   ✅  Success - Main Set action inputs
[Flutter CI/build]   ⚙  ::set-output:: PUB-CACHE-KEY=flutter-pub-linux-stable-3.27.0-x64-8495dee1fd4aacbe9de707e7581203232f591b2f
[Flutter CI/build]   ⚙  ::set-output:: PUB-CACHE-PATH=/root/.pub-cache
[Flutter CI/build]   ⚙  ::set-output:: CHANNEL=stable
[Flutter CI/build]   ⚙  ::set-output:: VERSION=3.27.0
[Flutter CI/build]   ⚙  ::set-output:: ARCHITECTURE=x64
[Flutter CI/build]   ⚙  ::set-output:: CACHE-KEY=flutter-linux-stable-3.27.0-x64-8495dee1fd4aacbe9de707e7581203232f591b2f
[Flutter CI/build]   ⚙  ::set-output:: CACHE-PATH=/opt/hostedtoolcache/flutter/stable-3.27.0-x64
[Flutter CI/build]   🐳  docker exec cmd=[/opt/acttoolcache/node/18.20.7/x64/bin/node /var/run/act/workflow/hashfiles/index.js] user= workdir=
[Flutter CI/build]   🐳  docker exec cmd=[/opt/acttoolcache/node/18.20.7/x64/bin/node /var/run/act/workflow/hashfiles/index.js] user= workdir=
[Flutter CI/build] ⭐ Run Main Run setup script
[Flutter CI/build]   🐳  docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/1-composite-4.sh] user= workdir=
[Flutter CI/build]   ✅  Success - Main Run setup script
[Flutter CI/build]   ⚙  ::set-env:: FLUTTER_ROOT=/opt/hostedtoolcache/flutter/stable-3.27.0-x64
[Flutter CI/build]   ⚙  ::set-env:: PUB_CACHE=/root/.pub-cache
[Flutter CI/build]   ⚙  ::add-path:: /opt/hostedtoolcache/flutter/stable-3.27.0-x64/bin
[Flutter CI/build]   ⚙  ::add-path:: /opt/hostedtoolcache/flutter/stable-3.27.0-x64/bin/cache/dart-sdk/bin
[Flutter CI/build]   ⚙  ::add-path:: /root/.pub-cache/bin
[Flutter CI/build]   ⚙  ::set-output:: CACHE-PATH=/opt/hostedtoolcache/flutter/stable-3.27.0-x64
[Flutter CI/build]   ⚙  ::set-output:: PUB-CACHE-KEY=flutter-pub-linux-stable-3.27.0-x64-8495dee1fd4aacbe9de707e7581203232f591b2f
[Flutter CI/build]   ⚙  ::set-output:: PUB-CACHE-PATH=/root/.pub-cache
[Flutter CI/build]   ⚙  ::set-output:: CHANNEL=stable
[Flutter CI/build]   ⚙  ::set-output:: VERSION=3.27.0
[Flutter CI/build]   ⚙  ::set-output:: ARCHITECTURE=x64
[Flutter CI/build]   ⚙  ::set-output:: CACHE-KEY=flutter-linux-stable-3.27.0-x64-8495dee1fd4aacbe9de707e7581203232f591b2f
[Flutter CI/build]   ✅  Success - Main Set up Flutter
[Flutter CI/build]   ⚙  ::set-env:: FLUTTER_ROOT=/opt/hostedtoolcache/flutter/stable-3.27.0-x64
[Flutter CI/build]   ⚙  ::set-env:: PUB_CACHE=/root/.pub-cache
[Flutter CI/build]   ⚙  ::add-path:: /opt/hostedtoolcache/flutter/stable-3.27.0-x64/bin
[Flutter CI/build]   ⚙  ::add-path:: /opt/hostedtoolcache/flutter/stable-3.27.0-x64/bin/cache/dart-sdk/bin
[Flutter CI/build]   ⚙  ::add-path:: /root/.pub-cache/bin
[Flutter CI/build] ⭐ Run Main Install dependencies
[Flutter CI/build]   🐳  docker exec cmd=[bash -e /var/run/act/workflow/2] user= workdir=
| 
|   ╔════════════════════════════════════════════════════════════════════════════╗
|   ║                 Welcome to Flutter! - https://flutter.dev                  ║
|   ║                                                                            ║
|   ║ The Flutter tool uses Google Analytics to anonymously report feature usage ║
|   ║ statistics and basic crash reports. This data is used to help improve      ║
|   ║ Flutter tools over time.                                                   ║
|   ║                                                                            ║
|   ║ Flutter tool analytics are not sent on the very first run. To disable      ║
|   ║ reporting, type 'flutter config --no-analytics'. To display the current    ║
|   ║ setting, type 'flutter config'. If you opt out of analytics, an opt-out    ║
|   ║ event will be sent, and then no further information will be sent by the    ║
|   ║ Flutter tool.                                                              ║
|   ║                                                                            ║
|   ║ By downloading the Flutter SDK, you agree to the Google Terms of Service.  ║
|   ║ The Google Privacy Policy describes how data is handled in this service.   ║
|   ║                                                                            ║
|   ║ Moreover, Flutter includes the Dart SDK, which may send usage metrics and  ║
|   ║ crash reports to Google.                                                   ║
|   ║                                                                            ║
|   ║ Read about data we send with crash reports:                                ║
|   ║ https://flutter.dev/to/crash-reporting                                     ║
|   ║                                                                            ║
|   ║ See Google's privacy policy:                                               ║
|   ║ https://policies.google.com/privacy                                        ║
|   ║                                                                            ║
|   ║ To disable animations in this tool, use                                    ║
|   ║ 'flutter config --no-cli-animations'.                                      ║
|   ╚════════════════════════════════════════════════════════════════════════════╝
|
|
| "ar": 20 untranslated message(s).
| "be": 26 untranslated message(s).
| "bg": 307 untranslated message(s).
| "el": 220 untranslated message(s).
| "eo": 23 untranslated message(s).
| "eu": 22 untranslated message(s).
| "fa": 179 untranslated message(s).
| "ko": 229 untranslated message(s).
| "mr": 36 untranslated message(s).
| "nb": 33 untranslated message(s).
| "or": 19 untranslated message(s).
| "pa": 112 untranslated message(s).
| "pa_PK": 35 untranslated message(s).
| "th": 39 untranslated message(s).
| "tr": 108 untranslated message(s).
| "zh": 313 untranslated message(s).
| To see a detailed report, use the untranslated-messages-file
| option in the l10n.yaml file:
| untranslated-messages-file: desiredFileName.txt
| <other option>: <other selection>
|
|
| This will generate a JSON format file containing all messages that
| need to be translated.
| Resolving dependencies...
| Downloading packages...
|   _fe_analyzer_shared 76.0.0 (80.0.0 available)
|   analyzer 6.11.0 (7.3.0 available)
|   app_links 6.3.3 (6.4.0 available)
|   archive 4.0.2 (4.0.4 available)
|   asn1lib 1.5.8 (1.6.0 available)
|   async 2.11.0 (2.13.0 available)
|   boolean_selector 2.1.1 (2.1.2 available)
|   characters 1.3.0 (1.4.0 available)
|   clock 1.1.1 (1.1.2 available)
|   collection 1.19.0 (1.19.1 available)
|   device_info_plus 11.3.0 (11.3.3 available)
|   fake_async 1.3.1 (1.3.3 available)
|   ffi 2.1.3 (2.1.4 available)
| ! flutter_dropdown_alert 1.0.8 from git https://github.com/Zverik/flutter_dropdown_alert.git at 54ed9b (overridden)
|   flutter_map 8.0.0 (8.1.1 available)
|   flutter_markdown 0.7.6+1 (0.7.6+2 available)
|   flutter_secure_storage_linux 1.2.2 (2.0.1 available)
|   flutter_secure_storage_macos 3.1.3 (4.0.0 available)
|   flutter_secure_storage_platform_interface 1.1.2 (2.0.1 available)
|   flutter_secure_storage_web 1.2.1 (2.0.0 available)
|   flutter_secure_storage_windows 3.1.2 (4.0.0 available)
|   flutter_web_auth_2 3.1.2 (4.1.0 available)
|   flutter_web_auth_2_platform_interface 3.1.0 (4.1.0 available)
|   geolocator_apple 2.3.8+1 (2.3.9 available)
|   image 4.5.2 (4.5.3 available)
|   intl 0.19.0 (0.20.2 available)
|   js 0.6.7 (0.7.2 available)
|   leak_tracker 10.0.7 (10.0.9 available)
|   leak_tracker_flutter_testing 3.0.8 (3.0.9 available)
|   macos_ui 2.1.9 (2.1.10 available)
|   matcher 0.12.16+1 (0.12.17 available)
|   material_color_utilities 0.11.1 (0.12.0 available)
|   meta 1.15.0 (1.16.0 available)
|   mobile_scanner 5.2.3 (6.0.7 available)
|   oauth2_client 3.3.0 (4.0.1 available)
|   package_config 2.1.1 (2.2.0 available)
|   path 1.9.0 (1.9.1 available)
|   path_provider_android 2.2.15 (2.2.16 available)
|   petitparser 6.0.2 (6.1.0 available)
|   phone_number_metadata 4.0.2 (5.0.5 available)
|   phone_numbers_parser 4.2.1 (9.0.3 available)
|   pointycastle 3.9.1 (4.0.0 available)
|   pub_semver 2.1.5 (2.2.0 available)
|   shared_preferences 2.5.1 (2.5.2 available)
|   shared_preferences_android 2.4.4 (2.4.8 available)
|   shared_preferences_web 2.4.2 (2.4.3 available)
|   shelf_web_socket 2.0.1 (3.0.0 available)
|   source_span 1.10.0 (1.10.1 available)
|   sqflite 2.4.1 (2.4.2 available)
|   sqflite_android 2.4.0 (2.4.1 available)
|   sqflite_common 2.5.4+6 (2.5.5 available)
|   sqflite_darwin 2.4.1+1 (2.4.2 available)
|   stack_trace 1.12.0 (1.12.1 available)
|   stream_channel 2.1.2 (2.1.4 available)
|   string_scanner 1.3.0 (1.4.1 available)
|   synchronized 3.3.0+3 (3.3.1 available)
|   term_glyph 1.2.1 (1.2.2 available)
|   test 1.25.8 (1.25.15 available)
|   test_api 0.7.3 (0.7.4 available)
|   test_core 0.6.5 (0.6.8 available)
|   unicode 0.3.1 (1.1.8 available)
|   url_launcher_android 6.3.14 (6.3.15 available)
|   vm_service 14.3.0 (15.0.0 available)
|   web 1.1.0 (1.1.1 available)
|   win32 5.10.1 (5.12.0 available)
|   win32_registry 1.1.5 (2.1.0 available)
| Got dependencies!
| 65 packages have newer versions incompatible with dependency constraints.
| Try flutter pub outdated for more information.
[Flutter CI/build]   ✅  Success - Main Install dependencies
[Flutter CI/build] ⭐ Run Main Run tests
[Flutter CI/build]   🐳  docker exec cmd=[bash -e /var/run/act/workflow/3] user= workdir=
| 
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Good kinds
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Good + bad = good
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Amenities
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Prefixed amenity
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Recycling amenity
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Tourism information amenity
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Micromapping
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Building
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Entrances
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Addresses
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Empty
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Structure
| ✅ /mnt/e/Open source projects/every_door/test/std_kinds_test.dart: Needs more info
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Simple case works
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Projects to segments correctly
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: We build ways properly
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Calculates distance to way
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Ignores distance to edges
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Does not match a way too far
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Does not match vertices
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Does not snap to vertices
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Properly inserts a node
| ✅ /mnt/e/Open source projects/every_door/test/snapper_test.dart: Projects and inserts a node
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher Empty matches anything
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher Only required tags
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher Except tags
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher Only + second
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher When conditions
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher Complex when condition
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher When + only
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher When + except
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher Except has priority on when
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher Replacing matcher
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: ValueMatcher Merging in a matcher
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: TagMatcher Empty returns true always
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: TagMatcher Good is checked
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: TagMatcher Good is checked w/o rules
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: TagMatcher Good has priority over everything
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: TagMatcher Good accounts for prefixes
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: TagMatcher Missing
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: TagMatcher Returns true if any of the rules match
| ✅ /mnt/e/Open source projects/every_door/test/tagmatcher_test.dart: TagMatcher Uses a single rule when onlyKey is supplied
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: StringTime initializes correctly
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: StringTime compares correctly
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: HoursInterval parses time correctly
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: HoursInterval compares correctly
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: HoursFragment initializes and tests correctly
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: HoursFragment merges intervals
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: HoursFragment sorts breaks
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: HoursFragment sorts breaks when overlapping midnight
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: HoursData parses time correctly
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: HoursData formats time correctly
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: Date class calculates difference correctly
| ✅ /mnt/e/Open source projects/every_door/test/hours_test.dart: SpecificDays parses and formats dates correctly
| ✅ /mnt/e/Open source projects/every_door/test/floor_test.dart: Floors make readable string representations
| ✅ /mnt/e/Open source projects/every_door/test/floor_test.dart: Single floors parse okay
| ✅ /mnt/e/Open source projects/every_door/test/floor_test.dart: Multiple floors parse okay
| ✅ /mnt/e/Open source projects/every_door/test/floor_test.dart: Floors render okay
| ✅ /mnt/e/Open source projects/every_door/test/geometry_test.dart: Throws exception on incorrect polygon
| ✅ /mnt/e/Open source projects/every_door/test/geometry_test.dart: Inside a polygon works for a simple one
| ✅ /mnt/e/Open source projects/every_door/test/geometry_test.dart: Inside a polygon works for a rhombus
| ✅ /mnt/e/Open source projects/every_door/test/geometry_test.dart: Polygon like a reversed C
| ✅ /mnt/e/Open source projects/every_door/test/geometry_test.dart: Polygon like U
| ✅ /mnt/e/Open source projects/every_door/test/main_key_test.dart: Finds plain main key according to the order
| ✅ /mnt/e/Open source projects/every_door/test/main_key_test.dart: Find prefixed main key
| ✅ /mnt/e/Open source projects/every_door/test/main_key_test.dart: Supports all lifecycle prefixes
| ✅ /mnt/e/Open source projects/every_door/test/main_key_test.dart: Prefers prefixes amenities to non-amenities
| ✅ /mnt/e/Open source projects/every_door/test/main_key_test.dart: Doesn't take "no" for a tag
| ✅ /mnt/e/Open source projects/every_door/test/main_key_test.dart: Clears prefixes correctly
| 
| 🎉 69 tests passed.
[Flutter CI/build]   ✅  Success - Main Run tests
[Flutter CI/build] ⭐ Run Post Set up Flutter
[Flutter CI/build]   🐳  docker cp src=C:\Users\Prashant\.cache\act/subosito-flutter-action@v2/ dst=/var/run/act/actions/subosito-flutter-action@v2/
[Flutter CI/build]   ✅  Success - Post Set up Flutter
[Flutter CI/build] Cleaning up container for job build
[Flutter CI/build] 🏁  Job succeeded

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CI/CD Integration: Run Tests on Every PR Using GitHub Actions

1 participant