forked from graphql-java/graphql-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_job.js
More file actions
77 lines (68 loc) · 2.3 KB
/
create_job.js
File metadata and controls
77 lines (68 loc) · 2.3 KB
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
const { CloudTasksClient } = require('@google-cloud/tasks');
const { v4: uuidv4 } = require('uuid');
const client = new CloudTasksClient();
const constructPayload = () => {
const jobId = String(uuidv4());
const commitHash = process.env.COMMIT_HASH;
const branch = process.env.BRANCH;
const classes = process.env.CLASSES;
const pullRequestNumber = process.env.PULL_REQUEST_NUMBER;
const payloadStructure = {
"jobId": jobId,
"commitHash": commitHash.trim(),
"branch": branch.trim(),
"classes": convertClassesStringToArray(classes),
"pullRequest": pullRequestNumber.trim(),
}
return payloadStructure;
}
const convertClassesStringToArray = (classes) => {
const classesArray = classes.split(',');
const trimmedClassesArray = classesArray.map(currentClass => currentClass.trim());
return trimmedClassesArray;
}
const formatPayload = (payloadStructure) => {
const parsedPayload = JSON.stringify(JSON.stringify(payloadStructure));
const payload = `{"argument": ${parsedPayload}}`;
console.log(`Payload: ${payload}`);
return payload;
}
const constructTask = (serviceAccountEmail, payload, url) => {
const task = {
httpRequest: {
httpMethod: 'POST',
url,
oauthToken: {
serviceAccountEmail,
},
body: Buffer.from(payload).toString('base64'),
},
};
return task;
}
const createRequestBody = (payload) => {
const project = process.env.PROJECT_ID;
const queue = process.env.QUEUE_ID;
const location = process.env.LOCATION;
const url = process.env.WORKFLOW_URL
const serviceAccountEmail = process.env.SERVICE_ACCOUNT_EMAIL;
const requestBody = {
"fullyQualifiedQueueName": client.queuePath(project, location, queue),
"task": constructTask(serviceAccountEmail, payload, url)
}
return requestBody;
}
const constructRequest = () => {
const payloadStructure = constructPayload();
const payload = formatPayload(payloadStructure);
const requestBody = createRequestBody(payload);
const request = { parent: requestBody.fullyQualifiedQueueName, task: requestBody.task };
return request;
}
async function createHttpTaskWithToken() {
const request = constructRequest();
const [response] = await client.createTask(request);
const name = response.name;
console.log(`Created task ${name}`);
}
createHttpTaskWithToken();