Add travis configuration
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..b6991b8
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,7 @@
+language: node_js
+node_js:
+  - "0.11"
+before_install:
+  - export DISPLAY=:99.0
+script:
+  - ./tool/travis.sh
diff --git a/check.sh b/check.sh
deleted file mode 100755
index afaab1f..0000000
--- a/check.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-# Abort if non-zero code returned.
-set -e
-
-dartanalyzer lib/mustache.dart
-
-dartanalyzer test/mustache_test.dart
-
-dart --checked test/mustache_test.dart
-
diff --git a/tool/travis.sh b/tool/travis.sh
new file mode 100755
index 0000000..f2de161
--- /dev/null
+++ b/tool/travis.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# Copyright (c) 2014, Google Inc. Please see the AUTHORS file for details.
+# All rights reserved. Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+# Fast fail the script on failures.
+set -e
+
+# Get the Dart SDK (only for travis-ci.org; otherwise, assume that Dart is already available).
+if [ "$TRAVIS" = "true" ]; then
+  DART_DIST=dartsdk-linux-x64-release.zip
+  curl http://storage.googleapis.com/dart-archive/channels/stable/release/latest/sdk/$DART_DIST > $DART_DIST
+  unzip $DART_DIST > /dev/null
+  rm $DART_DIST
+  export DART_SDK="$PWD/dart-sdk"
+  export PATH="$DART_SDK/bin:$PATH"
+fi
+
+# Display installed versions.
+dart --version
+
+export PATH="$PATH":"~/.pub-cache/bin"
+
+# Get our packages.
+pub get
+
+# Verify that the libraries are error free.
+dartanalyzer lib/mustache.dart
+dartanalyzer test/mustache_test.dart
+
+# Download spec tests
+git clone https://github.com/mustache/spec.git test/spec
+
+# Run the tests.
+dart --checked test/all.dart
+
+# Gather and send coverage data.
+if [ "$REPO_TOKEN" ]; then
+  pub global activate dart_coveralls
+  pub global run dart_coveralls report \
+    --token $REPO_TOKEN \
+    --retry 2 \
+    --exclude-test-files \
+    test/all.dart
+fi