Skip to content

Commit 07e2b13

Browse files
committed
fetch id token from github
1 parent 525bbff commit 07e2b13

6 files changed

Lines changed: 207 additions & 149 deletions

File tree

action.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ inputs:
55
token:
66
description: 'Repository upload token - get it from codecov.io. Required only for private repositories'
77
required: false
8+
use_oidc:
9+
description: 'Uses Github OIDC to provision upload token.'
10+
required: false
811
file:
912
description: 'Path to coverage file to upload'
1013
required: false

dist/index.js

Lines changed: 95 additions & 64 deletions
Large diffs are not rendered by default.

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/buildExec.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ test('upload args', () => {
124124
});
125125

126126

127-
test('report args', () => {
127+
test('report args', async () => {
128128
const envs = {
129129
override_commit: '9caabca5474b49de74ef5667deabaf74cdacc244',
130130
slug: 'fakeOwner/fakeRepo',
@@ -134,7 +134,7 @@ test('report args', () => {
134134
process.env['INPUT_' + env.toUpperCase()] = envs[env];
135135
}
136136

137-
const {reportExecArgs, reportCommand} = buildReportExec();
137+
const {reportExecArgs, reportCommand} = await buildReportExec();
138138

139139
expect(reportExecArgs).toEqual(
140140
expect.arrayContaining([
@@ -150,7 +150,7 @@ test('report args', () => {
150150
});
151151

152152

153-
test('report args using context', () => {
153+
test('report args using context', async () => {
154154
const envs = {
155155
token: 'd3859757-ab80-4664-924d-aef22fa7557b',
156156
};
@@ -162,7 +162,7 @@ test('report args using context', () => {
162162
expectedArgs.push('-C', `${context.payload.pull_request.head.sha}`);
163163
}
164164

165-
const {reportExecArgs, reportCommand} = buildReportExec();
165+
const {reportExecArgs, reportCommand} = await buildReportExec();
166166

167167
expect(reportExecArgs).toEqual(expectedArgs);
168168
expect(reportCommand).toEqual('create-report');

src/buildExec.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,22 @@ const buildGeneralExec = () => {
8888
return {args, verbose};
8989
};
9090

91-
const buildReportExec = () => {
91+
const buildReportExec = async () => {
9292
const overrideCommit = core.getInput('override_commit');
9393
const slug = core.getInput('slug');
94-
const token = core.getInput('token');
95-
94+
let token = core.getInput('token');
95+
const useOIDC = isTrue(core.getInput('use_oidc'));
96+
if (useOIDC) {
97+
let codecovURL = core.getInput('url');
98+
if (codecovURL === '') {
99+
codecovURL = 'https://codecov.io';
100+
}
101+
try {
102+
token = await core.getIDToken(codecovURL);
103+
} catch (error) {
104+
core.debug(`Got error while retrieving id token: ${error}`);
105+
}
106+
}
96107

97108
const reportCommand = 'create-report';
98109
const reportExecArgs = [];

src/index.ts

Lines changed: 90 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -23,98 +23,111 @@ import versionInfo from './version';
2323

2424
let failCi;
2525

26-
try {
27-
const {commitExecArgs, commitOptions, commitCommand} = buildCommitExec();
28-
const {reportExecArgs, reportOptions, reportCommand} = buildReportExec();
29-
const {
30-
uploadExecArgs,
31-
uploadOptions,
32-
failCi,
33-
os,
34-
uploaderVersion,
35-
uploadCommand,
36-
} = buildUploadExec();
37-
const {args, verbose} = buildGeneralExec();
26+
/**
27+
* Main function of the codecov-action
28+
*/
29+
async function run(): Promise<void> {
30+
try {
31+
const {commitExecArgs, commitOptions, commitCommand} = buildCommitExec();
32+
const {
33+
reportExecArgs,
34+
reportOptions,
35+
reportCommand,
36+
} = await buildReportExec();
37+
const {
38+
uploadExecArgs,
39+
uploadOptions,
40+
failCi,
41+
os,
42+
uploaderVersion,
43+
uploadCommand,
44+
} = buildUploadExec();
45+
const {args, verbose} = buildGeneralExec();
3846

39-
const platform = getPlatform(os);
47+
const platform = getPlatform(os);
4048

41-
const filename = path.join( __dirname, getUploaderName(platform));
42-
https.get(getBaseUrl(platform, uploaderVersion), (res) => {
49+
const filename = path.join( __dirname, getUploaderName(platform));
50+
https.get(getBaseUrl(platform, uploaderVersion), (res) => {
4351
// Image will be stored at this path
44-
const filePath = fs.createWriteStream(filename);
45-
res.pipe(filePath);
46-
filePath
47-
.on('error', (err) => {
48-
setFailure(
49-
`Codecov: Failed to write uploader binary: ${err.message}`,
50-
true,
51-
);
52-
}).on('finish', async () => {
53-
filePath.close();
52+
const filePath = fs.createWriteStream(filename);
53+
res.pipe(filePath);
54+
filePath
55+
.on('error', (err) => {
56+
setFailure(
57+
`Codecov: Failed to write uploader binary: ${err.message}`,
58+
true,
59+
);
60+
}).on('finish', async () => {
61+
filePath.close();
5462

55-
await verify(filename, platform, uploaderVersion, verbose, failCi);
56-
await versionInfo(platform, uploaderVersion);
57-
await fs.chmodSync(filename, '777');
63+
await verify(filename, platform, uploaderVersion, verbose, failCi);
64+
await versionInfo(platform, uploaderVersion);
65+
await fs.chmodSync(filename, '777');
5866

59-
const unlink = () => {
60-
fs.unlink(filename, (err) => {
61-
if (err) {
62-
setFailure(
63-
`Codecov: Could not unlink uploader: ${err.message}`,
64-
failCi,
65-
);
66-
}
67-
});
68-
};
69-
const doUpload = async () => {
70-
await exec.exec(getCommand(filename, args, uploadCommand).join(' '),
71-
uploadExecArgs,
72-
uploadOptions)
73-
.catch((err) => {
67+
const unlink = () => {
68+
fs.unlink(filename, (err) => {
69+
if (err) {
7470
setFailure(
75-
`Codecov:
76-
Failed to properly upload report: ${err.message}`,
71+
`Codecov: Could not unlink uploader: ${err.message}`,
7772
failCi,
7873
);
79-
});
80-
};
81-
const createReport = async () => {
74+
}
75+
});
76+
};
77+
const doUpload = async () => {
78+
await exec.exec(
79+
getCommand(filename, args, uploadCommand).join(' '),
80+
uploadExecArgs,
81+
uploadOptions)
82+
.catch((err) => {
83+
setFailure(
84+
`Codecov:
85+
Failed to properly upload report: ${err.message}`,
86+
failCi,
87+
);
88+
});
89+
};
90+
const createReport = async () => {
91+
await exec.exec(
92+
getCommand(filename, args, reportCommand).join(' '),
93+
reportExecArgs,
94+
reportOptions)
95+
.then(async (exitCode) => {
96+
if (exitCode == 0) {
97+
await doUpload();
98+
}
99+
}).catch((err) => {
100+
setFailure(
101+
`Codecov:
102+
Failed to properly create report: ${err.message}`,
103+
failCi,
104+
);
105+
});
106+
};
82107
await exec.exec(
83-
getCommand(filename, args, reportCommand).join(' '),
84-
reportExecArgs,
85-
reportOptions)
108+
getCommand(
109+
filename,
110+
args,
111+
commitCommand,
112+
).join(' '),
113+
commitExecArgs, commitOptions)
86114
.then(async (exitCode) => {
87115
if (exitCode == 0) {
88-
await doUpload();
116+
await createReport();
89117
}
118+
unlink();
90119
}).catch((err) => {
91120
setFailure(
92-
`Codecov:
93-
Failed to properly create report: ${err.message}`,
121+
`Codecov: Failed to properly create commit:
122+
${err.message}`,
94123
failCi,
95124
);
96125
});
97-
};
98-
await exec.exec(
99-
getCommand(
100-
filename,
101-
args,
102-
commitCommand,
103-
).join(' '),
104-
commitExecArgs, commitOptions)
105-
.then(async (exitCode) => {
106-
if (exitCode == 0) {
107-
await createReport();
108-
}
109-
unlink();
110-
}).catch((err) => {
111-
setFailure(
112-
`Codecov: Failed to properly create commit: ${err.message}`,
113-
failCi,
114-
);
115-
});
116-
});
117-
});
118-
} catch (err) {
119-
setFailure(`Codecov: Encountered an unexpected error ${err.message}`, failCi);
126+
});
127+
});
128+
} catch (err) {
129+
setFailure(`Codecov: Encountered an unexpected error ${err.message}`,
130+
failCi);
131+
}
120132
}
133+
run();

0 commit comments

Comments
 (0)