@graphprotocol/graph-cli 0.38.1-alpha-20230208032550-ddc8362 → 0.38.1-alpha-20230208163101-9fe7a07
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/commands/auth.js +40 -105
- package/dist/commands/local.js +93 -103
- package/oclif.manifest.json +107 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dist/commands/auth.js
CHANGED
|
@@ -1,122 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
7
4
|
const auth_1 = require("../command-helpers/auth");
|
|
8
|
-
const gluegun_1 = require("../command-helpers/gluegun");
|
|
9
5
|
const node_1 = require("../command-helpers/node");
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
${chalk_1.default.dim('Options:')}
|
|
14
|
-
|
|
15
|
-
--product <subgraph-studio|hosted-service>
|
|
16
|
-
Selects the product for which to authenticate
|
|
17
|
-
--studio Shortcut for --product subgraph-studio
|
|
18
|
-
-h, --help Show usage information
|
|
19
|
-
`;
|
|
20
|
-
const processForm = async (toolbox, { product, studio, node, deployKey }) => {
|
|
21
|
-
const questions = [
|
|
22
|
-
{
|
|
23
|
-
type: 'select',
|
|
24
|
-
name: 'product',
|
|
25
|
-
message: 'Product for which to initialize',
|
|
26
|
-
choices: ['subgraph-studio', 'hosted-service'],
|
|
27
|
-
skip: product === 'subgraph-studio' ||
|
|
28
|
-
product === 'hosted-service' ||
|
|
29
|
-
studio !== undefined ||
|
|
30
|
-
node !== undefined,
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
type: 'password',
|
|
34
|
-
name: 'deployKey',
|
|
35
|
-
message: 'Deploy key',
|
|
36
|
-
skip: deployKey !== undefined,
|
|
37
|
-
},
|
|
38
|
-
];
|
|
39
|
-
try {
|
|
40
|
-
const answers = await toolbox.prompt.ask(questions);
|
|
41
|
-
return answers;
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
exports.default = {
|
|
48
|
-
description: 'Sets the deploy key to use when deploying to a Graph node',
|
|
49
|
-
run: async (toolbox) => {
|
|
50
|
-
// Obtain tools
|
|
51
|
-
const { print } = toolbox;
|
|
52
|
-
// Read CLI parameters
|
|
53
|
-
const { product, studio, h, help } = toolbox.parameters.options;
|
|
54
|
-
// Show help text if requested
|
|
55
|
-
if (help || h) {
|
|
56
|
-
print.info(HELP);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
let firstParam, secondParam;
|
|
60
|
-
try {
|
|
61
|
-
[firstParam, secondParam] = (0, gluegun_1.fixParameters)(toolbox.parameters, {
|
|
62
|
-
h,
|
|
63
|
-
help,
|
|
64
|
-
studio,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
catch (e) {
|
|
68
|
-
print.error(e.message);
|
|
69
|
-
process.exitCode = 1;
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
6
|
+
class AuthCommand extends core_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
const { args: { node: nodeOrDeployKey, 'deploy-key': deployKeyFlag }, flags: { product, studio }, } = await this.parse(AuthCommand);
|
|
72
9
|
// if user specifies --product or --studio then deployKey is the first parameter
|
|
73
|
-
let node;
|
|
74
|
-
let deployKey;
|
|
10
|
+
let node = nodeOrDeployKey;
|
|
11
|
+
let deployKey = deployKeyFlag;
|
|
75
12
|
if (product || studio) {
|
|
76
13
|
({ node } = (0, node_1.chooseNodeUrl)({ product, studio, node }));
|
|
77
|
-
deployKey =
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
node = firstParam;
|
|
81
|
-
deployKey = secondParam;
|
|
14
|
+
deployKey = nodeOrDeployKey;
|
|
82
15
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
product: inputs.product,
|
|
96
|
-
studio,
|
|
97
|
-
node,
|
|
16
|
+
// eslint-disable-next-line -- prettier has problems with ||=
|
|
17
|
+
node =
|
|
18
|
+
node ||
|
|
19
|
+
(await core_1.ux.prompt('Which product to initialize?', {
|
|
20
|
+
required: true,
|
|
21
|
+
}));
|
|
22
|
+
// eslint-disable-next-line -- prettier has problems with ||=
|
|
23
|
+
deployKey =
|
|
24
|
+
deployKey ||
|
|
25
|
+
(await core_1.ux.prompt('What is the deploy key?', {
|
|
26
|
+
required: true,
|
|
27
|
+
type: 'mask',
|
|
98
28
|
}));
|
|
99
|
-
}
|
|
100
|
-
deployKey || (deployKey = inputs.deployKey);
|
|
101
|
-
}
|
|
102
|
-
if (!deployKey) {
|
|
103
|
-
print.error(`No deploy key provided`);
|
|
104
|
-
print.info(HELP);
|
|
105
|
-
process.exitCode = 1;
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
29
|
if (deployKey.length > 200) {
|
|
109
|
-
|
|
110
|
-
process.exitCode = 1;
|
|
111
|
-
return;
|
|
30
|
+
this.error('✖ Deploy key must not exceed 200 characters', { exit: 1 });
|
|
112
31
|
}
|
|
32
|
+
core_1.ux.action.start(`Setting deploy key for "${node}"...`);
|
|
113
33
|
try {
|
|
114
34
|
await (0, auth_1.saveDeployKey)(node, deployKey);
|
|
115
|
-
|
|
35
|
+
core_1.ux.action.stop(`✔ Deploy key set for "${node}"!`);
|
|
116
36
|
}
|
|
117
37
|
catch (e) {
|
|
118
|
-
|
|
119
|
-
process.exitCode = 1;
|
|
38
|
+
this.error(e);
|
|
120
39
|
}
|
|
121
|
-
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.default = AuthCommand;
|
|
43
|
+
AuthCommand.description = 'Sets the deploy key to use when deploying to a Graph node.';
|
|
44
|
+
AuthCommand.args = {
|
|
45
|
+
node: core_1.Args.string(),
|
|
46
|
+
'deploy-key': core_1.Args.string(),
|
|
47
|
+
};
|
|
48
|
+
AuthCommand.flags = {
|
|
49
|
+
product: core_1.Flags.string({
|
|
50
|
+
summary: 'Select a product for which to authenticate.',
|
|
51
|
+
options: ['subgraph-studio', 'hosted-service'],
|
|
52
|
+
}),
|
|
53
|
+
studio: core_1.Flags.boolean({
|
|
54
|
+
summary: 'Shortcut for "--product subgraph-studio".',
|
|
55
|
+
exclusive: ['product'],
|
|
56
|
+
}),
|
|
122
57
|
};
|
package/dist/commands/local.js
CHANGED
|
@@ -7,77 +7,30 @@ const child_process_1 = require("child_process");
|
|
|
7
7
|
const http_1 = __importDefault(require("http"));
|
|
8
8
|
const net_1 = __importDefault(require("net"));
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const
|
|
10
|
+
const core_1 = require("@oclif/core");
|
|
11
11
|
const docker_compose_1 = __importDefault(require("docker-compose"));
|
|
12
|
+
const gluegun_1 = require("gluegun");
|
|
12
13
|
const strip_ansi_1 = __importDefault(require("strip-ansi"));
|
|
13
14
|
const tmp_promise_1 = __importDefault(require("tmp-promise"));
|
|
14
|
-
const gluegun_1 = require("../command-helpers/gluegun");
|
|
15
15
|
const spinner_1 = require("../command-helpers/spinner");
|
|
16
16
|
// Clean up temporary files even when an uncaught exception occurs
|
|
17
17
|
tmp_promise_1.default.setGracefulCleanup();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Options:
|
|
22
|
-
|
|
23
|
-
-h, --help Show usage information
|
|
24
|
-
--node-logs Print the Graph Node logs (optional)
|
|
25
|
-
--ethereum-logs Print the Ethereum logs (optional)
|
|
26
|
-
--compose-file <file> Custom Docker Compose file for additional services (optional)
|
|
27
|
-
--node-image <image> Custom Graph Node image to test against (default: graphprotocol/graph-node:latest)
|
|
28
|
-
--standalone-node <cmd> Use a standalone Graph Node outside Docker Compose (optional)
|
|
29
|
-
--standalone-node-args Custom arguments to be passed to the standalone Graph Node (optional)
|
|
30
|
-
--skip-wait-for-ipfs Don't wait for IPFS to be up at localhost:15001 (optional)
|
|
31
|
-
--skip-wait-for-ethereum Don't wait for Ethereum to be up at localhost:18545 (optional)
|
|
32
|
-
--skip-wait-for-postgres Don't wait for Postgres to be up at localhost:15432 (optional)
|
|
33
|
-
--timeout Time to wait for service containers. (optional, defaults to 120000 milliseconds)
|
|
34
|
-
`;
|
|
35
|
-
exports.default = {
|
|
36
|
-
description: 'Runs local tests against a Graph Node environment (using Ganache by default)',
|
|
37
|
-
run: async (toolbox) => {
|
|
38
|
-
// Obtain tools
|
|
39
|
-
const { filesystem, print } = toolbox;
|
|
40
|
-
// Parse CLI parameters
|
|
41
|
-
let { composeFile, ethereumLogs, h, help, nodeImage, nodeLogs, skipWaitForEthereum, skipWaitForIpfs, skipWaitForPostgres, standaloneNode, standaloneNodeArgs, timeout, } = toolbox.parameters.options;
|
|
42
|
-
// Support both short and long option variants
|
|
43
|
-
help || (help = h);
|
|
44
|
-
// Extract test command
|
|
45
|
-
const params = (0, gluegun_1.fixParameters)(toolbox.parameters, {
|
|
46
|
-
ethereumLogs,
|
|
47
|
-
h,
|
|
48
|
-
help,
|
|
49
|
-
nodeLogs,
|
|
50
|
-
skipWaitForEthereum,
|
|
51
|
-
skipWaitForIpfs,
|
|
52
|
-
skipWaitForPostgres,
|
|
53
|
-
});
|
|
54
|
-
// Show help text if requested
|
|
55
|
-
if (help) {
|
|
56
|
-
print.info(HELP);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
if (params.length == 0) {
|
|
60
|
-
print.error(`Test command not provided as the last argument`);
|
|
61
|
-
process.exitCode = 1;
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const testCommand = params[0];
|
|
18
|
+
class LocalCommand extends core_1.Command {
|
|
19
|
+
async run() {
|
|
20
|
+
const { args: { 'local-command': testCommand }, flags: { 'compose-file': composeFileFlag, 'ethereum-logs': ethereumLogsFlag, 'node-image': nodeImage, 'node-logs': nodeLogsFlag, 'skip-wait-for-etherium': skipWaitForEthereum, 'skip-wait-for-ipfs': skipWaitForIpfs, 'skip-wait-for-postgres': skipWaitForPostgres, 'standalone-node': standaloneNode, 'standalone-node-args': standaloneNodeArgs, timeout, }, } = await this.parse(LocalCommand);
|
|
65
21
|
// Obtain the Docker Compose file for services that the tests run against
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
print.error(`Docker Compose file \`${composeFile}\` not found`);
|
|
71
|
-
process.exitCode = 1;
|
|
72
|
-
return;
|
|
22
|
+
const composeFile = composeFileFlag ||
|
|
23
|
+
path_1.default.join(__dirname, '..', '..', 'resources', 'test', standaloneNode ? 'docker-compose-standalone-node.yml' : 'docker-compose.yml');
|
|
24
|
+
if (!gluegun_1.filesystem.exists(composeFile)) {
|
|
25
|
+
this.error(`Docker Compose file "${composeFile}" not found`, { exit: 1 });
|
|
73
26
|
}
|
|
74
27
|
// Create temporary directory to operate in
|
|
75
28
|
const { path: tempdir } = await tmp_promise_1.default.dir({ prefix: 'graph-test', unsafeCleanup: true });
|
|
76
29
|
try {
|
|
77
|
-
await configureTestEnvironment(
|
|
30
|
+
await configureTestEnvironment(tempdir, composeFile, nodeImage);
|
|
78
31
|
}
|
|
79
32
|
catch (e) {
|
|
80
|
-
|
|
33
|
+
this.exit(1);
|
|
81
34
|
return;
|
|
82
35
|
}
|
|
83
36
|
// Bring up test environment
|
|
@@ -85,9 +38,7 @@ exports.default = {
|
|
|
85
38
|
await startTestEnvironment(tempdir);
|
|
86
39
|
}
|
|
87
40
|
catch (e) {
|
|
88
|
-
|
|
89
|
-
process.exitCode = 1;
|
|
90
|
-
return;
|
|
41
|
+
this.error(e, { exit: 1 });
|
|
91
42
|
}
|
|
92
43
|
// Wait for test environment to come up
|
|
93
44
|
try {
|
|
@@ -100,7 +51,7 @@ exports.default = {
|
|
|
100
51
|
}
|
|
101
52
|
catch (e) {
|
|
102
53
|
await stopTestEnvironment(tempdir);
|
|
103
|
-
|
|
54
|
+
this.exit(1);
|
|
104
55
|
return;
|
|
105
56
|
}
|
|
106
57
|
// Bring up Graph Node separately, if a standalone node is used
|
|
@@ -111,14 +62,13 @@ exports.default = {
|
|
|
111
62
|
nodeProcess = await startGraphNode(standaloneNode, standaloneNodeArgs, nodeOutputChunks);
|
|
112
63
|
}
|
|
113
64
|
catch (e) {
|
|
114
|
-
toolbox.print.error('');
|
|
115
|
-
toolbox.print.error(' Graph Node');
|
|
116
|
-
toolbox.print.error(' ----------');
|
|
117
|
-
toolbox.print.error(indent(' ', Buffer.concat(nodeOutputChunks).toString('utf-8')));
|
|
118
|
-
toolbox.print.error('');
|
|
119
65
|
await stopTestEnvironment(tempdir);
|
|
120
|
-
|
|
121
|
-
|
|
66
|
+
let errorMessage = '\n';
|
|
67
|
+
errorMessage += ' Graph Node';
|
|
68
|
+
errorMessage += ' ----------';
|
|
69
|
+
errorMessage += indent(' ', Buffer.concat(nodeOutputChunks).toString('utf-8'));
|
|
70
|
+
errorMessage += '\n';
|
|
71
|
+
this.error(errorMessage, { exit: 1 });
|
|
122
72
|
}
|
|
123
73
|
}
|
|
124
74
|
// Wait for Graph Node to come up
|
|
@@ -126,14 +76,13 @@ exports.default = {
|
|
|
126
76
|
await waitForGraphNode(timeout);
|
|
127
77
|
}
|
|
128
78
|
catch (e) {
|
|
129
|
-
toolbox.print.error('');
|
|
130
|
-
toolbox.print.error(' Graph Node');
|
|
131
|
-
toolbox.print.error(' ----------');
|
|
132
|
-
toolbox.print.error(indent(' ', await collectGraphNodeLogs(tempdir, standaloneNode, nodeOutputChunks)));
|
|
133
|
-
toolbox.print.error('');
|
|
134
79
|
await stopTestEnvironment(tempdir);
|
|
135
|
-
|
|
136
|
-
|
|
80
|
+
let errorMessage = '\n';
|
|
81
|
+
errorMessage += ' Graph Node';
|
|
82
|
+
errorMessage += ' ----------';
|
|
83
|
+
errorMessage += indent(' ', await collectGraphNodeLogs(tempdir, standaloneNode, nodeOutputChunks));
|
|
84
|
+
errorMessage += '\n';
|
|
85
|
+
this.error(errorMessage, { exit: 1 });
|
|
137
86
|
}
|
|
138
87
|
// Run tests
|
|
139
88
|
const result = await runTests(testCommand);
|
|
@@ -147,17 +96,16 @@ exports.default = {
|
|
|
147
96
|
}
|
|
148
97
|
}
|
|
149
98
|
if (result.exitCode == 0) {
|
|
150
|
-
|
|
99
|
+
this.log('✔ Tests passed');
|
|
151
100
|
}
|
|
152
101
|
else {
|
|
153
|
-
|
|
102
|
+
this.log('✖ Tests failed');
|
|
154
103
|
}
|
|
155
104
|
// Capture logs
|
|
156
|
-
nodeLogs =
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
ethereumLogs = ethereumLogs ? await collectEthereumLogs(tempdir) : undefined;
|
|
105
|
+
const nodeLogs = nodeLogsFlag || result.exitCode !== 0
|
|
106
|
+
? await collectGraphNodeLogs(tempdir, standaloneNode, nodeOutputChunks)
|
|
107
|
+
: undefined;
|
|
108
|
+
const ethereumLogs = ethereumLogsFlag ? await collectEthereumLogs(tempdir) : undefined;
|
|
161
109
|
// Bring down the test environment
|
|
162
110
|
try {
|
|
163
111
|
await stopTestEnvironment(tempdir);
|
|
@@ -166,28 +114,70 @@ exports.default = {
|
|
|
166
114
|
// do nothing (the spinner already logs the problem)
|
|
167
115
|
}
|
|
168
116
|
if (nodeLogs) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
117
|
+
this.log('');
|
|
118
|
+
this.log(' Graph node');
|
|
119
|
+
this.log(' ----------');
|
|
120
|
+
this.log('');
|
|
121
|
+
this.log(indent(' ', nodeLogs));
|
|
174
122
|
}
|
|
175
123
|
if (ethereumLogs) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
124
|
+
this.log('');
|
|
125
|
+
this.log(' Ethereum');
|
|
126
|
+
this.log(' --------');
|
|
127
|
+
this.log('');
|
|
128
|
+
this.log(indent(' ', ethereumLogs));
|
|
181
129
|
}
|
|
182
130
|
// Always print the test output
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
131
|
+
this.log('');
|
|
132
|
+
this.log(' Output');
|
|
133
|
+
this.log(' ------');
|
|
134
|
+
this.log('');
|
|
135
|
+
this.log(indent(' ', result.output));
|
|
188
136
|
// Propagate the exit code from the test run
|
|
189
|
-
|
|
190
|
-
}
|
|
137
|
+
this.exit(result.exitCode);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.default = LocalCommand;
|
|
141
|
+
LocalCommand.description = 'Runs local tests against a Graph Node environment (using Ganache by default).';
|
|
142
|
+
LocalCommand.args = {
|
|
143
|
+
'local-command': core_1.Args.string({
|
|
144
|
+
required: true,
|
|
145
|
+
}),
|
|
146
|
+
};
|
|
147
|
+
LocalCommand.flags = {
|
|
148
|
+
'node-logs': core_1.Flags.boolean({
|
|
149
|
+
summary: 'Print the Graph Node logs.',
|
|
150
|
+
}),
|
|
151
|
+
'ethereum-logs': core_1.Flags.boolean({
|
|
152
|
+
summary: 'Print the Ethereum logs.',
|
|
153
|
+
}),
|
|
154
|
+
'compose-file': core_1.Flags.string({
|
|
155
|
+
summary: 'Custom Docker Compose file for additional services.',
|
|
156
|
+
}),
|
|
157
|
+
'node-image': core_1.Flags.string({
|
|
158
|
+
summary: 'Custom Graph Node image to test against.',
|
|
159
|
+
default: 'graphprotocol/graph-node:latest',
|
|
160
|
+
}),
|
|
161
|
+
'standalone-node': core_1.Flags.string({
|
|
162
|
+
summary: 'Use a standalone Graph Node outside Docker Compose.',
|
|
163
|
+
}),
|
|
164
|
+
'standalone-node-args': core_1.Flags.string({
|
|
165
|
+
summary: 'Custom arguments to be passed to the standalone Graph Node.',
|
|
166
|
+
dependsOn: ['standalone-node'],
|
|
167
|
+
}),
|
|
168
|
+
'skip-wait-for-ipfs': core_1.Flags.boolean({
|
|
169
|
+
summary: "Don't wait for IPFS to be up at localhost:15001",
|
|
170
|
+
}),
|
|
171
|
+
'skip-wait-for-etherium': core_1.Flags.boolean({
|
|
172
|
+
summary: "Don't wait for Ethereum to be up at localhost:18545",
|
|
173
|
+
}),
|
|
174
|
+
'skip-wait-for-postgres': core_1.Flags.boolean({
|
|
175
|
+
summary: "Don't wait for Postgres to be up at localhost:15432",
|
|
176
|
+
}),
|
|
177
|
+
timeout: core_1.Flags.integer({
|
|
178
|
+
summary: 'Time to wait for service containers in milliseconds.',
|
|
179
|
+
default: 120000,
|
|
180
|
+
}),
|
|
191
181
|
};
|
|
192
182
|
/**
|
|
193
183
|
* Indents all lines of a string
|
|
@@ -198,14 +188,14 @@ const indent = (indentation, str) => str
|
|
|
198
188
|
// Remove whitespace from empty lines
|
|
199
189
|
.map(s => s.replace(/^\s+$/g, ''))
|
|
200
190
|
.join('\n');
|
|
201
|
-
const configureTestEnvironment = async (
|
|
191
|
+
const configureTestEnvironment = async (tempdir, composeFile, nodeImage) => await (0, spinner_1.withSpinner)(`Configure test environment`, `Failed to configure test environment`, `Warnings configuring test environment`, async () => {
|
|
202
192
|
// Temporary compose file
|
|
203
193
|
const tempComposeFile = path_1.default.join(tempdir, 'compose', 'docker-compose.yml');
|
|
204
194
|
// Copy the compose file to the temporary directory
|
|
205
|
-
|
|
195
|
+
gluegun_1.filesystem.copy(composeFile, tempComposeFile);
|
|
206
196
|
// Substitute the graph-node image with the custom one, if appropriate
|
|
207
197
|
if (nodeImage) {
|
|
208
|
-
await
|
|
198
|
+
await gluegun_1.patching.replace(tempComposeFile, 'graphprotocol/graph-node:latest', nodeImage);
|
|
209
199
|
}
|
|
210
200
|
});
|
|
211
201
|
const waitFor = async (timeout, testFn) => {
|
package/oclif.manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.38.1-alpha-
|
|
2
|
+
"version": "0.38.1-alpha-20230208163101-9fe7a07",
|
|
3
3
|
"commands": {
|
|
4
4
|
"add": {
|
|
5
5
|
"id": "add",
|
|
@@ -52,13 +52,41 @@
|
|
|
52
52
|
},
|
|
53
53
|
"auth": {
|
|
54
54
|
"id": "auth",
|
|
55
|
-
"description": "Sets the deploy key to use when deploying to a Graph node",
|
|
55
|
+
"description": "Sets the deploy key to use when deploying to a Graph node.",
|
|
56
|
+
"strict": true,
|
|
56
57
|
"pluginName": "@graphprotocol/graph-cli",
|
|
57
58
|
"pluginAlias": "@graphprotocol/graph-cli",
|
|
58
59
|
"pluginType": "core",
|
|
59
60
|
"aliases": [],
|
|
60
|
-
"flags": {
|
|
61
|
-
|
|
61
|
+
"flags": {
|
|
62
|
+
"product": {
|
|
63
|
+
"name": "product",
|
|
64
|
+
"type": "option",
|
|
65
|
+
"summary": "Select a product for which to authenticate.",
|
|
66
|
+
"multiple": false,
|
|
67
|
+
"options": [
|
|
68
|
+
"subgraph-studio",
|
|
69
|
+
"hosted-service"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"studio": {
|
|
73
|
+
"name": "studio",
|
|
74
|
+
"type": "boolean",
|
|
75
|
+
"summary": "Shortcut for \"--product subgraph-studio\".",
|
|
76
|
+
"allowNo": false,
|
|
77
|
+
"exclusive": [
|
|
78
|
+
"product"
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"args": {
|
|
83
|
+
"node": {
|
|
84
|
+
"name": "node"
|
|
85
|
+
},
|
|
86
|
+
"deploy-key": {
|
|
87
|
+
"name": "deploy-key"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
62
90
|
},
|
|
63
91
|
"build": {
|
|
64
92
|
"id": "build",
|
|
@@ -364,13 +392,85 @@
|
|
|
364
392
|
},
|
|
365
393
|
"local": {
|
|
366
394
|
"id": "local",
|
|
367
|
-
"description": "Runs local tests against a Graph Node environment (using Ganache by default)",
|
|
395
|
+
"description": "Runs local tests against a Graph Node environment (using Ganache by default).",
|
|
396
|
+
"strict": true,
|
|
368
397
|
"pluginName": "@graphprotocol/graph-cli",
|
|
369
398
|
"pluginAlias": "@graphprotocol/graph-cli",
|
|
370
399
|
"pluginType": "core",
|
|
371
400
|
"aliases": [],
|
|
372
|
-
"flags": {
|
|
373
|
-
|
|
401
|
+
"flags": {
|
|
402
|
+
"node-logs": {
|
|
403
|
+
"name": "node-logs",
|
|
404
|
+
"type": "boolean",
|
|
405
|
+
"summary": "Print the Graph Node logs.",
|
|
406
|
+
"allowNo": false
|
|
407
|
+
},
|
|
408
|
+
"ethereum-logs": {
|
|
409
|
+
"name": "ethereum-logs",
|
|
410
|
+
"type": "boolean",
|
|
411
|
+
"summary": "Print the Ethereum logs.",
|
|
412
|
+
"allowNo": false
|
|
413
|
+
},
|
|
414
|
+
"compose-file": {
|
|
415
|
+
"name": "compose-file",
|
|
416
|
+
"type": "option",
|
|
417
|
+
"summary": "Custom Docker Compose file for additional services.",
|
|
418
|
+
"multiple": false
|
|
419
|
+
},
|
|
420
|
+
"node-image": {
|
|
421
|
+
"name": "node-image",
|
|
422
|
+
"type": "option",
|
|
423
|
+
"summary": "Custom Graph Node image to test against.",
|
|
424
|
+
"multiple": false,
|
|
425
|
+
"default": "graphprotocol/graph-node:latest"
|
|
426
|
+
},
|
|
427
|
+
"standalone-node": {
|
|
428
|
+
"name": "standalone-node",
|
|
429
|
+
"type": "option",
|
|
430
|
+
"summary": "Use a standalone Graph Node outside Docker Compose.",
|
|
431
|
+
"multiple": false
|
|
432
|
+
},
|
|
433
|
+
"standalone-node-args": {
|
|
434
|
+
"name": "standalone-node-args",
|
|
435
|
+
"type": "option",
|
|
436
|
+
"summary": "Custom arguments to be passed to the standalone Graph Node.",
|
|
437
|
+
"multiple": false,
|
|
438
|
+
"dependsOn": [
|
|
439
|
+
"standalone-node"
|
|
440
|
+
]
|
|
441
|
+
},
|
|
442
|
+
"skip-wait-for-ipfs": {
|
|
443
|
+
"name": "skip-wait-for-ipfs",
|
|
444
|
+
"type": "boolean",
|
|
445
|
+
"summary": "Don't wait for IPFS to be up at localhost:15001",
|
|
446
|
+
"allowNo": false
|
|
447
|
+
},
|
|
448
|
+
"skip-wait-for-etherium": {
|
|
449
|
+
"name": "skip-wait-for-etherium",
|
|
450
|
+
"type": "boolean",
|
|
451
|
+
"summary": "Don't wait for Ethereum to be up at localhost:18545",
|
|
452
|
+
"allowNo": false
|
|
453
|
+
},
|
|
454
|
+
"skip-wait-for-postgres": {
|
|
455
|
+
"name": "skip-wait-for-postgres",
|
|
456
|
+
"type": "boolean",
|
|
457
|
+
"summary": "Don't wait for Postgres to be up at localhost:15432",
|
|
458
|
+
"allowNo": false
|
|
459
|
+
},
|
|
460
|
+
"timeout": {
|
|
461
|
+
"name": "timeout",
|
|
462
|
+
"type": "option",
|
|
463
|
+
"summary": "Time to wait for service containers in milliseconds.",
|
|
464
|
+
"multiple": false,
|
|
465
|
+
"default": 120000
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
"args": {
|
|
469
|
+
"local-command": {
|
|
470
|
+
"name": "local-command",
|
|
471
|
+
"required": true
|
|
472
|
+
}
|
|
473
|
+
}
|
|
374
474
|
},
|
|
375
475
|
"remove": {
|
|
376
476
|
"id": "remove",
|
package/package.json
CHANGED