Repository: PrefectHQ/prefect

Issue:
Explore using coveralls
[Coveralls](https://coveralls.io/) is a service for hosting coverage reports of repositories.  We currently create a custom website for displaying our coverage here: https://github.com/PrefectHQ/prefect/blob/master/docs/generate_docs.py#L259
and hosted here:
https://docs.prefect.io/api/unreleased/coverage.html

This is fine, but routinely causes warnings in our netlify builds.  In addition to not having to maintain this custom code anymore, we could gain:
- tracking our coverage _across time_
- a nice badge prominently displaying our coverage numbers
- the ability to merge coverage reports across different runs (this is important for tracking coverage across many task library tasks which are tested in different CI jobs, e.g., `AirflowTask`)


Discussion:
After digging into this more, I'm actually reversing my position and leaning towards https://codecov.io/ instead.  The documentation for coveralls is really poor.

Resolving patch:
diff --git a/docs/generate_docs.py b/docs/generate_docs.py
--- a/docs/generate_docs.py
+++ b/docs/generate_docs.py
@@ -256,43 +256,6 @@ def format_subheader(obj, level=1, in_table=False):
     return call_sig
 
 
-def generate_coverage():
-    """
-    Generates a coverage report in a subprocess; if one already exists,
-    will _not_ recreate for the sake of efficiency
-    """
-
-    # write file for VuePress
-    with open("api/unreleased/coverage.md", "w+") as f:
-        f.write(
-            textwrap.dedent(
-                """
-            ---
-            title: Test Coverage
-            ---
-
-            # Unit test coverage report
-
-            To view the test coverage report, <a href="/prefect-coverage/">click here</a>.
-            """
-            ).lstrip()
-        )
-
-    # abort if coverage report already exists
-    if os.path.exists(".vuepress/public/prefect-coverage"):
-        return
-
-    try:
-        tests = subprocess.check_output(
-            "cd .. && coverage run `which pytest` && coverage html --directory=docs/.vuepress/public/prefect-coverage/",
-            shell=True,
-        )
-        if "failed" in tests.decode():
-            warnings.warn("Some tests failed.")
-    except subprocess.CalledProcessError as exc:
-        warnings.warn(f"Coverage report was not generated: {exc.output}")
-
-
 def get_class_methods(obj):
     members = inspect.getmembers(
         obj, predicate=lambda x: inspect.isroutine(x) and obj.__name__ in x.__qualname__
@@ -359,7 +322,22 @@ def create_tutorial_notebooks(tutorial):
 
     shutil.rmtree("api/unreleased", ignore_errors=True)
     os.makedirs("api/unreleased", exist_ok=True)
-    generate_coverage()
+
+    ## write link to hosted coverage reports
+    with open("api/unreleased/coverage.md", "w+") as f:
+        f.write(
+            textwrap.dedent(
+                """
+            ---
+            title: Test Coverage
+            ---
+
+            # Unit test coverage report
+
+            To view test coverage reports, <a href="https://codecov.io/gh/PrefectHQ/prefect">click here</a>.
+            """
+            ).lstrip()
+        )
 
     ## UPDATE README
     with open("api/unreleased/README.md", "w+") as f:


Test patch: