Switch to use GitHub Actions instead of Travis, update analysis options (#67)

This switches the repo to use GitHub Actions instead of Travis, and updates the analysis options to use the standard Dart lints.
diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml
new file mode 100644
index 0000000..dfcf6cd
--- /dev/null
+++ b/.github/workflows/process.yml
@@ -0,0 +1,38 @@
+name: Process Package
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+  workflow_dispatch:
+
+jobs:
+  correctness:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
+      - uses: dart-lang/setup-dart@9a04e6d73cca37bd455e0608d7e5092f881fd603
+        with:
+          sdk: dev
+      - name: Install dependencies
+        run: dart pub upgrade
+      - name: Verify formatting
+        run: dart format --output=none --set-exit-if-changed .
+      - name: Analyze project source
+        run: dart analyze --fatal-infos
+  test:
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        os: [ubuntu-latest, macos-latest, windows-latest]
+        sdk: [stable, beta, dev]
+    steps:
+      - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
+      - uses: dart-lang/setup-dart@9a04e6d73cca37bd455e0608d7e5092f881fd603
+        with:
+          sdk: ${{ matrix.sdk }}
+      - name: Install dependencies
+        run: dart pub upgrade
+      - name: Run Tests
+        run: dart test
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 5722c5b..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-language: dart
-sudo: false
-dart:
-  - dev
-install:
-  - gem install coveralls-lcov
-before_script:
-  - ./dev/setup.sh
-script:
-  - ./dev/travis.sh
-after_success:
-  - (coveralls-lcov coverage/lcov.info)
-cache:
-  directories:
-    - $HOME/.pub-cache
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 2c72e4b..8fbd2e4 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,67 +1,6 @@
+include: package:lints/recommended.yaml
+
 analyzer:
-  enable-experiment:
-    - non-nullable
-  strong-mode:
-    implicit-dynamic: false
-    implicit-casts: false
   errors:
-    missing_required_param: warning
-    missing_return: warning
     # Allow having TODOs in the code
     todo: ignore
-
-linter:
-  rules:
-    # these rules are documented on and in the same order as
-    # the Dart Lint rules page to make maintenance easier
-    # http://dart-lang.github.io/linter/lints/
-
-    # === error rules ===
-    - avoid_empty_else
-    - comment_references
-    - cancel_subscriptions
-    - close_sinks
-    - control_flow_in_finally
-    - empty_statements
-    - hash_and_equals
-    - invariant_booleans
-    - iterable_contains_unrelated_type
-    - list_remove_unrelated_type
-    - literal_only_boolean_expressions
-    - test_types_in_equals
-    - throw_in_finally
-    - unrelated_type_equality_checks
-    - valid_regexps
-
-    # === style rules ===
-    - always_declare_return_types
-    - always_specify_types
-    - annotate_overrides
-    - avoid_init_to_null
-    - avoid_return_types_on_setters
-    - await_only_futures
-    - camel_case_types
-    - constant_identifier_names
-    - empty_constructor_bodies
-    - implementation_imports
-    - library_names
-    - library_prefixes
-    - non_constant_identifier_names
-    - one_member_abstracts
-    - only_throw_errors
-    - overridden_fields
-    - package_api_docs
-    - package_prefixed_library_names
-    - prefer_is_not_empty
-    - public_member_api_docs
-    - slash_for_doc_comments
-    - sort_constructors_first
-    - sort_unnamed_constructors_first
-    - type_annotate_public_apis
-    - type_init_formals
-    - unawaited_futures
-    - unnecessary_brace_in_string_interps
-    - unnecessary_getters_setters
-
-    # === pub rules ===
-    - package_names
diff --git a/dev/setup.sh b/dev/setup.sh
deleted file mode 100755
index 99ec284..0000000
--- a/dev/setup.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2017, the Dart project authors.  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.
-
-pub upgrade
diff --git a/dev/travis.sh b/dev/travis.sh
deleted file mode 100755
index 866b361..0000000
--- a/dev/travis.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2017, the Dart project authors.  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.
-
-# Make sure dartfmt is run on everything
-echo "Checking dartfmt..."
-needs_dartfmt="$(dartfmt -n lib test dev)"
-if [[ -n "$needs_dartfmt" ]]; then
-  echo "FAILED"
-  echo "$needs_dartfmt"
-  exit 1
-fi
-echo "PASSED"
-
-# Make sure we pass the analyzer
-echo "Checking dartanalyzer..."
-fails_analyzer="$(find lib test dev -name "*.dart" | xargs dartanalyzer --options .analysis_options)"
-if [[ "$fails_analyzer" == *"[error]"* ]]; then
-  echo "FAILED"
-  echo "$fails_analyzer"
-  exit 1
-fi
-echo "PASSED"
-
-# Fast fail the script on failures.
-set -e
-
-# Run the tests.
-pub run test
diff --git a/pubspec.yaml b/pubspec.yaml
index 6458b06..9118507 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -12,4 +12,5 @@
   platform: '^3.0.0'
 
 dev_dependencies:
+  lints: ^1.0.1
   test: ^1.16.8
diff --git a/test/src/interface/common_test.dart b/test/src/interface/common_test.dart
index ae605db..4f53269 100644
--- a/test/src/interface/common_test.dart
+++ b/test/src/interface/common_test.dart
@@ -27,8 +27,9 @@
     }
 
     tearDown(() {
-      <Directory>[workingDir, dir1, dir2, dir3]
-          .forEach((Directory d) => d.deleteSync(recursive: true));
+      for (var directory in <Directory>[workingDir, dir1, dir2, dir3]) {
+        directory.deleteSync(recursive: true);
+      }
     });
 
     group('on windows', () {
@@ -227,24 +228,24 @@
 
       test('when path has spaces', () {
         expect(
-            sanitizeExecutablePath('Program Files\\bla.exe',
+            sanitizeExecutablePath(r'Program Files\bla.exe',
                 platform: platform),
-            '"Program Files\\bla.exe"');
+            r'"Program Files\bla.exe"');
         expect(
-            sanitizeExecutablePath('ProgramFiles\\bla.exe', platform: platform),
-            'ProgramFiles\\bla.exe');
+            sanitizeExecutablePath(r'ProgramFiles\bla.exe', platform: platform),
+            r'ProgramFiles\bla.exe');
         expect(
-            sanitizeExecutablePath('"Program Files\\bla.exe"',
+            sanitizeExecutablePath(r'"Program Files\bla.exe"',
                 platform: platform),
-            '"Program Files\\bla.exe"');
+            r'"Program Files\bla.exe"');
         expect(
-            sanitizeExecutablePath('\"Program Files\\bla.exe\"',
+            sanitizeExecutablePath(r'"Program Files\bla.exe"',
                 platform: platform),
-            '\"Program Files\\bla.exe\"');
+            r'"Program Files\bla.exe"');
         expect(
-            sanitizeExecutablePath('C:\\\"Program Files\"\\bla.exe',
+            sanitizeExecutablePath(r'C:\"Program Files"\bla.exe',
                 platform: platform),
-            'C:\\\"Program Files\"\\bla.exe');
+            r'C:\"Program Files"\bla.exe');
       });
 
       test('with absolute path when currentDirectory getter throws', () {