-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathaction.js
87 lines (78 loc) · 2.81 KB
/
action.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const core = require('@actions/core');
const http = require('@actions/http-client');
const auth = require('@actions/http-client/lib/auth');
const fs = require('fs').promises;
const os = require('os');
const path = require('path');
const mustache = require('mustache');
const tokenServer = "https://artifactory-oidc.services.atlassian.com/oidc/token?provider=github";
const maven = "maven",
gradle = "gradle",
output = "output",
environment = "environment";
const supportedModes = [maven, gradle, output, environment];
async function retrievePublishToken(idToken) {
let http_client = new http.HttpClient('github-action', [new auth.BearerCredentialHandler(idToken)]);
let response = await http_client.postJson(tokenServer, null);
if (response.statusCode != 200) {
throw new Error("request failed:" + response.statusCode + "," + response.result);
}
return response.result;
}
async function generateMavenSettings(dir, token) {
// generate maven settings file
const mavenDir = path.join(dir, '.m2');
const mavenFile = path.join(mavenDir, 'settings.xml');
await fs.mkdir(mavenDir, {
recursive: true
});
const template = await fs.readFile(`${__dirname}/settings.xml`, 'utf-8');
const content = mustache.render(template, {
username: token.username,
token: token.token
});
await fs.writeFile(mavenFile, content);
}
async function generateGradleProps(dir, token) {
const gradleDir = path.join(dir, '.gradle');
const gradleFile = path.join(gradleDir, 'gradle.properties');
await fs.mkdir(gradleDir, {
recursive: true
});
await fs.writeFile(gradleFile,
`
ARTIFACTORY_USERNAME=${token.username}
ARTIFACTORY_API_KEY=${token.token}
`);
}
async function doAction() {
let outputModes = core.getInput('output-modes').split(/\s*,\s*/);
outputModes.forEach((e) => {
if (e && !supportedModes.includes(e)) {
throw new Error(`Invalid output mode '${e}'. Allowed values ${supportedModes}`);
}
});
let idToken = await core.getIDToken();
let token = await retrievePublishToken(idToken);
//ensure the token is masked in logs
core.setSecret(token.username);
core.setSecret(token.token);
if (outputModes.includes(environment)) {
core.exportVariable('ARTIFACTORY_USERNAME', token.username);
core.exportVariable('ARTIFACTORY_API_KEY', token.token);
}
if (outputModes.includes(maven)) {
await generateMavenSettings(os.homedir(), token);
}
if (outputModes.includes(gradle)) {
await generateGradleProps(os.homedir(), token);
}
core.setOutput('artifactoryUsername', token.username);
core.setOutput('artifactoryApiKey', token.token);
}
module.exports = {
retrievePublishToken,
generateMavenSettings,
generateGradleProps,
doAction
};