171 lines
4.5 KiB
Bash
Executable File
171 lines
4.5 KiB
Bash
Executable File
#!/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="210"
|
|
DDC_TOTAL_ERROR_CAP="0"
|
|
DDC_DIR=`pwd`/tmp/dev_compiler
|
|
DDC_VERSION="0.1.20"
|
|
|
|
# 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 '<script.*dart\.js' >$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
|