Enable GitHub actions, bump dependencies, prepare for release (#104)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..f2bc620
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,37 @@
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+
+name: ci
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+
+jobs:
+  analyze:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+      - uses: dart-lang/setup-dart@v1.0
+        with:
+          sdk: dev
+      - run: pub get
+      - run: dart format --output=none --set-exit-if-changed .
+      - run: dart analyze --fatal-infos
+  test:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        sdk: [2.1.0, stable, dev]
+    steps:
+      - uses: actions/checkout@v2
+      - uses: dart-lang/setup-dart@v1.0
+        with:
+          sdk: ${{ matrix.sdk }}
+      - run: pub get
+      - run: pub run test -p vm,chrome
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index ade41f8..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-language: dart
-
-# Gives more resources on Travis (8GB Ram, 2 CPUs).
-# Do not remove without verifying w/ Travis.
-sudo: required
-addons:
-  chrome: stable
-
-# Build stages: https://docs.travis-ci.com/user/build-stages/.
-stages:
-  - presubmit
-  - build
-  - testing
-
-# 1. Run dartfmt, dartanalyzer, pub run test (VM).
-# 2. Then run a build.
-# 3. Then run tests compiled via dartdevc and dart2js.
-jobs:
-  include:
-    - stage: presubmit
-      script: ./tool/travis.sh dartfmt
-      dart: dev
-    - stage: presubmit
-      script: ./tool/travis.sh dartanalyzer
-      dart: dev
-    - stage: build
-      script: ./tool/travis.sh dartdevc_build
-      dart: dev
-    - stage: testing
-      script: ./tool/travis.sh vm_test
-      dart: dev
-    - stage: testing
-      script: ./tool/travis.sh dartdevc_test
-      dart: dev
-    - stage: testing
-      script: ./tool/travis.sh dart2js_test
-      dart: dev
-
-# Only building master means that we don't run two builds for each pull request.
-branches:
-  only: [master]
-
-# Incremental pub cache and builds.
-cache:
-  directories:
-    - $HOME/.pub-cache
-    - .dart_tool
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0e810aa..f3f6641 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
-## 0.22.3-dev
+## 0.23.0
 
+* Support latest dependencies.
 * Reintroduce custom equality for `PropertyChangeRecord` from 0.18.0.
 
 ## 0.22.2
diff --git a/README.md b/README.md
index bd82499..4419a99 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Build Status](https://travis-ci.org/dart-lang/observable.svg?branch=master)](https://travis-ci.org/dart-lang/observable)
+[![Build Status](https://github.com/google/observable/workflows/ci/badge.svg)](https://github.com/google/observable/actions?query=workflow%3A"ci"+branch%3Amaster)
 
 Support for detecting and being notified when an object is mutated.
 
diff --git a/pubspec.yaml b/pubspec.yaml
index d62ddde..86de20c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -7,14 +7,13 @@
 
 dependencies:
   collection: ^1.11.0
-  dart_internal: ">=0.1.1 < 0.3.0"
+  dart_internal: ">=0.1.1 <0.3.0"
   meta: ^1.0.4
-  quiver: '>=0.24.0 <3.0.0'
+  quiver: '>=2.1.5 <4.0.0'
 
 dev_dependencies:
   build_runner: '>=0.8.0 <2.0.0'
-  build_test: ^0.10.0
+  build_test: '>=0.10.6 <3.0.0'
   build_web_compilers: '>=0.3.1 <3.0.0'
-  dart_style: ^1.0.9
   pedantic: ^1.4.0
   test: ^1.3.0
diff --git a/tool/travis.sh b/tool/travis.sh
deleted file mode 100755
index ceb39a7..0000000
--- a/tool/travis.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) 2020, 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.
-
-#!/bin/bash
-
-if [ "$#" == "0" ]; then
-  echo -e '\033[31mAt least one task argument must be provided!\033[0m'
-  exit 1
-fi
-
-EXIT_CODE=0
-
-while (( "$#" )); do
-  TASK=$1
-  case $TASK in
-  dartfmt) echo
-    echo -e '\033[1mTASK: dartfmt\033[22m'
-    echo -e 'dartfmt -n --set-exit-if-changed .'
-    dartfmt -n --set-exit-if-changed . || EXIT_CODE=$?
-    ;;
-  dartanalyzer) echo
-    echo -e '\033[1mTASK: dartanalyzer\033[22m'
-    echo -e 'dartanalyzer --fatal-warnings --fatal-infos .'
-    dartanalyzer --fatal-warnings --fatal-infos . || EXIT_CODE=$?
-    ;;
-  vm_test) echo
-    echo -e '\033[1mTASK: vm_test\033[22m'
-    echo -e 'pub run test -P travis -p vm -x requires-dart2'
-    pub run test -p vm || EXIT_CODE=$?
-    ;;
-  dartdevc_build) echo
-    echo -e '\033[1mTASK: build\033[22m'
-    echo -e 'pub run build_runner build --fail-on-severe'
-    pub run build_runner build --fail-on-severe || EXIT_CODE=$?
-    ;;
-  dartdevc_test) echo
-    echo -e '\033[1mTASK: dartdevc_test\033[22m'
-    echo -e 'xvfb-run pub run build_runner test -- -P travis -p chrome'
-    xvfb-run pub run build_runner test -- -p chrome || EXIT_CODE=$?
-    ;;
-  dart2js_test) echo
-    echo -e '\033[1mTASK: dart2js_test\033[22m'
-    echo -e 'xvfb-run pub run test -P travis -p chrome -x requires-dart2'
-    xvfb-run pub run test -p chrome || EXIT_CODE=$?
-    ;;
-  *) echo -e "\033[31mNot expecting TASK '${TASK}'. Error!\033[0m"
-    EXIT_CODE=1
-    ;;
-  esac
-
-  shift
-done
-
-exit $EXIT_CODE