diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b1badac12ec11df37d5d3d813d93994e599b6d71..d61e14cb427ce159042e9b210ba63f99bc2f0641 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -13,3 +13,8 @@ jobs:
         run: make all
       - name: "Run tests"
         run: make test
+      - name: Upload coverage to Codecov
+        uses: codecov/codecov-action@v1
+        with:
+          file: ./cover.out
+
diff --git a/Makefile b/Makefile
index 478b6fd9ade4ca6507b839acbb09999eb553750e..09f981c659975c8516d7a51cd6f47039154e3ffc 100644
--- a/Makefile
+++ b/Makefile
@@ -50,7 +50,7 @@ ios:
 
 test:
 	# Skip mobile and cmd tests since they are being deprecated
-	go test -v $$(go list ./... | grep -v go-ethereum/cmd/)
+	go test -v $$(go list ./... | grep -v go-ethereum/cmd/) -cover -coverprofile=cover.out
 
 lint: ## Run linters.
 	$(GORUN) build/ci.go lint