diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..a31470ac6 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,19 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es2021": true + }, + "extends": [ + "google" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 12 + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + } +} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f3fa50d2d..c4ccb0351 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,23 +5,25 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@master + uses: actions/checkout@v2 + with: + fetch-depth: 2 - name: Install dependencies run: npm install + - name: Lint + run: npm run lint - name: Run tests and collect coverage - run: yarn run test-all - - name: Upload coverage to Codecov + run: yarn run test + - name: Upload coverage to Codecov (demo) uses: ./ with: - files: ./coverage/calculator/coverage-final.json,./coverage/index/coverage-final.json + files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json file: ./coverage/coverage-final.json - flags: unittest - name: codecov-1 - - name: Upload coverage to Codecov (verbose) + flags: demo + name: codecov-demo + - name: Upload coverage to Codecov (script) uses: ./ with: - files: ./coverage/calculator/coverage-final.json,./coverage/index/coverage-final.json - file: ./coverage/coverage-final.json - flags: unittest - name: codecov-1 - verbose: true + files: ./coverage/script/coverage-final.json + flags: script + name: codecov-script diff --git a/CHANGELOG.md b/CHANGELOG.md index d416f2ef5..45fac3847 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +### 1.2.0 + +#### Features +- #193 Add all the bash params + +#### Fixes +- #193 Fixes issue with working-directory + ### 1.1.1 #### Fixes diff --git a/README.md b/README.md index 4025d1308..94b726f66 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,6 @@ steps: - uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos - file: ./coverage.xml # optional files: ./coverage1.xml,./coverage2.xml # optional flags: unittests # optional name: codecov-umbrella # optional @@ -36,14 +35,40 @@ Codecov's Action currently supports five inputs from the user: `token`, `file`, | Input | Description | Usage | | :---: | :---: | :---: | | `token` | Used to authorize coverage report uploads | *Required for private repos* | -| `file` | Path to the coverage report(s) | Optional | `files` | Comma-separated paths to the coverage report(s) | Optional | `directory` | Directory to search for coverage reports. | 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 -| `name` | Custom defined name for the upload | 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 +| `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 +| `override_build` | Specify the build number | Optional +| `override_commit` | Specify the commit SHA | Optional +| `override_pr` | Specify the pull request number | Optional +| `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 | `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 @@ -78,7 +103,6 @@ jobs: uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} - file: ./coverage.xml files: ./coverage1.xml,./coverage2.xml directory: ./coverage/reports/ flags: unittests diff --git a/src/calculator/calculator.test.ts b/demo/calculator/calculator.test.ts similarity index 100% rename from src/calculator/calculator.test.ts rename to demo/calculator/calculator.test.ts diff --git a/src/calculator/calculator.ts b/demo/calculator/calculator.ts similarity index 100% rename from src/calculator/calculator.ts rename to demo/calculator/calculator.ts diff --git a/demo/coverage-test/coverage.test.ts b/demo/coverage-test/coverage.test.ts new file mode 100644 index 000000000..9851ebdba --- /dev/null +++ b/demo/coverage-test/coverage.test.ts @@ -0,0 +1,11 @@ +import Coverage from "./coverage"; + +test('test uncovered if', () => { + const coverageObj = new Coverage(); + expect(coverageObj.uncovered_if()).toEqual(false); +}); + +test('fully covered', () => { + const coverageObj = new Coverage(); + expect(coverageObj.fully_covered()).toEqual(true); +}); diff --git a/src/index/index.ts b/demo/coverage-test/coverage.ts similarity index 91% rename from src/index/index.ts rename to demo/coverage-test/coverage.ts index 24e5c24b2..f6d7bb704 100644 --- a/src/index/index.ts +++ b/demo/coverage-test/coverage.ts @@ -1,4 +1,4 @@ -export default class Index { +export default class Coverage { //This function is tested and part of it is uncovered uncovered_if = (a = true) => { diff --git a/dist/index.js b/dist/index.js index 3677daaab..453b59634 100644 --- a/dist/index.js +++ b/dist/index.js @@ -40,7 +40,7 @@ module.exports = /******/ // the startup function /******/ function startup() { /******/ // Load entry module and return exports -/******/ return __webpack_require__(104); +/******/ return __webpack_require__(325); /******/ }; /******/ // initialize runtime /******/ runtime(__webpack_require__); @@ -2511,218 +2511,7 @@ exports.issueCommand = issueCommand; /***/ }), /* 103 */, -/* 104 */ -/***/ (function(__unusedmodule, __unusedexports, __webpack_require__) { - -const core = __webpack_require__(470); -const exec = __webpack_require__(986); -const fs = __webpack_require__(747); -const request = __webpack_require__(335); - -let fail_ci; -let verbose; -try { - const name = core.getInput("name"); - const token = core.getInput("token"); - const flags = core.getInput("flags"); - const file = core.getInput("file"); - const files = core.getInput("files"); - const env_vars = core.getInput("env_vars"); - const dir = core.getInput("directory"); - const write_path = core.getInput("path_to_write_report"); - const working_dir = core.getInput("working-directory"); - const xcode_derived_data = core.getInput("xcode_derived_data"); - const xcode_package = core.getInput("xcode_package"); - - fail_ci = core.getInput("fail_ci_if_error").toLowerCase(); - verbose = core.getInput("verbose").toLowerCase(); - - if ( - fail_ci === "yes" || - fail_ci === "y" || - fail_ci === "true" || - fail_ci === "t" || - fail_ci === "1" - ) { - fail_ci = true; - } else { - fail_ci = false; - } - - if ( - verbose === "yes" || - verbose === "y" || - verbose === "true" || - verbose === "t" || - verbose === "1" - ) { - verbose = true; - } else { - verbose = false; - } - - request({ - json: false, - maxAttempts: 10, - timeout: 3000, - url: "https://codecov.io/bash" - }, (error, response, body) => { - try { - if (error && fail_ci) { - throw error; - } else if (error) { - core.warning(`Codecov warning: ${error.message}`); - } - - fs.writeFile("codecov.sh", body, err => { - if (err && fail_ci) { - throw err; - } else if (err) { - core.warning(`Codecov warning: ${err.message}`); - } - - let output = ""; - let execError = ""; - const options = {}; - options.listeners = { - stdout: data => { - output += data.toString(); - }, - stderr: data => { - execError += data.toString(); - } - }; - - options.env = Object.assign(process.env, { - GITHUB_ACTION: process.env.GITHUB_ACTION, - GITHUB_RUN_ID: process.env.GITHUB_RUN_ID, - GITHUB_REF: process.env.GITHUB_REF, - GITHUB_REPOSITORY: process.env.GITHUB_REPOSITORY, - GITHUB_SHA: process.env.GITHUB_SHA, - GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '' - }); - - if(token){ - options.env.CODECOV_TOKEN = token - } - - const env_vars_arg = [] - for (let env_var of env_vars.split(",")) { - let env_var_clean = env_var.trim(); - if (env_var_clean) { - options.env[env_var_clean] = process.env[env_var_clean]; - env_vars_arg.push(env_var_clean) - } - } - - const execArgs = ["codecov.sh"]; - execArgs.push("-Q", "github-action"); - - if (file) { - execArgs.push( - "-f", `${file}` - ); - } - - if (files) { - files.split(',').forEach(f => { - execArgs.push( - "-f", `${f}` - ); - }); - } - - if (dir) { - execArgs.push( - "-s", `${dir}` - ); - } - - execArgs.push( - "-n", `${name}`, - "-F", `${flags}` - ); - - if (fail_ci) { - execArgs.push( - "-Z" - ); - } - - if (env_vars_arg.length) { - execArgs.push( - "-e", env_vars_arg.join(",") - ); - } - - if (write_path) { - execArgs.push( - "-q", `${write_path}` - ); - } - - if (verbose) { - execArgs.push( - "-v" - ); - } - - if (working_dir) { - options.cwd = working_dir; - } - - if (xcode_derived_data) { - execArgs.push( - "-D", `${xcode_derived_data}` - ); - } - - if (xcode_package) { - execArgs.push( - "-J", `${xcode_package}` - ); - } - - exec.exec("bash", execArgs, options) - .catch(err => { - if (fail_ci) { - core.setFailed( - `Codecov failed with the following error: ${err.message}` - ); - } else { - core.warning(`Codecov warning: ${err.message}`); - } - }) - .then(() => { - unlinkFile(); - }); - - const unlinkFile = () => { - fs.unlink("codecov.sh", err => { - if (err && fail_ci) { - throw err; - } else if (err) { - core.warning(`Codecov warning: ${err.message}`); - } - }); - }; - }); - } catch (error) { - core.setFailed( - `Codecov failed with the following error: ${error.message}` - ); - } - }); -} catch (error) { - if (fail_ci) { - core.setFailed(`Codecov failed with the following error: ${error.message}`); - } else { - core.warning(`Codecov warning: ${error.message}`); - } -} - - -/***/ }), +/* 104 */, /* 105 */, /* 106 */, /* 107 */ @@ -12503,7 +12292,79 @@ module.exports = {"$id":"log.json#","$schema":"http://json-schema.org/draft-06/s /* 322 */, /* 323 */, /* 324 */, -/* 325 */, +/* 325 */ +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +exports.__esModule = true; +var core = __webpack_require__(470); +var exec = __webpack_require__(986); +var fs = __webpack_require__(747); +var request = __webpack_require__(335); +var buildExec_1 = __webpack_require__(983); +var failCi; +try { + request({ + json: false, + maxAttempts: 10, + timeout: 3000, + url: 'https://codecov.io/bash', + }, function (error, response, body) { + var _a = buildExec_1["default"](), execArgs = _a.execArgs, options = _a.options, filepath = _a.filepath, failCi = _a.failCi; + try { + if (error && failCi) { + throw error; + } + else if (error) { + core.warning("Codecov warning: " + error.message); + } + fs.writeFile(filepath, body, function (err) { + if (err && failCi) { + throw err; + } + else if (err) { + core.warning("Codecov warning: " + err.message); + } + exec.exec('bash', execArgs, options)["catch"](function (err) { + if (failCi) { + core.setFailed("Codecov failed with the following error: " + err.message); + } + else { + core.warning("Codecov warning: " + err.message); + } + }) + .then(function () { + unlinkFile(); + }); + var unlinkFile = function () { + fs.unlink(filepath, function (err) { + if (err && failCi) { + throw err; + } + else if (err) { + core.warning("Codecov warning: " + err.message); + } + }); + }; + }); + } + catch (error) { + core.setFailed("Codecov failed with the following error: " + error.message); + } + }); +} +catch (error) { + if (failCi) { + core.setFailed("Codecov failed with the following error: " + error.message); + } + else { + core.warning("Codecov warning: " + error.message); + } +} + + +/***/ }), /* 326 */ /***/ (function(module) { @@ -12560,6 +12421,16 @@ function defaultPromiseFactory(resolver) { return when.promise(resolver); } +function _cloneOptions(options) { + const cloned = {}; + for (let key in options) { + if (options.hasOwnProperty(key)) { + cloned[key] = key === 'agent' ? options[key] : _.cloneDeep(options[key]); + } + } + return cloned; +} + /** * It calls the promiseFactory function passing it the resolver for the promise * @@ -12665,7 +12536,7 @@ Request.prototype._tryUntilFail = function () { err.attempts = this.attempts; } - var mustRetry = await Promise.resolve(this.retryStrategy(err, response, body, _.cloneDeep(this.options))); + var mustRetry = await Promise.resolve(this.retryStrategy(err, response, body, _cloneOptions(this.options))); if (_.isObject(mustRetry) && _.has(mustRetry, 'mustRetry')) { if (_.isObject(mustRetry.options)) { this.options = mustRetry.options; //if retryStrategy supposes different request options for retry @@ -54213,7 +54084,168 @@ function write(key, options) { /***/ }), -/* 983 */, +/* 983 */ +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +exports.__esModule = true; +var core = __webpack_require__(470); +var isTrue = function (variable) { + var lowercase = variable.toLowerCase(); + return (lowercase === '1' || + lowercase === 't' || + lowercase === 'true' || + lowercase === 'y' || + lowercase === 'yes'); +}; +var buildExec = function () { + var clean = core.getInput('move_coverage_to_trash'); + var commitParent = core.getInput('commit_parent'); + var curlAwsArgs = core.getInput('aws_curl_args'); + var curlCodecovArgs = core.getInput('codecov_curl_args'); + var envVars = core.getInput('env_vars'); + var failCi = isTrue(core.getInput('fail_ci_if_error')); + var file = core.getInput('file'); + var files = core.getInput('files'); + var flags = core.getInput('flags'); + var functionalities = core.getInput('functionalities'); + var gcovArgs = core.getInput('gcov_args'); + var gcovDir = core.getInput('gcov_root_dir'); + var gcovExclude = core.getInput('gcov_path_exclude'); + var gcovExec = core.getInput('gcov_executable'); + var gcovInclude = core.getInput('gcov_path_include'); + var gcovPrefix = core.getInput('gcov_prefix'); + var name = core.getInput('name'); + var overrideBranch = core.getInput('override_branch'); + var overrideBuild = core.getInput('override_build'); + var overrideCommit = core.getInput('override_commit'); + var overridePr = core.getInput('override_pr'); + var overrideTag = core.getInput('override_tag'); + var rootDir = core.getInput('root_dir'); + var searchDir = core.getInput('directory'); + var token = core.getInput('token'); + var verbose = isTrue(core.getInput('verbose')); + var workingDir = core.getInput('working-directory'); + var writePath = core.getInput('path_to_write_report'); + var xcodeDerivedData = core.getInput('xcode_derived_data'); + var xcodePackage = core.getInput('xcode_package'); + var filepath = workingDir ? + workingDir + '/codecov.sh' : 'codecov.sh'; + var execArgs = [filepath]; + execArgs.push('-n', "" + name, '-F', "" + flags, '-Q', 'github-action'); + var options = {}; + options.env = Object.assign(process.env, { + GITHUB_ACTION: process.env.GITHUB_ACTION, + GITHUB_RUN_ID: process.env.GITHUB_RUN_ID, + GITHUB_REF: process.env.GITHUB_REF, + GITHUB_REPOSITORY: process.env.GITHUB_REPOSITORY, + GITHUB_SHA: process.env.GITHUB_SHA, + GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '', + }); + var envVarsArg = []; + for (var _i = 0, _a = envVars.split(','); _i < _a.length; _i++) { + var envVar = _a[_i]; + var envVarClean = envVar.trim(); + if (envVarClean) { + options.env[envVarClean] = process.env[envVarClean]; + envVarsArg.push(envVarClean); + } + } + if (token) { + options.env.CODECOV_TOKEN = token; + } + if (clean) { + execArgs.push('-c'); + } + if (commitParent) { + execArgs.push('-N', "" + commitParent); + } + if (curlAwsArgs) { + execArgs.push('-A', "" + curlAwsArgs); + } + if (curlCodecovArgs) { + execArgs.push('-U', "" + curlCodecovArgs); + } + if (envVarsArg.length) { + execArgs.push('-e', envVarsArg.join(',')); + } + if (failCi) { + execArgs.push('-Z'); + } + if (file) { + execArgs.push('-f', "" + file); + } + if (files) { + files.split(',').forEach(function (f) { + execArgs.push('-f', "" + f); + }); + } + if (functionalities) { + functionalities.split(',').forEach(function (f) { + execArgs.push('-X', "" + 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 (overrideBranch) { + execArgs.push('-B', "" + overrideBranch); + } + if (overrideBuild) { + execArgs.push('-b', "" + overrideBuild); + } + if (overrideCommit) { + execArgs.push('-C', "" + overrideCommit); + } + if (overridePr) { + execArgs.push('-P', "" + overridePr); + } + if (overrideTag) { + execArgs.push('-T', "" + overrideTag); + } + if (rootDir) { + execArgs.push('-N', "" + rootDir); + } + if (searchDir) { + execArgs.push('-s', "" + searchDir); + } + 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: execArgs, options: options, filepath: filepath, failCi: failCi }; +}; +exports["default"] = buildExec; + + +/***/ }), /* 984 */, /* 985 */ /***/ (function(module) { diff --git a/hooks/pre-commit b/hooks/pre-commit index ea68e88de..fc777952d 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -1,5 +1,8 @@ #!/usr/bin/env bash npm i --package-lock-only +npm run lint --fix npm run build +git add src/ git add dist/index.js +git add package-lock.json diff --git a/index.js b/index.js deleted file mode 100644 index a17123377..000000000 --- a/index.js +++ /dev/null @@ -1,206 +0,0 @@ -const core = require("@actions/core"); -const exec = require("@actions/exec"); -const fs = require("fs"); -const request = require('requestretry'); - -let fail_ci; -let verbose; -try { - const name = core.getInput("name"); - const token = core.getInput("token"); - const flags = core.getInput("flags"); - const file = core.getInput("file"); - const files = core.getInput("files"); - const env_vars = core.getInput("env_vars"); - const dir = core.getInput("directory"); - const write_path = core.getInput("path_to_write_report"); - const working_dir = core.getInput("working-directory"); - const xcode_derived_data = core.getInput("xcode_derived_data"); - const xcode_package = core.getInput("xcode_package"); - - fail_ci = core.getInput("fail_ci_if_error").toLowerCase(); - verbose = core.getInput("verbose").toLowerCase(); - - if ( - fail_ci === "yes" || - fail_ci === "y" || - fail_ci === "true" || - fail_ci === "t" || - fail_ci === "1" - ) { - fail_ci = true; - } else { - fail_ci = false; - } - - if ( - verbose === "yes" || - verbose === "y" || - verbose === "true" || - verbose === "t" || - verbose === "1" - ) { - verbose = true; - } else { - verbose = false; - } - - request({ - json: false, - maxAttempts: 10, - timeout: 3000, - url: "https://codecov.io/bash" - }, (error, response, body) => { - try { - if (error && fail_ci) { - throw error; - } else if (error) { - core.warning(`Codecov warning: ${error.message}`); - } - - fs.writeFile("codecov.sh", body, err => { - if (err && fail_ci) { - throw err; - } else if (err) { - core.warning(`Codecov warning: ${err.message}`); - } - - let output = ""; - let execError = ""; - const options = {}; - options.listeners = { - stdout: data => { - output += data.toString(); - }, - stderr: data => { - execError += data.toString(); - } - }; - - options.env = Object.assign(process.env, { - GITHUB_ACTION: process.env.GITHUB_ACTION, - GITHUB_RUN_ID: process.env.GITHUB_RUN_ID, - GITHUB_REF: process.env.GITHUB_REF, - GITHUB_REPOSITORY: process.env.GITHUB_REPOSITORY, - GITHUB_SHA: process.env.GITHUB_SHA, - GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '' - }); - - if(token){ - options.env.CODECOV_TOKEN = token - } - - const env_vars_arg = [] - for (let env_var of env_vars.split(",")) { - let env_var_clean = env_var.trim(); - if (env_var_clean) { - options.env[env_var_clean] = process.env[env_var_clean]; - env_vars_arg.push(env_var_clean) - } - } - - const execArgs = ["codecov.sh"]; - execArgs.push("-Q", "github-action"); - - if (file) { - execArgs.push( - "-f", `${file}` - ); - } - - if (files) { - files.split(',').forEach(f => { - execArgs.push( - "-f", `${f}` - ); - }); - } - - if (dir) { - execArgs.push( - "-s", `${dir}` - ); - } - - execArgs.push( - "-n", `${name}`, - "-F", `${flags}` - ); - - if (fail_ci) { - execArgs.push( - "-Z" - ); - } - - if (env_vars_arg.length) { - execArgs.push( - "-e", env_vars_arg.join(",") - ); - } - - if (write_path) { - execArgs.push( - "-q", `${write_path}` - ); - } - - if (verbose) { - execArgs.push( - "-v" - ); - } - - if (working_dir) { - options.cwd = working_dir; - } - - if (xcode_derived_data) { - execArgs.push( - "-D", `${xcode_derived_data}` - ); - } - - if (xcode_package) { - execArgs.push( - "-J", `${xcode_package}` - ); - } - - exec.exec("bash", execArgs, options) - .catch(err => { - if (fail_ci) { - core.setFailed( - `Codecov failed with the following error: ${err.message}` - ); - } else { - core.warning(`Codecov warning: ${err.message}`); - } - }) - .then(() => { - unlinkFile(); - }); - - const unlinkFile = () => { - fs.unlink("codecov.sh", err => { - if (err && fail_ci) { - throw err; - } else if (err) { - core.warning(`Codecov warning: ${err.message}`); - } - }); - }; - }); - } catch (error) { - core.setFailed( - `Codecov failed with the following error: ${error.message}` - ); - } - }); -} catch (error) { - if (fail_ci) { - core.setFailed(`Codecov failed with the following error: ${error.message}`); - } else { - core.warning(`Codecov warning: ${error.message}`); - } -} diff --git a/package-lock.json b/package-lock.json index 2b6d6770d..3be381490 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "codecov-action", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -389,6 +389,59 @@ "minimist": "^1.2.0" } }, + "@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -900,6 +953,32 @@ "chalk": "^4.0.0" } }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, "@sinonjs/commons": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", @@ -996,6 +1075,12 @@ "pretty-format": "^26.0.0" } }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, "@types/node": { "version": "14.6.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.0.tgz", @@ -1029,6 +1114,111 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" }, + "@typescript-eslint/eslint-plugin": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.11.1.tgz", + "integrity": "sha512-fABclAX2QIEDmTMk6Yd7Muv1CzFLwWM4505nETzRHpP3br6jfahD9UUJkhnJ/g2m7lwfz8IlswcwGGPGiq9exw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.11.1", + "@typescript-eslint/scope-manager": "4.11.1", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.1.tgz", + "integrity": "sha512-mAlWowT4A6h0TC9F+J5pdbEhjNiEMO+kqPKQ4sc3fVieKL71dEqfkKgtcFVSX3cjSBwYwhImaQ/mXQF0oaI38g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.11.1", + "@typescript-eslint/types": "4.11.1", + "@typescript-eslint/typescript-estree": "4.11.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.11.1.tgz", + "integrity": "sha512-BJ3jwPQu1jeynJ5BrjLuGfK/UJu6uwHxJ/di7sanqmUmxzmyIcd3vz58PMR7wpi8k3iWq2Q11KMYgZbUpRoIPw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.11.1", + "@typescript-eslint/types": "4.11.1", + "@typescript-eslint/typescript-estree": "4.11.1", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.11.1.tgz", + "integrity": "sha512-Al2P394dx+kXCl61fhrrZ1FTI7qsRDIUiVSuN6rTwss6lUn8uVO2+nnF4AvO0ug8vMsy3ShkbxLu/uWZdTtJMQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.11.1", + "@typescript-eslint/visitor-keys": "4.11.1" + } + }, + "@typescript-eslint/types": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.11.1.tgz", + "integrity": "sha512-5kvd38wZpqGY4yP/6W3qhYX6Hz0NwUbijVsX2rxczpY6OXaMxh0+5E5uLJKVFwaBM7PJe1wnMym85NfKYIh6CA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.1.tgz", + "integrity": "sha512-tC7MKZIMRTYxQhrVAFoJq/DlRwv1bnqA4/S2r3+HuHibqvbrPcyf858lNzU7bFmy4mLeIHFYr34ar/1KumwyRw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.11.1", + "@typescript-eslint/visitor-keys": "4.11.1", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.1.tgz", + "integrity": "sha512-IrlBhD9bm4bdYcS8xpWarazkKXlE7iYb1HzRuyBP114mIaj5DJPo11Us1HgH60dTt41TCZXMaTCAW+OILIYPOg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.11.1", + "eslint-visitor-keys": "^2.0.0" + } + }, "@zeit/ncc": { "version": "0.22.3", "resolved": "https://registry.npmjs.org/@zeit/ncc/-/ncc-0.22.3.tgz", @@ -1053,6 +1243,12 @@ "acorn-walk": "^7.1.1" } }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -1069,6 +1265,12 @@ "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-escapes": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", @@ -1130,6 +1332,12 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -1153,6 +1361,12 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1680,6 +1894,24 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -1722,6 +1954,15 @@ "once": "^1.4.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1747,11 +1988,254 @@ "source-map": "~0.6.1" } }, + "eslint": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz", + "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -1973,6 +2457,20 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -1983,6 +2481,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fastq": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -1991,6 +2498,15 @@ "bser": "2.1.1" } }, + "file-entry-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -2008,6 +2524,22 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", + "dev": true + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -2057,6 +2589,12 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -2106,11 +2644,34 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -2119,7 +2680,8 @@ "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "optional": true }, "har-schema": { "version": "2.0.0", @@ -2236,6 +2798,30 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, "import-local": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", @@ -2359,6 +2945,12 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -2369,6 +2961,15 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2406,6 +3007,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "optional": true, "requires": { "is-docker": "^2.0.0" } @@ -3982,6 +4584,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -4112,6 +4720,12 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", @@ -4223,6 +4837,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "optional": true, "requires": { "growly": "^1.3.0", "is-wsl": "^2.2.0", @@ -4236,6 +4851,7 @@ "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "optional": true, "requires": { "lru-cache": "^6.0.0" } @@ -4243,12 +4859,14 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, "requires": { "isexe": "^2.0.0" } @@ -4393,6 +5011,15 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-json": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", @@ -4434,6 +5061,12 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -4481,6 +5114,12 @@ "react-is": "^17.0.1" } }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -4556,6 +5195,12 @@ "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -4653,6 +5298,12 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -4690,6 +5341,12 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -4703,6 +5360,12 @@ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", + "dev": true + }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", @@ -4906,7 +5569,8 @@ "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "optional": true }, "signal-exit": { "version": "3.0.3", @@ -4923,6 +5587,17 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -5207,6 +5882,12 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -5229,6 +5910,50 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, + "table": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.6.tgz", + "integrity": "sha512-OInCtPmDNieVBkVFi6C8RwU2S2H0h8mF3e3TQK4nreaUNCpooQUkI+A/KuEkm5FawfhWIfNqG+qfelVVR+V00g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", + "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -5248,6 +5973,12 @@ "minimatch": "^3.0.4" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "throat": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", @@ -5348,6 +6079,21 @@ } } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5462,6 +6208,12 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, "v8-to-istanbul": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", diff --git a/package.json b/package.json index 8716ed26a..bce455d70 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,15 @@ { "name": "codecov-action", - "version": "1.1.1", + "version": "1.2.0", "description": "Upload coverage reports to Codecov from GitHub Actions", "main": "index.js", "scripts": { - "test": "jest --coverage", - "test-calculator": "jest --testPathPattern=src/calculator/ --coverage --coverageDirectory=coverage/calculator", - "test-index": "jest --testPathPattern=src/index --coverage --coverageDirectory=coverage/index", - "test-all": "yarn run test && yarn run test-calculator && yarn run test-index", - "build": "ncc build index.js" + "lint": "eslint src/*.*", + "test": "yarn run test-script && yarn run test-calculator && yarn 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" }, "repository": { "type": "git", @@ -35,5 +36,10 @@ "typescript": "^4.1.3", "yarn": "^1.22.10" }, - "devDependencies": {} + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^4.11.1", + "@typescript-eslint/parser": "^4.11.1", + "eslint": "^7.17.0", + "eslint-config-google": "^0.14.0" + } } diff --git a/src/buildExec.test.ts b/src/buildExec.test.ts new file mode 100644 index 000000000..83d819b17 --- /dev/null +++ b/src/buildExec.test.ts @@ -0,0 +1,138 @@ +import buildExec from './buildExec'; + +test('no arguments', () => { + const {execArgs, filepath, failCi} = buildExec(); + expect(execArgs).toEqual([ + 'codecov.sh', + '-n', + '', + '-F', + '', + '-Q', + 'github-action', + ]); + 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', + 'env_vars': 'OS,PYTHON', + 'fail_ci_if_error': 'true', + 'file': 'coverage.xml', + 'files': 'dir1/coverage.xml,dir2/coverage.xml', + 'flags': 'test', + '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', + 'name': 'codecov', + 'override_branch': 'thomasrockhu/test', + 'override_build': '1', + 'override_commit': '9caabca5474b49de74ef5667deabaf74cdacc244', + 'override_pr': '2', + 'override_tag': 'v1.2', + 'root_dir': 'root/', + 'directory': 'coverage/', + 'token': 'd3859757-ab80-4664-924d-aef22fa7557b', + '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(); + expect(execArgs).toEqual([ + 'src/codecov.sh', + '-n', + 'codecov', + '-F', + 'test', + '-Q', + 'github-action', + '-c', + '-N', + '83231650328f11695dfb754ca0f540516f188d27', + '-A', + '--timeout 1', + '-U', + '--timeout 2', + '-e', + 'OS,PYTHON', + '-Z', + '-f', + 'coverage.xml', + '-f', + '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', + '-B', + 'thomasrockhu/test', + '-b', + '1', + '-C', + '9caabca5474b49de74ef5667deabaf74cdacc244', + '-P', + '2', + '-T', + 'v1.2', + '-N', + 'root/', + '-s', + 'coverage/', + '-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)) { + delete process.env['INPUT_' + env.toUpperCase()]; + } +}); diff --git a/src/buildExec.ts b/src/buildExec.ts new file mode 100644 index 000000000..22dfd298e --- /dev/null +++ b/src/buildExec.ts @@ -0,0 +1,163 @@ +const core = require('@actions/core'); + +const isTrue = (variable) => { + const lowercase = variable.toLowerCase(); + return ( + lowercase === '1' || + lowercase === 't' || + lowercase === 'true' || + lowercase === 'y' || + lowercase === 'yes' + ); +}; + +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 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 overrideBranch = core.getInput('override_branch'); + const overrideBuild = core.getInput('override_build'); + const overrideCommit = core.getInput('override_commit'); + const overridePr = core.getInput('override_pr'); + const overrideTag = core.getInput('override_tag'); + const rootDir = core.getInput('root_dir'); + const searchDir = core.getInput('directory'); + const token = core.getInput('token'); + const verbose = isTrue(core.getInput('verbose')); + 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]; + execArgs.push( '-n', `${name}`, '-F', `${flags}`, '-Q', 'github-action' ); + + const options:any = {}; + options.env = Object.assign(process.env, { + GITHUB_ACTION: process.env.GITHUB_ACTION, + GITHUB_RUN_ID: process.env.GITHUB_RUN_ID, + GITHUB_REF: process.env.GITHUB_REF, + GITHUB_REPOSITORY: process.env.GITHUB_REPOSITORY, + GITHUB_SHA: process.env.GITHUB_SHA, + GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '', + }); + + const envVarsArg = []; + for (const envVar of envVars.split(',')) { + const envVarClean = envVar.trim(); + if (envVarClean) { + options.env[envVarClean] = process.env[envVarClean]; + envVarsArg.push(envVarClean); + } + } + + if (token) { + options.env.CODECOV_TOKEN = token; + } + if (clean) { + execArgs.push('-c'); + } + if (commitParent) { + execArgs.push('-N', `${commitParent}`); + } + if (curlAwsArgs) { + execArgs.push('-A', `${curlAwsArgs}`); + } + if (curlCodecovArgs) { + execArgs.push('-U', `${curlCodecovArgs}`); + } + if (envVarsArg.length) { + execArgs.push('-e', envVarsArg.join(',')); + } + if (failCi) { + execArgs.push('-Z'); + } + if (file) { + execArgs.push('-f', `${file}`); + } + if (files) { + files.split(',').forEach((f) => { + execArgs.push('-f', `${f}`); + }); + } + if (functionalities) { + functionalities.split(',').forEach((f) => { + execArgs.push('-X', `${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 (overrideBranch) { + execArgs.push('-B', `${overrideBranch}`); + } + if (overrideBuild) { + execArgs.push('-b', `${overrideBuild}`); + } + if (overrideCommit) { + execArgs.push('-C', `${overrideCommit}`); + } + if (overridePr) { + execArgs.push('-P', `${overridePr}`); + } + if (overrideTag) { + execArgs.push('-T', `${overrideTag}`); + } + if (rootDir) { + execArgs.push('-N', `${rootDir}`); + } + if (searchDir) { + execArgs.push('-s', `${searchDir}`); + } + 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}; +}; + +export default buildExec; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 000000000..cc15bdc1e --- /dev/null +++ b/src/index.ts @@ -0,0 +1,68 @@ +const core = require('@actions/core'); +const exec = require('@actions/exec'); +const fs = require('fs'); +const request = require('requestretry'); + +import buildExec from './buildExec'; + +let failCi; +try { + request({ + json: false, + maxAttempts: 10, + timeout: 3000, + url: 'https://codecov.io/bash', + }, (error, response, body) => { + const {execArgs, options, filepath, failCi} = buildExec(); + + try { + if (error && failCi) { + throw error; + } else if (error) { + core.warning(`Codecov warning: ${error.message}`); + } + + fs.writeFile(filepath, body, (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}`, + ); + } else { + core.warning(`Codecov warning: ${err.message}`); + } + }) + .then(() => { + unlinkFile(); + }); + + const unlinkFile = () => { + fs.unlink(filepath, (err) => { + if (err && failCi) { + throw err; + } else if (err) { + core.warning(`Codecov warning: ${err.message}`); + } + }); + }; + }); + } catch (error) { + core.setFailed( + `Codecov failed with the following error: ${error.message}`, + ); + } + }); +} catch (error) { + if (failCi) { + core.setFailed(`Codecov failed with the following error: ${error.message}`); + } else { + core.warning(`Codecov warning: ${error.message}`); + } +} diff --git a/src/index/index.test.ts b/src/index/index.test.ts deleted file mode 100644 index 24196db36..000000000 --- a/src/index/index.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import Index from "./index"; - -test('test uncovered if', () => { - const indexObj = new Index(); - expect(indexObj.uncovered_if()).toEqual(false); -}); - -test('fully covered', () => { - const indexObj = new Index(); - expect(indexObj.fully_covered()).toEqual(true); -}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..dbe3a5aba --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,5 @@ +{ + "include": [ + "src" + ] +}