Skip to content

Commit 16e51ce

Browse files
committed
Merge branch 'refs/heads/main' into renovate/kotlin-monorepo
# Conflicts: # android/settings.gradle.kts
2 parents 49c7ea8 + 9880eeb commit 16e51ce

File tree

267 files changed

+34128
-1199
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

267 files changed

+34128
-1199
lines changed

.github/workflows/ci.yml

Lines changed: 86 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,23 @@ on:
88
pull_request:
99
branches: [ main ]
1010

11+
concurrency:
12+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
13+
cancel-in-progress: true
14+
15+
defaults:
16+
run:
17+
shell: bash
18+
1119
jobs:
1220
test-app:
1321
name: App
14-
1522
runs-on: ubuntu-latest
23+
timeout-minutes: 40
1624

1725
steps:
1826
- name: Checkout
19-
uses: actions/checkout@v3
27+
uses: actions/checkout@v5
2028

2129
- name: Setup Flutter
2230
uses: subosito/flutter-action@v2
@@ -29,55 +37,102 @@ jobs:
2937
- name: Cache pub dependencies
3038
uses: actions/cache@v4
3139
with:
32-
path: ${{ env.FLUTTER_HOME }}/.pub-cache
40+
path: ${{ env.HOME }}/.pub-cache
3341
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }}
3442
restore-keys: ${{ runner.os }}-pub-
3543

3644
- name: Download pub dependencies
3745
run: flutter pub get
3846

39-
# - name: Pub Global
40-
# run: dart pub global activate flutter_gen
41-
42-
# - name: Build runner
43-
# run: flutter packages pub run build_runner build --delete-conflicting-outputs
44-
45-
# - name: Generate intl
46-
# run: flutter pub run intl_utils:generate
47-
48-
# - name: Run fluttergen
49-
# run: fluttergen -c pubspec.yaml
50-
5147
- name: Run analyzer
5248
run: flutter analyze
5349

54-
# - name: Run Dart code metrics
55-
# run: flutter pub run dart_code_metrics:metrics analyze lib
56-
5750
- name: Run tests
5851
run: flutter test --coverage
5952

6053
- name: Install lcov
6154
run: sudo apt-get install -y lcov
6255

63-
- name: Remove generated files from code coverage report
64-
run: lcov --remove coverage/lcov.info 'lib/*/*.gen.dart' 'lib/generated/*.dart' 'lib/generated/*/*.dart' 'lib/di/*.dart' '**/lib/constants/' 'lib/constants/*.dart' -o coverage/lcov.info --ignore-errors unused
65-
66-
- name: Remove router from code coverage report
67-
run: lcov --remove coverage/lcov.info 'lib/routers/router.dart' -o coverage/lcov.info --ignore-errors unused
56+
- name: Upload test results
57+
if: always()
58+
uses: actions/upload-artifact@v4
59+
with:
60+
name: unit-test-results
61+
path: build/
62+
63+
- name: Clean coverage report
64+
run: |
65+
lcov --remove coverage/lcov.info \
66+
'lib/**.gen.dart' \
67+
'lib/generated/**' \
68+
'lib/di/**' \
69+
'lib/constants/**' \
70+
'lib/routers/router.dart' \
71+
-o coverage/lcov.info \
72+
--ignore-errors unused
6873
6974
- name: Check Code Coverage
70-
uses: VeryGoodOpenSource/very_good_coverage@v1.2.1
75+
uses: VeryGoodOpenSource/very_good_coverage@v3.0.0
7176
with:
7277
path: coverage/lcov.info
7378
min_coverage: 59
74-
exclude: '**/*.g.dart **/*.gen.dart **/lib/di/ lib/generated/ **/lib/generated/ lib/di/*.dart **/lib/constants/ lib/constants/*.dart/ lib/routers/router.dart'
79+
exclude: |
80+
**/*.g.dart
81+
**/*.gen.dart
82+
lib/di/**
83+
lib/generated/**
84+
lib/constants/**
85+
lib/routers/router.dart
86+
87+
- name: Upload coverage to Codecov
88+
uses: codecov/codecov-action@v5
89+
90+
- name: Codacy Coverage Reporter
91+
uses: codacy/codacy-coverage-reporter-action@v1
92+
with:
93+
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
94+
coverage-reports: ./coverage/lcov.info
7595

76-
- name: Upload coverage to codecov
77-
uses: codecov/codecov-action@v3
96+
integration-tests:
97+
name: Flutter Integration Tests
98+
runs-on: ubuntu-latest
99+
timeout-minutes: 60
100+
strategy:
101+
fail-fast: true
102+
matrix:
103+
api-level: [ 31 ]
78104

79-
- name: Run codacy-coverage-reporter
80-
uses: codacy/codacy-coverage-reporter-action@v1
105+
steps:
106+
- name: Checkout
107+
uses: actions/checkout@v5
108+
109+
- name: Setup Flutter
110+
uses: subosito/flutter-action@v2
111+
with:
112+
channel: stable
113+
114+
- name: Enable KVM
115+
run: |
116+
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
117+
sudo udevadm control --reload-rules
118+
sudo udevadm trigger --name-match=kvm
119+
120+
- name: Setup Android emulator and run integration tests
121+
uses: reactivecircus/android-emulator-runner@v2
81122
with:
82-
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
83-
coverage-reports: ./coverage/lcov.info
123+
api-level: ${{ matrix.api-level }}
124+
arch: x86_64
125+
target: google_apis
126+
profile: Nexus 6
127+
script: |
128+
flutter pub get
129+
flutter test integration_test/app_test.dart --flavor dev
130+
flutter test integration_test/appearance_test.dart --flavor dev
131+
flutter test integration_test/launch_navigation_test.dart --flavor dev
132+
flutter test integration_test/launch_test.dart --flavor dev
133+
flutter test integration_test/launches_mock_test.dart --flavor dev
134+
flutter test integration_test/launches_test.dart --flavor dev
135+
flutter test integration_test/settings_test.dart --flavor dev
136+
flutter test integration_test/rockets_screen_integration_test.dart --flavor dev
137+
flutter test integration_test/rocket_screen_test.dart --flavor dev
138+
flutter test integration_test/rockets_integration_live_test.dart --flavor dev

.github/workflows/release.yml

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
name: "Build"
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*.*.*'
7+
8+
jobs:
9+
build:
10+
name: Build & Release
11+
runs-on: macos-latest
12+
13+
steps:
14+
#1 Checkout Repository
15+
- name: Checkout Repository
16+
uses: actions/checkout@v5
17+
18+
#2 Setup Java
19+
- name: Set Up Java
20+
uses: actions/[email protected]
21+
with:
22+
distribution: 'oracle'
23+
java-version: '17'
24+
25+
#3 Setup Flutter
26+
- name: Setup Flutter
27+
uses: subosito/flutter-action@v2
28+
with:
29+
channel: stable
30+
31+
#4 Install Dependencies
32+
- name: Install Dependencies
33+
run: flutter pub get
34+
35+
#5 Setup Keystore
36+
- name: Decode Keystore
37+
run: |
38+
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks
39+
40+
- name: Create key.properties
41+
run: |
42+
echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" > android/key.properties
43+
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties
44+
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties
45+
echo "storeFile=keystore.jks" >> android/key.properties
46+
47+
#6 Building APK
48+
- name: Build APK
49+
run: flutter build apk --flavor dev --release -t lib/main_prod.dart
50+
51+
#7 Building App Bundle (aab)
52+
- name: Build appBundle
53+
run: flutter build appbundle --flavor dev --release -t lib/main_prod.dart
54+
55+
#9 Upload Artifacts
56+
- name: Upload Artifacts
57+
uses: actions/upload-artifact@v4
58+
with:
59+
name: Releases
60+
path: |
61+
build/app/outputs/flutter-apk/app-dev-release.apk
62+
build/app/outputs/bundle/devRelease/app-dev-release.aab
63+
64+
#10 Extract Version
65+
- name: Extract version from pubspec.yaml
66+
id: extract_version
67+
run: |
68+
version=$(grep '^version: ' pubspec.yaml | cut -d ' ' -f 2 | tr -d '\r')
69+
echo "VERSION=$version" >> $GITHUB_ENV
70+
71+
#11 Check if Tag Exists
72+
- name: Check if Tag Exists
73+
id: check_tag
74+
run: |
75+
if git rev-parse "v${{ env.VERSION }}" >/dev/null 2>&1; then
76+
echo "TAG_EXISTS=true" >> $GITHUB_ENV
77+
else
78+
echo "TAG_EXISTS=false" >> $GITHUB_ENV
79+
fi
80+
81+
#12 Modify Tag if it Exists
82+
- name: Modify Tag
83+
if: env.TAG_EXISTS == 'true'
84+
id: modify_tag
85+
run: |
86+
new_version="${{ env.VERSION }}-build-${{ github.run_number }}"
87+
echo "VERSION=$new_version" >> $GITHUB_ENV
88+
89+
#13 Create Release
90+
- name: Create Release
91+
uses: ncipollo/release-action@v1
92+
with:
93+
artifacts: "build/app/outputs/flutter-apk/app-dev-release.apk,build/app/outputs/bundle/devRelease/app-dev-release.aab"
94+
tag: v${{ env.VERSION }}
95+
token: ${{ secrets.TOKEN }}

.run/deps.run.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="deps" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application">
3+
<option name="filePath" value="$PROJECT_DIR$/lib/utils/pubinfo/dependencies.dart" />
4+
<method v="2" />
5+
</configuration>
6+
</component>

Makefile

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,33 @@
1-
.PHONY: gen genAll rebuild check get localize runDev runDevQa runDevStaging lines release apk
1+
.PHONY: gen genAll rebuild check get localize runDev runDevQa runDevStaging runProdRelease \
2+
release apk lines force_upgrade integration_test
23

3-
# clean project, install dependencies & generate sources
4+
# Clean project, install dependencies & generate sources
45
rebuild:
56
flutter clean
6-
flutter packages pub get
7-
flutter packages pub run build_runner build --delete-conflicting-outputs
7+
flutter pub get
8+
dart run build_runner build --delete-conflicting-outputs
89
fluttergen -c pubspec.yaml
910

10-
# generate localizations, dependencies, image assets, colors, fonts
11+
# Generate code with build_runner
1112
gen:
12-
flutter packages pub run build_runner build --delete-conflicting-outputs
13+
dart run build_runner build --delete-conflicting-outputs
1314

14-
# generate localizations, dependencies, image assets, colors, fonts
15+
# Generate code and localizations
1516
genAll:
16-
flutter packages pub run build_runner build --delete-conflicting-outputs
17+
dart run build_runner build --delete-conflicting-outputs
1718
flutter pub run intl_utils:generate
1819
fluttergen -c pubspec.yaml
1920

20-
# generate localizations
21+
# Generate localizations only
2122
localize:
2223
flutter pub run intl_utils:generate
2324

24-
# analyze the project
25+
# Analyze the project
2526
check:
26-
dart analyze .
27+
dart analyze . && flutter analyze
2728
# flutter pub run dart_code_metrics:metrics analyze lib
2829

29-
# flavors
30+
# Run with flavors
3031
runDev:
3132
flutter run --flavor dev -t lib/main.dart
3233

@@ -39,17 +40,31 @@ runDevStaging:
3940
release:
4041
flutter run --release -t lib/main_prod.dart
4142

42-
prodRelease:
43+
runProdRelease:
4344
flutter run --flavor prod --release -t lib/main_prod.dart
4445

46+
# Build release APK
4547
apk:
46-
flutter build apk --release -t lib/main_prod.dart
48+
flutter build apk --flavor dev --release -t lib/main_prod.dart
4749

50+
# Build debug APK
51+
debug_apk:
52+
flutter build apk --flavor dev --debug -t lib/main_dev.dart
53+
54+
# Count lines of Dart code
4855
lines:
4956
find . -name '*.dart' | xargs wc -l
5057

58+
# Force upgrade packages
5159
force_upgrade:
5260
flutter update-packages --force-upgrade
5361

62+
# Run integration test
5463
integration_test:
55-
flutter test integration_test/app_test.dart --flavor dev
64+
flutter test integration_test --flavor dev
65+
66+
screenshot_test:
67+
flutter drive --driver=test_driver/integration_test.dart --target=integration_test/settings_screenshot_test.dart --flavor dev
68+
69+
# upgrade_deps:
70+
# flutter pub upgrade --major-versions

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Just click on [![Use this template](https://img.shields.io/badge/-Use%20this%20t
2626
- CI Setup with GitHub Actions
2727
- Codecov Setup with GitHub Actions
2828
- Unit test coverage
29+
- Integration tests
2930

3031
## Configuration
3132
The template has 3 flavors:

android/app/build.gradle.kts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ android {
3131
versionName = flutter.versionName
3232
}
3333

34+
// buildTypes {
35+
// release {
36+
// signingConfig = signingConfigs.debug
37+
// applicationVariants.all { variant ->
38+
// variant.outputs.all {
39+
// outputFileName = "${variant.buildType.name}-${variant.versionName}.apk"
40+
// }
41+
// }
42+
// }
43+
// }
44+
3445
flavorDimensions += "version"
3546
productFlavors {
3647
create("dev") {

android/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
33
zipStoreBase=GRADLE_USER_HOME
44
zipStorePath=wrapper/dists
5-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-all.zip
5+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip

android/settings.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ pluginManagement {
1818

1919
plugins {
2020
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
21-
id("com.android.application") version "8.7.0" apply false
22-
id("org.jetbrains.kotlin.android") version "1.9.25" apply false
21+
id("com.android.application") version "8.13.0" apply false
22+
id("org.jetbrains.kotlin.android") version "2.2.10" apply false
2323
}
2424

2525
include(":app")

app-release.apk

-19.8 MB
Binary file not shown.

0 commit comments

Comments
 (0)