#!/bin/bash set -ex echo ============================================================================= echo "DART DEV COMPILER (DDC) BUILD" echo ============================================================================= # go to project dir SCRIPT_DIR=$(dirname $0) REPO_ROOT_DIR=`cd ${SCRIPT_DIR}/../..; pwd` source $SCRIPT_DIR/env_dart.sh cd $REPO_ROOT_DIR # Variables DDC_TOTAL_WARNING_CAP="100" DDC_TOTAL_ERROR_CAP="0" DDC_DIR=`pwd`/tmp/dev_compiler DDC_VERSION="0.1.24" # Get DDC mkdir -p tmp rm -rf tmp/dev_compiler git clone https://github.com/dart-lang/dev_compiler.git tmp/dev_compiler (cd $DDC_DIR && \ git checkout tags/$DDC_VERSION && \ $PUB get) # Convert TypeScript to Dart ./node_modules/.bin/gulp build.js.cjs ./node_modules/.bin/gulp build/packages.dart ./node_modules/.bin/gulp build/pubspec.dart node ./scripts/ci/dart_ddc/pubspec_for_ddc.js \ --pubspec-file=dist/dart/playground/pubspec.yaml cd dist/dart/playground $PUB build --mode=debug cd build/web # TODO: temporarily remove references to dart.js as ddc doesn't do it # automatically yet (https://github.com/dart-lang/dev_compiler/issues/437) echo `pwd` for htmlFile in `find ./src -name '*.html'`; do tmpFile=$REPO_ROOT_DIR/tmp/scriptless_html.tmp cat $htmlFile | grep -vE '$tmpFile mv $tmpFile $htmlFile done ############################################################################## # Analyze code ############################################################################## LOG_FILE="analyzer.log" set +e $DART_SDK/bin/dart $DDC_DIR/bin/dartdevc.dart \ --dart-sdk=$DART_SDK_LIB_SEARCH_PATH -o out \ src/animate/index.dart \ src/async/index.dart \ src/gestures/index.dart \ src/hash_routing/index.dart \ src/hello_world/index.dart \ src/key_events/index.dart \ src/model_driven_forms/index.dart \ src/observable_models/index.dart \ src/order_management/index.dart \ src/person_management/index.dart \ src/relative_assets/index.dart \ src/routing/index.dart \ src/sourcemap/index.dart \ src/svg/index.dart \ src/template_driven_forms/index.dart \ src/todo/index.dart \ src/zippy_component/index.dart \ >$LOG_FILE EXIT_CODE=`echo $?` set -e # Analyzer exits with 1 when there are warnings and something crazy # like 255 when it crashes. We don't want to fail the build if its # only warnings (until our code is warning-free). if [[ "$EXIT_CODE" -ne "0" && "$EXIT_CODE" -ne "1" ]] then echo "DDC compiler crashed with exit code $EXIT_CODE" exit 1 fi cat $LOG_FILE EXIT_CODE=0 # TODO remove `grep -v template.dart` after Tobias new compiler lands. WARNING_COUNT=$(cat $LOG_FILE | grep -E '^warning.*' | grep -v template.dart | wc -l | sed -e 's/^[[:space:]]*//' || true) ERROR_COUNT=$(cat $LOG_FILE | grep -E '^severe.*' | wc -l | sed -e 's/^[[:space:]]*//' || true) if [[ "$ERROR_COUNT" -gt "$DDC_TOTAL_ERROR_CAP" ]] then echo "Found severe errors in angular2 package" EXIT_CODE=1 fi if [[ "$WARNING_COUNT" -gt "$DDC_TOTAL_WARNING_CAP" ]] then echo "Too many warnings: $WARNING_COUNT" EXIT_CODE=1 else echo "Warning count ok" fi ############################################################################## # Run e2e tests ############################################################################## DIST_DIR="${REPO_ROOT_DIR}/dist/js/ddc" # Build the apps (again) # TODO: ddc does not yet support compiling multiple html files. Ideally we # could build everything during analysis above. # See: https://github.com/dart-lang/dev_compiler/issues/430 ln -s `pwd`/packages src/hello_world/packages set +e OUT_DIR="${DIST_DIR}/playground/src/hello_world" mkdir -p $OUT_DIR $DART_SDK/bin/dart $DDC_DIR/bin/dartdevc.dart \ --force-compile \ --dart-sdk=$DART_SDK_LIB_SEARCH_PATH -o $OUT_DIR \ src/hello_world/index.html EXIT_CODE=`echo $?` set -e if [[ "$EXIT_CODE" -ne "0" && "$EXIT_CODE" -ne "1" ]] then echo "DDC compiler crashed with exit code $EXIT_CODE" exit 1 fi # Run e2e tests cd $REPO_ROOT_DIR ./node_modules/.bin/webdriver-manager update function killServer () { kill $serverPid } ./node_modules/.bin/gulp serve.js.ddc& serverPid=$! echo CHROM_BIN=$CHROME_BIN echo CHROM_BIN_VERSION=`$CHROME_BIN --version` trap killServer EXIT # wait for server to come up sleep 10 function runSpec { SPEC=$1 ./node_modules/.bin/protractor protractor-ddc.conf.js \ --browsers=${E2E_BROWSERS:-ChromeDesktop} \ --spec=$SPEC } # TODO: add more e2e tests runSpec hello_world/hello_world_spec.js echo 'Dart DDC build finished' exit $EXIT_CODE