import 'dart:core'; import 'package:grinder/grinder.dart'; import 'package:grinder/grinder_tools.dart'; import 'package:path/path.dart' as path; import 'package:http/http.dart' as http; import 'package:docker/docker.dart'; import 'dart:async'; final String containerNameToCheck = " mobiad-db-production"; main(final List<String> args) => grind(args); @Task() //@Depends(genCss,test) @Depends(genCss) build() { Pub.build(outputDirectory: "docker/server/static/config/usr/share/nginx"); } @Task() @Depends(analyze,testUnit,testIntegration) test() { } @Task() testUnit() { new TestRunner().testAsync(files: "test/unit"); // Alle test mit @TestOn("browser") im header new TestRunner().testAsync(files: "test/unit",platformSelector: "chrome"); } @Task() @Depends(initDb) testIntegration() async { await new TestRunner().testAsync(files: "test/integration"); // Alle test mit @TestOn("content-shell") im header await new TestRunner().testAsync(files: "test/integration",platformSelector: "chrome",concurrency: 1); } @Task() analyze() { final List<String> libs = [ "lib/components.dart", "lib/components/interfaces/actions.dart", "lib/components/interfaces/stores.dart", "lib/dialogs.dart", "lib/events.dart", "lib/model.dart", "lib/proxies.dart", "lib/stores.dart", "lib/mock.dart", "lib/validation.dart", "lib/services/device/DeviceService.dart", "lib/services/job/JobService.dart", "lib/services/job/LocalJobService.dart", "lib/services/job/LocalMediaService.dart", "lib/services/job/MediaService.dart", "lib/services/upload/UploadServiceForZip.dart", "lib/services/utils/fire_event_mixins.dart", "lib/services/utils/ListSync.dart", "lib/services/stats/StatsService.dart", "lib/services/LoginService.dart" ]; final List<String> samples = [ "mmui_connections/web/main.dart", "mmui_device/web/main.dart", "mmui_device_details/web/main.dart", "mmui_image/web/main.dart", "mmui_job/web/main.dart", "mmui_jobedit/web/main.dart", "mmui_jobtoolbar/web/main.dart", "mmui_locationedit/web/main.dart", "mmui_login/web/main.dart", "mmui_zipupload/web/main.dart" ]; libs.forEach((final String lib) => Analyzer.analyze(lib)); samples.forEach((final String sample ) { final String sampleFolder = sample.replaceAll("/web/main.dart",""); run("tool/scripts/analyze-sample.sh",arguments: [ "samples/${sampleFolder}", "web/main.dart" ]); }); Analyzer.analyze("test"); Analyzer.analyze("web/main.dart"); } @Task() genCss() { run("/Users/mikemitterer/.pub-cache/bin/sitegen", arguments: [ "-c" ]); } @Task() genDemoCss() { final String src = "example/_assets/assets/styles/demo.scss"; final String target = "${path.withoutExtension(src)}.css"; run("sassc", arguments: [ src, target ] ); } @Task("Stops containers") dockerStopp() { ["db-webappbase-test", containerNameToCheck ].forEach((final String container) { log("Stopping container: $container"); new Docker()..stop([container ],quiet: true); }); } @Task("Start container") dockerStart() { new Docker()..start([ containerNameToCheck ],quiet: true); } @Task("Check if container runs and if container is available") containerCheck() async { final Docker docker = new Docker(); // [ "db-webappbase-test"].forEach((final String name) => docker.stop([ name ])); docker.start([ containerNameToCheck] ); final Container container = new Container(runningContainerIDs()); container.names.forEach((final String name) { log("Active containers: ${name}"); }); if(!container.names.contains(containerNameToCheck)) { throw new ArgumentError("${containerNameToCheck} must be running for this test!"); } } @Task("Initializes DB on server") //@Depends(containerCheck) initDb() async { final String url = "https://mobiad.int.mikemitterer.at:8080/api/v1/admin/database"; final http.Response response = await http.post(url, headers: { 'Accept' : 'application/json' }); log("Server-DB init returned status: ${response.statusCode}"); log("Waiting 2secs..."); await new Future.delayed(new Duration(seconds: 2)); log("Done!"); } @Task() clean() => defaultClean(); @Task() @Depends(build) deploy() { // Versionsnummer von Git für Docker run("tool/scripts/create_tag4docker"); // Hostname wird auf den AWS-Hostname geändert run("tool/scripts/set_host_in_service_config"); // Docker build runAsync("docker/server/nginx/build",arguments: [ "--build" ] ,quiet: false); }