Skip to content

Commit

Permalink
feat: handle flavors in menu
Browse files Browse the repository at this point in the history
  • Loading branch information
alextekartik committed Oct 20, 2023
1 parent deefcd8 commit 28a7026
Show file tree
Hide file tree
Showing 8 changed files with 110 additions and 61 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/run_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest]
flutter: [stable, beta]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-java@v3
with:
distribution: 'zulu'
Expand Down
28 changes: 28 additions & 0 deletions .github/workflows/run_ci_downgrade_analyze.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Run CI Downgrade analyze
on:
push:
pull_request:
workflow_dispatch:
schedule:
- cron: '0 0 * * 0' # every sunday at midnight

jobs:
test:
name: Test on ${{ matrix.os }} / ${{ matrix.dart }}
runs-on: ${{ matrix.os }}
defaults:
run:
working-directory: .
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
dart: [stable]
steps:
- uses: actions/checkout@v4
- uses: dart-lang/[email protected]
with:
sdk: ${{ matrix.dart }}
- run: dart --version
- run: dart pub global activate dev_test
- run: dart pub global run dev_test:run_ci --pub-downgrade --analyze --no-override --recursive
4 changes: 2 additions & 2 deletions example_flutter/app_build_menu_example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ void main() {
}

class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
const MyApp({super.key});

// This widget is the root of your application.
@override
Expand All @@ -30,7 +30,7 @@ class MyApp extends StatelessWidget {
}

class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
const MyHomePage({super.key, required this.title});

// This widget is the home page of your application. It is stateful, meaning
// that it has a State object (defined below) that contains fields that affect
Expand Down
4 changes: 2 additions & 2 deletions packages/build_flutter/lib/src/app_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ class FlutterAppFlavorBuilder {
flavor: flavor, module: module, extension: 'apk', folder: 'apk');
}

String getAabPath({String? flavor, String? module}) {
String getAabPath({String? module}) {
return _getAndroidBuiltObjectPath(
flavor: flavor,
module: module,
Expand Down Expand Up @@ -216,7 +216,7 @@ class FlutterAppFlavorBuilder {
}

Future copyAab({required apk_utils.ApkInfo apkInfo}) async {
var aabPath = getAabPath(flavor: flavor);
var aabPath = getAabPath();
var basename = getDeployBaseName(apkInfo: apkInfo);
var dstFileName = '$basename.aab';
var dst = join(aabDeployPath, dstFileName);
Expand Down
4 changes: 2 additions & 2 deletions packages/build_flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ environment:
sdk: '>=3.0.0 <4.0.0'

dependencies:
path: ^1.8.0
path: '>=1.8.0'
process_run:
fs_shim:
fs_shim: '>=2.2.1'
collection:
args:
tekartik_lints_flutter:
Expand Down
4 changes: 3 additions & 1 deletion packages/build_menu_flutter/lib/app_build_menu.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
export 'package:tekartik_build_flutter/app_builder.dart';
export 'package:tekartik_build_flutter/build_flutter.dart';
export 'package:tekartik_test_menu/test_menu.dart';
export 'package:tekartik_test_menu_io/test_menu_io.dart'
show mainMenu, initTestMenuConsole;

export 'src/app_build_menu.dart' show menuAppContent;
export 'src/app_build_menu.dart'
show menuAppContent, menuFlutterAppFlavorContent, menuFlutterAppContent;
123 changes: 71 additions & 52 deletions packages/build_menu_flutter/lib/src/app_build_menu.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,76 @@ Future main(List<String> arguments) async {
mainMenu(arguments, menuAppContent);
}

/// To deprecate
void menuAppContent({String path = '.', List<String>? flavors}) {
var appPath = path;
var appShell = Shell(workingDirectory: path);
var builder = FlutterAppBuilder(
context: FlutterAppContext(
path: path, buildOptions: FlutterAppBuildOptions(flavors: flavors)));
menuFlutterAppContent(builder: builder);
}

void menuFlutterAppFlavorContent(
{required FlutterAppFlavorBuilder flavorBuilder}) {
Future<void> printApkSha1() async {
try {
write('apksigner: ${await flavorBuilder.apkSignerGetSha1()}');
} catch (_) {}
try {
write('keytool: ${await flavorBuilder.keytoolGetSha1()}');
} catch (_) {}
}

menu('flavor ${flavorBuilder.flavorName}', () {
item('clean', () async {
await flavorBuilder.clean();
});
item('build aab', () async {
await androidReady;
await flavorBuilder.buildAndroidAab();
});
item('build apk', () async {
await androidReady;
await flavorBuilder.buildAndroidApk();
});
item('sha1', () async {
await androidReady;
await printApkSha1();
});
item('apkinfo', () async {
await androidReady;

write('apkinfo: ${await flavorBuilder.getApkInfo()}');
write(
'apkinfo: ${jsonEncode((await flavorBuilder.getApkInfo()).toMap())}');
});
item('build aab & apk and copy', () async {
await androidReady;
await flavorBuilder.buildAndroidAndCopy();
});
item('clean, build aab & apk and copy', () async {
await androidReady;
await flavorBuilder.clean();
await flavorBuilder.buildAndroidAndCopy();
});

item('copy aab & apk', () async {
await androidReady;
await flavorBuilder.copyAndroid();
await printApkSha1();
});
});
}

void menuFlutterAppContent({required FlutterAppBuilder builder}) {
var appPath = builder.path;
var flavors = builder.flavors;
var appShell = Shell(workingDirectory: appPath);
var currentFlavor = listFirst(flavors);

Map pubspec;
var checkPubspec = () async {
try {
pubspec = await pathGetPubspecYamlMap(path);
pubspec = await pathGetPubspecYamlMap(appPath);
return pubspec;
} catch (_) {}
return <String, Object?>{};
Expand All @@ -44,7 +105,7 @@ void menuAppContent({String path = '.', List<String>? flavors}) {
}

enter(() async {
write('App path: ${absolute(path)}');
write('App path: ${absolute(appPath)}');
var pubspec = await checkPubspec;
write('Package: ${pubspec['name']}');
});
Expand All @@ -57,7 +118,7 @@ void menuAppContent({String path = '.', List<String>? flavors}) {
enter(() async {
dump();
});
for (var flavor in flavors!) {
for (var flavor in flavors) {
item(flavor, () {
dump();
currentFlavor = flavor;
Expand All @@ -80,52 +141,10 @@ void menuAppContent({String path = '.', List<String>? flavors}) {
});
}
});
var builder = FlutterAppBuilder(
context: FlutterAppContext(
path: path, buildOptions: FlutterAppBuildOptions(flavors: flavors)));
if (builder.context.buildOptions?.flavors?.isNotEmpty ?? false) {
menu('flavors', () {
for (var flavorBuilder in builder.flavorBuilders) {
Future<void> printApkSha1() async {
try {
write('apksigner: ${await flavorBuilder.apkSignerGetSha1()}');
} catch (_) {}
try {
write('keytool: ${await flavorBuilder.keytoolGetSha1()}');
} catch (_) {}
}

menu('flavor ${flavorBuilder.flavorName}', () {
item('build aab', () async {
await androidReady;
await flavorBuilder.buildAndroidAab();
});
item('build apk', () async {
await androidReady;
await flavorBuilder.buildAndroidApk();
});
item('sha1', () async {
await androidReady;
await printApkSha1();
});
item('apkinfo', () async {
await androidReady;

write('apkinfo: ${await flavorBuilder.getApkInfo()}');
write(
'apkinfo: ${jsonEncode((await flavorBuilder.getApkInfo()).toMap())}');
});
item('build aab & apk and copy', () async {
await androidReady;
await flavorBuilder.buildAndroidAndCopy();
});

item('copy aab & apk', () async {
await androidReady;
await flavorBuilder.copyAndroid();
await printApkSha1();
});
});
menuFlutterAppFlavorContent(flavorBuilder: flavorBuilder);
}
});
}
Expand Down Expand Up @@ -164,18 +183,18 @@ void menuAppContent({String path = '.', List<String>? flavors}) {
}
});
item('list sub projects', () async {
await recursivePackagesRun([path], action: (path) {
await recursivePackagesRun([appPath], action: (path) {
write('project: ${absolute(path)}');
});
});
item('run_ci', () async {
await packageRunCi(path);
await packageRunCi(appPath);
});
item('pub_get', () async {
await packageRunCi(path, options: PackageRunCiOptions(pubGetOnly: true));
await packageRunCi(appPath, options: PackageRunCiOptions(pubGetOnly: true));
});
item('pub_upgrade', () async {
await packageRunCi(path,
await packageRunCi(appPath,
options: PackageRunCiOptions(pubUpgradeOnly: true));
});
item('flutter clean', () async {
Expand Down
2 changes: 1 addition & 1 deletion packages/build_menu_flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ environment:

dependencies:
path:
dev_test:
dev_test: '>=0.16.2+3'
process_run:
args:
tekartik_build_flutter:
Expand Down

0 comments on commit 28a7026

Please sign in to comment.