From 5c70cc5bcd0077b64c917c3d6661252e7b3f0c92 Mon Sep 17 00:00:00 2001 From: Matt Weiden <538456+mweiden@users.noreply.github.com> Date: Mon, 24 Feb 2020 17:13:16 -0800 Subject: [PATCH] Add codecov for code coverage of python and javascript (#1170) * Add codecov to Push Test workflow * Empty commit * Clear reports and tag each with flags * Tag code reports by test * Fix codecov tags * One more fix --- .github/workflows/push_tests.yml | 14 ++++- .gitignore | 2 + README.md | 1 + client/Makefile | 3 +- client/package-lock.json | 105 +++++++++++++++++++++++++++++++ client/package.json | 5 +- server/Makefile | 9 ++- server/requirements-dev.txt | 1 + 8 files changed, 134 insertions(+), 6 deletions(-) diff --git a/.github/workflows/push_tests.yml b/.github/workflows/push_tests.yml index e1054cb4..12b627d9 100644 --- a/.github/workflows/push_tests.yml +++ b/.github/workflows/push_tests.yml @@ -4,6 +4,7 @@ on: [push] env: JEST_ENV: prod + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} jobs: lint: @@ -44,7 +45,10 @@ jobs: - name: Install dependencies run: make pydist install-dist dev-env-server - name: Unit tests - run: make unit-test + run: | + make unit-test + bash <(curl -s https://codecov.io/bash) -k server -cF backend,python,unitTest + cd client && ./node_modules/codecov/bin/codecov --root=../ --gcov-root=../ -C -F frontend,javascript,unitTest smoke-tests: runs-on: ubuntu-latest @@ -71,7 +75,9 @@ jobs: - name: Install dependencies run: make pydist install-dist - name: Smoke tests (without annotations feature) - run: cd client && make smoke-test + run: | + cd client && make smoke-test + ./node_modules/codecov/bin/codecov --root=../ --gcov-root=../ -C -F frontend,javascript,smokeTest smoke-tests-annotations: runs-on: ubuntu-latest @@ -98,4 +104,6 @@ jobs: - name: Install dependencies run: make pydist install-dist - name: Smoke tests (with annotations feature) - run: cd client && make smoke-test-annotations + run: | + cd client && make smoke-test-annotations + ./node_modules/codecov/bin/codecov --root=../ --gcov-root=../ -C -F frontend,javascript,smokeTestAnnotations diff --git a/.gitignore b/.gitignore index 3a4cbc2e..02e17cee 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ node_modules/ # coverage coverage +coverage.xml +.coverage .nyc_output .pytest_cache/ diff --git a/README.md b/README.md index 85e07710..401dcdc9 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ _an interactive explorer for single-cell transcriptomics data_ [![DOI](https://zenodo.org/badge/105615409.svg)](https://zenodo.org/badge/latestdoi/105615409) [![PyPI](https://img.shields.io/pypi/v/cellxgene)](https://pypi.org/project/cellxgene/) [![PyPI - Downloads](https://img.shields.io/pypi/dm/cellxgene)](https://pypistats.org/packages/cellxgene) [![GitHub last commit](https://img.shields.io/github/last-commit/chanzuckerberg/cellxgene)](https://github.com/chanzuckerberg/cellxgene/pulse) ![Push Tests](https://github.com/chanzuckerberg/cellxgene/workflows/Push%20Tests/badge.svg) ![Compatability Tests](https://github.com/chanzuckerberg/cellxgene/workflows/Compatability%20Tests/badge.svg) +![Code Coverage](https://codecov.io/gh/chanzuckerberg/cellxgene/branch/master/graph/badge.svg) cellxgene (pronounced "cell-by-gene") is an interactive data explorer for single-cell transcriptomics datasets, such as those coming from the [Human Cell Atlas](https://humancellatlas.org). Leveraging modern web development techniques to enable fast visualizations of at least 1 million cells, we hope to enable biologists and computational researchers to explore their data. diff --git a/client/Makefile b/client/Makefile index d17a90a7..d6c5ef03 100644 --- a/client/Makefile +++ b/client/Makefile @@ -88,7 +88,8 @@ smoke-test-annotations: .PHONY: unit-test unit-test: - node node_modules/jest/bin/jest.js --testPathIgnorePatterns e2e + node node_modules/jest/bin/jest.js \ + --testPathIgnorePatterns e2e # pass remaining commands through to npm run %: diff --git a/client/package-lock.json b/client/package-lock.json index 08e45210..694d3799 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -6138,6 +6138,12 @@ "type-detect": "4.0.8" } }, + "@tootallnate/once": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.0.0.tgz", + "integrity": "sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA==", + "dev": true + }, "@types/babel__core": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", @@ -6663,6 +6669,12 @@ "sprintf-js": "~1.0.2" } }, + "argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true + }, "aria-query": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", @@ -7967,6 +7979,19 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "codecov": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.6.5.tgz", + "integrity": "sha512-v48WuDMUug6JXwmmfsMzhCHRnhUf8O3duqXvltaYJKrO1OekZWpB/eH6iIoaxMl8Qli0+u3OxptdsBOYiD7VAQ==", + "dev": true, + "requires": { + "argv": "0.0.2", + "ignore-walk": "3.0.3", + "js-yaml": "3.13.1", + "teeny-request": "6.0.1", + "urlgrey": "0.4.4" + } + }, "collect-v8-coverage": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz", @@ -12685,6 +12710,37 @@ "toidentifier": "1.0.0" } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", + "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -12764,6 +12820,15 @@ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", @@ -19694,6 +19759,12 @@ "lower-case": "^1.1.1" } }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -22527,6 +22598,15 @@ "stream-shift": "^1.0.0" } }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dev": true, + "requires": { + "stubs": "^3.0.0" + } + }, "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", @@ -22751,6 +22831,12 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "dev": true + }, "style-loader": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz", @@ -22979,6 +23065,19 @@ "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", "dev": true }, + "teeny-request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz", + "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^4.0.0", + "node-fetch": "^2.2.0", + "stream-events": "^1.0.5", + "uuid": "^3.3.2" + } + }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", @@ -23664,6 +23763,12 @@ "prepend-http": "^1.0.1" } }, + "urlgrey": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", + "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "dev": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", diff --git a/client/package.json b/client/package.json index d723f020..c1c8057a 100644 --- a/client/package.json +++ b/client/package.json @@ -69,6 +69,7 @@ "babel-loader": "^8.0.6", "babel-preset-modern-browsers": "^14.1.1", "chalk": "^3.0.0", + "codecov": "^3.6.5", "connect-history-api-fallback": "^1.6.0", "copy-webpack-plugin": "^5.1.1", "css-loader": "^3.4.2", @@ -107,7 +108,9 @@ "testURL": "http://localhost/", "setupFiles": [ "./__tests__/setupMissingGlobals.js" - ] + ], + "coverageDirectory": "./coverage/", + "collectCoverage": true }, "babel": { "env": { diff --git a/server/Makefile b/server/Makefile index aa8c9860..208e39a7 100644 --- a/server/Makefile +++ b/server/Makefile @@ -7,4 +7,11 @@ clean: .PHONY: unit-test unit-test: - pytest -s test + PYTHONWARNINGS=ignore:ResourceWarning coverage run \ + --source=app,cli,common,compute,converters,data_anndata,data_common,data_cxg \ + --omit=.coverage,data_common/fbs/NetEncoding,venv \ + -m unittest discover \ + --start-directory test/ \ + --top-level-directory ../ \ + --verbose + diff --git a/server/requirements-dev.txt b/server/requirements-dev.txt index 4d15d39c..291ff9c1 100644 --- a/server/requirements-dev.txt +++ b/server/requirements-dev.txt @@ -3,4 +3,5 @@ bumpversion>=0.5 parameterized>=0.7.0 pytest>=3.6.3 twine>=1.12.1 +codecov>=2.0.15 -r requirements.txt