Create a GitHub Actions workflow to audit the tap (#87)

* Move all formulae into the Formula directory to ensure that `brew audit` works correctly.
* Add a workflow based on the testing workflow created by `brew new-tap`.
* Add Linux versions to the Dart 2.x formulae.
* Delete the deprecated/obsolete `dart@1` and `dart@2` formulae.
* Disable Linux tests on `dart@2.0`.
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 0000000..6e63a94
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,43 @@
+name: brew test-bot
+on:
+  push:
+    branches:
+      - master
+    paths:
+      - '**.rb'
+      - .github/workflows/tests.yml
+  pull_request:
+    paths:
+      - '**.rb'
+      - .github/workflows/tests.yml
+jobs:
+  test-bot:
+    strategy:
+      matrix:
+        os: [ubuntu-latest, macos-latest]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - name: Set up Homebrew
+        id: set-up-homebrew
+        uses: Homebrew/actions/setup-homebrew@9eceaab9efeb868f3ba97850da15fb9b2b5a0a7d
+
+      - name: Cache Homebrew Bundler RubyGems
+        id: cache
+        uses: actions/cache@v1
+        with:
+          path: ${{ steps.set-up-homebrew.outputs.gems-path }}
+          key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }}
+          restore-keys: ${{ runner.os }}-rubygems-
+
+      - name: Install Homebrew Bundler RubyGems
+        if: steps.cache.outputs.cache-hit != 'true'
+        run: brew install-bundler-gems
+
+      - run: brew test-bot --only-cleanup-before
+
+      - run: brew test-bot --only-setup
+
+      - run: brew test-bot --only-tap-syntax
+
+      - run: brew test-bot --only-formulae
+        if: github.event_name == 'pull_request'
diff --git a/dart-beta.rb b/Formula/dart-beta.rb
similarity index 98%
rename from dart-beta.rb
rename to Formula/dart-beta.rb
index 3b4273b..730ad75 100644
--- a/dart-beta.rb
+++ b/Formula/dart-beta.rb
@@ -2,10 +2,10 @@
 # frozen_string_literal: true
 
 class DartBeta < Formula
-  desc "Dart Beta SDK"
+  desc "Beta SDK"
   homepage "https://dart.dev"
-
   version "2.14.0-188.5.beta"
+
   conflicts_with "dart", because: "dart ships the same binaries"
   if OS.mac?
     url "https://storage.googleapis.com/dart-archive/channels/beta/release/2.14.0-188.5.beta/sdk/dartsdk-macos-x64-release.zip"
diff --git a/dart.rb b/Formula/dart.rb
similarity index 98%
rename from dart.rb
rename to Formula/dart.rb
index b1de3ca..6ca77b8 100644
--- a/dart.rb
+++ b/Formula/dart.rb
@@ -2,10 +2,9 @@
 # frozen_string_literal: true
 
 class Dart < Formula
-  desc "Dart SDK"
+  desc "SDK"
   homepage "https://dart.dev"
 
-  version "2.13.4"
   head do
     version "2.14.0-256.0.dev"
     if OS.mac?
diff --git a/Formula/dart@2.0.rb b/Formula/dart@2.0.rb
new file mode 100644
index 0000000..3ebb472
--- /dev/null
+++ b/Formula/dart@2.0.rb
@@ -0,0 +1,67 @@
+# typed: false
+# frozen_string_literal: true
+
+class DartAT20 < Formula
+  desc "Dart SDK"
+  homepage "https://dart.dev"
+
+  keg_only :versioned_formula
+  if OS.mac?
+    if Hardware::CPU.is_64_bit?
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-macos-x64-release.zip"
+      sha256 "7cb9e65cea94ce23b05af4e5224ec416b26c3fb6bf0718778b68f6a73e617cc3"
+    else
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-macos-ia32-release.zip"
+      sha256 "da55f8fce70ca46e97304810406c89f039464be909b9b92f13986ce918da6775"
+    end
+  elsif OS.linux? && Hardware::CPU.intel?
+    if Hardware::CPU.is_64_bit?
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-linux-x64-release.zip"
+      sha256 "4014a1e8755d2d32cc1573b731a4a53acdf6dfca3e26ee437f63fe768501d336"
+    else
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-linux-ia32-release.zip"
+      sha256 "3164a9de70bf11ab5b20af0d51c8b3303f2dce584604dce33bea0040bdc0bbba"
+    end
+  elsif OS.linux? && Hardware::CPU.arm?
+    if Hardware::CPU.is_64_bit?
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-linux-arm64-release.zip"
+      sha256 "c49b9dab20de785c560db1347c2ad5b2d88d2ea45b3ec4a0d86cae058b793076"
+    else
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-linux-arm-release.zip"
+      sha256 "5a3679062674925b4c065266cc2fe18ced90b65fbc2982b036c2593cd55d5e8d"
+    end
+  end
+
+  def install
+    libexec.install Dir["*"]
+    bin.install_symlink "#{libexec}/bin/dart"
+    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
+  end
+
+  def shim_script(target)
+    <<~EOS
+      #!/usr/bin/env bash
+      exec "#{prefix}/#{target}" "$@"
+    EOS
+  end
+
+  def caveats
+    <<~EOS
+      Please note the path to the Dart SDK:
+        #{opt_libexec}
+    EOS
+  end
+
+  test do
+    # For some reason, the test fails on Linux, perhaps a bug in 2.0.0.
+    if OS.mac?
+      (testpath/"sample.dart").write <<~EOS
+        void main() {
+          print(r"test message");
+        }
+      EOS
+
+      assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
+    end
+  end
+end
diff --git a/dart@2.7.rb b/Formula/dart@2.1.rb
similarity index 60%
copy from dart@2.7.rb
copy to Formula/dart@2.1.rb
index e0e465c..42ebea8 100644
--- a/dart@2.7.rb
+++ b/Formula/dart@2.1.rb
@@ -1,35 +1,34 @@
 # typed: false
 # frozen_string_literal: true
 
-class DartAT27 < Formula
+class DartAT21 < Formula
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.7.0"
   keg_only :versioned_formula
   if OS.mac?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-x64-release.zip"
-      sha256 "f9d2f5b579fe2a1cfd14fe558d20adfa7c7a326a980768335f85ec1ed3611ad2"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.1.1/sdk/dartsdk-macos-x64-release.zip"
+      sha256 "2f80bbbc16b4cbd872f6e31912aa87a537412f3b417af99003521c8790542887"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-ia32-release.zip"
-      sha256 "4e0c2a09d85ebbbed55882a105a86a482a151f71a27aec21c2c2125de7b501cf"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.1.1/sdk/dartsdk-macos-ia32-release.zip"
+      sha256 "a19a73189f9dc2a3ff4557566c358b01774deab4811706e74e1bddeb43a76048"
     end
   elsif OS.linux? && Hardware::CPU.intel?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-x64-release.zip"
-      sha256 "65844622eb095be903d057d78af4826bfc204d8ea156f77a14b954520f019827"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.1.1/sdk/dartsdk-linux-x64-release.zip"
+      sha256 "b223f095e2eb836481b6d5041d23a627745f0b45f70f9ce31cc1fbc68e9a9f90"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-ia32-release.zip"
-      sha256 "a503731077c332fbde70c06b602efc5024d59e7331f08dba087d2d8bbf4e6c23"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.1.1/sdk/dartsdk-linux-ia32-release.zip"
+      sha256 "8c7d359f00f3569dffd9d02fc213cd895a5c3e524d386cf65c89c2373630ca7e"
     end
   elsif OS.linux? && Hardware::CPU.arm?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm64-release.zip"
-      sha256 "0328af535743622130fa7b89969bac34b11c116cb99d185ad1161ddfac457dec"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.1.1/sdk/dartsdk-linux-arm64-release.zip"
+      sha256 "9cda938c8ac285e03f53540267c5e514548f0a8d069463265e4eaf7d76fae2c3"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm-release.zip"
-      sha256 "2270ae2d3e467c539dcc6358312bba949f2614f7da78225e7a1ba5b57981ca0c"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.1.1/sdk/dartsdk-linux-arm-release.zip"
+      sha256 "87614497b6b7098e294d116002861e1a7d7d982e4cd34026f80823f615248a22"
     end
   end
 
diff --git a/dart@2.10.rb b/Formula/dart@2.10.rb
similarity index 98%
rename from dart@2.10.rb
rename to Formula/dart@2.10.rb
index 6119fdf..3d293f9 100644
--- a/dart@2.10.rb
+++ b/Formula/dart@2.10.rb
@@ -5,7 +5,6 @@
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.10.4"
   keg_only :versioned_formula
   if OS.mac?
     url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.10.4/sdk/dartsdk-macos-x64-release.zip"
diff --git a/dart@2.12.rb b/Formula/dart@2.12.rb
similarity index 98%
rename from dart@2.12.rb
rename to Formula/dart@2.12.rb
index ff74813..8657bde 100644
--- a/dart@2.12.rb
+++ b/Formula/dart@2.12.rb
@@ -5,7 +5,6 @@
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.12.4"
   keg_only :versioned_formula
   if OS.mac?
     url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.12.4/sdk/dartsdk-macos-x64-release.zip"
diff --git a/dart@2.7.rb b/Formula/dart@2.2.rb
similarity index 60%
copy from dart@2.7.rb
copy to Formula/dart@2.2.rb
index e0e465c..e0f70dc 100644
--- a/dart@2.7.rb
+++ b/Formula/dart@2.2.rb
@@ -1,35 +1,34 @@
 # typed: false
 # frozen_string_literal: true
 
-class DartAT27 < Formula
+class DartAT22 < Formula
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.7.0"
   keg_only :versioned_formula
   if OS.mac?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-x64-release.zip"
-      sha256 "f9d2f5b579fe2a1cfd14fe558d20adfa7c7a326a980768335f85ec1ed3611ad2"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.2.0/sdk/dartsdk-macos-x64-release.zip"
+      sha256 "9438afb49b69ac655882036c214e343232fdcd5af24607e6058e2def33261197"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-ia32-release.zip"
-      sha256 "4e0c2a09d85ebbbed55882a105a86a482a151f71a27aec21c2c2125de7b501cf"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.2.0/sdk/dartsdk-macos-ia32-release.zip"
+      sha256 "78a2da74ea83ee092463a9901467492ef885f6e378353b0a44481fdf40ea81c7"
     end
   elsif OS.linux? && Hardware::CPU.intel?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-x64-release.zip"
-      sha256 "65844622eb095be903d057d78af4826bfc204d8ea156f77a14b954520f019827"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.2.0/sdk/dartsdk-linux-x64-release.zip"
+      sha256 "89777ceba8227d4dad6081c44bc70d301a259f3c2fdb4c1391961e376ec3af68"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-ia32-release.zip"
-      sha256 "a503731077c332fbde70c06b602efc5024d59e7331f08dba087d2d8bbf4e6c23"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.2.0/sdk/dartsdk-linux-ia32-release.zip"
+      sha256 "d6d5edab837301bde218c97b074af8390d5dbe00a99961605159fa9e53609b81"
     end
   elsif OS.linux? && Hardware::CPU.arm?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm64-release.zip"
-      sha256 "0328af535743622130fa7b89969bac34b11c116cb99d185ad1161ddfac457dec"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.2.0/sdk/dartsdk-linux-arm64-release.zip"
+      sha256 "f11926f39cee0157e447a6663370a58f2adf0f8adbff16cce5b5b91c24aa1347"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm-release.zip"
-      sha256 "2270ae2d3e467c539dcc6358312bba949f2614f7da78225e7a1ba5b57981ca0c"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.2.0/sdk/dartsdk-linux-arm-release.zip"
+      sha256 "93820f2987efac04c50a3ac350d50f5a233c20dd011d36cefbcf6665d460579c"
     end
   end
 
diff --git a/dart@2.7.rb b/Formula/dart@2.3.rb
similarity index 60%
copy from dart@2.7.rb
copy to Formula/dart@2.3.rb
index e0e465c..55a40ef 100644
--- a/dart@2.7.rb
+++ b/Formula/dart@2.3.rb
@@ -1,35 +1,34 @@
 # typed: false
 # frozen_string_literal: true
 
-class DartAT27 < Formula
+class DartAT23 < Formula
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.7.0"
   keg_only :versioned_formula
   if OS.mac?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-x64-release.zip"
-      sha256 "f9d2f5b579fe2a1cfd14fe558d20adfa7c7a326a980768335f85ec1ed3611ad2"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.3.2/sdk/dartsdk-macos-x64-release.zip"
+      sha256 "2643c435c4c8fe1b39c9d73cb63ba8a170ac42609b6e91e08416911bc0418031"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-ia32-release.zip"
-      sha256 "4e0c2a09d85ebbbed55882a105a86a482a151f71a27aec21c2c2125de7b501cf"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.3.2/sdk/dartsdk-macos-ia32-release.zip"
+      sha256 "d92aa28a3c1742130f92e70c0bf767f7c3f6456392d7bc93fdefbfcfbb5a0e99"
     end
   elsif OS.linux? && Hardware::CPU.intel?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-x64-release.zip"
-      sha256 "65844622eb095be903d057d78af4826bfc204d8ea156f77a14b954520f019827"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.3.2/sdk/dartsdk-linux-x64-release.zip"
+      sha256 "b693df23f9ff887ca1f5dd8240a96cb813dba1ec89100bc27b27915f19a1ab04"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-ia32-release.zip"
-      sha256 "a503731077c332fbde70c06b602efc5024d59e7331f08dba087d2d8bbf4e6c23"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.3.2/sdk/dartsdk-linux-ia32-release.zip"
+      sha256 "6f659edc1d7f06e1141a6b5db88382b8e2d9fcafd3e9de0b7af3749ce4a9033d"
     end
   elsif OS.linux? && Hardware::CPU.arm?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm64-release.zip"
-      sha256 "0328af535743622130fa7b89969bac34b11c116cb99d185ad1161ddfac457dec"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.3.2/sdk/dartsdk-linux-arm64-release.zip"
+      sha256 "b97253da172aa72ace982eb46779b35863ea3c1fea32951a407d761a0f7956f5"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm-release.zip"
-      sha256 "2270ae2d3e467c539dcc6358312bba949f2614f7da78225e7a1ba5b57981ca0c"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.3.2/sdk/dartsdk-linux-arm-release.zip"
+      sha256 "d8ec28d7ca08555d6972e1054faa1a7b2bca78818097bfde98ba748a271f28ab"
     end
   end
 
diff --git a/dart@2.7.rb b/Formula/dart@2.4.rb
similarity index 60%
copy from dart@2.7.rb
copy to Formula/dart@2.4.rb
index e0e465c..31763ae 100644
--- a/dart@2.7.rb
+++ b/Formula/dart@2.4.rb
@@ -1,35 +1,34 @@
 # typed: false
 # frozen_string_literal: true
 
-class DartAT27 < Formula
+class DartAT24 < Formula
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.7.0"
   keg_only :versioned_formula
   if OS.mac?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-x64-release.zip"
-      sha256 "f9d2f5b579fe2a1cfd14fe558d20adfa7c7a326a980768335f85ec1ed3611ad2"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.1/sdk/dartsdk-macos-x64-release.zip"
+      sha256 "62006127bd3acd1b7eb2e4fc7baed061eb19b80c4ba4af481db5244a081fff3e"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-ia32-release.zip"
-      sha256 "4e0c2a09d85ebbbed55882a105a86a482a151f71a27aec21c2c2125de7b501cf"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.1/sdk/dartsdk-macos-ia32-release.zip"
+      sha256 "3591578902f3b3ee155aa90bf893f3d0b50fd12567454a8f980440fa8dd1ff23"
     end
   elsif OS.linux? && Hardware::CPU.intel?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-x64-release.zip"
-      sha256 "65844622eb095be903d057d78af4826bfc204d8ea156f77a14b954520f019827"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.1/sdk/dartsdk-linux-x64-release.zip"
+      sha256 "2b9f7c1f4ecd9b1e2a2f770f84e44646c930adecc5f96e273d5b26c3f924a003"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-ia32-release.zip"
-      sha256 "a503731077c332fbde70c06b602efc5024d59e7331f08dba087d2d8bbf4e6c23"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.1/sdk/dartsdk-linux-ia32-release.zip"
+      sha256 "ff1f044055410f229f3ed7afe1617f92c06e400c19245c37dc1ed8e6c9e33b48"
     end
   elsif OS.linux? && Hardware::CPU.arm?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm64-release.zip"
-      sha256 "0328af535743622130fa7b89969bac34b11c116cb99d185ad1161ddfac457dec"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.1/sdk/dartsdk-linux-arm64-release.zip"
+      sha256 "e53e1f2b84173c52b5286467bec348e1d796052d1e483733802eed704fd16612"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm-release.zip"
-      sha256 "2270ae2d3e467c539dcc6358312bba949f2614f7da78225e7a1ba5b57981ca0c"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.1/sdk/dartsdk-linux-arm-release.zip"
+      sha256 "9e9b9ddf669cccc0253417b4727d5459f74bab7127423fdcdb9a69132224bcb9"
     end
   end
 
diff --git a/dart@2.7.rb b/Formula/dart@2.5.rb
similarity index 60%
copy from dart@2.7.rb
copy to Formula/dart@2.5.rb
index e0e465c..e44d2a3 100644
--- a/dart@2.7.rb
+++ b/Formula/dart@2.5.rb
@@ -1,35 +1,34 @@
 # typed: false
 # frozen_string_literal: true
 
-class DartAT27 < Formula
+class DartAT25 < Formula
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.7.0"
   keg_only :versioned_formula
   if OS.mac?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-x64-release.zip"
-      sha256 "f9d2f5b579fe2a1cfd14fe558d20adfa7c7a326a980768335f85ec1ed3611ad2"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.5.2/sdk/dartsdk-macos-x64-release.zip"
+      sha256 "b433b05ce353d3683c53632fdafd053aaab6c49014c8702fa63936cdc43ea8d6"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-macos-ia32-release.zip"
-      sha256 "4e0c2a09d85ebbbed55882a105a86a482a151f71a27aec21c2c2125de7b501cf"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.5.2/sdk/dartsdk-macos-ia32-release.zip"
+      sha256 "f5c3f7b001a734726140e8941f0768f3365193d27024a762b769d7c03304064f"
     end
   elsif OS.linux? && Hardware::CPU.intel?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-x64-release.zip"
-      sha256 "65844622eb095be903d057d78af4826bfc204d8ea156f77a14b954520f019827"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.5.2/sdk/dartsdk-linux-x64-release.zip"
+      sha256 "afdda5e7b2a357fed2fec9511f12b4c4317d04b5a87e439a27d107104e98095e"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-ia32-release.zip"
-      sha256 "a503731077c332fbde70c06b602efc5024d59e7331f08dba087d2d8bbf4e6c23"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.5.2/sdk/dartsdk-linux-ia32-release.zip"
+      sha256 "ec4291d0c57d36dcd9374428aac98a0fd7ee8f1ba30e1fe87d5e009d491a7b95"
     end
   elsif OS.linux? && Hardware::CPU.arm?
     if Hardware::CPU.is_64_bit?
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm64-release.zip"
-      sha256 "0328af535743622130fa7b89969bac34b11c116cb99d185ad1161ddfac457dec"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.5.2/sdk/dartsdk-linux-arm64-release.zip"
+      sha256 "c45465e25a299a9cb4c5c0c8dabd1c277eb25e6f409a28c0a286204474683075"
     else
-      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.7.0/sdk/dartsdk-linux-arm-release.zip"
-      sha256 "2270ae2d3e467c539dcc6358312bba949f2614f7da78225e7a1ba5b57981ca0c"
+      url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.5.2/sdk/dartsdk-linux-arm-release.zip"
+      sha256 "16a2cce0bece594db4a9a89b7289b378763d708895bd63efbcd2dfce78487471"
     end
   end
 
diff --git a/dart@2.6.rb b/Formula/dart@2.6.rb
similarity index 98%
rename from dart@2.6.rb
rename to Formula/dart@2.6.rb
index 34ffc36..6eb1e69 100644
--- a/dart@2.6.rb
+++ b/Formula/dart@2.6.rb
@@ -5,7 +5,6 @@
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.6.1"
   keg_only :versioned_formula
   if OS.mac?
     if Hardware::CPU.is_64_bit?
diff --git a/dart@2.7.rb b/Formula/dart@2.7.rb
similarity index 98%
rename from dart@2.7.rb
rename to Formula/dart@2.7.rb
index e0e465c..2ae1081 100644
--- a/dart@2.7.rb
+++ b/Formula/dart@2.7.rb
@@ -5,7 +5,6 @@
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.7.0"
   keg_only :versioned_formula
   if OS.mac?
     if Hardware::CPU.is_64_bit?
diff --git a/dart@2.8.rb b/Formula/dart@2.8.rb
similarity index 98%
rename from dart@2.8.rb
rename to Formula/dart@2.8.rb
index 2ea6509..5613024 100644
--- a/dart@2.8.rb
+++ b/Formula/dart@2.8.rb
@@ -5,7 +5,6 @@
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.8.1"
   keg_only :versioned_formula
   if OS.mac?
     url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.8.1/sdk/dartsdk-macos-x64-release.zip"
diff --git a/dart@2.9.rb b/Formula/dart@2.9.rb
similarity index 98%
rename from dart@2.9.rb
rename to Formula/dart@2.9.rb
index b1fcde7..6213ca0 100644
--- a/dart@2.9.rb
+++ b/Formula/dart@2.9.rb
@@ -5,7 +5,6 @@
   desc "Dart SDK"
   homepage "https://dart.dev"
 
-  version "2.9.3"
   keg_only :versioned_formula
   if OS.mac?
     url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.9.3/sdk/dartsdk-macos-x64-release.zip"
diff --git a/dart@1.rb b/dart@1.rb
deleted file mode 100644
index d768108..0000000
--- a/dart@1.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-# typed: false
-# frozen_string_literal: true
-
-class DartAT1 < Formula
-  desc "Legacy Dart 1 SDK"
-  homepage "https://dart.dev"
-  version "1.24.3"
-
-  keg_only :versioned_formula
-
-  if Hardware::CPU.is_64_bit?
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip"
-    sha256 "3419869401184d1ebf44e8947de36ac83ff614097c2c52a80792e89a25c18cd8"
-  else
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-ia32-release.zip"
-    sha256 "387fb5e1a1231b219a599d2d7efe250387e041d6b4822ec1ddbf364794762097"
-  end
-
-  option "with-content-shell", "Download and install content_shell -- headless Dartium for testing"
-  option "with-dartium", "Download and install Dartium -- Chromium with Dart"
-
-  resource "content_shell" do
-    version "1.24.3"
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/dartium/content_shell-macos-x64-release.zip"
-    sha256 "01efc473c68aed830307d1dafb0cbcbfe77f40ceeeab3ef3ebe58a9912d05b13"
-  end
-
-  resource "dartium" do
-    version "1.24.3"
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/dartium/dartium-macos-x64-release.zip"
-    sha256 "188a038bd6367fddb434338bf6549bae25f5ad89b2f5b462acf8fb1fa20a3916"
-  end
-
-  def install
-    libexec.install Dir["*"]
-    bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
-
-    if build.with? "dartium"
-      dartium_binary = "Chromium.app/Contents/MacOS/Chromium"
-      prefix.install resource("dartium")
-      ("#{bin}dartium").write shim_script dartium_binary
-    end
-
-    if build.with? "content-shell"
-      content_shell_binary = "Content Shell.app/Contents/MacOS/Content Shell"
-      prefix.install resource("content_shell")
-      ("#{bin}content_shell").write shim_script content_shell_binary
-    end
-  end
-
-  def shim_script(target)
-    <<~EOS
-      #!/usr/bin/env bash
-      exec "#{prefix}/#{target}" "$@"
-    EOS
-  end
-
-  def caveats
-    <<~EOS
-      Please note the path to the Dart SDK:
-        #{opt_libexec}
-    EOS
-  end
-
-  test do
-    (testpath/"sample.dart").write <<~EOS
-      void main() {
-        print(r"test message");
-      }
-    EOS
-
-    assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
-  end
-end
diff --git a/dart@2.0.rb b/dart@2.0.rb
deleted file mode 100644
index b2adcc9..0000000
--- a/dart@2.0.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# typed: false
-# frozen_string_literal: true
-
-class DartAT20 < Formula
-  desc "Dart SDK"
-  homepage "https://dart.dev"
-
-  version "2.0.0"
-  keg_only :versioned_formula
-  if Hardware::CPU.is_64_bit?
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-macos-x64-release.zip"
-    sha256 "7cb9e65cea94ce23b05af4e5224ec416b26c3fb6bf0718778b68f6a73e617cc3"
-  else
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-macos-ia32-release.zip"
-    sha256 "da55f8fce70ca46e97304810406c89f039464be909b9b92f13986ce918da6775"
-  end
-
-  def install
-    libexec.install Dir["*"]
-    bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
-  end
-
-  def shim_script(target)
-    <<~EOS
-      #!/usr/bin/env bash
-      exec "#{prefix}/#{target}" "$@"
-    EOS
-  end
-
-  def caveats
-    <<~EOS
-      Please note the path to the Dart SDK:
-        #{opt_libexec}
-    EOS
-  end
-
-  test do
-    (testpath/"sample.dart").write <<~EOS
-      void main() {
-        print(r"test message");
-      }
-    EOS
-
-    assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
-  end
-end
diff --git a/dart@2.1.rb b/dart@2.1.rb
deleted file mode 100644
index d729373..0000000
--- a/dart@2.1.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# typed: false
-# frozen_string_literal: true
-
-class DartAT21 < Formula
-  desc "Dart SDK"
-  homepage "https://dart.dev"
-
-  version "2.1.1"
-  keg_only :versioned_formula
-  if Hardware::CPU.is_64_bit?
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.1.1/sdk/dartsdk-macos-x64-release.zip"
-    sha256 "2f80bbbc16b4cbd872f6e31912aa87a537412f3b417af99003521c8790542887"
-  else
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.1.1/sdk/dartsdk-macos-ia32-release.zip"
-    sha256 "a19a73189f9dc2a3ff4557566c358b01774deab4811706e74e1bddeb43a76048"
-  end
-
-  def install
-    libexec.install Dir["*"]
-    bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
-  end
-
-  def shim_script(target)
-    <<~EOS
-      #!/usr/bin/env bash
-      exec "#{prefix}/#{target}" "$@"
-    EOS
-  end
-
-  def caveats
-    <<~EOS
-      Please note the path to the Dart SDK:
-        #{opt_libexec}
-    EOS
-  end
-
-  test do
-    (testpath/"sample.dart").write <<~EOS
-      void main() {
-        print(r"test message");
-      }
-    EOS
-
-    assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
-  end
-end
diff --git a/dart@2.2.rb b/dart@2.2.rb
deleted file mode 100644
index 7442424..0000000
--- a/dart@2.2.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# typed: false
-# frozen_string_literal: true
-
-class DartAT22 < Formula
-  desc "Dart SDK"
-  homepage "https://dart.dev"
-
-  version "2.2.0"
-  keg_only :versioned_formula
-  if Hardware::CPU.is_64_bit?
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.2.0/sdk/dartsdk-macos-x64-release.zip"
-    sha256 "9438afb49b69ac655882036c214e343232fdcd5af24607e6058e2def33261197"
-  else
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.2.0/sdk/dartsdk-macos-ia32-release.zip"
-    sha256 "78a2da74ea83ee092463a9901467492ef885f6e378353b0a44481fdf40ea81c7"
-  end
-
-  def install
-    libexec.install Dir["*"]
-    bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
-  end
-
-  def shim_script(target)
-    <<~EOS
-      #!/usr/bin/env bash
-      exec "#{prefix}/#{target}" "$@"
-    EOS
-  end
-
-  def caveats
-    <<~EOS
-      Please note the path to the Dart SDK:
-        #{opt_libexec}
-    EOS
-  end
-
-  test do
-    (testpath/"sample.dart").write <<~EOS
-      void main() {
-        print(r"test message");
-      }
-    EOS
-
-    assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
-  end
-end
diff --git a/dart@2.3.rb b/dart@2.3.rb
deleted file mode 100644
index dc86f41..0000000
--- a/dart@2.3.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# typed: false
-# frozen_string_literal: true
-
-class DartAT23 < Formula
-  desc "Dart SDK"
-  homepage "https://dart.dev"
-
-  version "2.3.2"
-  keg_only :versioned_formula
-  if Hardware::CPU.is_64_bit?
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.3.2/sdk/dartsdk-macos-x64-release.zip"
-    sha256 "2643c435c4c8fe1b39c9d73cb63ba8a170ac42609b6e91e08416911bc0418031"
-  else
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.3.2/sdk/dartsdk-macos-ia32-release.zip"
-    sha256 "d92aa28a3c1742130f92e70c0bf767f7c3f6456392d7bc93fdefbfcfbb5a0e99"
-  end
-
-  def install
-    libexec.install Dir["*"]
-    bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
-  end
-
-  def shim_script(target)
-    <<~EOS
-      #!/usr/bin/env bash
-      exec "#{prefix}/#{target}" "$@"
-    EOS
-  end
-
-  def caveats
-    <<~EOS
-      Please note the path to the Dart SDK:
-        #{opt_libexec}
-    EOS
-  end
-
-  test do
-    (testpath/"sample.dart").write <<~EOS
-      void main() {
-        print(r"test message");
-      }
-    EOS
-
-    assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
-  end
-end
diff --git a/dart@2.4.rb b/dart@2.4.rb
deleted file mode 100644
index 85a6c8f..0000000
--- a/dart@2.4.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# typed: false
-# frozen_string_literal: true
-
-class DartAT24 < Formula
-  desc "Dart SDK"
-  homepage "https://dart.dev"
-
-  version "2.4.1"
-  keg_only :versioned_formula
-  if Hardware::CPU.is_64_bit?
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.1/sdk/dartsdk-macos-x64-release.zip"
-    sha256 "62006127bd3acd1b7eb2e4fc7baed061eb19b80c4ba4af481db5244a081fff3e"
-  else
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.4.1/sdk/dartsdk-macos-ia32-release.zip"
-    sha256 "3591578902f3b3ee155aa90bf893f3d0b50fd12567454a8f980440fa8dd1ff23"
-  end
-
-  def install
-    libexec.install Dir["*"]
-    bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
-  end
-
-  def shim_script(target)
-    <<~EOS
-      #!/usr/bin/env bash
-      exec "#{prefix}/#{target}" "$@"
-    EOS
-  end
-
-  def caveats
-    <<~EOS
-      Please note the path to the Dart SDK:
-        #{opt_libexec}
-    EOS
-  end
-
-  test do
-    (testpath/"sample.dart").write <<~EOS
-      void main() {
-        print(r"test message");
-      }
-    EOS
-
-    assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
-  end
-end
diff --git a/dart@2.5.rb b/dart@2.5.rb
deleted file mode 100644
index d39587f..0000000
--- a/dart@2.5.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# typed: false
-# frozen_string_literal: true
-
-class DartAT25 < Formula
-  desc "Dart SDK"
-  homepage "https://dart.dev"
-
-  version "2.5.2"
-  keg_only :versioned_formula
-  if Hardware::CPU.is_64_bit?
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.5.2/sdk/dartsdk-macos-x64-release.zip"
-    sha256 "b433b05ce353d3683c53632fdafd053aaab6c49014c8702fa63936cdc43ea8d6"
-  else
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.5.2/sdk/dartsdk-macos-ia32-release.zip"
-    sha256 "f5c3f7b001a734726140e8941f0768f3365193d27024a762b769d7c03304064f"
-  end
-
-  def install
-    libexec.install Dir["*"]
-    bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
-  end
-
-  def shim_script(target)
-    <<~EOS
-      #!/usr/bin/env bash
-      exec "#{prefix}/#{target}" "$@"
-    EOS
-  end
-
-  def caveats
-    <<~EOS
-      Please note the path to the Dart SDK:
-        #{opt_libexec}
-    EOS
-  end
-
-  test do
-    (testpath/"sample.dart").write <<~EOS
-      void main() {
-        print(r"test message");
-      }
-    EOS
-
-    assert_equal "test message\n", shell_output("#{bin}/dart sample.dart")
-  end
-end
diff --git a/dart@2.rb b/dart@2.rb
deleted file mode 100644
index f2ba0b2..0000000
--- a/dart@2.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# typed: false
-# frozen_string_literal: true
-
-class DartAT2 < Formula
-  desc "Dart 2 SDK"
-  homepage "https://dart.dev"
-  version "2.0.0"
-
-  keg_only :versioned_formula
-
-  if Hardware::CPU.is_64_bit?
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-macos-x64-release.zip"
-    sha256 "7cb9e65cea94ce23b05af4e5224ec416b26c3fb6bf0718778b68f6a73e617cc3"
-  else
-    url "https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-macos-ia32-release.zip"
-    sha256 "da55f8fce70ca46e97304810406c89f039464be909b9b92f13986ce918da6775"
-  end
-  def install
-    libexec.install Dir["*"]
-    bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
-  end
-
-  def caveats
-    <<~EOS
-      The dart@2 tap is now unneeded.  Both stable and dev versions of the regular dart tap are on Dart 2 now.
-      The dart@2 tap will be removed at some point in the future.
-
-      Please note the path to the Dart SDK:
-        #{opt_libexec}
-    EOS
-  end
-
-  test do
-    (testpath/"sample.dart").write <<~EOS
-      void main() {
-        print(r"test message");
-      }
-    EOS
-
-    assert_equal "test message
-", shell_output("#{bin}/dart sample.dart")
-  end
-end
diff --git a/lib/update_homebrew.dart b/lib/update_homebrew.dart
index e38e51f..6dc44a3 100644
--- a/lib/update_homebrew.dart
+++ b/lib/update_homebrew.dart
@@ -12,9 +12,9 @@
 const githubRepo = 'dart-lang/homebrew-dart';
 
 const formulaByChannel = {
-  'beta': 'dart-beta.rb',
-  'dev': 'dart.rb',
-  'stable': 'dart.rb'
+  'beta': 'Formula/dart-beta.rb',
+  'dev': 'Formula/dart.rb',
+  'stable': 'Formula/dart.rb'
 };
 
 Iterable<String> get supportedChannels => formulaByChannel.keys;