From ad6b5fc1141aa8cae09ae9c53c9fe0e090de0693 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:13:29 +0200
Subject: [PATCH 01/26] Remove duplicated LICENSE file

---
 LICENSE | 201 --------------------------------------------------------
 1 file changed, 201 deletions(-)
 delete mode 100644 LICENSE

diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index f0e1a4d7..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright (C) 2016-2020 47 Degrees. <http://47deg.com>
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
\ No newline at end of file

From 4532dee2a7d646d80656a172236d5a65dda6db40 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:18:06 +0200
Subject: [PATCH 02/26] These comments aren't needed anymore

---
 .docs/README.md   | 8 --------
 README.md         | 9 ---------
 docs/docs/docs.md | 4 ----
 3 files changed, 21 deletions(-)

diff --git a/.docs/README.md b/.docs/README.md
index bd5f9aa3..06973375 100644
--- a/.docs/README.md
+++ b/.docs/README.md
@@ -1,11 +1,7 @@
 # Fetch
 
-[comment]: # (Start Badges)
-
 [![Join the chat at https://gitter.im/47deg/fetch](https://badges.gitter.im/47deg/fetch.svg)](https://gitter.im/47deg/fetch?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![codecov.io](http://codecov.io/github/47deg/fetch/coverage.svg?branch=master)](http://codecov.io/github/47deg/fetch?branch=master) [![Maven Central](https://img.shields.io/badge/maven%20central-1.2.1-green.svg)](https://oss.sonatype.org/#nexus-search;gav~com.47deg~fetch*) [![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/47deg/fetch/master/LICENSE) [![Latest version](https://img.shields.io/badge/fetch-1.2.1-green.svg)](https://index.scala-lang.org/47deg/fetch) [![Scala.js](http://scala-js.org/assets/badges/scalajs-0.6.15.svg)](http://scala-js.org) [![GitHub Issues](https://img.shields.io/github/issues/47deg/fetch.svg)](https://github.com/47deg/fetch/issues)
 
-[comment]: # (End Badges)
-
 A library for Simple & Efficient data access in Scala and Scala.js
 
 - [Documentation](https://47degrees.github.io/fetch/docs)
@@ -16,8 +12,6 @@ Add the following dependency to your project's build file.
 
 For Scala 2.11.x and 2.12.x:
 
-[comment]: # (Start Replace)
-
 ```scala
 "com.47deg" %% "fetch" % "@VERSION@"
 ```
@@ -28,8 +22,6 @@ Or, if using Scala.js (0.6.x):
 "com.47deg" %%% "fetch" % "@VERSION@"
 ```
 
-[comment]: # (End Replace)
-
 ```scala mdoc:invisible
 val out = Console.out
 
diff --git a/README.md b/README.md
index f2a53ad6..49b9c6bc 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,7 @@
 # Fetch
 
-[comment]: # (Start Badges)
-
 [![Join the chat at https://gitter.im/47deg/fetch](https://badges.gitter.im/47deg/fetch.svg)](https://gitter.im/47deg/fetch?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![codecov.io](http://codecov.io/github/47deg/fetch/coverage.svg?branch=master)](http://codecov.io/github/47deg/fetch?branch=master) [![Maven Central](https://img.shields.io/badge/maven%20central-1.2.1-green.svg)](https://oss.sonatype.org/#nexus-search;gav~com.47deg~fetch*) [![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/47deg/fetch/master/LICENSE) [![Latest version](https://img.shields.io/badge/fetch-1.2.1-green.svg)](https://index.scala-lang.org/47deg/fetch) [![Scala.js](http://scala-js.org/assets/badges/scalajs-0.6.15.svg)](http://scala-js.org) [![GitHub Issues](https://img.shields.io/github/issues/47deg/fetch.svg)](https://github.com/47deg/fetch/issues)
 
-[comment]: # (End Badges)
-
 A library for Simple & Efficient data access in Scala and Scala.js
 
 - [Documentation](https://47degrees.github.io/fetch/docs)
@@ -16,8 +12,6 @@ Add the following dependency to your project's build file.
 
 For Scala 2.11.x and 2.12.x:
 
-[comment]: # (Start Replace)
-
 ```scala
 "com.47deg" %% "fetch" % "1.3.0"
 ```
@@ -28,9 +22,6 @@ Or, if using Scala.js (0.6.x):
 "com.47deg" %%% "fetch" % "1.3.0"
 ```
 
-[comment]: # (End Replace)
-
-
 ## Remote data
 
 Fetch is a library for making access to data both simple and efficient. Fetch is especially useful when querying data that
diff --git a/docs/docs/docs.md b/docs/docs/docs.md
index 10547e20..08e5a573 100644
--- a/docs/docs/docs.md
+++ b/docs/docs/docs.md
@@ -28,8 +28,6 @@ we read) concerns.
 
 To begin, add the following dependency to your SBT build file:
 
-[comment]: # (Start Replace)
-
 ```scala
 "com.47deg" %% "fetch" % "@VERSION@"
 ```
@@ -40,8 +38,6 @@ Or, if using Scala.js:
 "com.47deg" %%% "fetch" % "@VERSION@"
 ```
 
-[comment]: # (End Replace)
-
 Now you'll have Fetch available in both Scala and Scala.js.
 
 ```scala mdoc:invisible

From cbfea2393fe1eaa99a89bddd1bf7e368feb2eb0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:19:15 +0200
Subject: [PATCH 03/26] This setting isn't needed (it's provided by sbt-github)

---
 project/ProjectPlugin.scala | 1 -
 1 file changed, 1 deletion(-)

diff --git a/project/ProjectPlugin.scala b/project/ProjectPlugin.scala
index 93fb6675..f08ae5a0 100644
--- a/project/ProjectPlugin.scala
+++ b/project/ProjectPlugin.scala
@@ -83,7 +83,6 @@ object ProjectPlugin extends AutoPlugin {
     Seq(
       organization := "com.47deg",
       crossScalaVersions := Seq("2.12.11", "2.13.1"),
-      startYear := Option(2016),
       scalacOptions := {
         val withStripedLinter = scalacOptions.value filterNot Set("-Xlint", "-Xfuture").contains
         (CrossVersion.partialVersion(scalaBinaryVersion.value) match {

From 8013992dadccc05cacc5d7157ba651d125633c52 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:20:58 +0200
Subject: [PATCH 04/26] Add table of contents to README

---
 .docs/README.md |  3 +++
 README.md       | 11 +++++++++++
 2 files changed, 14 insertions(+)

diff --git a/.docs/README.md b/.docs/README.md
index 06973375..dbf22ab5 100644
--- a/.docs/README.md
+++ b/.docs/README.md
@@ -6,6 +6,9 @@ A library for Simple & Efficient data access in Scala and Scala.js
 
 - [Documentation](https://47degrees.github.io/fetch/docs)
 
+```scala mdoc:toc
+```
+
 ## Installation
 
 Add the following dependency to your project's build file.
diff --git a/README.md b/README.md
index 49b9c6bc..9df6cce3 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,17 @@ A library for Simple & Efficient data access in Scala and Scala.js
 
 - [Documentation](https://47degrees.github.io/fetch/docs)
 
+---
+
+- [Installation](#installation)
+- [Remote data](#remote-data)
+- [Define your data sources](#define-your-data-sources)
+- [Creating a runtime](#creating-a-runtime)
+- [Creating and running a fetch](#creating-and-running-a-fetch)
+- [Batching](#batching)
+- [Parallelism](#parallelism)
+- [Caching](#caching)
+
 ## Installation
 
 Add the following dependency to your project's build file.

From 3f6cb4d8b6df1c5c43bb1fcdf9506c37d312a934 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:24:06 +0200
Subject: [PATCH 05/26] This is already the default setting

---
 project/ProjectPlugin.scala | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/project/ProjectPlugin.scala b/project/ProjectPlugin.scala
index f08ae5a0..3465e8c9 100644
--- a/project/ProjectPlugin.scala
+++ b/project/ProjectPlugin.scala
@@ -2,7 +2,6 @@ import microsites.MicrositesPlugin.autoImport._
 import com.typesafe.sbt.site.SitePlugin.autoImport._
 import sbt.Keys._
 import sbt._
-import scoverage.ScoverageKeys
 import com.alejandrohdezma.sbt.github.SbtGithubPlugin
 import microsites._
 
@@ -103,8 +102,7 @@ object ProjectPlugin extends AutoPlugin {
       ) ++ (CrossVersion.partialVersion(scalaVersion.value) match {
         case Some((2, 13)) => Seq()
         case _             => Seq("-Ypartial-unification")
-      }),
-      ScoverageKeys.coverageFailOnMinimum := false
+      })
     )
 
 }

From 24a1113e61f652bbb709bf46475c51cd647bdcc0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:24:30 +0200
Subject: [PATCH 06/26] There is no need to require this plugin

---
 project/ProjectPlugin.scala | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/project/ProjectPlugin.scala b/project/ProjectPlugin.scala
index 3465e8c9..45e62ccb 100644
--- a/project/ProjectPlugin.scala
+++ b/project/ProjectPlugin.scala
@@ -2,15 +2,12 @@ import microsites.MicrositesPlugin.autoImport._
 import com.typesafe.sbt.site.SitePlugin.autoImport._
 import sbt.Keys._
 import sbt._
-import com.alejandrohdezma.sbt.github.SbtGithubPlugin
 import microsites._
 
 object ProjectPlugin extends AutoPlugin {
 
   override def trigger: PluginTrigger = allRequirements
 
-  override def requires: Plugins = SbtGithubPlugin
-
   object autoImport {
 
     lazy val commonCrossDependencies =

From 9ac267ae9c6cffb597ac5f41e91704ec10b2c802 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:25:44 +0200
Subject: [PATCH 07/26] Update plugins to latest version

---
 project/plugins.sbt | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/project/plugins.sbt b/project/plugins.sbt
index 20162d90..ac10afc7 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -2,11 +2,11 @@ addSbtPlugin("com.geirsson"         % "sbt-ci-release"           % "1.5.3")
 addSbtPlugin("org.portable-scala"   % "sbt-scalajs-crossproject" % "1.0.0")
 addSbtPlugin("org.scala-js"         % "sbt-scalajs"              % "1.0.1")
 addSbtPlugin("org.scalameta"        % "sbt-scalafmt"             % "2.4.0")
-addSbtPlugin("com.47deg"            % "sbt-microsites"           % "1.2.0")
+addSbtPlugin("com.47deg"            % "sbt-microsites"           % "1.2.1")
 addSbtPlugin("org.scoverage"        % "sbt-scoverage"            % "1.6.1")
-addSbtPlugin("org.scalameta"        % "sbt-mdoc"                 % "2.1.5")
+addSbtPlugin("org.scalameta"        % "sbt-mdoc"                 % "2.2.0")
 addSbtPlugin("de.heikoseeberger"    % "sbt-header"               % "5.6.0")
-addSbtPlugin("com.alejandrohdezma" %% "sbt-github"               % "0.8.0")
-addSbtPlugin("com.alejandrohdezma"  % "sbt-github-header"        % "0.8.0")
-addSbtPlugin("com.alejandrohdezma"  % "sbt-github-mdoc"          % "0.8.0")
+addSbtPlugin("com.alejandrohdezma" %% "sbt-github"               % "0.8.2")
+addSbtPlugin("com.alejandrohdezma"  % "sbt-github-header"        % "0.8.2")
+addSbtPlugin("com.alejandrohdezma"  % "sbt-github-mdoc"          % "0.8.2")
 addSbtPlugin("com.alejandrohdezma"  % "sbt-mdoc-toc"             % "0.2")

From c25d923b6d799af6152c2a9b5c890cc77aa8fba4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:26:04 +0200
Subject: [PATCH 08/26] These are already provided in latest version of
 sbt-microsites

---
 project/ProjectPlugin.scala | 2 --
 1 file changed, 2 deletions(-)

diff --git a/project/ProjectPlugin.scala b/project/ProjectPlugin.scala
index 45e62ccb..54d27268 100644
--- a/project/ProjectPlugin.scala
+++ b/project/ProjectPlugin.scala
@@ -25,8 +25,6 @@ object ProjectPlugin extends AutoPlugin {
       micrositeDescription := "Simple & Efficient data fetching",
       micrositeBaseUrl := "fetch",
       micrositeDocumentationUrl := "/fetch/docs",
-      micrositeGithubOwner := "47degrees",
-      micrositeGithubRepo := "fetch",
       micrositeHighlightTheme := "tomorrow",
       micrositeExternalLayoutsDirectory := (resourceDirectory in Compile).value / "microsite" / "_layouts",
       micrositeExternalIncludesDirectory := (resourceDirectory in Compile).value / "microsite" / "_includes",

From 74a8772ff2a17fa96af9c6ccc1cdab0deeabb0cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:34:27 +0200
Subject: [PATCH 09/26] Add `sbt-codecov` and simplify `build.sbt`

---
 build.sbt           | 10 ++--------
 project/plugins.sbt |  1 +
 2 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/build.sbt b/build.sbt
index 546ee859..6383b9cb 100644
--- a/build.sbt
+++ b/build.sbt
@@ -2,14 +2,8 @@ import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}
 
 lazy val checkScalafmt = "+scalafmtCheckAll; +scalafmtSbtCheck;"
 lazy val checkDocs     = "+docs/mdoc;"
-lazy val checkJSTests  = "+fetchJS/test; +debugJS/test;"
-lazy val checkJVMTests =
-  "+coverage; +fetchJVM/test; +debugJVM/test; +examples/test; +coverageReport; +coverageAggregate;"
-
-addCommandAlias(
-  "ci-test",
-  s"$checkScalafmt $checkDocs $checkJSTests $checkJVMTests"
-)
+
+addCommandAlias("ci-test", s"$checkScalafmt $checkDocs testCovered")
 addCommandAlias("ci-docs", "project-docs/mdoc; headerCreateAll")
 addCommandAlias("ci-microsite", "docs/publishMicrosite")
 
diff --git a/project/plugins.sbt b/project/plugins.sbt
index ac10afc7..9a623aeb 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -6,6 +6,7 @@ addSbtPlugin("com.47deg"            % "sbt-microsites"           % "1.2.1")
 addSbtPlugin("org.scoverage"        % "sbt-scoverage"            % "1.6.1")
 addSbtPlugin("org.scalameta"        % "sbt-mdoc"                 % "2.2.0")
 addSbtPlugin("de.heikoseeberger"    % "sbt-header"               % "5.6.0")
+addSbtPlugin("com.alejandrohdezma" %% "sbt-codecov"              % "0.2.0")
 addSbtPlugin("com.alejandrohdezma" %% "sbt-github"               % "0.8.2")
 addSbtPlugin("com.alejandrohdezma"  % "sbt-github-header"        % "0.8.2")
 addSbtPlugin("com.alejandrohdezma"  % "sbt-github-mdoc"          % "0.8.2")

From d37aae7846383f249d89bc755c68e658bde19a86 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:41:16 +0200
Subject: [PATCH 10/26] There is no need to call Scalafmt with
 cross-compilation

---
 build.sbt | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/build.sbt b/build.sbt
index 6383b9cb..4965c9ed 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,9 +1,8 @@
 import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}
 
-lazy val checkScalafmt = "+scalafmtCheckAll; +scalafmtSbtCheck;"
 lazy val checkDocs     = "+docs/mdoc;"
 
-addCommandAlias("ci-test", s"$checkScalafmt $checkDocs testCovered")
+addCommandAlias("ci-test", s"scalafmtCheckAll; scalafmtSbtCheck; $checkDocs testCovered")
 addCommandAlias("ci-docs", "project-docs/mdoc; headerCreateAll")
 addCommandAlias("ci-microsite", "docs/publishMicrosite")
 

From 6eae904a15b34ab72cd850ad8857a0ff1b80f0ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:42:23 +0200
Subject: [PATCH 11/26] Simplify `build.sbt`

---
 build.sbt | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/build.sbt b/build.sbt
index 4965c9ed..cf8da001 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,8 +1,6 @@
 import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}
 
-lazy val checkDocs     = "+docs/mdoc;"
-
-addCommandAlias("ci-test", s"scalafmtCheckAll; scalafmtSbtCheck; $checkDocs testCovered")
+addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; +mdoc; testCovered")
 addCommandAlias("ci-docs", "project-docs/mdoc; headerCreateAll")
 addCommandAlias("ci-microsite", "docs/publishMicrosite")
 

From 74ec2bdfb5603b635cf65e274038fa9371d0a989 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Sun, 24 May 2020 09:42:37 +0200
Subject: [PATCH 12/26] This import isn't needed

---
 build.sbt | 2 --
 1 file changed, 2 deletions(-)

diff --git a/build.sbt b/build.sbt
index cf8da001..1be3cc42 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,5 +1,3 @@
-import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}
-
 addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; +mdoc; testCovered")
 addCommandAlias("ci-docs", "project-docs/mdoc; headerCreateAll")
 addCommandAlias("ci-microsite", "docs/publishMicrosite")

From 52800e93c0f2394735f0756d7863ee4d2692adb5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 08:16:06 +0200
Subject: [PATCH 13/26] Avoid publishing root project

---
 build.sbt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/build.sbt b/build.sbt
index 1be3cc42..7755d5cc 100644
--- a/build.sbt
+++ b/build.sbt
@@ -6,6 +6,7 @@ lazy val root = project
   .in(file("."))
   .settings(name := "fetch")
   .settings(moduleName := "root")
+  .settings(skip in publish := true)
   .aggregate(fetchJS, fetchJVM, debugJVM, debugJS)
 
 lazy val fetch = crossProject(JSPlatform, JVMPlatform)

From dfde3306e4dd7b7e80e4d1e1837af8743d61602f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 08:16:47 +0200
Subject: [PATCH 14/26] Having two projects with the same `baseDirectory` is
 discouraged in SBT

---
 build.sbt                                              | 10 +---------
 {shared => fetch/shared}/src/main/scala/cache.scala    |  0
 .../shared}/src/main/scala/datasource.scala            |  0
 .../shared}/src/main/scala/execution.scala             |  0
 {shared => fetch/shared}/src/main/scala/fetch.scala    |  0
 {shared => fetch/shared}/src/main/scala/log.scala      |  0
 {shared => fetch/shared}/src/main/scala/syntax.scala   |  0
 .../shared}/src/test/scala/FetchAsyncQueryTests.scala  |  0
 .../shared}/src/test/scala/FetchBatchingTests.scala    |  0
 .../shared}/src/test/scala/FetchReportingTests.scala   |  0
 .../shared}/src/test/scala/FetchSpec.scala             |  0
 .../shared}/src/test/scala/FetchSyntaxTests.scala      |  0
 .../shared}/src/test/scala/FetchTests.scala            |  0
 .../shared}/src/test/scala/TestHelper.scala            |  0
 14 files changed, 1 insertion(+), 9 deletions(-)
 rename {shared => fetch/shared}/src/main/scala/cache.scala (100%)
 rename {shared => fetch/shared}/src/main/scala/datasource.scala (100%)
 rename {shared => fetch/shared}/src/main/scala/execution.scala (100%)
 rename {shared => fetch/shared}/src/main/scala/fetch.scala (100%)
 rename {shared => fetch/shared}/src/main/scala/log.scala (100%)
 rename {shared => fetch/shared}/src/main/scala/syntax.scala (100%)
 rename {shared => fetch/shared}/src/test/scala/FetchAsyncQueryTests.scala (100%)
 rename {shared => fetch/shared}/src/test/scala/FetchBatchingTests.scala (100%)
 rename {shared => fetch/shared}/src/test/scala/FetchReportingTests.scala (100%)
 rename {shared => fetch/shared}/src/test/scala/FetchSpec.scala (100%)
 rename {shared => fetch/shared}/src/test/scala/FetchSyntaxTests.scala (100%)
 rename {shared => fetch/shared}/src/test/scala/FetchTests.scala (100%)
 rename {shared => fetch/shared}/src/test/scala/TestHelper.scala (100%)

diff --git a/build.sbt b/build.sbt
index 7755d5cc..4a50506c 100644
--- a/build.sbt
+++ b/build.sbt
@@ -2,18 +2,10 @@ addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; +mdoc; testCover
 addCommandAlias("ci-docs", "project-docs/mdoc; headerCreateAll")
 addCommandAlias("ci-microsite", "docs/publishMicrosite")
 
-lazy val root = project
-  .in(file("."))
-  .settings(name := "fetch")
-  .settings(moduleName := "root")
-  .settings(skip in publish := true)
-  .aggregate(fetchJS, fetchJVM, debugJVM, debugJS)
+skip in publish := true
 
 lazy val fetch = crossProject(JSPlatform, JVMPlatform)
-  .in(file("."))
-  .settings(name := "fetch")
   .settings(commonCrossDependencies)
-
 lazy val fetchJVM = fetch.jvm
 lazy val fetchJS  = fetch.js.disablePlugins(ScoverageSbtPlugin)
 
diff --git a/shared/src/main/scala/cache.scala b/fetch/shared/src/main/scala/cache.scala
similarity index 100%
rename from shared/src/main/scala/cache.scala
rename to fetch/shared/src/main/scala/cache.scala
diff --git a/shared/src/main/scala/datasource.scala b/fetch/shared/src/main/scala/datasource.scala
similarity index 100%
rename from shared/src/main/scala/datasource.scala
rename to fetch/shared/src/main/scala/datasource.scala
diff --git a/shared/src/main/scala/execution.scala b/fetch/shared/src/main/scala/execution.scala
similarity index 100%
rename from shared/src/main/scala/execution.scala
rename to fetch/shared/src/main/scala/execution.scala
diff --git a/shared/src/main/scala/fetch.scala b/fetch/shared/src/main/scala/fetch.scala
similarity index 100%
rename from shared/src/main/scala/fetch.scala
rename to fetch/shared/src/main/scala/fetch.scala
diff --git a/shared/src/main/scala/log.scala b/fetch/shared/src/main/scala/log.scala
similarity index 100%
rename from shared/src/main/scala/log.scala
rename to fetch/shared/src/main/scala/log.scala
diff --git a/shared/src/main/scala/syntax.scala b/fetch/shared/src/main/scala/syntax.scala
similarity index 100%
rename from shared/src/main/scala/syntax.scala
rename to fetch/shared/src/main/scala/syntax.scala
diff --git a/shared/src/test/scala/FetchAsyncQueryTests.scala b/fetch/shared/src/test/scala/FetchAsyncQueryTests.scala
similarity index 100%
rename from shared/src/test/scala/FetchAsyncQueryTests.scala
rename to fetch/shared/src/test/scala/FetchAsyncQueryTests.scala
diff --git a/shared/src/test/scala/FetchBatchingTests.scala b/fetch/shared/src/test/scala/FetchBatchingTests.scala
similarity index 100%
rename from shared/src/test/scala/FetchBatchingTests.scala
rename to fetch/shared/src/test/scala/FetchBatchingTests.scala
diff --git a/shared/src/test/scala/FetchReportingTests.scala b/fetch/shared/src/test/scala/FetchReportingTests.scala
similarity index 100%
rename from shared/src/test/scala/FetchReportingTests.scala
rename to fetch/shared/src/test/scala/FetchReportingTests.scala
diff --git a/shared/src/test/scala/FetchSpec.scala b/fetch/shared/src/test/scala/FetchSpec.scala
similarity index 100%
rename from shared/src/test/scala/FetchSpec.scala
rename to fetch/shared/src/test/scala/FetchSpec.scala
diff --git a/shared/src/test/scala/FetchSyntaxTests.scala b/fetch/shared/src/test/scala/FetchSyntaxTests.scala
similarity index 100%
rename from shared/src/test/scala/FetchSyntaxTests.scala
rename to fetch/shared/src/test/scala/FetchSyntaxTests.scala
diff --git a/shared/src/test/scala/FetchTests.scala b/fetch/shared/src/test/scala/FetchTests.scala
similarity index 100%
rename from shared/src/test/scala/FetchTests.scala
rename to fetch/shared/src/test/scala/FetchTests.scala
diff --git a/shared/src/test/scala/TestHelper.scala b/fetch/shared/src/test/scala/TestHelper.scala
similarity index 100%
rename from shared/src/test/scala/TestHelper.scala
rename to fetch/shared/src/test/scala/TestHelper.scala

From b7dce3f621db0cfd13c74f292e3623d93b04b02f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 13:49:32 +0200
Subject: [PATCH 15/26] Simplify `build.sbt` by putting projects where SBT is
 expecting them

---
 build.sbt                                            | 12 ++++--------
 .../shared/src/main/scala/debug.scala                |  0
 .../shared/src/main/scala/document.scala             |  0
 .../src/test/scala/DoobieExample.scala               |  0
 .../src/test/scala/GithubExample.scala               |  0
 .../src/test/scala/GraphQLExample.scala              |  0
 .../src/test/scala/Http4sExample.scala               |  0
 .../src/test/scala/JedisExample.scala                |  0
 .../src/test/scala/MonixExample.scala                |  0
 9 files changed, 4 insertions(+), 8 deletions(-)
 rename {debug => fetch-debug}/shared/src/main/scala/debug.scala (100%)
 rename {debug => fetch-debug}/shared/src/main/scala/document.scala (100%)
 rename {examples => fetch-examples}/src/test/scala/DoobieExample.scala (100%)
 rename {examples => fetch-examples}/src/test/scala/GithubExample.scala (100%)
 rename {examples => fetch-examples}/src/test/scala/GraphQLExample.scala (100%)
 rename {examples => fetch-examples}/src/test/scala/Http4sExample.scala (100%)
 rename {examples => fetch-examples}/src/test/scala/JedisExample.scala (100%)
 rename {examples => fetch-examples}/src/test/scala/MonixExample.scala (100%)

diff --git a/build.sbt b/build.sbt
index 4a50506c..a8a3315d 100644
--- a/build.sbt
+++ b/build.sbt
@@ -9,17 +9,13 @@ lazy val fetch = crossProject(JSPlatform, JVMPlatform)
 lazy val fetchJVM = fetch.jvm
 lazy val fetchJS  = fetch.js.disablePlugins(ScoverageSbtPlugin)
 
-lazy val debug = crossProject(JSPlatform, JVMPlatform)
-  .in(file("debug"))
-  .settings(name := "fetch-debug")
+lazy val `fetch-debug` = crossProject(JSPlatform, JVMPlatform)
   .dependsOn(fetch)
   .settings(commonCrossDependencies)
+lazy val debugJVM = `fetch-debug`.jvm
+lazy val debugJS  = `fetch-debug`.js.disablePlugins(ScoverageSbtPlugin)
 
-lazy val debugJVM = debug.jvm
-lazy val debugJS  = debug.js.disablePlugins(ScoverageSbtPlugin)
-
-lazy val examples = (project in file("examples"))
-  .settings(name := "fetch-examples")
+lazy val `fetch-examples` = project
   .dependsOn(fetchJVM, debugJVM)
   .settings(skip in publish := true)
   .settings(examplesSettings: _*)
diff --git a/debug/shared/src/main/scala/debug.scala b/fetch-debug/shared/src/main/scala/debug.scala
similarity index 100%
rename from debug/shared/src/main/scala/debug.scala
rename to fetch-debug/shared/src/main/scala/debug.scala
diff --git a/debug/shared/src/main/scala/document.scala b/fetch-debug/shared/src/main/scala/document.scala
similarity index 100%
rename from debug/shared/src/main/scala/document.scala
rename to fetch-debug/shared/src/main/scala/document.scala
diff --git a/examples/src/test/scala/DoobieExample.scala b/fetch-examples/src/test/scala/DoobieExample.scala
similarity index 100%
rename from examples/src/test/scala/DoobieExample.scala
rename to fetch-examples/src/test/scala/DoobieExample.scala
diff --git a/examples/src/test/scala/GithubExample.scala b/fetch-examples/src/test/scala/GithubExample.scala
similarity index 100%
rename from examples/src/test/scala/GithubExample.scala
rename to fetch-examples/src/test/scala/GithubExample.scala
diff --git a/examples/src/test/scala/GraphQLExample.scala b/fetch-examples/src/test/scala/GraphQLExample.scala
similarity index 100%
rename from examples/src/test/scala/GraphQLExample.scala
rename to fetch-examples/src/test/scala/GraphQLExample.scala
diff --git a/examples/src/test/scala/Http4sExample.scala b/fetch-examples/src/test/scala/Http4sExample.scala
similarity index 100%
rename from examples/src/test/scala/Http4sExample.scala
rename to fetch-examples/src/test/scala/Http4sExample.scala
diff --git a/examples/src/test/scala/JedisExample.scala b/fetch-examples/src/test/scala/JedisExample.scala
similarity index 100%
rename from examples/src/test/scala/JedisExample.scala
rename to fetch-examples/src/test/scala/JedisExample.scala
diff --git a/examples/src/test/scala/MonixExample.scala b/fetch-examples/src/test/scala/MonixExample.scala
similarity index 100%
rename from examples/src/test/scala/MonixExample.scala
rename to fetch-examples/src/test/scala/MonixExample.scala

From e7f0d660ef78b59cad7185d5e2a915659305f8b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 08:21:13 +0200
Subject: [PATCH 16/26] Use `Pure` since both cross-projects don't have
 platform-specific-code

Reference: https://github.com/portable-scala/sbt-crossproject#crosstypes
---
 build.sbt                                                    | 2 ++
 fetch-debug/{shared => }/src/main/scala/debug.scala          | 0
 fetch-debug/{shared => }/src/main/scala/document.scala       | 0
 fetch/{shared => }/src/main/scala/cache.scala                | 0
 fetch/{shared => }/src/main/scala/datasource.scala           | 0
 fetch/{shared => }/src/main/scala/execution.scala            | 0
 fetch/{shared => }/src/main/scala/fetch.scala                | 0
 fetch/{shared => }/src/main/scala/log.scala                  | 0
 fetch/{shared => }/src/main/scala/syntax.scala               | 0
 fetch/{shared => }/src/test/scala/FetchAsyncQueryTests.scala | 0
 fetch/{shared => }/src/test/scala/FetchBatchingTests.scala   | 0
 fetch/{shared => }/src/test/scala/FetchReportingTests.scala  | 0
 fetch/{shared => }/src/test/scala/FetchSpec.scala            | 0
 fetch/{shared => }/src/test/scala/FetchSyntaxTests.scala     | 0
 fetch/{shared => }/src/test/scala/FetchTests.scala           | 0
 fetch/{shared => }/src/test/scala/TestHelper.scala           | 0
 16 files changed, 2 insertions(+)
 rename fetch-debug/{shared => }/src/main/scala/debug.scala (100%)
 rename fetch-debug/{shared => }/src/main/scala/document.scala (100%)
 rename fetch/{shared => }/src/main/scala/cache.scala (100%)
 rename fetch/{shared => }/src/main/scala/datasource.scala (100%)
 rename fetch/{shared => }/src/main/scala/execution.scala (100%)
 rename fetch/{shared => }/src/main/scala/fetch.scala (100%)
 rename fetch/{shared => }/src/main/scala/log.scala (100%)
 rename fetch/{shared => }/src/main/scala/syntax.scala (100%)
 rename fetch/{shared => }/src/test/scala/FetchAsyncQueryTests.scala (100%)
 rename fetch/{shared => }/src/test/scala/FetchBatchingTests.scala (100%)
 rename fetch/{shared => }/src/test/scala/FetchReportingTests.scala (100%)
 rename fetch/{shared => }/src/test/scala/FetchSpec.scala (100%)
 rename fetch/{shared => }/src/test/scala/FetchSyntaxTests.scala (100%)
 rename fetch/{shared => }/src/test/scala/FetchTests.scala (100%)
 rename fetch/{shared => }/src/test/scala/TestHelper.scala (100%)

diff --git a/build.sbt b/build.sbt
index a8a3315d..46e3ca26 100644
--- a/build.sbt
+++ b/build.sbt
@@ -5,11 +5,13 @@ addCommandAlias("ci-microsite", "docs/publishMicrosite")
 skip in publish := true
 
 lazy val fetch = crossProject(JSPlatform, JVMPlatform)
+  .crossType(CrossType.Pure)
   .settings(commonCrossDependencies)
 lazy val fetchJVM = fetch.jvm
 lazy val fetchJS  = fetch.js.disablePlugins(ScoverageSbtPlugin)
 
 lazy val `fetch-debug` = crossProject(JSPlatform, JVMPlatform)
+  .crossType(CrossType.Pure)
   .dependsOn(fetch)
   .settings(commonCrossDependencies)
 lazy val debugJVM = `fetch-debug`.jvm
diff --git a/fetch-debug/shared/src/main/scala/debug.scala b/fetch-debug/src/main/scala/debug.scala
similarity index 100%
rename from fetch-debug/shared/src/main/scala/debug.scala
rename to fetch-debug/src/main/scala/debug.scala
diff --git a/fetch-debug/shared/src/main/scala/document.scala b/fetch-debug/src/main/scala/document.scala
similarity index 100%
rename from fetch-debug/shared/src/main/scala/document.scala
rename to fetch-debug/src/main/scala/document.scala
diff --git a/fetch/shared/src/main/scala/cache.scala b/fetch/src/main/scala/cache.scala
similarity index 100%
rename from fetch/shared/src/main/scala/cache.scala
rename to fetch/src/main/scala/cache.scala
diff --git a/fetch/shared/src/main/scala/datasource.scala b/fetch/src/main/scala/datasource.scala
similarity index 100%
rename from fetch/shared/src/main/scala/datasource.scala
rename to fetch/src/main/scala/datasource.scala
diff --git a/fetch/shared/src/main/scala/execution.scala b/fetch/src/main/scala/execution.scala
similarity index 100%
rename from fetch/shared/src/main/scala/execution.scala
rename to fetch/src/main/scala/execution.scala
diff --git a/fetch/shared/src/main/scala/fetch.scala b/fetch/src/main/scala/fetch.scala
similarity index 100%
rename from fetch/shared/src/main/scala/fetch.scala
rename to fetch/src/main/scala/fetch.scala
diff --git a/fetch/shared/src/main/scala/log.scala b/fetch/src/main/scala/log.scala
similarity index 100%
rename from fetch/shared/src/main/scala/log.scala
rename to fetch/src/main/scala/log.scala
diff --git a/fetch/shared/src/main/scala/syntax.scala b/fetch/src/main/scala/syntax.scala
similarity index 100%
rename from fetch/shared/src/main/scala/syntax.scala
rename to fetch/src/main/scala/syntax.scala
diff --git a/fetch/shared/src/test/scala/FetchAsyncQueryTests.scala b/fetch/src/test/scala/FetchAsyncQueryTests.scala
similarity index 100%
rename from fetch/shared/src/test/scala/FetchAsyncQueryTests.scala
rename to fetch/src/test/scala/FetchAsyncQueryTests.scala
diff --git a/fetch/shared/src/test/scala/FetchBatchingTests.scala b/fetch/src/test/scala/FetchBatchingTests.scala
similarity index 100%
rename from fetch/shared/src/test/scala/FetchBatchingTests.scala
rename to fetch/src/test/scala/FetchBatchingTests.scala
diff --git a/fetch/shared/src/test/scala/FetchReportingTests.scala b/fetch/src/test/scala/FetchReportingTests.scala
similarity index 100%
rename from fetch/shared/src/test/scala/FetchReportingTests.scala
rename to fetch/src/test/scala/FetchReportingTests.scala
diff --git a/fetch/shared/src/test/scala/FetchSpec.scala b/fetch/src/test/scala/FetchSpec.scala
similarity index 100%
rename from fetch/shared/src/test/scala/FetchSpec.scala
rename to fetch/src/test/scala/FetchSpec.scala
diff --git a/fetch/shared/src/test/scala/FetchSyntaxTests.scala b/fetch/src/test/scala/FetchSyntaxTests.scala
similarity index 100%
rename from fetch/shared/src/test/scala/FetchSyntaxTests.scala
rename to fetch/src/test/scala/FetchSyntaxTests.scala
diff --git a/fetch/shared/src/test/scala/FetchTests.scala b/fetch/src/test/scala/FetchTests.scala
similarity index 100%
rename from fetch/shared/src/test/scala/FetchTests.scala
rename to fetch/src/test/scala/FetchTests.scala
diff --git a/fetch/shared/src/test/scala/TestHelper.scala b/fetch/src/test/scala/TestHelper.scala
similarity index 100%
rename from fetch/shared/src/test/scala/TestHelper.scala
rename to fetch/src/test/scala/TestHelper.scala

From 0182d2a636f020622395fc8b10047d5726c6954a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 08:22:56 +0200
Subject: [PATCH 17/26] Move `organization` and `crossScalaVersions` to
 `build.sbt`

Also add a default `scalaVersion`
---
 build.sbt                   | 4 ++++
 project/ProjectPlugin.scala | 2 --
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/build.sbt b/build.sbt
index 46e3ca26..6cfcc475 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,3 +1,7 @@
+ThisBuild / scalaVersion := "2.13.1"
+ThisBuild / crossScalaVersions := Seq("2.12.11", "2.13.1")
+ThisBuild / organization := "com.47deg"
+
 addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; +mdoc; testCovered")
 addCommandAlias("ci-docs", "project-docs/mdoc; headerCreateAll")
 addCommandAlias("ci-microsite", "docs/publishMicrosite")
diff --git a/project/ProjectPlugin.scala b/project/ProjectPlugin.scala
index 54d27268..823b42ff 100644
--- a/project/ProjectPlugin.scala
+++ b/project/ProjectPlugin.scala
@@ -75,8 +75,6 @@ object ProjectPlugin extends AutoPlugin {
 
   override def projectSettings: Seq[Def.Setting[_]] =
     Seq(
-      organization := "com.47deg",
-      crossScalaVersions := Seq("2.12.11", "2.13.1"),
       scalacOptions := {
         val withStripedLinter = scalacOptions.value filterNot Set("-Xlint", "-Xfuture").contains
         (CrossVersion.partialVersion(scalaBinaryVersion.value) match {

From 044e6cb75a1ce940eed94307b60ed26b47319444 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 08:23:28 +0200
Subject: [PATCH 18/26] Update `2.13.*` version to `2.13.2`

---
 build.sbt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/build.sbt b/build.sbt
index 6cfcc475..858ef6e5 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,5 +1,5 @@
-ThisBuild / scalaVersion := "2.13.1"
-ThisBuild / crossScalaVersions := Seq("2.12.11", "2.13.1")
+ThisBuild / scalaVersion := "2.13.2"
+ThisBuild / crossScalaVersions := Seq("2.12.11", "2.13.2")
 ThisBuild / organization := "com.47deg"
 
 addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; +mdoc; testCovered")

From fdcc0bb997e12d96e98ac7be28a7634f67501e60 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 19:15:17 +0200
Subject: [PATCH 19/26] Add `remove-test-from-pom` plugin to avoid adding test
 deps to POM

---
 project/plugins.sbt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/project/plugins.sbt b/project/plugins.sbt
index 9a623aeb..cd2c1fa3 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -11,3 +11,4 @@ addSbtPlugin("com.alejandrohdezma" %% "sbt-github"               % "0.8.2")
 addSbtPlugin("com.alejandrohdezma"  % "sbt-github-header"        % "0.8.2")
 addSbtPlugin("com.alejandrohdezma"  % "sbt-github-mdoc"          % "0.8.2")
 addSbtPlugin("com.alejandrohdezma"  % "sbt-mdoc-toc"             % "0.2")
+addSbtPlugin("com.alejandrohdezma"  % "sbt-remove-test-from-pom" % "0.1.0")

From dc6f7940658c87c8a4e1c410223b39951781a73d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 20:08:02 +0200
Subject: [PATCH 20/26] Move microsite files to `microsite` and docs to `docs`

---
 build.sbt                                     |  18 +++++++-----------
 {.docs => docs}/AUTHORS.md                    |   0
 {.docs => docs}/CODE_OF_CONDUCT.md            |   0
 {.docs => docs}/CONTRIBUTING.md               |   0
 {.docs => docs}/LICENSE.md                    |   0
 {.docs => docs}/NOTICE.md                     |   0
 {.docs => docs}/README.md                     |   0
 {docs => microsite}/docs/docs.md              |   0
 {docs => microsite}/docs/index.md             |   0
 .../resources/microsite/_data/commons.yml     |   0
 .../resources/microsite/_data/features.yml    |   0
 .../main/resources/microsite/_data/menu.yml   |   0
 .../microsite/_includes/_fetch-footer.html    |   0
 .../microsite/_includes/_fetch-head.html      |   0
 .../microsite/_includes/_fetch-header.html    |   0
 .../microsite/_includes/_fetch-main.html      |   0
 .../_includes/_fetch-navigation.html          |   0
 .../microsite/_layouts/fetch-home.html        |   0
 .../main/resources/microsite/css/custom.scss  |   0
 .../resources/microsite/custom-config.yml     |   0
 .../main/resources/microsite/img/favicon.ico  | Bin
 .../main/resources/microsite/img/favicon.png  | Bin
 .../microsite/img/icon-feature-first.svg      |   0
 .../microsite/img/icon-feature-second.svg     |   0
 .../microsite/img/icon-feature-third.svg      |   0
 .../microsite/img/nav-icon-close.svg          |   0
 .../resources/microsite/img/nav-icon-open.svg |   0
 .../resources/microsite/img/navbar_brand.png  | Bin
 .../resources/microsite/img/navbar_brand.svg  |   0
 .../microsite/img/navbar_brand2x.png          | Bin
 .../microsite/img/pattern-background.png      | Bin
 .../microsite/img/pattern-background.svg      |   0
 .../microsite/img/pattern-background@2x.png   | Bin
 .../main/resources/microsite/img/poster.png   | Bin
 .../resources/microsite/img/sidebar_brand.png | Bin
 .../resources/microsite/img/sidebar_brand.svg |   0
 .../microsite/img/sidebar_brand2x.png         | Bin
 .../resources/microsite/img/twitter-card.png  | Bin
 .../main/resources/microsite/js/automenu.js   |   0
 .../microsite/static/_sass/_breakpoint.scss   |   0
 .../microsite/static/_sass/_components.scss   |   0
 .../microsite/static/_sass/_fetch_docs.scss   |   0
 .../microsite/static/_sass/_footer.scss       |   0
 .../microsite/static/_sass/_header.scss       |   0
 .../microsite/static/_sass/_main.scss         |   0
 .../microsite/static/_sass/_navigation.scss   |   0
 .../microsite/static/_sass/_variables.scss    |   0
 .../microsite/static/fetch_animation.json     |   0
 .../main/resources/microsite/static/home.js   |   0
 49 files changed, 7 insertions(+), 11 deletions(-)
 rename {.docs => docs}/AUTHORS.md (100%)
 rename {.docs => docs}/CODE_OF_CONDUCT.md (100%)
 rename {.docs => docs}/CONTRIBUTING.md (100%)
 rename {.docs => docs}/LICENSE.md (100%)
 rename {.docs => docs}/NOTICE.md (100%)
 rename {.docs => docs}/README.md (100%)
 rename {docs => microsite}/docs/docs.md (100%)
 rename {docs => microsite}/docs/index.md (100%)
 rename {docs => microsite}/src/main/resources/microsite/_data/commons.yml (100%)
 rename {docs => microsite}/src/main/resources/microsite/_data/features.yml (100%)
 rename {docs => microsite}/src/main/resources/microsite/_data/menu.yml (100%)
 rename {docs => microsite}/src/main/resources/microsite/_includes/_fetch-footer.html (100%)
 rename {docs => microsite}/src/main/resources/microsite/_includes/_fetch-head.html (100%)
 rename {docs => microsite}/src/main/resources/microsite/_includes/_fetch-header.html (100%)
 rename {docs => microsite}/src/main/resources/microsite/_includes/_fetch-main.html (100%)
 rename {docs => microsite}/src/main/resources/microsite/_includes/_fetch-navigation.html (100%)
 rename {docs => microsite}/src/main/resources/microsite/_layouts/fetch-home.html (100%)
 rename {docs => microsite}/src/main/resources/microsite/css/custom.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/custom-config.yml (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/favicon.ico (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/favicon.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/icon-feature-first.svg (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/icon-feature-second.svg (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/icon-feature-third.svg (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/nav-icon-close.svg (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/nav-icon-open.svg (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/navbar_brand.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/navbar_brand.svg (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/navbar_brand2x.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/pattern-background.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/pattern-background.svg (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/pattern-background@2x.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/poster.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/sidebar_brand.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/sidebar_brand.svg (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/sidebar_brand2x.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/img/twitter-card.png (100%)
 rename {docs => microsite}/src/main/resources/microsite/js/automenu.js (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/_sass/_breakpoint.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/_sass/_components.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/_sass/_fetch_docs.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/_sass/_footer.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/_sass/_header.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/_sass/_main.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/_sass/_navigation.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/_sass/_variables.scss (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/fetch_animation.json (100%)
 rename {docs => microsite}/src/main/resources/microsite/static/home.js (100%)

diff --git a/build.sbt b/build.sbt
index 858ef6e5..3af0fc62 100644
--- a/build.sbt
+++ b/build.sbt
@@ -2,9 +2,9 @@ ThisBuild / scalaVersion := "2.13.2"
 ThisBuild / crossScalaVersions := Seq("2.12.11", "2.13.2")
 ThisBuild / organization := "com.47deg"
 
-addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; +mdoc; testCovered")
-addCommandAlias("ci-docs", "project-docs/mdoc; headerCreateAll")
-addCommandAlias("ci-microsite", "docs/publishMicrosite")
+addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; mdoc; testCovered")
+addCommandAlias("ci-docs", "mdoc; headerCreateAll")
+addCommandAlias("ci-microsite", "publishMicrosite")
 
 skip in publish := true
 
@@ -26,19 +26,15 @@ lazy val `fetch-examples` = project
   .settings(skip in publish := true)
   .settings(examplesSettings: _*)
 
-lazy val docs = (project in file("docs"))
+lazy val microsite = project
   .dependsOn(fetchJVM, debugJVM)
-  .settings(name := "fetch-docs")
   .settings(docsSettings: _*)
   .settings(skip in publish := true)
-  .enablePlugins(MicrositesPlugin)
-  .enablePlugins(MdocPlugin)
+  .enablePlugins(MicrositesPlugin, MdocPlugin)
 
-lazy val `project-docs` = (project in file(".docs"))
+lazy val documentation = project
   .aggregate(fetchJVM)
   .dependsOn(fetchJVM)
-  .settings(moduleName := "fetch-project-docs")
-  .settings(mdocIn := file(".docs"))
-  .settings(mdocOut := file("."))
   .settings(skip in publish := true)
+  .settings(mdocOut := file("."))
   .enablePlugins(MdocPlugin)
diff --git a/.docs/AUTHORS.md b/docs/AUTHORS.md
similarity index 100%
rename from .docs/AUTHORS.md
rename to docs/AUTHORS.md
diff --git a/.docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md
similarity index 100%
rename from .docs/CODE_OF_CONDUCT.md
rename to docs/CODE_OF_CONDUCT.md
diff --git a/.docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
similarity index 100%
rename from .docs/CONTRIBUTING.md
rename to docs/CONTRIBUTING.md
diff --git a/.docs/LICENSE.md b/docs/LICENSE.md
similarity index 100%
rename from .docs/LICENSE.md
rename to docs/LICENSE.md
diff --git a/.docs/NOTICE.md b/docs/NOTICE.md
similarity index 100%
rename from .docs/NOTICE.md
rename to docs/NOTICE.md
diff --git a/.docs/README.md b/docs/README.md
similarity index 100%
rename from .docs/README.md
rename to docs/README.md
diff --git a/docs/docs/docs.md b/microsite/docs/docs.md
similarity index 100%
rename from docs/docs/docs.md
rename to microsite/docs/docs.md
diff --git a/docs/docs/index.md b/microsite/docs/index.md
similarity index 100%
rename from docs/docs/index.md
rename to microsite/docs/index.md
diff --git a/docs/src/main/resources/microsite/_data/commons.yml b/microsite/src/main/resources/microsite/_data/commons.yml
similarity index 100%
rename from docs/src/main/resources/microsite/_data/commons.yml
rename to microsite/src/main/resources/microsite/_data/commons.yml
diff --git a/docs/src/main/resources/microsite/_data/features.yml b/microsite/src/main/resources/microsite/_data/features.yml
similarity index 100%
rename from docs/src/main/resources/microsite/_data/features.yml
rename to microsite/src/main/resources/microsite/_data/features.yml
diff --git a/docs/src/main/resources/microsite/_data/menu.yml b/microsite/src/main/resources/microsite/_data/menu.yml
similarity index 100%
rename from docs/src/main/resources/microsite/_data/menu.yml
rename to microsite/src/main/resources/microsite/_data/menu.yml
diff --git a/docs/src/main/resources/microsite/_includes/_fetch-footer.html b/microsite/src/main/resources/microsite/_includes/_fetch-footer.html
similarity index 100%
rename from docs/src/main/resources/microsite/_includes/_fetch-footer.html
rename to microsite/src/main/resources/microsite/_includes/_fetch-footer.html
diff --git a/docs/src/main/resources/microsite/_includes/_fetch-head.html b/microsite/src/main/resources/microsite/_includes/_fetch-head.html
similarity index 100%
rename from docs/src/main/resources/microsite/_includes/_fetch-head.html
rename to microsite/src/main/resources/microsite/_includes/_fetch-head.html
diff --git a/docs/src/main/resources/microsite/_includes/_fetch-header.html b/microsite/src/main/resources/microsite/_includes/_fetch-header.html
similarity index 100%
rename from docs/src/main/resources/microsite/_includes/_fetch-header.html
rename to microsite/src/main/resources/microsite/_includes/_fetch-header.html
diff --git a/docs/src/main/resources/microsite/_includes/_fetch-main.html b/microsite/src/main/resources/microsite/_includes/_fetch-main.html
similarity index 100%
rename from docs/src/main/resources/microsite/_includes/_fetch-main.html
rename to microsite/src/main/resources/microsite/_includes/_fetch-main.html
diff --git a/docs/src/main/resources/microsite/_includes/_fetch-navigation.html b/microsite/src/main/resources/microsite/_includes/_fetch-navigation.html
similarity index 100%
rename from docs/src/main/resources/microsite/_includes/_fetch-navigation.html
rename to microsite/src/main/resources/microsite/_includes/_fetch-navigation.html
diff --git a/docs/src/main/resources/microsite/_layouts/fetch-home.html b/microsite/src/main/resources/microsite/_layouts/fetch-home.html
similarity index 100%
rename from docs/src/main/resources/microsite/_layouts/fetch-home.html
rename to microsite/src/main/resources/microsite/_layouts/fetch-home.html
diff --git a/docs/src/main/resources/microsite/css/custom.scss b/microsite/src/main/resources/microsite/css/custom.scss
similarity index 100%
rename from docs/src/main/resources/microsite/css/custom.scss
rename to microsite/src/main/resources/microsite/css/custom.scss
diff --git a/docs/src/main/resources/microsite/custom-config.yml b/microsite/src/main/resources/microsite/custom-config.yml
similarity index 100%
rename from docs/src/main/resources/microsite/custom-config.yml
rename to microsite/src/main/resources/microsite/custom-config.yml
diff --git a/docs/src/main/resources/microsite/img/favicon.ico b/microsite/src/main/resources/microsite/img/favicon.ico
similarity index 100%
rename from docs/src/main/resources/microsite/img/favicon.ico
rename to microsite/src/main/resources/microsite/img/favicon.ico
diff --git a/docs/src/main/resources/microsite/img/favicon.png b/microsite/src/main/resources/microsite/img/favicon.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/favicon.png
rename to microsite/src/main/resources/microsite/img/favicon.png
diff --git a/docs/src/main/resources/microsite/img/icon-feature-first.svg b/microsite/src/main/resources/microsite/img/icon-feature-first.svg
similarity index 100%
rename from docs/src/main/resources/microsite/img/icon-feature-first.svg
rename to microsite/src/main/resources/microsite/img/icon-feature-first.svg
diff --git a/docs/src/main/resources/microsite/img/icon-feature-second.svg b/microsite/src/main/resources/microsite/img/icon-feature-second.svg
similarity index 100%
rename from docs/src/main/resources/microsite/img/icon-feature-second.svg
rename to microsite/src/main/resources/microsite/img/icon-feature-second.svg
diff --git a/docs/src/main/resources/microsite/img/icon-feature-third.svg b/microsite/src/main/resources/microsite/img/icon-feature-third.svg
similarity index 100%
rename from docs/src/main/resources/microsite/img/icon-feature-third.svg
rename to microsite/src/main/resources/microsite/img/icon-feature-third.svg
diff --git a/docs/src/main/resources/microsite/img/nav-icon-close.svg b/microsite/src/main/resources/microsite/img/nav-icon-close.svg
similarity index 100%
rename from docs/src/main/resources/microsite/img/nav-icon-close.svg
rename to microsite/src/main/resources/microsite/img/nav-icon-close.svg
diff --git a/docs/src/main/resources/microsite/img/nav-icon-open.svg b/microsite/src/main/resources/microsite/img/nav-icon-open.svg
similarity index 100%
rename from docs/src/main/resources/microsite/img/nav-icon-open.svg
rename to microsite/src/main/resources/microsite/img/nav-icon-open.svg
diff --git a/docs/src/main/resources/microsite/img/navbar_brand.png b/microsite/src/main/resources/microsite/img/navbar_brand.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/navbar_brand.png
rename to microsite/src/main/resources/microsite/img/navbar_brand.png
diff --git a/docs/src/main/resources/microsite/img/navbar_brand.svg b/microsite/src/main/resources/microsite/img/navbar_brand.svg
similarity index 100%
rename from docs/src/main/resources/microsite/img/navbar_brand.svg
rename to microsite/src/main/resources/microsite/img/navbar_brand.svg
diff --git a/docs/src/main/resources/microsite/img/navbar_brand2x.png b/microsite/src/main/resources/microsite/img/navbar_brand2x.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/navbar_brand2x.png
rename to microsite/src/main/resources/microsite/img/navbar_brand2x.png
diff --git a/docs/src/main/resources/microsite/img/pattern-background.png b/microsite/src/main/resources/microsite/img/pattern-background.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/pattern-background.png
rename to microsite/src/main/resources/microsite/img/pattern-background.png
diff --git a/docs/src/main/resources/microsite/img/pattern-background.svg b/microsite/src/main/resources/microsite/img/pattern-background.svg
similarity index 100%
rename from docs/src/main/resources/microsite/img/pattern-background.svg
rename to microsite/src/main/resources/microsite/img/pattern-background.svg
diff --git a/docs/src/main/resources/microsite/img/pattern-background@2x.png b/microsite/src/main/resources/microsite/img/pattern-background@2x.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/pattern-background@2x.png
rename to microsite/src/main/resources/microsite/img/pattern-background@2x.png
diff --git a/docs/src/main/resources/microsite/img/poster.png b/microsite/src/main/resources/microsite/img/poster.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/poster.png
rename to microsite/src/main/resources/microsite/img/poster.png
diff --git a/docs/src/main/resources/microsite/img/sidebar_brand.png b/microsite/src/main/resources/microsite/img/sidebar_brand.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/sidebar_brand.png
rename to microsite/src/main/resources/microsite/img/sidebar_brand.png
diff --git a/docs/src/main/resources/microsite/img/sidebar_brand.svg b/microsite/src/main/resources/microsite/img/sidebar_brand.svg
similarity index 100%
rename from docs/src/main/resources/microsite/img/sidebar_brand.svg
rename to microsite/src/main/resources/microsite/img/sidebar_brand.svg
diff --git a/docs/src/main/resources/microsite/img/sidebar_brand2x.png b/microsite/src/main/resources/microsite/img/sidebar_brand2x.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/sidebar_brand2x.png
rename to microsite/src/main/resources/microsite/img/sidebar_brand2x.png
diff --git a/docs/src/main/resources/microsite/img/twitter-card.png b/microsite/src/main/resources/microsite/img/twitter-card.png
similarity index 100%
rename from docs/src/main/resources/microsite/img/twitter-card.png
rename to microsite/src/main/resources/microsite/img/twitter-card.png
diff --git a/docs/src/main/resources/microsite/js/automenu.js b/microsite/src/main/resources/microsite/js/automenu.js
similarity index 100%
rename from docs/src/main/resources/microsite/js/automenu.js
rename to microsite/src/main/resources/microsite/js/automenu.js
diff --git a/docs/src/main/resources/microsite/static/_sass/_breakpoint.scss b/microsite/src/main/resources/microsite/static/_sass/_breakpoint.scss
similarity index 100%
rename from docs/src/main/resources/microsite/static/_sass/_breakpoint.scss
rename to microsite/src/main/resources/microsite/static/_sass/_breakpoint.scss
diff --git a/docs/src/main/resources/microsite/static/_sass/_components.scss b/microsite/src/main/resources/microsite/static/_sass/_components.scss
similarity index 100%
rename from docs/src/main/resources/microsite/static/_sass/_components.scss
rename to microsite/src/main/resources/microsite/static/_sass/_components.scss
diff --git a/docs/src/main/resources/microsite/static/_sass/_fetch_docs.scss b/microsite/src/main/resources/microsite/static/_sass/_fetch_docs.scss
similarity index 100%
rename from docs/src/main/resources/microsite/static/_sass/_fetch_docs.scss
rename to microsite/src/main/resources/microsite/static/_sass/_fetch_docs.scss
diff --git a/docs/src/main/resources/microsite/static/_sass/_footer.scss b/microsite/src/main/resources/microsite/static/_sass/_footer.scss
similarity index 100%
rename from docs/src/main/resources/microsite/static/_sass/_footer.scss
rename to microsite/src/main/resources/microsite/static/_sass/_footer.scss
diff --git a/docs/src/main/resources/microsite/static/_sass/_header.scss b/microsite/src/main/resources/microsite/static/_sass/_header.scss
similarity index 100%
rename from docs/src/main/resources/microsite/static/_sass/_header.scss
rename to microsite/src/main/resources/microsite/static/_sass/_header.scss
diff --git a/docs/src/main/resources/microsite/static/_sass/_main.scss b/microsite/src/main/resources/microsite/static/_sass/_main.scss
similarity index 100%
rename from docs/src/main/resources/microsite/static/_sass/_main.scss
rename to microsite/src/main/resources/microsite/static/_sass/_main.scss
diff --git a/docs/src/main/resources/microsite/static/_sass/_navigation.scss b/microsite/src/main/resources/microsite/static/_sass/_navigation.scss
similarity index 100%
rename from docs/src/main/resources/microsite/static/_sass/_navigation.scss
rename to microsite/src/main/resources/microsite/static/_sass/_navigation.scss
diff --git a/docs/src/main/resources/microsite/static/_sass/_variables.scss b/microsite/src/main/resources/microsite/static/_sass/_variables.scss
similarity index 100%
rename from docs/src/main/resources/microsite/static/_sass/_variables.scss
rename to microsite/src/main/resources/microsite/static/_sass/_variables.scss
diff --git a/docs/src/main/resources/microsite/static/fetch_animation.json b/microsite/src/main/resources/microsite/static/fetch_animation.json
similarity index 100%
rename from docs/src/main/resources/microsite/static/fetch_animation.json
rename to microsite/src/main/resources/microsite/static/fetch_animation.json
diff --git a/docs/src/main/resources/microsite/static/home.js b/microsite/src/main/resources/microsite/static/home.js
similarity index 100%
rename from docs/src/main/resources/microsite/static/home.js
rename to microsite/src/main/resources/microsite/static/home.js

From af4cdeb86acd198ab7ca80347b0f5a314b7efdc9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 20:08:57 +0200
Subject: [PATCH 21/26] `publishMicrosite` should be done in `ci-docs`

---
 build.sbt | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/build.sbt b/build.sbt
index 3af0fc62..2bfe93bc 100644
--- a/build.sbt
+++ b/build.sbt
@@ -3,8 +3,7 @@ ThisBuild / crossScalaVersions := Seq("2.12.11", "2.13.2")
 ThisBuild / organization := "com.47deg"
 
 addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; mdoc; testCovered")
-addCommandAlias("ci-docs", "mdoc; headerCreateAll")
-addCommandAlias("ci-microsite", "publishMicrosite")
+addCommandAlias("ci-docs", "mdoc; headerCreateAll; publishMicrosite")
 
 skip in publish := true
 

From c34780998e938ab6cf5d939a68782e2dfc9d4ac3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 20:09:54 +0200
Subject: [PATCH 22/26] Add new command that will replace `ci-release` in next
 `.github` release

---
 build.sbt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/build.sbt b/build.sbt
index 2bfe93bc..2789d0a2 100644
--- a/build.sbt
+++ b/build.sbt
@@ -4,6 +4,7 @@ ThisBuild / organization := "com.47deg"
 
 addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; mdoc; testCovered")
 addCommandAlias("ci-docs", "mdoc; headerCreateAll; publishMicrosite")
+addCommandAlias("ci-publish", "ci-release")
 
 skip in publish := true
 

From 2ec71a7e8288ccedd2f19019d01e940a230fbdd7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 20:10:18 +0200
Subject: [PATCH 23/26] Download info from Github before `ci-docs` or
 `ci-release`

---
 build.sbt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/build.sbt b/build.sbt
index 2789d0a2..0328c423 100644
--- a/build.sbt
+++ b/build.sbt
@@ -3,8 +3,8 @@ ThisBuild / crossScalaVersions := Seq("2.12.11", "2.13.2")
 ThisBuild / organization := "com.47deg"
 
 addCommandAlias("ci-test", "scalafmtCheckAll; scalafmtSbtCheck; mdoc; testCovered")
-addCommandAlias("ci-docs", "mdoc; headerCreateAll; publishMicrosite")
-addCommandAlias("ci-publish", "ci-release")
+addCommandAlias("ci-docs", "github; mdoc; headerCreateAll; publishMicrosite")
+addCommandAlias("ci-publish", "github; ci-release")
 
 skip in publish := true
 

From 345e586d20dfd4fa649c990a9dc2c57e68655948 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 20:12:23 +0200
Subject: [PATCH 24/26] This project doesn't need to aggregate `fetchJVM`

---
 build.sbt | 1 -
 1 file changed, 1 deletion(-)

diff --git a/build.sbt b/build.sbt
index 0328c423..c4ac3bcd 100644
--- a/build.sbt
+++ b/build.sbt
@@ -33,7 +33,6 @@ lazy val microsite = project
   .enablePlugins(MicrositesPlugin, MdocPlugin)
 
 lazy val documentation = project
-  .aggregate(fetchJVM)
   .dependsOn(fetchJVM)
   .settings(skip in publish := true)
   .settings(mdocOut := file("."))

From a8cca778d63baf440fb2698491943f616e3b05a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 20:15:05 +0200
Subject: [PATCH 25/26] This file will be used by next release of `.github`

---
 .github/actions.yml | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 .github/actions.yml

diff --git a/.github/actions.yml b/.github/actions.yml
new file mode 100644
index 00000000..e02f0163
--- /dev/null
+++ b/.github/actions.yml
@@ -0,0 +1,2 @@
+pre:
+  docs: 'gem install jekyll -v 4'
\ No newline at end of file

From e485a5cabde3825b5ec271cc3a2a04d4e8ce6c07 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez?= <info@alejandrohdezma.com>
Date: Mon, 25 May 2020 20:27:22 +0200
Subject: [PATCH 26/26] Run `scalafmtAll`

---
 .../src/test/scala/DoobieExample.scala        | 27 ++++----
 .../src/test/scala/GithubExample.scala        | 14 ++--
 .../src/test/scala/GraphQLExample.scala       | 66 ++++++++++---------
 .../src/test/scala/JedisExample.scala         | 25 +++----
 .../src/test/scala/MonixExample.scala         |  3 +-
 5 files changed, 71 insertions(+), 64 deletions(-)

diff --git a/fetch-examples/src/test/scala/DoobieExample.scala b/fetch-examples/src/test/scala/DoobieExample.scala
index 4a783e5f..0a5992fc 100644
--- a/fetch-examples/src/test/scala/DoobieExample.scala
+++ b/fetch-examples/src/test/scala/DoobieExample.scala
@@ -83,14 +83,15 @@ object DatabaseExample {
     def createTransactor[F[_]: Async: ContextShift] =
       for {
         (conn, trans) <- (connectionPool[F](1), transactionPool[F]).tupled
-        tx <- H2Transactor
-          .newH2Transactor[F](
-            "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1",
-            "sa",
-            "",
-            conn,
-            Blocker.liftExecutionContext(trans)
-          )
+        tx <-
+          H2Transactor
+            .newH2Transactor[F](
+              "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1",
+              "sa",
+              "",
+              conn,
+              Blocker.liftExecutionContext(trans)
+            )
       } yield tx
   }
 
@@ -131,9 +132,13 @@ class DoobieExample extends AnyWordSpec with Matchers with BeforeAndAfterAll {
   implicit val cs: ContextShift[IO]                     = IO.contextShift(executionContext)
   implicit val transactor: Resource[IO, Transactor[IO]] = createTransactor[IO]
 
-  override def beforeAll(): Unit = (transactor.use { tx =>
-    createTable(tx) *> authors.traverse(addAuthor(_)(tx))
-  }).void.unsafeRunSync
+  override def beforeAll(): Unit =
+    (transactor
+      .use { tx =>
+        createTable(tx) *> authors.traverse(addAuthor(_)(tx))
+      })
+      .void
+      .unsafeRunSync
   override def afterAll(): Unit = transactor.use(dropTable(_)).void.unsafeRunSync
 
   "We can fetch one author from the DB" in {
diff --git a/fetch-examples/src/test/scala/GithubExample.scala b/fetch-examples/src/test/scala/GithubExample.scala
index c866505f..830be406 100644
--- a/fetch-examples/src/test/scala/GithubExample.scala
+++ b/fetch-examples/src/test/scala/GithubExample.scala
@@ -180,7 +180,9 @@ class GithubExample extends AnyWordSpec with Matchers {
         def fetch(repo: Repo): F[Option[List[Contributor]]] = {
           client[F].use { (c) =>
             val url = Uri
-              .unsafeFromString(repo.contributors_url) +? ("access_token", ACCESS_TOKEN) +? ("type", "public") +? ("per_page", 100)
+              .unsafeFromString(
+                repo.contributors_url
+              ) +? ("access_token", ACCESS_TOKEN) +? ("type", "public") +? ("per_page", 100)
             val req = Request[F](Method.GET, url)
             fetchCollectionRecursively[F, Contributor](c, req).map(Option(_))
           }
@@ -226,8 +228,8 @@ class GithubExample extends AnyWordSpec with Matchers {
 
   val GITHUB: Uri = Uri.unsafeFromString("https://api.github.com")
 
-  private def fetchCollectionRecursively[F[_], A](c: Client[F], req: Request[F])(
-      implicit CF: MonadError[F, Throwable],
+  private def fetchCollectionRecursively[F[_], A](c: Client[F], req: Request[F])(implicit
+      CF: MonadError[F, Throwable],
       E: EntityDecoder[F, List[A]]
   ): F[List[A]] = {
     val REL_NEXT = "rel=\"next\"".r
@@ -256,7 +258,7 @@ class GithubExample extends AnyWordSpec with Matchers {
 
     for {
       result <- c.fetch[List[A]](req) {
-        case Status.Ok(res) => {
+        case Status.Ok(res) =>
           if (hasNext(res)) {
             for {
               repos <- res.as[List[A]]
@@ -266,10 +268,8 @@ class GithubExample extends AnyWordSpec with Matchers {
             } yield repos ++ moreRepos
           } else
             res.as[List[A]]
-        }
-        case res => {
+        case res =>
           CF.raiseError(new Exception(s"Couldn't complete request, returned status: ${res.status}"))
-        }
       }
     } yield result
   }
diff --git a/fetch-examples/src/test/scala/GraphQLExample.scala b/fetch-examples/src/test/scala/GraphQLExample.scala
index 3de325da..0a13c2cc 100644
--- a/fetch-examples/src/test/scala/GraphQLExample.scala
+++ b/fetch-examples/src/test/scala/GraphQLExample.scala
@@ -195,38 +195,40 @@ class GraphQLExample extends AnyWordSpec with Matchers {
   private def fetchRepos[F[_]: ConcurrentEffect](
       org: String,
       q: RepositoriesQuery
-  ): Fetch[F, List[Project]] = q match {
-    case RepositoriesQuery(n, name, Some(_), Some(_)) =>
-      for {
-        repos <- Repos.fetch(org)
-        projects <- repos
-          .take(n)
-          .traverse(repo =>
-            (Languages.fetch(repo), Collaborators.fetch(repo)).mapN {
-              case (ls, cs) => Project(name >> Some(repo.name), ls, cs)
-            }
-          )
-      } yield projects
-
-    case RepositoriesQuery(n, name, None, None) =>
-      Repos.fetch(org).map(_.map(r => Project(name >> Some(r.name), List(), List())))
-
-    case RepositoriesQuery(n, name, Some(_), None) =>
-      for {
-        repos <- Repos.fetch(org)
-        projects <- repos.traverse { r =>
-          Languages.fetch(r).map(ls => Project(name >> Some(r.name), ls, List()))
-        }
-      } yield projects
-
-    case RepositoriesQuery(n, name, None, Some(_)) =>
-      for {
-        repos <- Repos.fetch(org)
-        projects <- repos.traverse { r =>
-          Collaborators.fetch(r).map(cs => Project(name >> Some(r.name), List(), cs))
-        }
-      } yield projects
-  }
+  ): Fetch[F, List[Project]] =
+    q match {
+      case RepositoriesQuery(n, name, Some(_), Some(_)) =>
+        for {
+          repos <- Repos.fetch(org)
+          projects <-
+            repos
+              .take(n)
+              .traverse(repo =>
+                (Languages.fetch(repo), Collaborators.fetch(repo)).mapN {
+                  case (ls, cs) => Project(name >> Some(repo.name), ls, cs)
+                }
+              )
+        } yield projects
+
+      case RepositoriesQuery(n, name, None, None) =>
+        Repos.fetch(org).map(_.map(r => Project(name >> Some(r.name), List(), List())))
+
+      case RepositoriesQuery(n, name, Some(_), None) =>
+        for {
+          repos <- Repos.fetch(org)
+          projects <- repos.traverse { r =>
+            Languages.fetch(r).map(ls => Project(name >> Some(r.name), ls, List()))
+          }
+        } yield projects
+
+      case RepositoriesQuery(n, name, None, Some(_)) =>
+        for {
+          repos <- Repos.fetch(org)
+          projects <- repos.traverse { r =>
+            Collaborators.fetch(r).map(cs => Project(name >> Some(r.name), List(), cs))
+          }
+        } yield projects
+    }
 }
 
 object Parsers {
diff --git a/fetch-examples/src/test/scala/JedisExample.scala b/fetch-examples/src/test/scala/JedisExample.scala
index a8206ca6..bd27622f 100644
--- a/fetch-examples/src/test/scala/JedisExample.scala
+++ b/fetch-examples/src/test/scala/JedisExample.scala
@@ -40,14 +40,15 @@ object DataSources {
   object Numbers extends Data[Int, Int] {
     def name = "Numbers"
 
-    def source[F[_]: ConcurrentEffect]: DataSource[F, Int, Int] = new DataSource[F, Int, Int] {
-      def data = Numbers
+    def source[F[_]: ConcurrentEffect]: DataSource[F, Int, Int] =
+      new DataSource[F, Int, Int] {
+        def data = Numbers
 
-      override def CF = ConcurrentEffect[F]
+        override def CF = ConcurrentEffect[F]
 
-      override def fetch(id: Int): F[Option[Int]] =
-        CF.pure(Option(id))
-    }
+        override def fetch(id: Int): F[Option[Int]] =
+          CF.pure(Option(id))
+      }
   }
 
   def fetchNumber[F[_]: ConcurrentEffect](id: Int): Fetch[F, Int] =
@@ -90,8 +91,8 @@ object Binary {
   def fromString(s: String): Array[Byte] =
     s.getBytes(Charset.forName("UTF-8"))
 
-  def serialize[F[_], A](obj: A)(
-      implicit S: Sync[F]
+  def serialize[F[_], A](obj: A)(implicit
+      S: Sync[F]
   ): F[ByteArray] = {
     byteOutputStream
       .mproduct(outputStream(_))
@@ -105,8 +106,8 @@ object Binary {
       })
   }
 
-  def deserialize[F[_], A](bin: ByteArray)(
-      implicit S: Sync[F]
+  def deserialize[F[_], A](bin: ByteArray)(implicit
+      S: Sync[F]
   ): F[Option[A]] = {
     byteInputStream(bin)
       .mproduct(inputStream(_))
@@ -156,8 +157,8 @@ case class RedisCache[F[_]: Sync](host: String) extends DataCache[F] {
       _ <- set(cacheId(i, data), s)
     } yield this
 
-  override def bulkInsert[I, A](vs: List[(I, A)], data: Data[I, A])(
-      implicit M: Monad[F]
+  override def bulkInsert[I, A](vs: List[(I, A)], data: Data[I, A])(implicit
+      M: Monad[F]
   ): F[DataCache[F]] =
     for {
       bin <- vs.traverse({
diff --git a/fetch-examples/src/test/scala/MonixExample.scala b/fetch-examples/src/test/scala/MonixExample.scala
index 30b098e5..762485d6 100644
--- a/fetch-examples/src/test/scala/MonixExample.scala
+++ b/fetch-examples/src/test/scala/MonixExample.scala
@@ -41,10 +41,9 @@ class MonixExample extends AnyWordSpec with Matchers {
 
     task
       .map({
-        case (log, result) => {
+        case (log, result) =>
           result shouldEqual Author(1, "William Shakespeare")
           log.rounds.size shouldEqual 1
-        }
       })
       .runToFuture
   }