Compare commits

..

48 Commits

Author SHA1 Message Date
Tom Hu
d4d413da82 Merge pull request #392 from codecov/v2
feat: Use new Codecov uploader
2021-07-19 07:28:30 -07:00
Tom Hu
635d4e88ad feat: Use new Codecov uploader 2021-07-16 21:56:47 -07:00
Tom Hu
b215992d02 refactor: Pull version from package.json 2021-07-16 21:55:19 -07:00
dependabot[bot]
fcd8a3a0dc Bump eslint from 7.27.0 to 7.28.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.27.0 to 7.28.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.27.0...v7.28.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-16 21:53:41 -07:00
Tom Hu
ca5f3da782 Merge pull request #417 from codecov/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-4.28.3
Bump @typescript-eslint/eslint-plugin from 4.28.2 to 4.28.3
2021-07-13 11:40:45 -07:00
dependabot[bot]
c21ba4838a Bump @typescript-eslint/eslint-plugin from 4.28.2 to 4.28.3
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.28.2 to 4.28.3.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.3/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-13 18:38:04 +00:00
Tom Hu
858ce54168 Merge pull request #418 from codecov/dependabot/npm_and_yarn/typescript-eslint/parser-4.28.3
Bump @typescript-eslint/parser from 4.28.2 to 4.28.3
2021-07-13 11:37:08 -07:00
dependabot[bot]
ae4fdee8f8 Bump @typescript-eslint/parser from 4.28.2 to 4.28.3
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.28.2 to 4.28.3.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.3/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-13 04:05:22 +00:00
Tom Hu
129d2a4a5f Merge pull request #375 from RA80533/chore/refactor-yarn
chore: use npm instead of Yarn in developer scripts
2021-07-07 10:15:56 -07:00
Tom Hu
8e28365500 Merge branch 'master' into chore/refactor-yarn 2021-07-07 10:13:59 -07:00
Tom Hu
bd60ae88ba Merge pull request #401 from codecov/dependabot/npm_and_yarn/typescript-4.3.5
Bump typescript from 4.3.2 to 4.3.5
2021-07-07 10:10:27 -07:00
dependabot[bot]
8f4ab4d738 Bump typescript from 4.3.2 to 4.3.5
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.3.2 to 4.3.5.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.3.2...v4.3.5)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-07 17:09:02 +00:00
Tom Hu
1af7f81eeb Merge pull request #410 from codecov/dependabot/npm_and_yarn/types/node-16.0.1
Bump @types/node from 15.12.2 to 16.0.1
2021-07-07 10:08:59 -07:00
Tom Hu
015c4ad5e2 Merge pull request #405 from codecov/dependabot/npm_and_yarn/eslint-7.30.0
Bump eslint from 7.28.0 to 7.30.0
2021-07-07 10:08:33 -07:00
Tom Hu
e0bfb4cd95 Merge pull request #407 from codecov/dependabot/npm_and_yarn/typescript-eslint/parser-4.28.2
Bump @typescript-eslint/parser from 4.26.1 to 4.28.2
2021-07-07 10:08:09 -07:00
dependabot[bot]
aa268aafcb Bump @types/node from 15.12.2 to 16.0.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 15.12.2 to 16.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-07 17:07:51 +00:00
Tom Hu
8e0cc2e4d6 Merge pull request #397 from RA80533/refactor/require-version-redux
refactor: destructure the assignment of `version`
2021-07-07 10:07:51 -07:00
dependabot[bot]
c20b4eed29 Bump eslint from 7.28.0 to 7.30.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.28.0 to 7.30.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.28.0...v7.30.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-07 17:07:27 +00:00
dependabot[bot]
70e827086f Bump @typescript-eslint/parser from 4.26.1 to 4.28.2
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.26.1 to 4.28.2.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.2/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-07 17:06:31 +00:00
Tom Hu
9107d98cec Merge pull request #408 from codecov/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-4.28.2
Bump @typescript-eslint/eslint-plugin from 4.26.1 to 4.28.2
2021-07-07 10:05:07 -07:00
Tom Hu
ef82f174a8 Merge pull request #409 from codecov/dependabot/npm_and_yarn/types/jest-26.0.24
Bump @types/jest from 26.0.23 to 26.0.24
2021-07-07 10:04:45 -07:00
dependabot[bot]
ecee53a380 Bump @types/jest from 26.0.23 to 26.0.24
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 26.0.23 to 26.0.24.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: "@types/jest"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-07 04:04:31 +00:00
dependabot[bot]
8c24698b96 Bump @typescript-eslint/eslint-plugin from 4.26.1 to 4.28.2
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.26.1 to 4.28.2.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.2/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-06 04:04:56 +00:00
RA80533
a432718b6a Resolve lint errors 2021-06-25 02:09:00 -04:00
RA80533
33974f67c6 Destructure package.json for version 2021-06-25 02:08:59 -04:00
Tom Hu
d1f4b0126d Merge pull request #391 from codecov/fix/upload-to-codecov
fix: Tests do not properly upload to Codecov
2021-06-24 10:27:31 -04:00
Tom Hu
dffe44534b Move codecov script 2021-06-24 09:42:48 -04:00
RA80533
094e9d4e9e Rebuild index.js 2021-06-14 07:19:57 -04:00
RA80533
854d359282 Use npm instead of Yarn 2021-06-14 07:18:38 -04:00
Tom Hu
4463da3901 Merge pull request #362 from codecov/dependabot/npm_and_yarn/types/node-15.12.2
Bump @types/node from 14.17.3 to 15.12.2
2021-06-11 14:03:13 -04:00
Tom Hu
fe4ed48250 Merge pull request #365 from codecov/pull-version-from-package
refactor: Pull version from package.json
2021-06-11 14:02:32 -04:00
Tom Hu
0a2a5814db Merge pull request #364 from codecov/remove-write-and-unlink
refactor: remove unneeded codecov copy and unlink
2021-06-11 13:42:57 -04:00
Tom Hu
b265804b8f refactor: Pull version from package.json 2021-06-11 13:39:16 -04:00
Tom Hu
861141ec76 refactor: remove unneeded codecov copy and unlink 2021-06-11 13:20:20 -04:00
dependabot[bot]
61af985317 Bump @types/node from 14.17.3 to 15.12.2
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.17.3 to 15.12.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-11 17:02:43 +00:00
Tom Hu
bb99ca5cc2 Merge pull request #359 from codecov/refactor-deps
refactor: dependencies and dev dependencies
2021-06-11 13:00:36 -04:00
Tom Hu
6a3e4db5e8 Use node12 as node14 is not supported 2021-06-11 10:08:21 -04:00
Tom Hu
26c5f5e6b3 Do not automatically fix eslint issues 2021-06-11 10:05:06 -04:00
Tom Hu
7e6a9d42b7 Remove old deps and bump Node to 14 2021-06-11 10:00:45 -04:00
Tom Hu
2d78cca173 refactor: dependencies and dev dependencies 2021-06-10 22:21:02 -04:00
Tom Hu
ae8835afc4 Merge pull request #358 from codecov/use-4.3.2-ts
fix: Build with ts-4.3.2
2021-06-10 22:03:09 -04:00
Tom Hu
6c61a504e3 fix: Build with ts-4.3.2 2021-06-10 20:59:37 -04:00
Tom Hu
28b82119da Merge pull request #347 from RA80533/deps/install-node-types
deps: install @types/node@14.17.3
2021-06-10 15:19:20 -04:00
Tom Hu
ccdd5a11a4 Merge pull request #357 from RA80533/fix/pre-commit
Add `set -e` to pre-commit hook
2021-06-10 15:18:48 -04:00
Tom Hu
a9bf7a39e6 Merge pull request #344 from codecov/dependabot/npm_and_yarn/jest-junit-12.2.0
Bump jest-junit from 12.1.0 to 12.2.0
2021-06-10 15:17:42 -04:00
RA80533
98a1251dbc Add set -e to pre-commit hook 2021-06-10 13:28:49 -04:00
RA80533
265c6565d0 deps: install @types/node@14.17.3 2021-06-10 09:52:15 -04:00
dependabot[bot]
6c58d35c22 Bump jest-junit from 12.1.0 to 12.2.0
Bumps [jest-junit](https://github.com/jest-community/jest-junit) from 12.1.0 to 12.2.0.
- [Release notes](https://github.com/jest-community/jest-junit/releases)
- [Commits](https://github.com/jest-community/jest-junit/compare/v12.1.0...v12.2.0)

---
updated-dependencies:
- dependency-name: jest-junit
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-10 05:07:11 +00:00
24 changed files with 50618 additions and 10143 deletions

View File

@@ -5,7 +5,9 @@
"es2021": true
},
"extends": [
"google"
"google",
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
@@ -15,5 +17,6 @@
"@typescript-eslint"
],
"rules": {
"linebreak-style": 0
}
}

View File

@@ -2,7 +2,10 @@ name: Workflow for Codecov Action
on: [push, pull_request]
jobs:
run:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
steps:
- name: Checkout
uses: actions/checkout@v2
@@ -11,17 +14,17 @@ jobs:
- name: Lint
run: npm run lint
- name: Run tests and collect coverage
run: yarn run test
run: npm run test
- name: Upload coverage to Codecov (script)
uses: ./
with:
files: ./coverage/script/coverage-final.json
flags: script,${{ matrix.os }}
name: codecov-script
- name: Upload coverage to Codecov (demo)
uses: ./
with:
files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json
file: ./coverage/coverage-final.json
flags: demo
flags: demo,${{ matrix.os }}
name: codecov-demo
- name: Upload coverage to Codecov (script)
uses: ./
with:
files: ./coverage/script/coverage-final.json
flags: script
name: codecov-script

View File

@@ -1,3 +1,19 @@
## 2.0.0
On February 1, 2022, the `v1` uploader will be full sunset and no longer function. This is due
to the deprecation of the underlying bash uploader. This version uses the new [uploader](https://github.com/codecov/uploader).
The `v2` Action downloads, verifies, and runs the Codecov binary.
### Breaking Changes
- Multiple fields have not been transferred from the bash uploader or have been deprecated. Notably
many of the `functionalities` and `gcov_` arguments have been removed. Please check the documentation
for the full list.
### Features
- `dry-run` argument allows Codecov flow without uploading reports to Codecov
- (Enterprise only) `slug` allows specifying the repository slug manually
- (Enterprise only) `url` allows changing the upload host
## 1.5.2
### Fixes
- # fix: Import version properly as string not object

View File

@@ -7,9 +7,24 @@
>The latest release of this Action adds support for tokenless uploads from GitHub Actions!
## ⚠️ Deprecration of v1
**On February 1, 2022, this version will be fully sunset and no longer function**
Due to the [deprecation](https://about.codecov.io/blog/introducting-codecovs-new-uploader/) of the underlying bash uploader,
the Codecov GitHub Action has released `v2` which will use the new [uploader](https://github.com/codecov/uploader). You can learn
more about our deprecation plan and the new uploader on our [blog](https://about.codecov.io/blog/introducing-codecovs-new-uploader/).
We will be restricting any updates to the `v1` Action to security updates and hotfixes.
### Migration from `v1` to `v2`
The `v2` uploader has a few breaking changes for users
- Multiple fields have not been transferred from the bash uploader or have been deprecated. Notably
many of the `functionalities` and `gcov_` arguments have been removed. Please check the documentation
below for the full list.
## Usage
To integrate Codecov with your Actions pipeline, specify the name of this repository with a tag number (`@v1` is recommended) as a `step` within your `workflow.yml` file.
To integrate Codecov with your Actions pipeline, specify the name of this repository with a tag number (`@v2` is recommended) as a `step` within your `workflow.yml` file.
If you have a *private repository*, this Action also requires you to [provide an upload token](https://docs.codecov.io/docs/frequently-asked-questions#section-where-is-the-repository-upload-token-found-) from [codecov.io](https://www.codecov.io) (tip: in order to avoid exposing your token, store it as a `secret`). Optionally, you can choose to include up to four additional inputs to customize the upload context. **For public repositories, no token is needed**
@@ -18,7 +33,7 @@ Inside your `.github/workflows/workflow.yml` file:
```yaml
steps:
- uses: actions/checkout@master
- uses: codecov/codecov-action@v1
- uses: codecov/codecov-action@v2
with:
token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
files: ./coverage1.xml,./coverage2.xml # optional
@@ -38,29 +53,14 @@ Codecov's Action currently supports five inputs from the user: `token`, `file`,
| `token` | Used to authorize coverage report uploads | *Required for private repos* |
| `files` | Comma-separated paths to the coverage report(s) | Optional
| `directory` | Directory to search for coverage reports. | Optional
| `dry_run` | Don't upload files to Codecov | Optional
| `flags` | Flag the upload to group coverage metrics (unittests, uitests, etc.). Multiple flags are separated by a comma (ui,chrome) | Optional
| | |
| `aws_curl_args` | Extra curl arguments to communicate with AWS. | Optional
| `codecov_curl_args` | Extra curl arguments to communicate with Codecov. e.g., -U "--proxy http://http-proxy" | Optional
| `commit_parent` | The commit SHA of the parent for which you are uploading coverage. If not present, the parent will be determined using the API of your repository provider. When using the repository provider's API, the parent is determined via finding the closest ancestor to the commit. | Optional
| `env_vars` | Environment variables to tag the upload with. Multiple env variables can be separated with commas (e.g. `OS,PYTHON`) | Optional
| `fail_ci_if_error` | Specify if CI pipeline should fail when Codecov runs into errors during upload. *Defaults to **false*** | Optional
| `functionalities` | Toggle functionalities | Optional
| | `coveragepy` Disable python coverage |
| | `fix` Disable report fixing |
| | `gcov` Disable gcov |
| | `gcovout` Disable gcov output |
| | `html` Enable coverage for HTML files |
| | `network` Disable uploading the file network |
| | `recursesubs` Enable recurse submodules in git projects when searching for source files | |
| | `search` Disable searching for reports |
| | `xcode` Disable xcode processing |
| `gcov_path_include` | Paths to include during gcov gathering (as a glob) | Optional
| `gcov_args` | extra arguments to pass to gcov | Optional
| `gcov_executable` | gcov executable to run. Defaults to 'gcov' | Optional
| `gcov_path_exclude` | Paths to ignore during gcov gathering (as a glob) | Optional
| `gcov_prefix` | Prefix filepaths to help resolve path fixing | Optional
| `gcov_root_dir` | Project root directory, also used when preparing gcov | Optional
-| `functionalities` | Toggle functionalities | Optional
-| | `network` Disable uploading the file network |
| `move_coverage_to_trash` | Move discovered coverage reports to the trash | Optional
| `name` | Custom defined name for the upload | Optional
| `override_branch` | Specify the branch name | Optional
@@ -70,10 +70,10 @@ Codecov's Action currently supports five inputs from the user: `token`, `file`,
| `override_tag` | Specify the git tag | Optional
| `path_to_write_report` | Write upload file to path before uploading | Optional
| `root_dir` | Used when not in git/hg project to identify project root directory | Optional
| `slug` | Specify the slug manually (Enterprise use) | Optional
| `url` | Change the upload host (Enterprise use) | Optional
| `verbose` | Specify whether the Codecov output should be verbose | Optional
| `working-directory` | Directory in which to execute `codecov.sh` | Optional
| `xcode_derived_data` | Custom Derived Data Path for Coverage.profdata and gcov processing | Optional
| `xcode_package` | Specify packages to build coverage. Uploader will only build these packages. This can significantly reduces time to build coverage reports. -J 'MyAppName' Will match "MyAppName" and "MyAppNameTests" -J '^ExampleApp$' Will match only "ExampleApp" not "ExampleAppTests" | Optional
### Example `workflow.yml` with Codecov Action
@@ -101,15 +101,15 @@ jobs:
pip install pytest-cov
pytest --cov=./ --cov-report=xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
uses: codecov/codecov-action@v2
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage1.xml,./coverage2.xml
directory: ./coverage/reports/
flags: unittests
env_vars: OS,PYTHON
name: codecov-umbrella
fail_ci_if_error: true
files: ./coverage1.xml,./coverage2.xml
flags: unittests
name: codecov-umbrella
path_to_write_report: ./coverage/codecov_report.txt
verbose: true
```
@@ -121,5 +121,4 @@ Contributions are welcome! Check out the [Contribution Guide](CONTRIBUTING.md).
The code in this project is released under the [MIT License](LICENSE).
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcodecov%2Fcodecov-action.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fcodecov%2Fcodecov-action?ref=badge_large)

View File

@@ -14,15 +14,12 @@ inputs:
flags:
description: 'Flag upload to group coverage metrics (e.g. unittests | integration | ui,chrome)'
required: false
aws_curl_args:
description: 'Extra curl arguments to communicate with AWS.'
required: false
codecov_curl_args:
description: 'Extra curl arguments to communicate with Codecov. e.g., -U "--proxy http://http-proxy"'
required: false
commit_parent:
description: 'The commit SHA of the parent for which you are uploading coverage. If not present, the parent will be determined using the API of your repository provider. When using the repository providers API, the parent is determined via finding the closest ancestor to the commit.'
required: false
dry_run:
description: "Don't upload files to Codecov"
required: false
env_vars:
description: 'Environment variables to tag the upload with (e.g. PYTHON | OS,PYTHON)'
required: false
@@ -35,33 +32,12 @@ inputs:
functionalities:
description: 'Comma-separated list, see the README for options and their usage'
required: false
gcov_args:
description: 'extra arguments to pass to gcov'
required: false
gcov_executable:
description: 'gcov executable to run. Defaults to gcov'
required: false
gcov_path_exclude:
description: 'Paths to ignore during gcov gathering (as a glob)'
required: false
gcov_path_include:
description: 'Paths to include during gcov gathering (as a glob)'
required: false
gcov_prefix:
description: 'Prefix filepaths to help resolve path fixing'
required: false
gcov_root_dir:
description: 'Project root directory, also used when preparing gcov'
required: false
move_coverage_to_trash:
description: 'Move discovered coverage reports to the trash'
required: false
name:
description: 'User defined upload name. Visible in Codecov UI'
required: false
network_filter:
description: 'Used to restrict the set of git/hg files that can be matched with filenames in the coverage report. This is useful for monorepos or other setups where a full filepath may not be specified in the coverage report, and that shortened filepath may appear multiple times in a directory structure (e.g. __init__.py)'
required: false
override_branch:
description: 'Specify the branch name'
required: false
@@ -77,24 +53,21 @@ inputs:
override_tag:
description: 'Specify the git tag'
required: false
path_to_write_report:
description: 'Write upload file to path before uploading'
required: false
root_dir:
description: 'Used when not in git/hg project to identify project root directory'
required: false
slug:
description: 'Specify the slug manually (Enterprise use)'
required: false
url:
description: 'Change the upload host (Enterprise use)'
required: false
verbose:
description: 'Specify whether the Codecov output should be verbose'
required: false
working-directory:
description: 'Directory in which to execute codecov.sh'
required: false
xcode_derived_data:
description: 'Custom Derived Data Path for Coverage.profdata and gcov processing'
required: false
xcode_package:
description: 'Specify packages to build coverage. Uploader will only build these packages'
required: false
branding:
color: 'red'
icon: 'umbrella'

View File

@@ -1,11 +1,11 @@
import Calculator from './calculator'
import Calculator from './calculator';
test('adds 2 + 3 to equal 5', () => {
const calc = new Calculator()
const calc = new Calculator();
expect(calc.add(2, 3)).toBe(5);
});
test('subtracts 2 - 3 to equal -1', () => {
const calc = new Calculator()
const calc = new Calculator();
expect(calc.subtract(2, 3)).toBe(-1);
});

View File

@@ -1,4 +1,4 @@
import Coverage from "./coverage";
import Coverage from './coverage';
test('test uncovered if', () => {
const coverageObj = new Coverage();

1883
dist/codecov vendored

File diff suppressed because it is too large Load Diff

53493
dist/index.js vendored

File diff suppressed because one or more lines are too long

52
dist/pgp_keys.asc vendored Normal file
View File

@@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=ch7z
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -1,8 +1,9 @@
#!/usr/bin/env bash
npm i --package-lock-only
npm run lint --fix
set -e
npm install
npm run lint
npm run build
git add src/
git add dist/
git add package-lock.json

View File

@@ -1,4 +1,4 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
}
};

2676
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,15 @@
{
"name": "codecov-action",
"version": "1.5.2",
"version": "2.0.0",
"description": "Upload coverage reports to Codecov from GitHub Actions",
"main": "index.js",
"scripts": {
"lint": "eslint src/*.*",
"test": "yarn run test-script && yarn run test-calculator && yarn run test-coverage",
"build": "ncc build src/index.ts",
"lint": "eslint src/**/*.ts",
"test": "npm run test-script && npm run test-calculator && npm run test-coverage",
"test-calculator": "jest --testPathPattern=demo/calculator/ --coverage --coverageDirectory=coverage/calculator",
"test-coverage": "jest --testPathPattern=demo/coverage-test/ --coverage --coverageDirectory=coverage/coverage-test",
"test-script": "jest --testPathPattern=src/ --coverage --coverageDirectory=coverage/script",
"build": "ncc build src/index.ts"
"test-script": "jest --testPathPattern=src/ --coverage --coverageDirectory=coverage/script"
},
"repository": {
"type": "git",
@@ -26,20 +26,20 @@
"@actions/core": "^1.4.0",
"@actions/exec": "^1.1.0",
"@actions/github": "^5.0.0",
"@types/jest": "^26.0.23",
"@zeit/ncc": "^0.22.3",
"fs": "0.0.1-security",
"jest": "^26.6.3",
"jest-junit": "^12.1.0",
"request": "^2.88.2",
"ts-jest": "^26.5.6",
"typescript": "^4.3.2",
"yarn": "^1.22.10"
"node-fetch": "^2.6.1",
"openpgp": "^4.10.10"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.26.1",
"@typescript-eslint/parser": "^4.26.1",
"eslint": "^7.28.0",
"eslint-config-google": "^0.14.0"
"@types/jest": "^26.0.24",
"@types/node": "^16.0.1",
"@typescript-eslint/eslint-plugin": "^4.28.3",
"@typescript-eslint/parser": "^4.28.3",
"@vercel/ncc": "^0.28.6",
"eslint": "^7.30.0",
"eslint-config-google": "^0.14.0",
"jest": "^26.6.3",
"jest-junit": "^12.2.0",
"ts-jest": "^26.5.6",
"typescript": "^4.3.5"
}
}

View File

@@ -1,88 +1,74 @@
import buildExec from './buildExec';
const github = require('@actions/github');
import * as github from '@actions/github';
import VERSION from './version';
import buildExec from './buildExec';
/* eslint-disable @typescript-eslint/no-var-requires */
const {version} = require('../package.json');
const context = github.context;
test('no arguments', () => {
const {execArgs, filepath, failCi} = buildExec();
const {execArgs, failCi} = buildExec();
const args = [
'codecov.sh',
'-n',
'',
'-F',
'',
'-Q',
`github-action-${VERSION}`,
`github-action-${version}`,
];
if (context.eventName == 'pull_request') {
args.push('-C', `${context.payload.pull_request.head.sha}`);
}
expect(execArgs).toEqual(args);
expect(filepath).toEqual('codecov.sh');
expect(failCi).toBeFalsy();
});
test('all arguments', () => {
const envs = {
'move_coverage_to_trash': 'true',
'commit_parent': '83231650328f11695dfb754ca0f540516f188d27',
'aws_curl_args': '--timeout 1',
'codecov_curl_args': '--timeout 2',
'directory': 'coverage/',
'dry_run': 'true',
'env_vars': 'OS,PYTHON',
'fail_ci_if_error': 'true',
'file': 'coverage.xml',
'files': 'dir1/coverage.xml,dir2/coverage.xml',
'flags': 'test',
'flags': 'test,test2',
'functionalities':
'gcov,coveragepy,fix,search,code,network,gcovout,html,recursesubs',
'gcov_args': '--timeout 3',
'gcov_root_dr': 'gcov_dir/',
'gcov_path_exclude': '**/exclude-dir/*.*',
'gcov_executable': 'gcov',
'gcov_path_include': '**/include-dir/*.*',
'gcov_prefix': 'demo',
'network',
'move_coverage_to_trash': 'true',
'name': 'codecov',
'network_filter': 'dir1',
'override_branch': 'thomasrockhu/test',
'override_build': '1',
'override_commit': '9caabca5474b49de74ef5667deabaf74cdacc244',
'override_pr': '2',
'override_tag': 'v1.2',
'path_to_write_report': 'codecov/',
'root_dir': 'root/',
'directory': 'coverage/',
'slug': 'fakeOwner/fakeRepo',
'token': 'd3859757-ab80-4664-924d-aef22fa7557b',
'url': 'https://codecov.enterprise.com',
'verbose': 't',
'working-directory': 'src',
'path_to_write_report': 'codecov/',
'xcode_derived_data': '~/Library/Developer/Xcode/DerivedData',
'xcode_package': 'MyApp',
};
for (const env of Object.keys(envs)) {
process.env['INPUT_' + env.toUpperCase()] = envs[env];
}
const {execArgs, filepath, failCi} = buildExec();
const {execArgs, failCi} = buildExec();
expect(execArgs).toEqual([
'src/codecov.sh',
'-n',
'codecov',
'-F',
'test',
'-Q',
`github-action-${VERSION}`,
`github-action-${version}`,
'-c',
'-N',
'83231650328f11695dfb754ca0f540516f188d27',
'-A',
'--timeout 1',
'-U',
'--timeout 2',
'-d',
'-e',
'OS,PYTHON',
'-X',
'network',
'-Z',
'-f',
'coverage.xml',
@@ -90,36 +76,10 @@ test('all arguments', () => {
'dir1/coverage.xml',
'-f',
'dir2/coverage.xml',
'-X',
'gcov',
'-X',
'coveragepy',
'-X',
'fix',
'-X',
'search',
'-X',
'code',
'-X',
'network',
'-X',
'gcovout',
'-X',
'html',
'-X',
'recursesubs',
'-a',
'--timeout 3',
'-g',
'**/exclude-dir/*.*',
'-x',
'gcov',
'-G',
'**/include-dir/*.*',
'-k',
'demo',
'-i',
'dir1',
'-F',
'test',
'-F',
'test2',
'-B',
'thomasrockhu/test',
'-b',
@@ -134,15 +94,12 @@ test('all arguments', () => {
'root/',
'-s',
'coverage/',
'-r',
'fakeOwner/fakeRepo',
'-u',
'https://codecov.enterprise.com',
'-v',
'-q',
'codecov/',
'-D',
'~/Library/Developer/Xcode/DerivedData',
'-J',
'MyApp',
]);
expect(filepath).toEqual('src/codecov.sh');
expect(failCi).toBeTruthy();
for (const env of Object.keys(envs)) {

View File

@@ -1,7 +1,8 @@
const core = require('@actions/core');
const github = require('@actions/github');
import * as core from '@actions/core';
import * as github from '@actions/github';
import VERSION from './version';
/* eslint-disable @typescript-eslint/no-var-requires */
const {version} = require('../package.json');
const context = github.context;
@@ -19,22 +20,14 @@ const isTrue = (variable) => {
const buildExec = () => {
const clean = core.getInput('move_coverage_to_trash');
const commitParent = core.getInput('commit_parent');
const curlAwsArgs = core.getInput('aws_curl_args');
const curlCodecovArgs = core.getInput('codecov_curl_args');
const envVars = core.getInput('env_vars');
const dryRun = isTrue(core.getInput('dry_run'));
const failCi = isTrue(core.getInput('fail_ci_if_error'));
const file = core.getInput('file');
const files = core.getInput('files');
const flags = core.getInput('flags');
const functionalities = core.getInput('functionalities');
const gcovArgs = core.getInput('gcov_args');
const gcovDir = core.getInput('gcov_root_dir');
const gcovExclude = core.getInput('gcov_path_exclude');
const gcovExec = core.getInput('gcov_executable');
const gcovInclude = core.getInput('gcov_path_include');
const gcovPrefix = core.getInput('gcov_prefix');
const name = core.getInput('name');
const networkFilter = core.getInput('network_filter');
const overrideBranch = core.getInput('override_branch');
const overrideBuild = core.getInput('override_build');
const overrideCommit = core.getInput('override_commit');
@@ -42,24 +35,18 @@ const buildExec = () => {
const overrideTag = core.getInput('override_tag');
const rootDir = core.getInput('root_dir');
const searchDir = core.getInput('directory');
const slug = core.getInput('slug');
const token = core.getInput('token');
const verbose = isTrue(core.getInput('verbose'));
const url = core.getInput('url');
const workingDir = core.getInput('working-directory');
const writePath = core.getInput('path_to_write_report');
const xcodeDerivedData = core.getInput('xcode_derived_data');
const xcodePackage = core.getInput('xcode_package');
const filepath = workingDir ?
workingDir + '/codecov.sh' : 'codecov.sh';
const execArgs = [filepath];
const execArgs = [];
execArgs.push(
'-n',
`${name}`,
'-F',
`${flags}`,
'-Q',
`github-action-${VERSION}`,
`github-action-${version}`,
);
const options:any = {};
@@ -90,15 +77,17 @@ const buildExec = () => {
if (commitParent) {
execArgs.push('-N', `${commitParent}`);
}
if (curlAwsArgs) {
execArgs.push('-A', `${curlAwsArgs}`);
}
if (curlCodecovArgs) {
execArgs.push('-U', `${curlCodecovArgs}`);
if (dryRun) {
execArgs.push('-d');
}
if (envVarsArg.length) {
execArgs.push('-e', envVarsArg.join(','));
}
if (functionalities) {
functionalities.split(',').forEach((f) => {
execArgs.push('-X', `${f}`);
});
}
if (failCi) {
execArgs.push('-Z');
}
@@ -110,32 +99,11 @@ const buildExec = () => {
execArgs.push('-f', `${f}`);
});
}
if (functionalities) {
functionalities.split(',').forEach((f) => {
execArgs.push('-X', `${f}`);
if (flags) {
flags.split(',').forEach((f) => {
execArgs.push('-F', `${f}`);
});
}
if (gcovArgs) {
execArgs.push('-a', `${gcovArgs}`);
}
if (gcovDir) {
execArgs.push('-p', `${gcovDir}`);
}
if (gcovExclude) {
execArgs.push('-g', `${gcovExclude}`);
}
if (gcovExec) {
execArgs.push('-x', `${gcovExec}`);
}
if (gcovInclude) {
execArgs.push('-G', `${gcovInclude}`);
}
if (gcovPrefix) {
execArgs.push('-k', `${gcovPrefix}`);
}
if (networkFilter) {
execArgs.push('-i', `${networkFilter}`);
}
if (overrideBranch) {
execArgs.push('-B', `${overrideBranch}`);
}
@@ -166,23 +134,20 @@ const buildExec = () => {
if (searchDir) {
execArgs.push('-s', `${searchDir}`);
}
if (slug) {
execArgs.push('-r', `${slug}`);
}
if (url) {
execArgs.push('-u', `${url}`);
}
if (verbose) {
execArgs.push('-v');
}
if (workingDir) {
options.cwd = workingDir;
}
if (writePath) {
execArgs.push('-q', `${writePath}`);
}
if (xcodeDerivedData) {
execArgs.push('-D', `${xcodeDerivedData}`);
}
if (xcodePackage) {
execArgs.push('-J', `${xcodePackage}`);
}
return {execArgs, options, filepath, failCi};
return {execArgs, options, failCi};
};
export default buildExec;

File diff suppressed because it is too large Load Diff

41
src/helpers.ts Normal file
View File

@@ -0,0 +1,41 @@
import * as core from '@actions/core';
const PLATFORMS = ['alpine', 'linux', 'macos', 'windows'];
const setFailure = (message: string, failCi: boolean): void => {
failCi ? core.setFailed(message) : core.warning(message);
if (failCi) {
process.exit();
}
};
const getUploaderName = (): string => {
if (isWindows()) {
return 'codecov.exe';
} else {
return 'codecov';
}
};
const isValidPlatform = (): boolean => {
return PLATFORMS.includes(getPlatform());
};
const isWindows = (): boolean => {
return getPlatform() === 'windows';
};
const getPlatform = (): string => {
return process.env.RUNNER_OS.toLowerCase();
};
const BASEURL = `https://uploader.codecov.io/latest/${getPlatform()}/${getUploaderName()}`;
export {
BASEURL,
getPlatform,
getUploaderName,
isValidPlatform,
isWindows,
setFailure,
};

View File

@@ -1,51 +1,69 @@
const core = require('@actions/core');
const exec = require('@actions/exec');
import * as fs from 'fs';
import * as https from 'https';
import * as path from 'path';
const fs = require('fs');
import * as exec from '@actions/exec';
import buildExec from './buildExec';
import {
BASEURL,
getPlatform,
getUploaderName,
isValidPlatform,
setFailure,
} from './helpers';
const codecovScript = fs.readFileSync(__dirname + '/codecov');
import verify from './validate';
let failCi;
try {
const {execArgs, options, filepath, failCi} = buildExec();
fs.writeFile(filepath, codecovScript, (err) => {
if (err && failCi) {
throw err;
} else if (err) {
core.warning(`Codecov warning: ${err.message}`);
}
exec.exec('bash', execArgs, options)
.catch((err) => {
if (failCi) {
core.setFailed(
`Codecov failed with the following error: ${err.message}`,
const {execArgs, options, failCi} = buildExec();
const platform = getPlatform();
if (!isValidPlatform()) {
setFailure(
`Codecov: Encountered an unexpected platform: ${platform}`,
failCi,
);
} else {
core.warning(`Codecov warning: ${err.message}`);
}
})
.then(() => {
unlinkFile();
});
const filename = path.join( __dirname, getUploaderName());
https.get(BASEURL, (res) => {
// Image will be stored at this path
const filePath = fs.createWriteStream(filename);
res.pipe(filePath);
filePath
.on('error', (err) => {
setFailure(
`Codecov: Failed to write uploader binary: ${err.message}`,
true,
);
}).on('finish', async () => {
filePath.close();
const unlinkFile = () => {
fs.unlink(filepath, (err) => {
if (err && failCi) {
throw err;
} else if (err) {
core.warning(`Codecov warning: ${err.message}`);
await verify(filename);
await fs.chmodSync(filename, '777');
const unlink = () => {
fs.unlink(filename, (err) => {
if (err) {
setFailure(
`Codecov: Could not unlink uploader: ${err.message}`,
failCi,
);
}
});
};
await exec.exec(filename, execArgs, options)
.catch((err) => {
setFailure(
`Codecov: Failed to properly upload: ${err.message}`,
failCi,
);
}).then(() => {
unlink();
});
} catch (error) {
if (failCi) {
core.setFailed(`Codecov failed with the following error: ${error.message}`);
} else {
core.warning(`Codecov warning: ${error.message}`);
}
});
});
} catch (err) {
setFailure(`Codecov: Encountered an unexpected error ${err.message}`, failCi);
}

52
src/pgp_keys.asc Normal file
View File

@@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=ch7z
-----END PGP PUBLIC KEY BLOCK-----

69
src/validate.ts Normal file
View File

@@ -0,0 +1,69 @@
import * as crypto from 'crypto';
import * as fs from 'fs';
import * as path from 'path';
import * as core from '@actions/core';
import * as openpgp from 'openpgp';
import * as fetch from 'node-fetch';
import {
BASEURL,
getUploaderName,
setFailure,
} from './helpers';
const verify = async (filename: string) => {
try {
const uploaderName = getUploaderName();
// Read in public key
const publicKeyArmored = await fs.readFileSync(
path.join(__dirname, 'pgp_keys.asc'),
'utf-8',
);
// Get SHASUM and SHASUM signature files
const shasumRes = await fetch( `${BASEURL}.SHA256SUM`);
const shasum = await shasumRes.text();
const shaSigRes = await fetch( `${BASEURL}.SHA256SUM.sig`);
const shaSig = await shaSigRes.text();
// Verify shasum
const verified = await openpgp.verify({
message: await openpgp.cleartext.fromText(shasum),
signature: await openpgp.signature.readArmored(shaSig),
publicKeys: (await openpgp.key.readArmored(publicKeyArmored)).keys,
});
const {valid} = verified.signatures[0];
if (valid) {
core.info('==> SHASUM file signed by key id ' +
verified.signatures[0].keyid.toHex(),
);
} else {
setFailure('Codecov: Error validating SHASUM signature', true);
}
// Verify uploader
const uploaderSha = crypto.createHash(`sha256`);
const stream = fs.createReadStream(filename);
await stream
.on('data', (data) => {
uploaderSha.update(data);
}).on('end', async () => {
const hash = `${uploaderSha.digest('hex')} ${uploaderName}`;
if (hash !== shasum) {
setFailure(
'Codecov: Uploader shasum does not match ' +
`uploader hash: ${hash}, public hash: ${shasum}`,
true,
);
} else {
core.info('==> Uploader SHASUM verified');
}
});
} catch (err) {
setFailure(`Codecov: Error validating uploader: ${err.message}`, true);
}
};
export default verify;

View File

@@ -1,3 +0,0 @@
const VERSION = 'v1.5.2';
export default VERSION;

View File

@@ -1,5 +1,15 @@
{
"compilerOptions": {
"esModuleInterop": true,
"moduleResolution": "node",
"outDir": "./dist",
"rootDir": "./src",
"sourceMap": true
},
"include": [
"src"
"src/**/*.ts"
],
"exclude": [
"src/**/*.test.ts"
]
}