diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
 # CHANGELOG
 
+ -  0.2.1.1 (2023-02-26)
+     *  Bump `aeson` dependency upper bound to 2.1.
+     *  Tested with GHC 8.4 - 9.6.1 alpha3.
+
+ -  0.2.1 (2022-04-12, github release only)
+     *  Print summary line at the end of the TAP format.
+     *  Add `--version` option (by Andreas Abel).
+     *  Include testsuite in package (by Andreas Abel).
+     *  Tested with GHC 8.4 - 9.2.
+
  -  0.2.0 (2021-05-24)
      *  Change output to [Test Anything Protocol](https://testanything.org/).
      *  Add `working_directory` field (by Beatrice Vergani).
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -212,7 +212,10 @@
 
 ## Installation
 
-Installation through source is done using standard Haskell tooling -- [Cabal]
+Binaries for Mac OS and Linux are available on the
+[releases page](https://github.com/fugue/goldplate/releases).
+
+Installation from source is done using standard Haskell tooling -- [Cabal]
 and [stack] both work well.
 
 ### Using stack
diff --git a/goldplate.cabal b/goldplate.cabal
--- a/goldplate.cabal
+++ b/goldplate.cabal
@@ -1,10 +1,10 @@
 Name:          goldplate
-Version:       0.2.0
+Version:       0.2.1.1
 Synopsis:      A lightweight golden test runner
 License:       Apache-2.0
 License-file:  LICENSE
 Author:        Jasper Van der Jeugt <jasper@fugue.co>
-Maintainer:    Jasper Van der Jeugt <jasper@fugue.co>
+Maintainer:    Jasper Van der Jeugt <jasper@fugue.co>, Andreas Abel
 Copyright:     2019-2021 Fugue, Inc
 Homepage:      https://github.com/fugue/goldplate
 Bug-reports:   https://github.com/fugue/goldplate/issues
@@ -14,8 +14,11 @@
 Description:   Language-agnostic golden test runner for command-line applications.
 
 Tested-with:
-  GHC == 9.0.1
-  GHC == 8.10.4
+  GHC == 9.6.0
+  GHC == 9.4.4
+  GHC == 9.2.6
+  GHC == 9.0.2
+  GHC == 8.10.7
   GHC == 8.8.4
   GHC == 8.6.5
   GHC == 8.4.4
@@ -31,7 +34,7 @@
 Source-repository this
   type:     git
   location: git://github.com/fugue/goldplate.git
-  tag:      v0.2.0
+  tag:      v0.2.1.1
 
 Executable goldplate
   Hs-source-dirs:    src
@@ -45,7 +48,7 @@
     Paths_goldplate
 
   Build-depends:
-    aeson                >= 1.4  && < 1.6,
+    aeson                >= 1.4  && < 2.2,
     aeson-pretty         >= 0.8  && < 0.9,
     async                >= 2.2  && < 2.3,
     base                 >= 4.11 && < 5,
@@ -54,8 +57,17 @@
     directory            >= 1.3  && < 1.4,
     filepath             >= 1.4  && < 1.5,
     Glob                 >= 0.10 && < 0.11,
-    optparse-applicative >= 0.14 && < 0.17,
+    optparse-applicative >= 0.14 && < 0.18,
     process              >= 1.6  && < 1.7,
     regex-pcre-builtin   >= 0.95.1.3 && < 0.96,
-    text                 >= 1.2  && < 1.3,
+    text                 >= 1.2  && < 2.1,
     unordered-containers >= 0.2  && < 0.3
+
+Test-suite tests
+  Default-language:   Haskell2010
+  Type:               exitcode-stdio-1.0
+  Ghc-options:        -threaded
+  Main-is:            Tests.hs
+  Build-depends:      base, process
+  Build-tool-depends: goldplate:goldplate
+  Hs-source-dirs:     tests
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -200,7 +200,7 @@
         mkAbsoluteWorkDir dir | FP.isRelative dir = specDirectory FP.</> dir
                               | otherwise         = dir
 
-        workDirectory = maybe specDirectory mkAbsoluteWorkDir (specWorkDir spec) 
+        workDirectory = maybe specDirectory mkAbsoluteWorkDir (specWorkDir spec)
 
     -- Compute initial environment to get input files.
     env0 <- getEnvironment
@@ -480,9 +480,17 @@
             OA.help    "Number of worker jobs")
 
 parserInfo :: OA.ParserInfo Options
-parserInfo = OA.info (OA.helper <*> parseOptions) $
+parserInfo = OA.info (OA.helper <*> versionOption <*> parseOptions) $
     OA.fullDesc <>
-    OA.header ("goldplate v" <> showVersion version)
+    OA.header goldplateVersion
+  where
+  versionOption = OA.infoOption goldplateVersion $
+    OA.long    "version" <>
+    OA.short   'V'       <>
+    OA.help    "Show version info" <>
+    OA.hidden
+  goldplateVersion :: String
+  goldplateVersion = "goldplate v" <> showVersion version
 
 --------------------------------------------------------------------------------
 
@@ -504,7 +512,7 @@
 main :: IO ()
 main = do
     options <- OA.execParser parserInfo
-    failed  <- IORef.newIORef False
+    failed  <- IORef.newIORef (0 :: Int)
     env     <- Env
         <$> makeLogger (oVerbose options)
         <*> pure (oDiff options)
@@ -542,9 +550,13 @@
         executionResult <- runExecution env execution
         forM_ (specAsserts $ executionSpec execution) $ \assert -> do
             assertResult <- runAssert env execution executionResult assert
-            unless (arOk assertResult) $ IORef.writeIORef failed True
+            unless (arOk assertResult) $ IORef.atomicModifyIORef' failed $
+                \x -> (x + 1, ())
             logOut (envLogger env) $ assertResultToTap assertResult
 
     -- Report summary.
-    hasFailed <- IORef.readIORef failed
-    when hasFailed exitFailure
+    numFailed <- IORef.readIORef failed
+    logOut (envLogger env) . pure $
+        "# goldplate ran " ++ show numAsserts ++ " asserts, " ++
+        (if numFailed > 0 then show numFailed ++ " failed" else "all OK")
+    when (numFailed > 0) exitFailure
diff --git a/tests/Tests.hs b/tests/Tests.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tests.hs
@@ -0,0 +1,5 @@
+import System.Exit     ( exitWith  )
+import System.Process  ( system    )
+
+main :: IO ()
+main = exitWith =<< system ("goldplate tests")
