Skip to content

Commit ce02422

Browse files
authored
feat: run dart fix --apply as post generation step (#189)
1 parent 4f71728 commit ce02422

File tree

10 files changed

+121
-49
lines changed

10 files changed

+121
-49
lines changed

.github/workflows/very_good_cli.yaml

+21-5
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,12 @@ jobs:
2222

2323
steps:
2424
- uses: actions/[email protected]
25-
- uses: subosito/[email protected]
25+
26+
- uses: subosito/[email protected]
2627

2728
- name: Install Dependencies
2829
run: flutter pub get
2930

30-
- name: Install LCOV
31-
run: sudo apt-get install -y lcov
32-
3331
- name: Format
3432
run: flutter format --set-exit-if-changed .
3533

@@ -45,12 +43,30 @@ jobs:
4543
- name: Check Code Coverage
4644
uses: VeryGoodOpenSource/[email protected]
4745

46+
e2e:
47+
runs-on: ubuntu-latest
48+
49+
steps:
50+
- uses: actions/[email protected]
51+
52+
- uses: subosito/[email protected]
53+
54+
- name: Install LCOV
55+
run: sudo apt-get install -y lcov
56+
57+
- name: Install Dependencies
58+
run: flutter pub get
59+
60+
- name: Run Tests
61+
run: flutter pub run test --run-skipped -t e2e
62+
4863
pana:
4964
runs-on: ubuntu-latest
5065

5166
steps:
5267
- uses: actions/[email protected]
53-
- uses: subosito/[email protected]
68+
69+
- uses: subosito/[email protected]
5470

5571
- name: Install Dependencies
5672
run: |

dart_test.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
tags:
22
pull-request-only:
33
skip: "Should only be run during pull request"
4+
e2e:
5+
skip: "End to end tests should be run in parallel with other unit tests"

lib/src/cli/cli.dart

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:path/path.dart' as p;
22
import 'package:universal_io/io.dart';
33

4+
part 'dart_cli.dart';
45
part 'flutter_cli.dart';
56

67
/// Abstraction for running commands via command-line.

lib/src/cli/dart_cli.dart

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
part of 'cli.dart';
2+
3+
/// Dart CLI
4+
class Dart {
5+
/// Determine whether dart is installed
6+
static Future<bool> installed() async {
7+
try {
8+
await _Cmd.run('dart', ['--version']);
9+
return true;
10+
} catch (_) {
11+
return false;
12+
}
13+
}
14+
15+
/// Apply all fixes (`dart fix --apply`).
16+
static Future<void> applyFixes() {
17+
return _Cmd.run('dart', ['fix', '--apply']);
18+
}
19+
}

lib/src/cli/flutter_cli.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class Flutter {
4141
/// Determine whether flutter is installed
4242
static Future<bool> installed() async {
4343
try {
44-
await _Cmd.run('flutter', []);
44+
await _Cmd.run('flutter', ['--version']);
4545
return true;
4646
} catch (_) {
4747
return false;

lib/src/templates/template.dart

+50-35
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,15 @@ class DartPkgTemplate extends Template {
4444

4545
@override
4646
Future<void> onGenerateComplete(Logger logger, Directory outputDir) async {
47-
final isFlutterInstalled = await Flutter.installed();
48-
if (isFlutterInstalled) {
49-
final installDependenciesDone = logger.progress(
50-
'Running "flutter pub get" in ${outputDir.path}',
51-
);
52-
await Flutter.pubGet(cwd: outputDir.path);
53-
installDependenciesDone();
54-
}
47+
await _installDartPackages(logger, outputDir);
48+
await _applyDartFixes(logger, outputDir);
5549
_logSummary(logger);
5650
}
5751

5852
void _logSummary(Logger logger) {
5953
logger
6054
..info('\n')
61-
..alert('Created a Very Good Dart package! 🦄')
55+
..alert('Created a Very Good Dart Package! 🦄')
6256
..info('\n');
6357
}
6458
}
@@ -76,21 +70,15 @@ class FlutterPkgTemplate extends Template {
7670

7771
@override
7872
Future<void> onGenerateComplete(Logger logger, Directory outputDir) async {
79-
final isFlutterInstalled = await Flutter.installed();
80-
if (isFlutterInstalled) {
81-
final installDependenciesDone = logger.progress(
82-
'Running "flutter packages get" in ${outputDir.path}',
83-
);
84-
await Flutter.packagesGet(cwd: outputDir.path);
85-
installDependenciesDone();
86-
}
73+
await _installFlutterPackages(logger, outputDir);
74+
await _applyDartFixes(logger, outputDir);
8775
_logSummary(logger);
8876
}
8977

9078
void _logSummary(Logger logger) {
9179
logger
9280
..info('\n')
93-
..alert('Created a Very Good Flutter package! 🦄')
81+
..alert('Created a Very Good Flutter Package! 🦄')
9482
..info('\n');
9583
}
9684
}
@@ -109,21 +97,15 @@ class FlutterPluginTemplate extends Template {
10997

11098
@override
11199
Future<void> onGenerateComplete(Logger logger, Directory outputDir) async {
112-
final isFlutterInstalled = await Flutter.installed();
113-
if (isFlutterInstalled) {
114-
final installDependenciesDone = logger.progress(
115-
'Running "flutter packages get" in ${outputDir.path}',
116-
);
117-
await Flutter.packagesGet(cwd: outputDir.path, recursive: true);
118-
installDependenciesDone();
119-
}
100+
await _installFlutterPackages(logger, outputDir);
101+
await _applyDartFixes(logger, outputDir);
120102
_logSummary(logger);
121103
}
122104

123105
void _logSummary(Logger logger) {
124106
logger
125107
..info('\n')
126-
..alert('Created a Very Good Flutter plugin! 🦄')
108+
..alert('Created a Very Good Flutter Plugin! 🦄')
127109
..info('\n');
128110
}
129111
}
@@ -142,14 +124,8 @@ class CoreTemplate extends Template {
142124

143125
@override
144126
Future<void> onGenerateComplete(Logger logger, Directory outputDir) async {
145-
final isFlutterInstalled = await Flutter.installed();
146-
if (isFlutterInstalled) {
147-
final installDependenciesDone = logger.progress(
148-
'Running "flutter packages get" in ${outputDir.path}',
149-
);
150-
await Flutter.packagesGet(cwd: outputDir.path);
151-
installDependenciesDone();
152-
}
127+
await _installFlutterPackages(logger, outputDir);
128+
await _applyDartFixes(logger, outputDir);
153129
_logSummary(logger);
154130
}
155131

@@ -173,3 +149,42 @@ class CoreTemplate extends Template {
173149
);
174150
}
175151
}
152+
153+
Future<void> _installDartPackages(
154+
Logger logger,
155+
Directory outputDir,
156+
) async {
157+
final isFlutterInstalled = await Flutter.installed();
158+
if (isFlutterInstalled) {
159+
final installDependenciesDone = logger.progress(
160+
'Running "flutter pub get" in ${outputDir.path}',
161+
);
162+
await Flutter.pubGet(cwd: outputDir.path);
163+
installDependenciesDone();
164+
}
165+
}
166+
167+
Future<void> _installFlutterPackages(
168+
Logger logger,
169+
Directory outputDir,
170+
) async {
171+
final isFlutterInstalled = await Flutter.installed();
172+
if (isFlutterInstalled) {
173+
final installDependenciesDone = logger.progress(
174+
'Running "flutter packages get" in ${outputDir.path}',
175+
);
176+
await Flutter.packagesGet(cwd: outputDir.path);
177+
installDependenciesDone();
178+
}
179+
}
180+
181+
Future<void> _applyDartFixes(Logger logger, Directory outputDir) async {
182+
final isDartInstalled = await Dart.installed();
183+
if (isDartInstalled) {
184+
final applyFixesDone = logger.progress(
185+
'Running "dart fix --apply" in ${outputDir.path}',
186+
);
187+
await Dart.applyFixes();
188+
applyFixesDone();
189+
}
190+
}

test/e2e_test.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
@Tags(['e2e'])
12
import 'package:io/io.dart';
23
import 'package:mason/mason.dart';
34
import 'package:mocktail/mocktail.dart';
@@ -190,6 +191,6 @@ void main() {
190191
expect(testCoverageResult.exitCode, equals(ExitCode.success.code));
191192
expect(testCoverageResult.stderr, isEmpty);
192193
expect(testCoverageResult.stdout, contains('lines......: 100.0%'));
193-
}, timeout: const Timeout(Duration(minutes: 1)));
194-
});
194+
});
195+
}, timeout: const Timeout(Duration(minutes: 1)));
195196
}

test/src/cli/dart_cli_test.dart

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import 'package:test/test.dart';
2+
import 'package:very_good_cli/src/cli/cli.dart';
3+
4+
void main() {
5+
group('Dart', () {
6+
group('.installed', () {
7+
test('returns true when dart is installed', () {
8+
expectLater(Dart.installed(), completion(isTrue));
9+
});
10+
});
11+
12+
group('.applyFixes', () {
13+
test('completes normally', () {
14+
expectLater(Dart.applyFixes(), completes);
15+
});
16+
});
17+
});
18+
}

test/src/cmd_test.dart renamed to test/src/cli/flutter_cli_test.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ name: example
1414
''';
1515

1616
void main() {
17-
group('Flutter CLI', () {
18-
group('packages get', () {
17+
group('Flutter', () {
18+
group('.packagesGet', () {
1919
test('throws when there is no pubspec.yaml', () {
2020
expectLater(
2121
Flutter.packagesGet(cwd: Directory.systemTemp.path),
@@ -59,7 +59,7 @@ void main() {
5959
});
6060
});
6161

62-
group('pub get', () {
62+
group('.pubGet', () {
6363
test('throws when there is no pubspec.yaml', () {
6464
expectLater(
6565
Flutter.pubGet(cwd: Directory.systemTemp.path),

test/src/commands/create_test.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ void main() {
504504
getPackagesMsg: 'Running "flutter pub get" in .tmp',
505505
templateName: 'dart_pkg',
506506
expectedBundle: dartPackageBundle,
507-
expectedLogSummary: 'Created a Very Good Dart package! 🦄',
507+
expectedLogSummary: 'Created a Very Good Dart Package! 🦄',
508508
);
509509
});
510510

@@ -513,7 +513,7 @@ void main() {
513513
getPackagesMsg: 'Running "flutter packages get" in .tmp',
514514
templateName: 'flutter_pkg',
515515
expectedBundle: flutterPackageBundle,
516-
expectedLogSummary: 'Created a Very Good Flutter package! 🦄',
516+
expectedLogSummary: 'Created a Very Good Flutter Package! 🦄',
517517
);
518518
});
519519

@@ -522,7 +522,7 @@ void main() {
522522
getPackagesMsg: 'Running "flutter packages get" in .tmp',
523523
templateName: 'flutter_plugin',
524524
expectedBundle: flutterPluginBundle,
525-
expectedLogSummary: 'Created a Very Good Flutter plugin! 🦄',
525+
expectedLogSummary: 'Created a Very Good Flutter Plugin! 🦄',
526526
);
527527
});
528528
});

0 commit comments

Comments
 (0)