Skip to content

Commit 6ec2c19

Browse files
committed
Add sidekick cli
1 parent 328e42b commit 6ec2c19

28 files changed

+2087
-121
lines changed

am

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
# Attempt to set ENTRYPOINT_HOME
5+
# Resolve links: $0 may be a link
6+
PRG="$0"
7+
# Need this for relative symlinks.
8+
while [ -h "$PRG" ]; do
9+
ls=$(ls -ld "$PRG")
10+
link=$(expr "$ls" : '.*-> \(.*\)$')
11+
if expr "$link" : '/.*' >/dev/null; then
12+
PRG="$link"
13+
else
14+
PRG=$(dirname "$PRG")"/$link"
15+
fi
16+
done
17+
SAVED="$(pwd)"
18+
cd "$(dirname "$PRG")/" >/dev/null
19+
export SIDEKICK_ENTRYPOINT_FILE="${PRG}"
20+
export SIDEKICK_ENTRYPOINT_HOME="$(pwd -P)"
21+
cd "$SAVED" >/dev/null
22+
23+
"${SIDEKICK_ENTRYPOINT_HOME}/am_sidekick/tool/run.sh" "$@"

am_sidekick/.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Files and directories created by pub
2+
.dart_tool/
3+
.packages
4+
5+
# Conventional directory for build outputs
6+
build/
7+
8+
# Directory created by dartdoc
9+
doc/api/

am_sidekick/analysis_options.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# TODO: Add back as soon as sidekick supports dart 3.0.0
2+
# include: package:lint/analysis_options.yaml
3+
4+
linter:
5+
rules:
6+
avoid_print: false
7+
8+
analyzer:
9+
exclude:
10+
- build/**
11+

am_sidekick/bin/main.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import 'package:am_sidekick/am_sidekick.dart';
2+
3+
Future<void> main(List<String> arguments) async {
4+
await runAm(arguments);
5+
}

am_sidekick/lib/am_sidekick.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import 'dart:async';
2+
3+
import 'package:am_sidekick/src/arcgis_flutter_project.dart';
4+
import 'package:am_sidekick/src/commands/clean_command.dart';
5+
import 'package:am_sidekick/src/commands/generate_arcgis_webpack.dart';
6+
import 'package:am_sidekick/src/commands/release/bump_version_command.dart';
7+
import 'package:am_sidekick/src/commands/release/edit_dependency_overrides_command.dart';
8+
import 'package:am_sidekick/src/commands/release/publish_command.dart';
9+
import 'package:am_sidekick/src/commands/release/release_command.dart';
10+
import 'package:am_sidekick/src/commands/test_command.dart';
11+
import 'package:sidekick_core/sidekick_core.dart';
12+
13+
ArcgisFlutterProject afProject =
14+
ArcgisFlutterProject(SidekickContext.projectRoot);
15+
16+
Future<void> runAm(List<String> args) async {
17+
final runner = initializeSidekick(
18+
mainProjectPath: 'arcgis_map',
19+
flutterSdkPath: systemFlutterSdkPath(),
20+
);
21+
22+
runner
23+
..addCommand(FlutterCommand())
24+
..addCommand(DartCommand())
25+
..addCommand(DepsCommand())
26+
..addCommand(CleanCommand())
27+
..addCommand(DartAnalyzeCommand())
28+
..addCommand(FormatCommand())
29+
..addCommand(BumpVersionCommand())
30+
..addCommand(SidekickCommand())
31+
..addCommand(EditDependencyOverridesCommand())
32+
..addCommand(PublishCommand())
33+
..addCommand(ReleaseCommand())
34+
..addCommand(TestCommand())
35+
..addCommand(GenerateArcgisWebpack());
36+
37+
try {
38+
return await runner.run(args);
39+
} on UsageException catch (e) {
40+
print(e);
41+
exit(64); // usage error
42+
}
43+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import 'package:sidekick_core/sidekick_core.dart';
2+
3+
class ArcgisFlutterProject {
4+
ArcgisFlutterProject(this.root);
5+
6+
final Directory root;
7+
8+
DartPackage get arcgisMap =>
9+
DartPackage.fromDirectory(root.directory('arcgis_map'))!;
10+
11+
DartPackage get arcgisMapExample =>
12+
DartPackage.fromDirectory(root.directory('arcgis_map/example'))!;
13+
14+
DartPackage get arcgisMapPlatformInterface => DartPackage.fromDirectory(
15+
root.directory('arcgis_map_platform_interface'),
16+
)!;
17+
18+
DartPackage get arcgisMapWeb =>
19+
DartPackage.fromDirectory(root.directory('arcgis_map_web'))!;
20+
21+
DartPackage get afSidekickPackage =>
22+
DartPackage.fromDirectory(root.directory('af_sidekick'))!;
23+
24+
File get flutterw => root.file('flutterw');
25+
26+
List<DartPackage>? _packages;
27+
List<DartPackage> get allPackages {
28+
return _packages ??= root
29+
.directory('')
30+
.listSync()
31+
.whereType<Directory>()
32+
.mapNotNull((it) => DartPackage.fromDirectory(it))
33+
.toList()
34+
..add(arcgisMapExample);
35+
}
36+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:sidekick_core/sidekick_core.dart';
2+
3+
class CleanCommand extends Command {
4+
@override
5+
final String description = 'Cleans the project';
6+
7+
@override
8+
final String name = 'clean';
9+
10+
@override
11+
Future<void> run() async {
12+
flutter(['clean'], workingDirectory: mainProject?.root);
13+
14+
print('✔️Cleaned project');
15+
}
16+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import 'package:sidekick_core/sidekick_core.dart';
2+
3+
/// Create main class for CliFlag and CliOption
4+
abstract class CliBabo {
5+
final String name;
6+
final String help;
7+
8+
CliBabo({
9+
required this.name,
10+
required this.help,
11+
});
12+
13+
void registerWith(ArgParser parser);
14+
15+
/// Returns the value of the flag
16+
T getFrom<T>(ArgResults? results);
17+
}
18+
19+
/// Create CliFlag
20+
class CliFlag extends CliBabo {
21+
final bool negatable;
22+
23+
CliFlag({
24+
required super.name,
25+
required super.help,
26+
this.negatable = false,
27+
});
28+
29+
@override
30+
void registerWith(ArgParser parser) {
31+
parser.addFlag(
32+
name,
33+
help: help,
34+
negatable: negatable,
35+
);
36+
}
37+
38+
/// Returns as command line arg
39+
String asCommandlineArg(ArgResults? results) {
40+
final bool flag = results?[name] as bool? ?? false;
41+
return flag ? '--$name' : '';
42+
}
43+
44+
@override
45+
bool getFrom<bool>(ArgResults? results) {
46+
return results?[name] as bool? ?? false as bool;
47+
}
48+
}
49+
50+
/// Create CliOption
51+
class CliOption extends CliBabo {
52+
CliOption({
53+
required super.name,
54+
required super.help,
55+
});
56+
57+
@override
58+
void registerWith(ArgParser parser) {
59+
parser.addOption(
60+
name,
61+
help: help,
62+
);
63+
}
64+
65+
/// Returns as command line arg
66+
String asCommandlineArg(ArgResults? results) {
67+
final String flagResult = (results?[name] as String?) ?? '';
68+
final bool flag = (results?[name] as String?)?.isNotEmpty ?? false;
69+
return flag ? '--$name=$flagResult' : '';
70+
}
71+
72+
@override
73+
String getFrom<String>(ArgResults? results) {
74+
return (results?[name] as String?) ?? '' as String;
75+
}
76+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import 'package:am_sidekick/am_sidekick.dart';
2+
import 'package:dcli/dcli.dart' as dcli;
3+
import 'package:sidekick_core/sidekick_core.dart';
4+
5+
/// Command to generate the ArcGIS Webpack files
6+
class GenerateArcgisWebpack extends Command {
7+
@override
8+
String get description => 'Generates the ArcGIS Webpack files';
9+
10+
@override
11+
String get name => 'gen:arcgis-webpack';
12+
13+
@override
14+
Future<void> run() async {
15+
final root = afProject.root;
16+
final arcgisWebpackPath = root.directory('arcgis_webpack').path;
17+
final arcgisMapWebPath = root.directory('arcgis_map_web').path;
18+
print('Root path: $arcgisWebpackPath');
19+
20+
/// Check if NPM is installed
21+
if (which('npm').notfound)
22+
throw 'NPM is not installed. Please install NPM to continue.';
23+
print(green('Generate ArcGIS Webpack'));
24+
print('');
25+
print(orange('Run npm install ...'));
26+
dcli.run('npm i', workingDirectory: arcgisWebpackPath);
27+
print('');
28+
print(orange('Run npm build ...'));
29+
dcli.run('npm run build', workingDirectory: arcgisWebpackPath);
30+
31+
print(green('Generating ArcGIS Webpack files Done!'));
32+
print('');
33+
34+
print(green('Check assets folder for new files'));
35+
print('');
36+
37+
print(orange('Install assets_generator ...'));
38+
dcli.run('dart pub global activate assets_generator',
39+
workingDirectory: arcgisMapWebPath);
40+
41+
print(orange('Generate assets ...'));
42+
dcli.run('$HOME/.pub-cache/bin/agen -t d -s -r lwu --no-watch',
43+
workingDirectory: arcgisMapWebPath);
44+
45+
print('');
46+
print(green('Checking asset files Done!'));
47+
print('');
48+
}
49+
}

0 commit comments

Comments
 (0)