diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bea644c..34a3a80 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -5,6 +5,8 @@
     branches: [ master ]
   pull_request:
     branches: [ master ]
+  schedule:
+    - cron: "0 0 * * 0"
 
 jobs:
   test:
@@ -17,7 +19,8 @@
     steps:
       - uses: actions/checkout@v2
       - uses: dart-lang/setup-dart@v1.0
-
+        with:
+          sdk: ${{ matrix.sdk }}
       - run: dart pub get
         id: install
       - run: dart format --output=none --set-exit-if-changed .
diff --git a/benchmark/matrix4_tween_bench.dart b/benchmark/matrix4_tween_bench.dart
index 0e5265b..cbb84e5 100644
--- a/benchmark/matrix4_tween_bench.dart
+++ b/benchmark/matrix4_tween_bench.dart
@@ -2,8 +2,8 @@
 // All rights reserved. Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-import 'package:vector_math/vector_math_64.dart';
 import 'package:benchmark_harness/benchmark_harness.dart';
+import 'package:vector_math/vector_math_64.dart';
 
 mixin Setup on BenchmarkBase {
   final beginTransform = Matrix4.compose(
diff --git a/benchmark/matrix_bench.dart b/benchmark/matrix_bench.dart
index c322edf..7d0932e 100644
--- a/benchmark/matrix_bench.dart
+++ b/benchmark/matrix_bench.dart
@@ -4,9 +4,10 @@
 
 import 'dart:math' as math;
 import 'dart:typed_data';
+
+import 'package:benchmark_harness/benchmark_harness.dart';
 import 'package:vector_math/vector_math.dart';
 import 'package:vector_math/vector_math_operations.dart';
-import 'package:benchmark_harness/benchmark_harness.dart';
 
 class MatrixMultiplyBenchmark extends BenchmarkBase {
   MatrixMultiplyBenchmark() : super('MatrixMultiply');
diff --git a/lib/src/vector_math/aabb3.dart b/lib/src/vector_math/aabb3.dart
index 23b6d66..48e17d5 100644
--- a/lib/src/vector_math/aabb3.dart
+++ b/lib/src/vector_math/aabb3.dart
@@ -156,7 +156,9 @@
   /// Set the AABB to enclose a limited [ray] (or line segment) that is limited
   /// by [limitMin] and [limitMax].
   void setRay(Ray ray, double limitMin, double limitMax) {
-    ray..copyAt(_min, limitMin)..copyAt(_max, limitMax);
+    ray
+      ..copyAt(_min, limitMin)
+      ..copyAt(_max, limitMax);
 
     if (_max.x < _min.x) {
       final temp = _max.x;
diff --git a/lib/src/vector_math/triangle.dart b/lib/src/vector_math/triangle.dart
index 2c878ed..b960c2d 100644
--- a/lib/src/vector_math/triangle.dart
+++ b/lib/src/vector_math/triangle.dart
@@ -56,7 +56,10 @@
 
   /// Transform this by the transform [t].
   void transform(Matrix4 t) {
-    t..transform3(_point0)..transform3(_point1)..transform3(_point2);
+    t
+      ..transform3(_point0)
+      ..transform3(_point1)
+      ..transform3(_point2);
   }
 
   /// Translate this by [offset].
diff --git a/lib/src/vector_math_64/aabb3.dart b/lib/src/vector_math_64/aabb3.dart
index ece6138..63572e0 100644
--- a/lib/src/vector_math_64/aabb3.dart
+++ b/lib/src/vector_math_64/aabb3.dart
@@ -156,7 +156,9 @@
   /// Set the AABB to enclose a limited [ray] (or line segment) that is limited
   /// by [limitMin] and [limitMax].
   void setRay(Ray ray, double limitMin, double limitMax) {
-    ray..copyAt(_min, limitMin)..copyAt(_max, limitMax);
+    ray
+      ..copyAt(_min, limitMin)
+      ..copyAt(_max, limitMax);
 
     if (_max.x < _min.x) {
       final temp = _max.x;
diff --git a/lib/src/vector_math_64/triangle.dart b/lib/src/vector_math_64/triangle.dart
index 1aea2d3..23b43fc 100644
--- a/lib/src/vector_math_64/triangle.dart
+++ b/lib/src/vector_math_64/triangle.dart
@@ -56,7 +56,10 @@
 
   /// Transform this by the transform [t].
   void transform(Matrix4 t) {
-    t..transform3(_point0)..transform3(_point1)..transform3(_point2);
+    t
+      ..transform3(_point0)
+      ..transform3(_point1)
+      ..transform3(_point2);
   }
 
   /// Translate this by [offset].
diff --git a/lib/src/vector_math_geometry/filters/flat_shade_filter.dart b/lib/src/vector_math_geometry/filters/flat_shade_filter.dart
index 6f276be..23203f3 100644
--- a/lib/src/vector_math_geometry/filters/flat_shade_filter.dart
+++ b/lib/src/vector_math_geometry/filters/flat_shade_filter.dart
@@ -51,7 +51,10 @@
       final i1 = mesh.indices![i + 1];
       final i2 = mesh.indices![i + 2];
 
-      srcPosition..load(i0, p0)..load(i1, p1)..load(i2, p2);
+      srcPosition
+        ..load(i0, p0)
+        ..load(i1, p1)
+        ..load(i2, p2);
 
       destPosition[i] = p0;
       destPosition[i + 1] = p1;
diff --git a/lib/src/vector_math_geometry/generators/attribute_generators.dart b/lib/src/vector_math_geometry/generators/attribute_generators.dart
index 888a354..a078991 100644
--- a/lib/src/vector_math_geometry/generators/attribute_generators.dart
+++ b/lib/src/vector_math_geometry/generators/attribute_generators.dart
@@ -18,7 +18,10 @@
   // normals.
   for (var i = 0; i < indices.length; i += 3) {
     final i0 = indices[i], i1 = indices[i + 1], i2 = indices[i + 2];
-    positions..load(i0, p0)..load(i1, p1)..load(i2, p2);
+    positions
+      ..load(i0, p0)
+      ..load(i1, p1)
+      ..load(i2, p2);
 
     p1.sub(p0);
     p2.sub(p0);
@@ -74,9 +77,15 @@
 
   for (var i = 0; i < indices.length; i += 3) {
     final i0 = indices[i], i1 = indices[i + 1], i2 = indices[i + 2];
-    positions..load(i0, p0)..load(i1, p1)..load(i2, p2);
+    positions
+      ..load(i0, p0)
+      ..load(i1, p1)
+      ..load(i2, p2);
 
-    texCoords..load(i0, uv0)..load(i1, uv1)..load(i2, uv2);
+    texCoords
+      ..load(i0, uv0)
+      ..load(i1, uv1)
+      ..load(i2, uv2);
 
     p1.sub(p0);
     p2.sub(p0);
diff --git a/pubspec.yaml b/pubspec.yaml
index 2391c19..db00bdb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -8,9 +8,9 @@
 
 dev_dependencies:
   benchmark_harness: ^2.0.0
-  build_runner: ^1.0.0
+  build_runner: ^2.0.0
   build_test: ^2.0.0
-  build_web_compilers: ^2.0.0
+  build_web_compilers: ^3.0.0
   path: ^1.8.0
   pedantic: ^1.10.0
   test: ^1.16.0
diff --git a/test/geometry_test.dart b/test/geometry_test.dart
index 6dc2301..78336ce 100644
--- a/test/geometry_test.dart
+++ b/test/geometry_test.dart
@@ -5,10 +5,9 @@
 import 'dart:typed_data';
 
 import 'package:test/test.dart';
-
 import 'package:vector_math/vector_math.dart';
-import 'package:vector_math/vector_math_lists.dart';
 import 'package:vector_math/vector_math_geometry.dart';
+import 'package:vector_math/vector_math_lists.dart';
 
 import 'test_utils.dart';
 
diff --git a/tool/travis.sh b/tool/travis.sh
deleted file mode 100755
index 09c3c84..0000000
--- a/tool/travis.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-# Fast fail the script on failures.
-set -e
-set -x
-
-if [ "$TRAVIS_DART_VERSION" = "dev" ]; then
-  dartfmt -n --set-exit-if-changed .
-fi
-
-dartanalyzer --fatal-warnings --fatal-infos .
-
-# Run the tests.
-pub run test
-
-# Install dart_coveralls; gather and send coverage data.
-if [ "$COVERALLS_TOKEN" ] && [ "$TRAVIS_DART_VERSION" = "dev" ]; then
-  pub global activate dart_coveralls
-  pub global run dart_coveralls report \
-    --token $COVERALLS_TOKEN \
-    --retry 2 \
-    --exclude-test-files \
-    test/test_all.dart
-fi
