fetch id token from github

This commit is contained in:
Jesse Haka 2023-08-21 10:02:23 +03:00
parent 525bbfffeb
commit 8049f50179
7 changed files with 240 additions and 169 deletions

View file

@ -5,6 +5,12 @@ inputs:
token: token:
description: 'Repository upload token - get it from codecov.io. Required only for private repositories' description: 'Repository upload token - get it from codecov.io. Required only for private repositories'
required: false required: false
use_oidc:
description: 'Uses Github OIDC to provision upload token.'
required: false
url:
description: 'URL to codecov installation. Defaults to https://codecov.io'
required: false
file: file:
description: 'Path to coverage file to upload' description: 'Path to coverage file to upload'
required: false required: false

91
dist/index.js vendored

File diff suppressed because one or more lines are too long

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View file

@ -124,7 +124,7 @@ test('upload args', () => {
}); });
test('report args', () => { test('report args', async () => {
const envs = { const envs = {
override_commit: '9caabca5474b49de74ef5667deabaf74cdacc244', override_commit: '9caabca5474b49de74ef5667deabaf74cdacc244',
slug: 'fakeOwner/fakeRepo', slug: 'fakeOwner/fakeRepo',
@ -134,7 +134,7 @@ test('report args', () => {
process.env['INPUT_' + env.toUpperCase()] = envs[env]; process.env['INPUT_' + env.toUpperCase()] = envs[env];
} }
const {reportExecArgs, reportCommand} = buildReportExec(); const {reportExecArgs, reportCommand} = await buildReportExec();
expect(reportExecArgs).toEqual( expect(reportExecArgs).toEqual(
expect.arrayContaining([ expect.arrayContaining([
@ -150,7 +150,7 @@ test('report args', () => {
}); });
test('report args using context', () => { test('report args using context', async () => {
const envs = { const envs = {
token: 'd3859757-ab80-4664-924d-aef22fa7557b', token: 'd3859757-ab80-4664-924d-aef22fa7557b',
}; };
@ -162,7 +162,7 @@ test('report args using context', () => {
expectedArgs.push('-C', `${context.payload.pull_request.head.sha}`); expectedArgs.push('-C', `${context.payload.pull_request.head.sha}`);
} }
const {reportExecArgs, reportCommand} = buildReportExec(); const {reportExecArgs, reportCommand} = await buildReportExec();
expect(reportExecArgs).toEqual(expectedArgs); expect(reportExecArgs).toEqual(expectedArgs);
expect(reportCommand).toEqual('create-report'); expect(reportCommand).toEqual('create-report');

View file

@ -18,14 +18,12 @@ const isTrue = (variable) => {
}; };
const buildCommitExec = () => { const buildCommitExec = async () => {
const commitParent = core.getInput('commit_parent'); const commitParent = core.getInput('commit_parent');
const overrideBranch = core.getInput('override_branch'); 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 = core.getInput('token');
const commitCommand = 'create-commit'; const commitCommand = 'create-commit';
const commitExecArgs = []; const commitExecArgs = [];
@ -40,7 +38,7 @@ const buildCommitExec = () => {
GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '', GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '',
}); });
const token = await fetchToken();
if (token) { if (token) {
commitOptions.env.CODECOV_TOKEN = token; commitOptions.env.CODECOV_TOKEN = token;
} }
@ -88,12 +86,9 @@ const buildGeneralExec = () => {
return {args, verbose}; return {args, verbose};
}; };
const buildReportExec = () => { const buildReportExec = async () => {
const overrideCommit = core.getInput('override_commit'); const overrideCommit = core.getInput('override_commit');
const slug = core.getInput('slug'); const slug = core.getInput('slug');
const token = core.getInput('token');
const reportCommand = 'create-report'; const reportCommand = 'create-report';
const reportExecArgs = []; const reportExecArgs = [];
@ -107,7 +102,7 @@ const buildReportExec = () => {
GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '', GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || '',
}); });
const token = await fetchToken();
if (token) { if (token) {
reportOptions.env.CODECOV_TOKEN = token; reportOptions.env.CODECOV_TOKEN = token;
} }
@ -126,7 +121,24 @@ const buildReportExec = () => {
return {reportExecArgs, reportOptions, reportCommand}; return {reportExecArgs, reportOptions, reportCommand};
}; };
const buildUploadExec = () => { const fetchToken = async (): Promise<string> => {
let token = core.getInput('token');
const useOIDC = isTrue(core.getInput('use_oidc'));
if (useOIDC) {
let codecovURL = core.getInput('url');
if (codecovURL === '') {
codecovURL = 'https://codecov.io';
}
try {
token = await core.getIDToken(codecovURL);
} catch (error) {
core.debug(`Got error while retrieving id token: ${error}`);
}
}
return token;
};
const buildUploadExec = async () => {
const envVars = core.getInput('env_vars'); const envVars = core.getInput('env_vars');
const dryRun = isTrue(core.getInput('dry_run')); const dryRun = isTrue(core.getInput('dry_run'));
const failCi = isTrue(core.getInput('fail_ci_if_error')); const failCi = isTrue(core.getInput('fail_ci_if_error'));
@ -143,7 +155,6 @@ const buildUploadExec = () => {
const rootDir = core.getInput('root_dir'); const rootDir = core.getInput('root_dir');
const searchDir = core.getInput('directory'); const searchDir = core.getInput('directory');
const slug = core.getInput('slug'); const slug = core.getInput('slug');
const token = core.getInput('token');
let uploaderVersion = core.getInput('version'); let uploaderVersion = core.getInput('version');
const workingDir = core.getInput('working-directory'); const workingDir = core.getInput('working-directory');
const plugin = core.getInput('plugin'); const plugin = core.getInput('plugin');
@ -175,6 +186,8 @@ const buildUploadExec = () => {
`${name}`, `${name}`,
); );
} }
const token = await fetchToken();
if (token) { if (token) {
uploadOptions.env.CODECOV_TOKEN = token; uploadOptions.env.CODECOV_TOKEN = token;
} }

View file

@ -23,9 +23,21 @@ import versionInfo from './version';
let failCi; let failCi;
/**
* Main function of the codecov-action
*/
async function run(): Promise<void> {
try { try {
const {commitExecArgs, commitOptions, commitCommand} = buildCommitExec(); const {
const {reportExecArgs, reportOptions, reportCommand} = buildReportExec(); commitExecArgs,
commitOptions,
commitCommand,
} = await buildCommitExec();
const {
reportExecArgs,
reportOptions,
reportCommand,
} = await buildReportExec();
const { const {
uploadExecArgs, uploadExecArgs,
uploadOptions, uploadOptions,
@ -33,7 +45,7 @@ try {
os, os,
uploaderVersion, uploaderVersion,
uploadCommand, uploadCommand,
} = buildUploadExec(); } = await buildUploadExec();
const {args, verbose} = buildGeneralExec(); const {args, verbose} = buildGeneralExec();
const platform = getPlatform(os); const platform = getPlatform(os);
@ -67,7 +79,8 @@ try {
}); });
}; };
const doUpload = async () => { const doUpload = async () => {
await exec.exec(getCommand(filename, args, uploadCommand).join(' '), await exec.exec(
getCommand(filename, args, uploadCommand).join(' '),
uploadExecArgs, uploadExecArgs,
uploadOptions) uploadOptions)
.catch((err) => { .catch((err) => {
@ -109,12 +122,16 @@ try {
unlink(); unlink();
}).catch((err) => { }).catch((err) => {
setFailure( setFailure(
`Codecov: Failed to properly create commit: ${err.message}`, `Codecov: Failed to properly create commit:
${err.message}`,
failCi, failCi,
); );
}); });
}); });
}); });
} catch (err) { } catch (err) {
setFailure(`Codecov: Encountered an unexpected error ${err.message}`, failCi); setFailure(`Codecov: Encountered an unexpected error ${err.message}`,
failCi);
} }
}
run();

View file

@ -6,17 +6,17 @@ const versionInfo = async (
version?: string, version?: string,
): Promise<void> => { ): Promise<void> => {
if (version) { if (version) {
core.info(`==> Running version ${version}`); core.info(`==> Using override version ${version}`);
} }
try { try {
const metadataRes = await fetch.default( `https://uploader.codecov.io/${platform}/latest`, { const metadataRes = await fetch.default( `https://uploader.codecov.io/${platform}/${version}`, {
headers: {'Accept': 'application/json'}, headers: {'Accept': 'application/json'},
}); });
const metadata = await metadataRes.json(); const metadata = await metadataRes.json();
core.info(`==> Running version ${metadata['version']}`); core.info(`==> Running version ${metadata['version']}`);
} catch (err) { } catch (err) {
core.info(`Could not pull latest version information: ${err}`); core.info(`Could not pull ${version} version information: ${err}`);
} }
}; };
export default versionInfo; export default versionInfo;