-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathgraph-cli.js
More file actions
150 lines (133 loc) · 8.14 KB
/
graph-cli.js
File metadata and controls
150 lines (133 loc) · 8.14 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
Reset = "\x1b[0m"
Bright = "\x1b[1m"
Dim = "\x1b[2m"
Underscore = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"
FgBlack = "\x1b[30m"
FgRed = "\x1b[31m"
FgGreen = "\x1b[32m"
FgYellow = "\x1b[33m"
FgBlue = "\x1b[34m"
FgMagenta = "\x1b[35m"
FgCyan = "\x1b[36m"
FgWhite = "\x1b[37m"
BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"
*/
var replace = require("replace");
async function deployment(/*env = 'test'*/){
//require('dotenv').config({ path: process.cwd()+'/'+ env+'.env'});
await execShellCommand(/*'./node_modules/mocha/bin/mocha'*/'yarn install').then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Yarn install failed');return;});
await execShellCommand(/*'./node_modules/mocha/bin/mocha'*/'yarn mocha').then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Mocha testing failed');return;});
await execShellCommand('git checkout '+(process.env.ENV == 'test'?'develop':env)).then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('failed in git checkout');return;});
await execShellCommand('git pull').then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('failed in git pull');return;});
await execShellCommand('git reset --hard').then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Failed during git clean.');});
let packageJson = require('./package.json');
let newVersion;
switch(process.env.ENV){
case 'test':
newVersion = packageJson.deploymentVersionTesting + 1;
replace({ regex: "deploymentVersionTesting.*,", replacement: `deploymentVersionTesting": `+ newVersion +',', paths: ['./package.json'], recursive: true, silent: true, });
break;
case 'staging':
newVersion = packageJson.deploymentVersionStaging + 1;
replace({ regex: "deploymentVersionStaging.*,", replacement: `deploymentVersionStaging": `+ newVersion +',', paths: ['./package.json'], recursive: true, silent: true, });
break;
default:
break;
}
replace({ regex: "deployment_version_place_holder", replacement: newVersion, paths: ['./src/mapping.ts'], recursive: true, silent: true, });
replace({ regex: "network_place_holder", replacement: process.env.SUBGRAPH_NETWORK, paths: ['./subgraph.yaml'], recursive: true, silent: true, });
replace({ regex: "address_place_holder", replacement: process.env.SUBGRAPH_ADDRESS, paths: ['./subgraph.yaml'], recursive: true, silent: true, });
replace({ regex: "user_name_place_holder", replacement: process.env.SUBGRAPH_USER, paths: ['./package.json'], recursive: true, silent: true, });
replace({ regex: "sg_name_place_holder", replacement: process.env.SUBGRAPH_NAME, paths: ['./package.json'], recursive: true, silent: true, });
await execShellCommand('yarn codegen').then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Failed during graph codegen, please run graph codegen command for full error message');return});
await execShellCommand('yarn deploy').then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Failed during yarn deploy.');return});
replace({ regex: process.env.SUBGRAPH_USER+'/'+process.env.SUBGRAPH_NAME, replacement: 'user_name_place_holder/sg_name_place_holder', paths: ['./package.json'], recursive: true, silent: true, });
await execShellCommand('git add package.json').then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Failed during yarn deploy.');return});
await execShellCommand(`git commit -m "[auto-deploy]graph-ropsten/cd-version-`+newVersion+`-`+require('git-user-name')()+`-`+process.env.ENV+`"`).then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Failed during yarn deploy.');return});
await execShellCommand(`git push`).then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Failed during git push.');return});
await execShellCommand('git reset --hard').then((res)=>{console.log(res);}).catch((err)=>{console.log(err);console.log('Failed during git clean.');return});
//Get the auth code from config file and register the CLI.
console.log('after testing');
// console.log(`stdout: ${stdout}`);// console.log(`stderr: ${stderr}`);
//In case 5 minutes passed, send to slack chat a message with the URL for the logs.
}
function execShellCommand(cmd){
const { exec } = require('child_process');
return new Promise((resolve, reject) =>{
exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log(`err: ${err.message}`);// console.log(`stderr: ${stderr}`);
// console.log(`stderr: ${stderr}`);
return;
}
// the *entire* stdout and stderr (buffered)// console.log(`stdout: ${stdout}`);// console.log(`stderr: ${stderr}`);
resolve(stdout);
});
});
}
let environmentFiles = {
1: 'test.env',
2: 'staging.env',
3: 'prod.env'
};
process.stdout.write('\033c');
console.log('\x1b[33m%s\x1b[0m', " ~ ~ ~ Welcome to Graph-cli ~ ~ ~ ");
let readlineSync = require('readline-sync'),
actions = [/*1*/ 'Deployment', /*2*/'Re-create cloudFormation templates','Development'],
actionIndex = 1 /*because it starts with 0*/ + readlineSync.keyInSelect(actions, 'Which operation you want to use?');
switch (actionIndex) {
case 1:{
process.stdout.write('\033c');
console.log('\x1b[33m%s\x1b[0m', " ~ ~ ~ Which environment ~ ~ ~ ");
let readlineSync = require('readline-sync'),
environments = [/*1*/ 'Testing', /*2*/'Staging'],
envIndex = 1 /*because it starts with 0*/ + readlineSync.keyInSelect(environments, 'Please choose environment:');
if ([1,2,3].includes(envIndex) == false){
console.log("\x1b[31m", 'Not a valid environment');
console.log("\x1b[34m", 'Bye Bye');
return;
}
require('dotenv').config({ path: process.cwd()+'../'+ environmentFiles[envIndex]});
process.stdout.write('\033c');
console.log('\x1b[33m%s\x1b[0m', " ~ ~ ~ Operation details ~ ~ ~ ");
process.stdout.write('Subgraph '+process.env.SUBGRAPH_NAME+' will be deployed to the hosted solution. Env: ');
console.log("\x1b[34m", process.env.ENV);
console.log("\x1b[0m", "----------------------------------------------------------------------------------------");
let userApproval = readlineSync.keyInSelect(['Approve'],'To approve operation press [1].');
if (userApproval != 0){
process.exit();
}
deployment();
break;
}
case 2:{
console.log("\x1b[31m", 'Cloud formation templates not yet supported');
console.log("\x1b[34m", 'Bye Bye');
return;
}
case 3:{
console.log('\x1b[33m%s\x1b[0m', " ~ ~ ~ Which environment ~ ~ ~ ");
let readlineSync = require('readline-sync'),
environments = [/*1*/ 'Testing', /*2*/'Staging'],
envIndex = 1 /*because it starts with 0*/ + readlineSync.keyInSelect(environments, 'Please choose environment:');
require('dotenv').config({ path: process.cwd()+'/'+ environmentFiles[envIndex]});
replace({ regex: "deployment_version_place_holder", replacement: 1, paths: ['./src/mapping.ts'], recursive: true, silent: true, });
replace({ regex: "network_place_holder", replacement: process.env.SUBGRAPH_NETWORK, paths: ['./subgraph.yaml'], recursive: true, silent: true, });
replace({ regex: "address_place_holder", replacement: process.env.SUBGRAPH_ADDRESS, paths: ['./subgraph.yaml'], recursive: true, silent: true, });
replace({ regex: "user_name_place_holder", replacement: process.env.SUBGRAPH_USER, paths: ['./package.json'], recursive: true, silent: true, });
replace({ regex: "sg_name_place_holder", replacement: process.env.SUBGRAPH_NAME, paths: ['./package.json'], recursive: true, silent: true, });
}
default:
return;
}