Compare commits

...

27 Commits

Author SHA1 Message Date
Thomas Hu
6004246f47 Merge pull request #114 from codecov/timeouts
Add more timeout tries and decrease timeout time
2020-08-17 22:13:50 -04:00
Thomas Hu
5d3f01ccdc Up the number of attempts 2020-08-17 17:14:51 -04:00
Thomas Hu
2d80980946 Add more timeouts and sharter timeout 2020-08-17 17:05:37 -04:00
Thomas Hu
fadbb25281 Merge pull request #109 from ibrahim0814/patch-1
Update action.yml with new authors
2020-08-12 13:09:38 -04:00
Ibrahim Ali
ad774549da Update action.yml with new authors
Add Thomas Hu as new author 👍
2020-08-12 00:15:12 -07:00
Thomas Hu
07127fde53 Merge pull request #97 from codecov/dependabot/npm_and_yarn/lodash-4.17.19
Bump lodash from 4.17.15 to 4.17.19
2020-07-22 09:57:50 -04:00
dependabot[bot]
9128542d5d Bump lodash from 4.17.15 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-17 18:34:08 +00:00
Thomas Hu
6d208f5b52 Merge pull request #96 from codecov/1.0.12
Wrap request promise in try catch
2020-07-17 14:33:32 -04:00
Thomas Hu
8ddda09c14 Wrap request promise in try catch 2020-07-17 11:57:18 -04:00
Thomas Hu
e16d515d3b Merge pull request #90 from codecov/directory-and-debug
Add directory and file save
2020-07-13 13:21:09 -04:00
Thomas Hu
6b30325ebb Merge branch 'master' into directory-and-debug 2020-07-13 13:00:02 -04:00
Thomas Hu
95f699a0a9 Merge pull request #94 from codecov/update-readme
Add files to README
2020-07-10 17:53:16 -04:00
Thomas Hu
273443b325 Add files to README 2020-07-10 15:32:51 -04:00
Thomas Hu
a258ec8bb8 Merge pull request #93 from codecov/specify-files
Specify files and add testing
2020-07-10 15:31:03 -04:00
Thomas Hu
89692c91b7 Specify files and add testing 2020-07-09 23:07:34 -04:00
Thomas Hu
85ec2c8d83 Add directory and file save 2020-07-07 22:36:09 -04:00
Thomas Hu
f3570723ef Merge pull request #89 from codecov/fix-ependency
Fix dependencies
2020-07-01 16:43:21 -04:00
Thomas Hu
f40f110376 Try requestretry 2020-07-01 15:47:57 -04:00
Thomas Hu
4f81def87b Upgrade ncc 2020-07-01 15:35:39 -04:00
Thomas Hu
ddc46b3107 Fix dependencies 2020-07-01 14:58:11 -04:00
Thomas Hu
1b088680d5 Fix dependencies 2020-07-01 14:48:26 -04:00
Thomas Hu
22f6ff10ac Merge pull request #88 from codecov/update-dist
Update dist
2020-07-01 11:57:59 -04:00
Thomas Hu
0ceca4b5d3 Install dependencies 2020-07-01 11:51:01 -04:00
Thomas Hu
3658bafacb Bump version 2020-07-01 11:45:18 -04:00
Thomas Hu
ef3b48314f Update dist 2020-07-01 11:40:05 -04:00
Thomas Hu
dbf1ddee08 Merge pull request #87 from codecov/retry-bash
Retry retrieval of bash script
2020-07-01 07:27:35 -04:00
Thomas Hu
cc6b0c11d2 Retry retrieval of bash script 2020-06-30 23:33:46 -04:00
13 changed files with 26547 additions and 1847 deletions

View File

@@ -1,14 +1,19 @@
name: Example workflow for Codecov
name: Workflow for Codecov Action
on: [push, pull_request]
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Upload coverage to Codecov
uses: ./
with:
#commenting out token because tokenless uploads are now supported
#token: ${{secrets.CODECOV_TOKEN}}
flags: unittest
name: codecov-1
- name: Checkout
uses: actions/checkout@master
- name: Install dependencies
run: npm install
- name: Run tests and collect coverage
run: yarn run test-all
- name: Upload coverage to Codecov
uses: ./
with:
files: ./coverage/calculator/coverage-final.json,./coverage/index/coverage-final.json
file: ./coverage/coverage-final.json
flags: unittest
name: codecov-1

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2019 Codecov
Copyright (c) 2019-2020 Codecov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -20,6 +20,7 @@ steps:
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
fail_ci_if_error: true # optional (default = false)
@@ -36,10 +37,13 @@ Codecov's Action currently supports five inputs from the user: `token`, `file`,
| :---: | :---: | :---: |
| `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
| `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
| `path_to_write_report` | Write upload file to path before uploading | Optional
### Example `workflow.yml` with Codecov Action
@@ -71,10 +75,13 @@ jobs:
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.xml
files: ./coverage1.xml,./coverage2.xml
directory: ./coverage/reports/
flags: unittests
env_vars: OS,PYTHON
name: codecov-umbrella
fail_ci_if_error: true
path_to_write_report: ./coverage/codecov_report.gz
```
## Contributing

View File

@@ -1,6 +1,6 @@
name: 'Codecov'
description: 'GitHub Action that uploads coverage reports for your repository to codecov.io'
author: 'Ibrahim Ali <@ibrahim0814> | Codecov'
author: 'Ibrahim Ali <@ibrahim0814> & Thomas Hu <@thomasrockhu> | Codecov'
inputs:
name:
description: 'User defined upload name. Visible in Codecov UI'
@@ -11,9 +11,18 @@ inputs:
file:
description: 'Path to coverage file to upload'
required: false
files:
description: 'Comma-separated list of files to upload'
required: false
directory:
description: 'Directory to search for coverage reports.'
required: false
flags:
description: 'Flag upload to group coverage metrics (e.g. unittests | integration | ui,chrome)'
required: false
path_to_write_report:
description: 'Write upload file to path before uploading'
required: false
env_vars:
description: 'Environment variables to tag the upload with (e.g. PYTHON | OS,PYTHON)'
required: false

23171
dist/index.js vendored

File diff suppressed because one or more lines are too long

206
index.js
View File

@@ -1,7 +1,7 @@
const core = require("@actions/core");
const exec = require("@actions/exec");
const request = require("request");
const fs = require("fs");
const request = require('requestretry');
let fail_ci;
try {
@@ -9,8 +9,11 @@ try {
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");
fail_ci = core.getInput("fail_ci_if_error").toLowerCase();
if (
@@ -25,102 +28,133 @@ try {
fail_ci = false;
}
request("https://codecov.io/bash", (error, response, body) => {
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}`);
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}`);
}
let output = "";
let execError = "";
const options = {};
options.listeners = {
stdout: data => {
output += data.toString();
},
stderr: data => {
execError += data.toString();
fs.writeFile("codecov.sh", body, err => {
if (err && fail_ci) {
throw err;
} else if (err) {
core.warning(`Codecov warning: ${err.message}`);
}
};
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 || ''
});
let output = "";
let execError = "";
const options = {};
options.listeners = {
stdout: data => {
output += data.toString();
},
stderr: data => {
execError += data.toString();
}
};
if(token){
options.env.CODECOV_TOKEN = token
}
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 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)
if(token){
options.env.CODECOV_TOKEN = token
}
}
const execArgs = ["codecov.sh"];
if (file) {
execArgs.push(
"-f", `${file}`
);
}
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)
}
}
execArgs.push(
"-n", `${name}`,
"-F", `${flags}`
);
const execArgs = ["codecov.sh"];
if (file) {
execArgs.push(
"-f", `${file}`
);
}
if (fail_ci) {
execArgs.push(
"-Z"
);
}
if (env_vars_arg.length) {
execArgs.push(
"-e", env_vars_arg.join(",")
);
}
exec.exec("bash", execArgs, options)
.catch(err => {
if (fail_ci) {
core.setFailed(
`Codecov failed with the following error: ${err.message}`
if (files) {
files.split(',').forEach(f => {
execArgs.push(
"-f", `${f}`
);
} 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}`);
}
});
};
});
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}`
);
}
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) {

4
jest.config.js Normal file
View File

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

4899
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,13 @@
{
"name": "codecov-action",
"version": "1.0.5",
"version": "1.0.13",
"description": "Upload coverage reports to Codecov from GitHub Actions",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"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"
},
"repository": {
@@ -21,9 +24,16 @@
"dependencies": {
"@actions/core": "^1.2.0",
"@actions/exec": "^1.0.1",
"@zeit/ncc": "^0.20.5",
"@types/jest": "^26.0.4",
"@zeit/ncc": "^0.22.3",
"fs": "0.0.1-security",
"request": "^2.88.0"
"jest": "^26.1.0",
"jest-junit": "^10.0.0",
"request": "^2.88.0",
"requestretry": "^4.1.1",
"ts-jest": "^26.1.1",
"typescript": "^3.9.6",
"yarn": "^1.22.4"
},
"devDependencies": {}
}

View File

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

View File

@@ -0,0 +1,10 @@
export default class Calculator {
add(x : number, y : number) : number {
return x + y;
}
subtract(x: number, y: number) : number {
return x - y;
}
}

11
src/index/index.test.ts Normal file
View File

@@ -0,0 +1,11 @@
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);
});

21
src/index/index.ts Normal file
View File

@@ -0,0 +1,21 @@
export default class Index {
//This function is tested and part of it is uncovered
uncovered_if = (a = true) => {
if (a == true) {
return false
} else {
return true
}
}
//This function will be fully covered
fully_covered = () => {
return true
}
//This function will not be tested by unit tests
uncovered = () => {
return true
}
}