mirror of
https://github.com/codecov/codecov-action.git
synced 2025-12-08 16:16:24 +00:00
Compare commits
83 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9fd7d16f6 | ||
|
|
6f7612c64d | ||
|
|
26c7e28d7e | ||
|
|
6f744f78de | ||
|
|
543c3d42fc | ||
|
|
e379426d37 | ||
|
|
42656e4cb1 | ||
|
|
2296b6ba9e | ||
|
|
bd77bc323c | ||
|
|
180b964407 | ||
|
|
4beef3e59f | ||
|
|
8bacbcdafc | ||
|
|
0036103d21 | ||
|
|
f9253eb652 | ||
|
|
135f82e412 | ||
|
|
4b21c320b5 | ||
|
|
2439dfc05c | ||
|
|
bb813333f9 | ||
|
|
d2bac1a14c | ||
|
|
9f15ff6db1 | ||
|
|
60a33a541b | ||
|
|
943cea186c | ||
|
|
955f1f08ad | ||
|
|
922d8d7b31 | ||
|
|
764e2e4bac | ||
|
|
dd5d48487d | ||
|
|
6f75c27045 | ||
|
|
4168d1398b | ||
|
|
abe5d5a96b | ||
|
|
cdaae0e243 | ||
|
|
a06c39c510 | ||
|
|
a87fadc201 | ||
|
|
4ef269f796 | ||
|
|
992fc4eb1f | ||
|
|
9e145151be | ||
|
|
e1b169f283 | ||
|
|
4809d8a8f6 | ||
|
|
543b309c01 | ||
|
|
621cd670ee | ||
|
|
e4dbd7e64b | ||
|
|
893cfea3da | ||
|
|
e12e94d346 | ||
|
|
8cf010f6e4 | ||
|
|
0cbef546c8 | ||
|
|
af2ee03a4e | ||
|
|
3d7297c4a2 | ||
|
|
ca3e2d9612 | ||
|
|
f5469482a3 | ||
|
|
76ee96d868 | ||
|
|
9a146cf9d5 | ||
|
|
d3911e8ec2 | ||
|
|
d81eade746 | ||
|
|
e28ff129e5 | ||
|
|
7594baaf0c | ||
|
|
81c0a51dcc | ||
|
|
f5e203f3d9 | ||
|
|
7c48363ed3 | ||
|
|
69e5d09ca1 | ||
|
|
feaf700b2a | ||
|
|
7b6a727a4a | ||
|
|
ccf7a1fd43 | ||
|
|
f03f015db9 | ||
|
|
5fe1d91fef | ||
|
|
679cd7bee6 | ||
|
|
51fc5dccf6 | ||
|
|
5ba2c853f8 | ||
|
|
afaa0c08b8 | ||
|
|
a1504ae490 | ||
|
|
a05a16bd04 | ||
|
|
fb010ae47e | ||
|
|
125fc84a9a | ||
|
|
c9dbf6a905 | ||
|
|
59fc46f14a | ||
|
|
3889fddabb | ||
|
|
d42a336584 | ||
|
|
fd624e50e7 | ||
|
|
6d798873df | ||
|
|
37364fa731 | ||
|
|
2791a5c4fe | ||
|
|
b71af43c1e | ||
|
|
29f97fc54f | ||
|
|
645d2a5926 | ||
|
|
f691d469fb |
8
.github/workflows/codeql-analysis.yml
vendored
8
.github/workflows/codeql-analysis.yml
vendored
@@ -37,11 +37,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4.1.4
|
uses: actions/checkout@v4.2.0
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3.25.3
|
uses: github/codeql-action/init@v3.26.9
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@@ -52,7 +52,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v3.25.3
|
uses: github/codeql-action/autobuild@v3.26.9
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
@@ -66,4 +66,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v3.25.3
|
uses: github/codeql-action/analyze@v3.26.9
|
||||||
|
|||||||
56
.github/workflows/main.yml
vendored
56
.github/workflows/main.yml
vendored
@@ -5,10 +5,10 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest, macos-latest-xlarge]
|
os: [macos-latest, windows-latest, ubuntu-latest]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.1.4
|
uses: actions/checkout@v4.2.0
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
- name: Lint
|
- name: Lint
|
||||||
@@ -18,6 +18,7 @@ jobs:
|
|||||||
- name: Upload coverage to Codecov (script)
|
- name: Upload coverage to Codecov (script)
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
|
fail_ci_if_error: true
|
||||||
files: ./coverage/script/coverage-final.json
|
files: ./coverage/script/coverage-final.json
|
||||||
flags: script,${{ matrix.os }}
|
flags: script,${{ matrix.os }}
|
||||||
name: codecov-script
|
name: codecov-script
|
||||||
@@ -26,6 +27,7 @@ jobs:
|
|||||||
- name: Upload coverage to Codecov (demo)
|
- name: Upload coverage to Codecov (demo)
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
|
fail_ci_if_error: true
|
||||||
files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json
|
files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json
|
||||||
file: ./coverage/coverage-final.json
|
file: ./coverage/coverage-final.json
|
||||||
flags: demo,${{ matrix.os }}
|
flags: demo,${{ matrix.os }}
|
||||||
@@ -35,11 +37,55 @@ jobs:
|
|||||||
- name: Upload coverage to Codecov (version)
|
- name: Upload coverage to Codecov (version)
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
|
fail_ci_if_error: true
|
||||||
files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json
|
files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json
|
||||||
file: ./coverage/coverage-final.json
|
file: ./coverage/coverage-final.json
|
||||||
flags: version,${{ matrix.os }}
|
flags: version,${{ matrix.os }}
|
||||||
name: codecov-version
|
name: codecov-version
|
||||||
version: v0.2.0
|
version: v0.7.3
|
||||||
|
verbose: true
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|
||||||
|
run-macos-latest-xlarge:
|
||||||
|
if: github.head.repo.full_name == 'codecov/codecov-action'
|
||||||
|
runs-on: macos-latest-xlarge
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4.2.0
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm install
|
||||||
|
- name: Lint
|
||||||
|
run: npm run lint
|
||||||
|
- name: Run tests and collect coverage
|
||||||
|
run: npm run test
|
||||||
|
- name: Upload coverage to Codecov (script)
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
fail_ci_if_error: true
|
||||||
|
files: ./coverage/script/coverage-final.json
|
||||||
|
flags: script,macos-latest-xlarge
|
||||||
|
name: codecov-script
|
||||||
|
verbose: true
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
- name: Upload coverage to Codecov (demo)
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
fail_ci_if_error: true
|
||||||
|
files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json
|
||||||
|
file: ./coverage/coverage-final.json
|
||||||
|
flags: demo,macos-latest-xlarge
|
||||||
|
name: codecov-demo
|
||||||
|
verbose: true
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
- name: Upload coverage to Codecov (version)
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
fail_ci_if_error: true
|
||||||
|
files: ./coverage/calculator/coverage-final.json,./coverage/coverage-test/coverage-final.json
|
||||||
|
file: ./coverage/coverage-final.json
|
||||||
|
flags: version,maxos-latest-xlarge
|
||||||
|
name: codecov-version
|
||||||
|
version: v0.6.0
|
||||||
verbose: true
|
verbose: true
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|
||||||
@@ -48,7 +94,7 @@ jobs:
|
|||||||
container: node:18
|
container: node:18
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.1.4
|
uses: actions/checkout@v4.2.0
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
- name: Lint
|
- name: Lint
|
||||||
@@ -79,6 +125,6 @@ jobs:
|
|||||||
file: ./coverage/coverage-final.json
|
file: ./coverage/coverage-final.json
|
||||||
flags: version,${{ matrix.os }}
|
flags: version,${{ matrix.os }}
|
||||||
name: codecov-version
|
name: codecov-version
|
||||||
version: v0.2.0
|
version: v0.6.0
|
||||||
verbose: true
|
verbose: true
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|||||||
17
.github/workflows/scorecards-analysis.yml
vendored
17
.github/workflows/scorecards-analysis.yml
vendored
@@ -12,6 +12,7 @@ permissions: read-all
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analysis:
|
analysis:
|
||||||
|
if: github.repository == 'codecov/codecov-action'
|
||||||
name: Scorecards analysis
|
name: Scorecards analysis
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
@@ -21,15 +22,15 @@ jobs:
|
|||||||
id-token: write
|
id-token: write
|
||||||
actions: read
|
actions: read
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@v4.1.4 # v3.0.0
|
uses: actions/checkout@v4.2.0 # v3.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: "Run analysis"
|
- name: "Run analysis"
|
||||||
uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
|
uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0
|
||||||
with:
|
with:
|
||||||
results_file: results.sarif
|
results_file: results.sarif
|
||||||
results_format: sarif
|
results_format: sarif
|
||||||
@@ -40,22 +41,22 @@ jobs:
|
|||||||
# repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
|
# repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
|
||||||
|
|
||||||
# Publish the results for public repositories to enable scorecard badges. For more details, see
|
# Publish the results for public repositories to enable scorecard badges. For more details, see
|
||||||
# https://github.com/ossf/scorecard-action#publishing-results.
|
# https://github.com/ossf/scorecard-action#publishing-results.
|
||||||
# For private repositories, `publish_results` will automatically be set to `false`, regardless
|
# For private repositories, `publish_results` will automatically be set to `false`, regardless
|
||||||
# of the value entered here.
|
# of the value entered here.
|
||||||
publish_results: true
|
publish_results: true
|
||||||
|
|
||||||
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
||||||
# format to the repository Actions tab.
|
# format to the repository Actions tab.
|
||||||
- name: "Upload artifact"
|
- name: "Upload artifact"
|
||||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
|
||||||
with:
|
with:
|
||||||
name: SARIF file
|
name: SARIF file
|
||||||
path: results.sarif
|
path: results.sarif
|
||||||
retention-days: 5
|
retention-days: 5
|
||||||
|
|
||||||
# Upload the results to GitHub's code scanning dashboard.
|
# Upload the results to GitHub's code scanning dashboard.
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@v3.25.3 # v1.0.26
|
uses: github/codeql-action/upload-sarif@v3.26.9 # v1.0.26
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
`v4` of the Codecov GitHub Action will use the [Codecov CLI](https://github.com/codecov/codecov-cli) to upload coverage reports to Codecov.
|
`v4` of the Codecov GitHub Action will use the [Codecov CLI](https://github.com/codecov/codecov-cli) to upload coverage reports to Codecov.
|
||||||
|
|
||||||
### Breaking Changes
|
### Breaking Changes
|
||||||
- Tokenless uploading is unsupported. However, PRs made from forks to the upstream public repos will support tokenless (e.g. contributors to OS projects do not need the upstream repo's Codecov token). For details, [see our docs](https://docs.codecov.com/docs/codecov-uploader#supporting-token-less-uploads-for-forks-of-open-source-repos-using-codecov)
|
- Tokenless uploading is unsupported. However, PRs made from forks to the upstream public repos will support tokenless (e.g. contributors to OSS projects do not need the upstream repo's Codecov token). For details, [see our docs](https://docs.codecov.com/docs/codecov-uploader#supporting-token-less-uploads-for-forks-of-open-source-repos-using-codecov)
|
||||||
- Various arguments to the Action have been removed
|
- Various arguments to the Action have been removed
|
||||||
|
|
||||||
### Dependabot
|
### Dependabot
|
||||||
|
|||||||
2336
dist/index.js
vendored
Executable file → Normal file
2336
dist/index.js
vendored
Executable file → Normal file
File diff suppressed because one or more lines are too long
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/sourcemap-register.js
vendored
2
dist/sourcemap-register.js
vendored
File diff suppressed because one or more lines are too long
4169
package-lock.json
generated
4169
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
18
package.json
18
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "codecov-action",
|
"name": "codecov-action",
|
||||||
"version": "4.3.1",
|
"version": "4.6.0",
|
||||||
"description": "Upload coverage reports to Codecov from GitHub Actions",
|
"description": "Upload coverage reports to Codecov from GitHub Actions",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -26,19 +26,19 @@
|
|||||||
"@actions/core": "^1.10.1",
|
"@actions/core": "^1.10.1",
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/github": "^6.0.0",
|
"@actions/github": "^6.0.0",
|
||||||
"gpg": "^0.6.0",
|
|
||||||
"undici": "5.28.4"
|
"undici": "5.28.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.12",
|
"@octokit/webhooks-types": "^7.5.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.8.0",
|
"@types/jest": "^29.5.13",
|
||||||
"@typescript-eslint/parser": "^7.8.0",
|
"@typescript-eslint/eslint-plugin": "^8.8.0",
|
||||||
"@vercel/ncc": "^0.38.1",
|
"@typescript-eslint/parser": "^8.8.0",
|
||||||
"eslint": "^8.57.0",
|
"@vercel/ncc": "^0.38.2",
|
||||||
|
"eslint": "^8.57.1",
|
||||||
"eslint-config-google": "^0.14.0",
|
"eslint-config-google": "^0.14.0",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-junit": "^16.0.0",
|
"jest-junit": "^16.0.0",
|
||||||
"ts-jest": "^29.1.2",
|
"ts-jest": "^29.2.5",
|
||||||
"typescript": "^5.4.5"
|
"typescript": "^5.6.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import {
|
|||||||
buildGeneralExec,
|
buildGeneralExec,
|
||||||
buildReportExec,
|
buildReportExec,
|
||||||
buildUploadExec,
|
buildUploadExec,
|
||||||
|
getToken,
|
||||||
} from './buildExec';
|
} from './buildExec';
|
||||||
|
|
||||||
const context = github.context;
|
const context = github.context;
|
||||||
@@ -75,7 +76,7 @@ test('upload args', async () => {
|
|||||||
'exclude': 'node_modules/',
|
'exclude': 'node_modules/',
|
||||||
'fail_ci_if_error': 'true',
|
'fail_ci_if_error': 'true',
|
||||||
'file': 'coverage.xml',
|
'file': 'coverage.xml',
|
||||||
'files': 'dir1/coverage.xml,dir2/coverage.xml',
|
'files': 'dir1/coverage.xml,dir2/coverage.xml,',
|
||||||
'flags': 'test,test2',
|
'flags': 'test,test2',
|
||||||
'git_service': 'github_enterprise',
|
'git_service': 'github_enterprise',
|
||||||
'handle_no_reports_found': 'true',
|
'handle_no_reports_found': 'true',
|
||||||
@@ -213,7 +214,7 @@ test('report args using context', async () => {
|
|||||||
for (const env of Object.keys(envs)) {
|
for (const env of Object.keys(envs)) {
|
||||||
process.env['INPUT_' + env.toUpperCase()] = envs[env];
|
process.env['INPUT_' + env.toUpperCase()] = envs[env];
|
||||||
}
|
}
|
||||||
const expectedArgs : string[] = [
|
const expectedArgs: string[] = [
|
||||||
'--git-service',
|
'--git-service',
|
||||||
'github',
|
'github',
|
||||||
];
|
];
|
||||||
@@ -271,12 +272,18 @@ test('commit args', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('commit args using context', async () => {
|
test('commit args using context', async () => {
|
||||||
const expectedArgs :string[] = [
|
const expectedArgs: string[] = [
|
||||||
'--git-service',
|
'--git-service',
|
||||||
'github',
|
'github',
|
||||||
];
|
];
|
||||||
|
|
||||||
const {commitExecArgs, commitCommand} = await buildCommitExec();
|
const {commitExecArgs, commitCommand} = await buildCommitExec();
|
||||||
|
if (
|
||||||
|
(context.eventName == 'pull_request' || context.eventName == 'pull_request_target') &&
|
||||||
|
context.payload.pull_request?.base.label.split(':')[0] != context.payload.pull_request?.head.label.split(':')[0]
|
||||||
|
) {
|
||||||
|
expectedArgs.push('-B', `${context.payload.pull_request?.head.label}`);
|
||||||
|
}
|
||||||
if (context.eventName == 'pull_request') {
|
if (context.eventName == 'pull_request') {
|
||||||
expectedArgs.push('-C', `${context.payload.pull_request?.head.sha}`);
|
expectedArgs.push('-C', `${context.payload.pull_request?.head.sha}`);
|
||||||
}
|
}
|
||||||
@@ -289,7 +296,7 @@ test('commit args using context', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('commit args using github server url', async () => {
|
test('commit args using github server url', async () => {
|
||||||
const expectedArgs :string[] = [
|
const expectedArgs: string[] = [
|
||||||
'--git-service',
|
'--git-service',
|
||||||
'github_enterprise',
|
'github_enterprise',
|
||||||
];
|
];
|
||||||
@@ -297,13 +304,65 @@ test('commit args using github server url', async () => {
|
|||||||
process.env.GITHUB_SERVER_URL = 'https://example.com';
|
process.env.GITHUB_SERVER_URL = 'https://example.com';
|
||||||
|
|
||||||
const {commitExecArgs, commitCommand} = await buildCommitExec();
|
const {commitExecArgs, commitCommand} = await buildCommitExec();
|
||||||
|
if (
|
||||||
|
(context.eventName == 'pull_request' || context.eventName == 'pull_request_target') &&
|
||||||
|
context.payload.pull_request?.base.label.split(':')[0] != context.payload.pull_request?.head.label.split(':')[0]
|
||||||
|
) {
|
||||||
|
expectedArgs.push('-B', `${context.payload.pull_request?.head.label}`);
|
||||||
|
}
|
||||||
if (context.eventName == 'pull_request') {
|
if (context.eventName == 'pull_request') {
|
||||||
expectedArgs.push('-C', `${context.payload.pull_request?.head.sha}`);
|
expectedArgs.push('-C', `${context.payload.pull_request?.head.sha}`);
|
||||||
}
|
}
|
||||||
if (context.eventName == 'pull_request_target') {
|
if (context.eventName == 'pull_request_target') {
|
||||||
expectedArgs.push('-P', `${context.payload.number}`);
|
expectedArgs.push('-P', `${context.payload.number}`);
|
||||||
}
|
}
|
||||||
|
expect(commitExecArgs).toEqual(expectedArgs);
|
||||||
|
expect(commitCommand).toEqual('create-commit');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('build commit args when token arg is unset and from fork', async () => {
|
||||||
|
context.eventName = 'pull_request';
|
||||||
|
context.payload.pull_request = {
|
||||||
|
'number': 1,
|
||||||
|
'base': {
|
||||||
|
'label': 'hello:main',
|
||||||
|
},
|
||||||
|
'head': {
|
||||||
|
'label': 'world:feat',
|
||||||
|
'sha': 'aaaaaa',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const expectedArgs: string[] = [
|
||||||
|
'--git-service',
|
||||||
|
'github_enterprise',
|
||||||
|
'-B',
|
||||||
|
'world:feat',
|
||||||
|
'-C',
|
||||||
|
`${context.payload.pull_request?.head.sha}`,
|
||||||
|
];
|
||||||
|
|
||||||
|
const {commitExecArgs, commitCommand} = await buildCommitExec();
|
||||||
|
|
||||||
expect(commitExecArgs).toEqual(expectedArgs);
|
expect(commitExecArgs).toEqual(expectedArgs);
|
||||||
expect(commitCommand).toEqual('create-commit');
|
expect(commitCommand).toEqual('create-commit');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('get token when token arg is unset and from fork', async () => {
|
||||||
|
context.eventName = 'pull_request';
|
||||||
|
context.payload.pull_request = {
|
||||||
|
'number': 1,
|
||||||
|
'base': {
|
||||||
|
'label': 'hello:main',
|
||||||
|
},
|
||||||
|
'head': {
|
||||||
|
'label': 'world:feat',
|
||||||
|
'sha': 'aaaaaa',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const token = await getToken();
|
||||||
|
|
||||||
|
expect(token).toEqual('');
|
||||||
|
});
|
||||||
|
|||||||
174
src/buildExec.ts
174
src/buildExec.ts
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as github from '@actions/github';
|
import * as github from '@actions/github';
|
||||||
|
import {type PullRequestEvent} from '@octokit/webhooks-types';
|
||||||
|
|
||||||
import {setFailure} from './helpers';
|
import {setFailure} from './helpers';
|
||||||
|
|
||||||
@@ -29,11 +30,9 @@ const getGitService = (): string => {
|
|||||||
return 'github';
|
return 'github';
|
||||||
};
|
};
|
||||||
|
|
||||||
const isFork = (): boolean => {
|
const isPullRequestFromFork = (): boolean => {
|
||||||
if (
|
core.info(`eventName: ${context.eventName}`);
|
||||||
`${context.eventName}` !== 'pull_request' ||
|
if (!['pull_request', 'pull_request_target'].includes(context.eventName)) {
|
||||||
`${context.eventName}` !== 'pull_request_target'
|
|
||||||
) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,14 +40,10 @@ const isFork = (): boolean => {
|
|||||||
const headLabel = context.payload.pull_request.head.label;
|
const headLabel = context.payload.pull_request.head.label;
|
||||||
|
|
||||||
core.info(`baseRef: ${baseLabel} | headRef: ${headLabel}`);
|
core.info(`baseRef: ${baseLabel} | headRef: ${headLabel}`);
|
||||||
return (baseLabel.split(':')[0] !== headLabel.split(':')[0]);
|
return baseLabel.split(':')[0] !== headLabel.split(':')[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
const getToken = async (): Promise<string> => {
|
const getToken = async (): Promise<string> => {
|
||||||
if (isFork()) {
|
|
||||||
core.info('==> Fork detected, tokenless uploading used');
|
|
||||||
return Promise.resolve('');
|
|
||||||
}
|
|
||||||
let token = core.getInput('token');
|
let token = core.getInput('token');
|
||||||
let url = core.getInput('url');
|
let url = core.getInput('url');
|
||||||
const useOIDC = isTrue(core.getInput('use_oidc'));
|
const useOIDC = isTrue(core.getInput('use_oidc'));
|
||||||
@@ -58,7 +53,7 @@ const getToken = async (): Promise<string> => {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
token = await core.getIDToken(url);
|
token = await core.getIDToken(url);
|
||||||
return token;
|
return Promise.resolve(token);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setFailure(
|
setFailure(
|
||||||
`Codecov: Failed to get OIDC token with url: ${url}. ${err.message}`,
|
`Codecov: Failed to get OIDC token with url: ${url}. ${err.message}`,
|
||||||
@@ -69,6 +64,17 @@ const getToken = async (): Promise<string> => {
|
|||||||
return token;
|
return token;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getOverrideBranch = (token: string): string => {
|
||||||
|
let overrideBranch = core.getInput('override_branch');
|
||||||
|
if (!overrideBranch && !token && isPullRequestFromFork()) {
|
||||||
|
core.info('==> Fork detected, tokenless uploading used');
|
||||||
|
// backwards compatibility with certain versions of the CLI that expect this
|
||||||
|
process.env['TOKENLESS'] = context.payload.pull_request.head.label;
|
||||||
|
overrideBranch =context.payload.pull_request.head.label;
|
||||||
|
}
|
||||||
|
return overrideBranch;
|
||||||
|
};
|
||||||
|
|
||||||
const buildCommitExec = async (): Promise<{
|
const buildCommitExec = async (): Promise<{
|
||||||
commitExecArgs: any[];
|
commitExecArgs: any[];
|
||||||
commitOptions: any;
|
commitOptions: any;
|
||||||
@@ -76,18 +82,18 @@ const buildCommitExec = async (): Promise<{
|
|||||||
}> => {
|
}> => {
|
||||||
const commitParent = core.getInput('commit_parent');
|
const commitParent = core.getInput('commit_parent');
|
||||||
const gitService = getGitService();
|
const gitService = getGitService();
|
||||||
const overrideBranch = core.getInput('override_branch');
|
|
||||||
const overrideCommit = core.getInput('override_commit');
|
const overrideCommit = core.getInput('override_commit');
|
||||||
const overridePr = core.getInput('override_pr');
|
const overridePr = core.getInput('override_pr');
|
||||||
const slug = core.getInput('slug');
|
const slug = core.getInput('slug');
|
||||||
const token = await getToken();
|
const token = await getToken();
|
||||||
|
const overrideBranch = getOverrideBranch(token);
|
||||||
const failCi = isTrue(core.getInput('fail_ci_if_error'));
|
const failCi = isTrue(core.getInput('fail_ci_if_error'));
|
||||||
const workingDir = core.getInput('working-directory');
|
const workingDir = core.getInput('working-directory');
|
||||||
|
|
||||||
const commitCommand = 'create-commit';
|
const commitCommand = 'create-commit';
|
||||||
const commitExecArgs = [];
|
const commitExecArgs: string[] = [];
|
||||||
|
|
||||||
const commitOptions:any = {};
|
const commitOptions: any = {};
|
||||||
commitOptions.env = Object.assign(process.env, {
|
commitOptions.env = Object.assign(process.env, {
|
||||||
GITHUB_ACTION: process.env.GITHUB_ACTION,
|
GITHUB_ACTION: process.env.GITHUB_ACTION,
|
||||||
GITHUB_RUN_ID: process.env.GITHUB_RUN_ID,
|
GITHUB_RUN_ID: process.env.GITHUB_RUN_ID,
|
||||||
@@ -97,35 +103,33 @@ const buildCommitExec = async (): Promise<{
|
|||||||
GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '',
|
GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
if (token) {
|
if (token) {
|
||||||
commitOptions.env.CODECOV_TOKEN = token;
|
commitOptions.env.CODECOV_TOKEN = token;
|
||||||
}
|
}
|
||||||
if (commitParent) {
|
if (commitParent) {
|
||||||
commitExecArgs.push('--parent-sha', `${commitParent}`);
|
commitExecArgs.push('--parent-sha', commitParent);
|
||||||
}
|
}
|
||||||
commitExecArgs.push('--git-service', `${gitService}`);
|
commitExecArgs.push('--git-service', gitService);
|
||||||
|
|
||||||
if (overrideBranch) {
|
if (overrideBranch) {
|
||||||
commitExecArgs.push('-B', `${overrideBranch}`);
|
commitExecArgs.push('-B', overrideBranch);
|
||||||
}
|
}
|
||||||
if (overrideCommit) {
|
if (overrideCommit) {
|
||||||
commitExecArgs.push('-C', `${overrideCommit}`);
|
commitExecArgs.push('-C', overrideCommit);
|
||||||
} else if (
|
} else if (
|
||||||
`${context.eventName}` == 'pull_request' ||
|
['pull_request', 'pull_request_target'].includes(context.eventName)
|
||||||
`${context.eventName}` == 'pull_request_target'
|
|
||||||
) {
|
) {
|
||||||
commitExecArgs.push('-C', `${context.payload.pull_request.head.sha}`);
|
const payload = context.payload as PullRequestEvent;
|
||||||
|
commitExecArgs.push('-C', payload.pull_request.head.sha);
|
||||||
}
|
}
|
||||||
if (overridePr) {
|
if (overridePr) {
|
||||||
commitExecArgs.push('--pr', `${overridePr}`);
|
commitExecArgs.push('--pr', overridePr);
|
||||||
} else if (
|
} else if (context.eventName === 'pull_request_target') {
|
||||||
`${context.eventName}` == 'pull_request_target'
|
const payload = context.payload as PullRequestEvent;
|
||||||
) {
|
commitExecArgs.push('--pr', payload.number.toString());
|
||||||
commitExecArgs.push('--pr', `${context.payload.number}`);
|
|
||||||
}
|
}
|
||||||
if (slug) {
|
if (slug) {
|
||||||
commitExecArgs.push('--slug', `${slug}`);
|
commitExecArgs.push('--slug', slug);
|
||||||
}
|
}
|
||||||
if (failCi) {
|
if (failCi) {
|
||||||
commitExecArgs.push('-Z');
|
commitExecArgs.push('-Z');
|
||||||
@@ -134,7 +138,6 @@ const buildCommitExec = async (): Promise<{
|
|||||||
commitOptions.cwd = workingDir;
|
commitOptions.cwd = workingDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return {commitExecArgs, commitOptions, commitCommand};
|
return {commitExecArgs, commitOptions, commitCommand};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -148,10 +151,10 @@ const buildGeneralExec = (): {
|
|||||||
const args = [];
|
const args = [];
|
||||||
|
|
||||||
if (codecovYmlPath) {
|
if (codecovYmlPath) {
|
||||||
args.push('--codecov-yml-path', `${codecovYmlPath}`);
|
args.push('--codecov-yml-path', codecovYmlPath);
|
||||||
}
|
}
|
||||||
if (url) {
|
if (url) {
|
||||||
args.push('--enterprise-url', `${url}`);
|
args.push('--enterprise-url', url);
|
||||||
}
|
}
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
args.push('-v');
|
args.push('-v');
|
||||||
@@ -172,11 +175,10 @@ const buildReportExec = async (): Promise<{
|
|||||||
const failCi = isTrue(core.getInput('fail_ci_if_error'));
|
const failCi = isTrue(core.getInput('fail_ci_if_error'));
|
||||||
const workingDir = core.getInput('working-directory');
|
const workingDir = core.getInput('working-directory');
|
||||||
|
|
||||||
|
|
||||||
const reportCommand = 'create-report';
|
const reportCommand = 'create-report';
|
||||||
const reportExecArgs = [];
|
const reportExecArgs: string[] = [];
|
||||||
|
|
||||||
const reportOptions:any = {};
|
const reportOptions: any = {};
|
||||||
reportOptions.env = Object.assign(process.env, {
|
reportOptions.env = Object.assign(process.env, {
|
||||||
GITHUB_ACTION: process.env.GITHUB_ACTION,
|
GITHUB_ACTION: process.env.GITHUB_ACTION,
|
||||||
GITHUB_RUN_ID: process.env.GITHUB_RUN_ID,
|
GITHUB_RUN_ID: process.env.GITHUB_RUN_ID,
|
||||||
@@ -186,29 +188,27 @@ const buildReportExec = async (): Promise<{
|
|||||||
GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '',
|
GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
if (token) {
|
if (token) {
|
||||||
reportOptions.env.CODECOV_TOKEN = token;
|
reportOptions.env.CODECOV_TOKEN = token;
|
||||||
}
|
}
|
||||||
reportExecArgs.push('--git-service', `${gitService}`);
|
reportExecArgs.push('--git-service', gitService);
|
||||||
|
|
||||||
if (overrideCommit) {
|
if (overrideCommit) {
|
||||||
reportExecArgs.push('-C', `${overrideCommit}`);
|
reportExecArgs.push('-C', overrideCommit);
|
||||||
} else if (
|
} else if (
|
||||||
`${context.eventName}` == 'pull_request' ||
|
['pull_request', 'pull_request_target'].includes(context.eventName)
|
||||||
`${context.eventName}` == 'pull_request_target'
|
|
||||||
) {
|
) {
|
||||||
reportExecArgs.push('-C', `${context.payload.pull_request.head.sha}`);
|
const payload = context.payload as PullRequestEvent;
|
||||||
|
reportExecArgs.push('-C', payload.pull_request.head.sha);
|
||||||
}
|
}
|
||||||
if (overridePr) {
|
if (overridePr) {
|
||||||
reportExecArgs.push('-P', `${overridePr}`);
|
reportExecArgs.push('-P', overridePr);
|
||||||
} else if (
|
} else if (context.eventName == 'pull_request_target') {
|
||||||
`${context.eventName}` == 'pull_request_target'
|
const payload = context.payload as PullRequestEvent;
|
||||||
) {
|
reportExecArgs.push('-P', payload.number.toString());
|
||||||
reportExecArgs.push('-P', `${context.payload.number}`);
|
|
||||||
}
|
}
|
||||||
if (slug) {
|
if (slug) {
|
||||||
reportExecArgs.push('--slug', `${slug}`);
|
reportExecArgs.push('--slug', slug);
|
||||||
}
|
}
|
||||||
if (failCi) {
|
if (failCi) {
|
||||||
reportExecArgs.push('-Z');
|
reportExecArgs.push('-Z');
|
||||||
@@ -264,9 +264,9 @@ const buildUploadExec = async (): Promise<{
|
|||||||
);
|
);
|
||||||
const workingDir = core.getInput('working-directory');
|
const workingDir = core.getInput('working-directory');
|
||||||
|
|
||||||
const uploadExecArgs = [];
|
const uploadExecArgs: string[] = [];
|
||||||
const uploadCommand = 'do-upload';
|
const uploadCommand = 'do-upload';
|
||||||
const uploadOptions:any = {};
|
const uploadOptions: any = {};
|
||||||
uploadOptions.env = Object.assign(process.env, {
|
uploadOptions.env = Object.assign(process.env, {
|
||||||
GITHUB_ACTION: process.env.GITHUB_ACTION,
|
GITHUB_ACTION: process.env.GITHUB_ACTION,
|
||||||
GITHUB_RUN_ID: process.env.GITHUB_RUN_ID,
|
GITHUB_RUN_ID: process.env.GITHUB_RUN_ID,
|
||||||
@@ -300,83 +300,94 @@ const buildUploadExec = async (): Promise<{
|
|||||||
uploadExecArgs.push('-e', envVarsArg.join(','));
|
uploadExecArgs.push('-e', envVarsArg.join(','));
|
||||||
}
|
}
|
||||||
if (exclude) {
|
if (exclude) {
|
||||||
uploadExecArgs.push('--exclude', `${exclude}`);
|
uploadExecArgs.push('--exclude', exclude);
|
||||||
}
|
}
|
||||||
if (failCi) {
|
if (failCi) {
|
||||||
uploadExecArgs.push('-Z');
|
uploadExecArgs.push('-Z');
|
||||||
}
|
}
|
||||||
if (file) {
|
if (file) {
|
||||||
uploadExecArgs.push('-f', `${file}`);
|
uploadExecArgs.push('-f', file);
|
||||||
}
|
}
|
||||||
if (files) {
|
if (files) {
|
||||||
files.split(',').map((f) => f.trim()).forEach((f) => {
|
files
|
||||||
uploadExecArgs.push('-f', `${f}`);
|
.split(',')
|
||||||
});
|
.map((f) => f.trim())
|
||||||
|
.forEach((f) => {
|
||||||
|
if (f.length > 0) {
|
||||||
|
// this handles trailing commas
|
||||||
|
uploadExecArgs.push('-f', f);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (flags) {
|
if (flags) {
|
||||||
flags.split(',').map((f) => f.trim()).forEach((f) => {
|
flags
|
||||||
uploadExecArgs.push('-F', `${f}`);
|
.split(',')
|
||||||
});
|
.map((f) => f.trim())
|
||||||
|
.forEach((f) => {
|
||||||
|
uploadExecArgs.push('-F', f);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
uploadExecArgs.push('--git-service', `${gitService}`);
|
uploadExecArgs.push('--git-service', gitService);
|
||||||
if (handleNoReportsFound) {
|
if (handleNoReportsFound) {
|
||||||
uploadExecArgs.push('--handle-no-reports-found');
|
uploadExecArgs.push('--handle-no-reports-found');
|
||||||
}
|
}
|
||||||
if (jobCode) {
|
if (jobCode) {
|
||||||
uploadExecArgs.push('--job-code', `${jobCode}`);
|
uploadExecArgs.push('--job-code', jobCode);
|
||||||
}
|
}
|
||||||
if (name) {
|
if (name) {
|
||||||
uploadExecArgs.push('-n', `${name}`);
|
uploadExecArgs.push('-n', name);
|
||||||
}
|
}
|
||||||
if (networkFilter) {
|
if (networkFilter) {
|
||||||
uploadExecArgs.push('--network-filter', `${networkFilter}`);
|
uploadExecArgs.push('--network-filter', networkFilter);
|
||||||
}
|
}
|
||||||
if (networkPrefix) {
|
if (networkPrefix) {
|
||||||
uploadExecArgs.push('--network-prefix', `${networkPrefix}`);
|
uploadExecArgs.push('--network-prefix', networkPrefix);
|
||||||
}
|
}
|
||||||
if (overrideBranch) {
|
if (overrideBranch) {
|
||||||
uploadExecArgs.push('-B', `${overrideBranch}`);
|
uploadExecArgs.push('-B', overrideBranch);
|
||||||
}
|
}
|
||||||
if (overrideBuild) {
|
if (overrideBuild) {
|
||||||
uploadExecArgs.push('-b', `${overrideBuild}`);
|
uploadExecArgs.push('-b', overrideBuild);
|
||||||
}
|
}
|
||||||
if (overrideBuildUrl) {
|
if (overrideBuildUrl) {
|
||||||
uploadExecArgs.push('--build-url', `${overrideBuildUrl}`);
|
uploadExecArgs.push('--build-url', overrideBuildUrl);
|
||||||
}
|
}
|
||||||
if (overrideCommit) {
|
if (overrideCommit) {
|
||||||
uploadExecArgs.push('-C', `${overrideCommit}`);
|
uploadExecArgs.push('-C', overrideCommit);
|
||||||
} else if (
|
} else if (
|
||||||
`${context.eventName}` == 'pull_request' ||
|
['pull_request', 'pull_request_target'].includes(context.eventName)
|
||||||
`${context.eventName}` == 'pull_request_target'
|
|
||||||
) {
|
) {
|
||||||
uploadExecArgs.push('-C', `${context.payload.pull_request.head.sha}`);
|
const payload = context.payload as PullRequestEvent;
|
||||||
|
uploadExecArgs.push('-C', payload.pull_request.head.sha);
|
||||||
}
|
}
|
||||||
if (overridePr) {
|
if (overridePr) {
|
||||||
uploadExecArgs.push('-P', `${overridePr}`);
|
uploadExecArgs.push('-P', overridePr);
|
||||||
} else if (
|
} else if (context.eventName == 'pull_request_target') {
|
||||||
`${context.eventName}` == 'pull_request_target'
|
const payload = context.payload as PullRequestEvent;
|
||||||
) {
|
uploadExecArgs.push('-P', payload.number.toString());
|
||||||
uploadExecArgs.push('-P', `${context.payload.number}`);
|
|
||||||
}
|
}
|
||||||
if (plugin) {
|
if (plugin) {
|
||||||
uploadExecArgs.push('--plugin', `${plugin}`);
|
uploadExecArgs.push('--plugin', plugin);
|
||||||
}
|
}
|
||||||
if (plugins) {
|
if (plugins) {
|
||||||
plugins.split(',').map((p) => p.trim()).forEach((p) => {
|
plugins
|
||||||
uploadExecArgs.push('--plugin', `${p}`);
|
.split(',')
|
||||||
});
|
.map((p) => p.trim())
|
||||||
|
.forEach((p) => {
|
||||||
|
uploadExecArgs.push('--plugin', p);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (reportCode) {
|
if (reportCode) {
|
||||||
uploadExecArgs.push('--report-code', `${reportCode}`);
|
uploadExecArgs.push('--report-code', reportCode);
|
||||||
}
|
}
|
||||||
if (rootDir) {
|
if (rootDir) {
|
||||||
uploadExecArgs.push('--network-root-folder', `${rootDir}`);
|
uploadExecArgs.push('--network-root-folder', rootDir);
|
||||||
}
|
}
|
||||||
if (searchDir) {
|
if (searchDir) {
|
||||||
uploadExecArgs.push('-s', `${searchDir}`);
|
uploadExecArgs.push('-s', searchDir);
|
||||||
}
|
}
|
||||||
if (slug) {
|
if (slug) {
|
||||||
uploadExecArgs.push('-r', `${slug}`);
|
uploadExecArgs.push('-r', slug);
|
||||||
}
|
}
|
||||||
if (workingDir) {
|
if (workingDir) {
|
||||||
uploadOptions.cwd = workingDir;
|
uploadOptions.cwd = workingDir;
|
||||||
@@ -405,4 +416,5 @@ export {
|
|||||||
buildGeneralExec,
|
buildGeneralExec,
|
||||||
buildReportExec,
|
buildReportExec,
|
||||||
buildUploadExec,
|
buildUploadExec,
|
||||||
|
getToken,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,10 +12,15 @@ const PLATFORMS = [
|
|||||||
type Platform = typeof PLATFORMS[number];
|
type Platform = typeof PLATFORMS[number];
|
||||||
|
|
||||||
const setFailure = (message: string, failCi: boolean): void => {
|
const setFailure = (message: string, failCi: boolean): void => {
|
||||||
failCi ? core.setFailed(message) : core.warning(message);
|
if (failCi) {
|
||||||
if (failCi) {
|
core.setFailed(message);
|
||||||
process.exit();
|
} else {
|
||||||
}
|
core.warning(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (failCi) {
|
||||||
|
process.exit();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUploaderName = (platform: string): string => {
|
const getUploaderName = (platform: string): string => {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
import {execSync} from 'node:child_process';
|
||||||
import * as crypto from 'node:crypto';
|
import * as crypto from 'node:crypto';
|
||||||
import * as fs from 'node:fs';
|
import * as fs from 'node:fs';
|
||||||
import * as path from 'node:path';
|
import * as path from 'node:path';
|
||||||
import * as gpg from 'gpg';
|
|
||||||
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import {request} from 'undici';
|
import {request} from 'undici';
|
||||||
@@ -76,36 +76,43 @@ const verify = async (
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const verifySignature = () => {
|
const verifySignature = async () => {
|
||||||
gpg.call('', [
|
const command = [
|
||||||
|
'gpg',
|
||||||
'--logger-fd',
|
'--logger-fd',
|
||||||
'1',
|
'1',
|
||||||
'--verify',
|
'--verify',
|
||||||
path.join(__dirname, `${uploaderName}.SHA256SUM.sig`),
|
path.join(__dirname, `${uploaderName}.SHA256SUM.sig`),
|
||||||
path.join(__dirname, `${uploaderName}.SHA256SUM`),
|
path.join(__dirname, `${uploaderName}.SHA256SUM`),
|
||||||
], async (err, verifyResult) => {
|
].join(' ');
|
||||||
if (err) {
|
|
||||||
setFailure(`Codecov: Error importing pgp key: ${err.message}`, failCi);
|
try {
|
||||||
}
|
await execSync(command, {stdio: 'inherit'});
|
||||||
core.info(verifyResult);
|
} catch (err) {
|
||||||
await validateSha();
|
setFailure(`Codecov: Error verifying gpg signature: ${err.message}`, failCi);
|
||||||
});
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Import gpg key
|
const importKey = async () => {
|
||||||
gpg.call('', [
|
const command = [
|
||||||
'--logger-fd',
|
'gpg',
|
||||||
'1',
|
'--logger-fd',
|
||||||
'--no-default-keyring',
|
'1',
|
||||||
'--import',
|
'--no-default-keyring',
|
||||||
path.join(__dirname, 'pgp_keys.asc'),
|
'--import',
|
||||||
], async (err, importResult) => {
|
path.join(__dirname, 'pgp_keys.asc'),
|
||||||
if (err) {
|
].join(' ');
|
||||||
setFailure(`Codecov: Error importing pgp key: ${err.message}`, failCi);
|
|
||||||
|
try {
|
||||||
|
await execSync(command, {stdio: 'inherit'});
|
||||||
|
} catch (err) {
|
||||||
|
setFailure(`Codecov: Error importing gpg key: ${err.message}`, failCi);
|
||||||
}
|
}
|
||||||
core.info(importResult);
|
};
|
||||||
verifySignature();
|
|
||||||
});
|
await importKey();
|
||||||
|
await verifySignature();
|
||||||
|
await validateSha();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setFailure(`Codecov: Error validating uploader: ${err.message}`, failCi);
|
setFailure(`Codecov: Error validating uploader: ${err.message}`, failCi);
|
||||||
}
|
}
|
||||||
|
|||||||
62
src/version.test.ts
Normal file
62
src/version.test.ts
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import * as core from '@actions/core';
|
||||||
|
import {Agent, MockAgent, setGlobalDispatcher} from 'undici';
|
||||||
|
|
||||||
|
import versionInfo from './version';
|
||||||
|
|
||||||
|
const mockAgent = new MockAgent();
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
setGlobalDispatcher(mockAgent);
|
||||||
|
mockAgent.disableNetConnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jest.clearAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await mockAgent.close();
|
||||||
|
setGlobalDispatcher(new Agent());
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('versionInfo', () => {
|
||||||
|
const platform = 'linux';
|
||||||
|
|
||||||
|
test('should resolve requested version info', async () => {
|
||||||
|
const version = 'latest';
|
||||||
|
const coreInfoSpy = jest.spyOn(core, 'info');
|
||||||
|
|
||||||
|
mockAgent
|
||||||
|
.get('https://cli.codecov.io')
|
||||||
|
.intercept({
|
||||||
|
path: `/${platform}/${version}`,
|
||||||
|
})
|
||||||
|
.reply(200, {
|
||||||
|
version: 'v0.5.2',
|
||||||
|
});
|
||||||
|
|
||||||
|
await versionInfo(platform, version);
|
||||||
|
|
||||||
|
expect(coreInfoSpy).toHaveBeenCalledTimes(2);
|
||||||
|
expect(coreInfoSpy).toHaveBeenCalledWith('==> Running version latest');
|
||||||
|
expect(coreInfoSpy).toHaveBeenCalledWith('==> Running version v0.5.2');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should handle unsupported version', async () => {
|
||||||
|
const version = 'unsupported';
|
||||||
|
const coreInfoSpy = jest.spyOn(core, 'info');
|
||||||
|
|
||||||
|
mockAgent
|
||||||
|
.get('https://cli.codecov.io')
|
||||||
|
.intercept({
|
||||||
|
path: `/${platform}/${version}`,
|
||||||
|
})
|
||||||
|
.reply(404, 'MESSAGE');
|
||||||
|
|
||||||
|
await versionInfo(platform, version);
|
||||||
|
|
||||||
|
expect(coreInfoSpy).toHaveBeenCalledTimes(2);
|
||||||
|
expect(coreInfoSpy).toHaveBeenCalledWith('==> Running version unsupported');
|
||||||
|
expect(coreInfoSpy).toHaveBeenCalledWith(expect.stringContaining('Could not pull latest version information'));
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user