1 | const ora = require('ora');
|
2 | const webhooks = require('./webhooks');
|
3 | const prompt = require('prompt');
|
4 | const readPkg = require('read-pkg');
|
5 | const usage = require('./usage');
|
6 |
|
7 | const spinner = ora();
|
8 |
|
9 | prompt.colors = false;
|
10 | prompt.message = '';
|
11 | prompt.delimiter = '';
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | const askRepositoryUrl = suggestion => new Promise((resolve, reject) => {
|
17 | const schema = {
|
18 | properties: {
|
19 | repositoryUrl: {
|
20 | pattern: /^[^/@]+(?::\/\/|@)bitbucket\.org(?:[/:])(.*)\/([^./]*)(?:.git)?$/,
|
21 | default: suggestion,
|
22 | description: 'Please enter your Bitbucket repository URL:',
|
23 | message: 'Please enter a valid Bitbucket URL.',
|
24 | required: true,
|
25 | },
|
26 | },
|
27 | };
|
28 | prompt.start();
|
29 | prompt.get(schema, (err, result) => {
|
30 | if (err) return reject(err);
|
31 |
|
32 | return resolve(result);
|
33 | });
|
34 | });
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | const createHook = async () => {
|
40 | console.log(usage);
|
41 |
|
42 | const body = {};
|
43 | const pkg = await readPkg();
|
44 |
|
45 | const { siteName } = pkg.linc;
|
46 | if (!siteName) {
|
47 |
|
48 | throw new Error('No site name found in package.json. First run \'linc site create\' before proceeding.');
|
49 | }
|
50 |
|
51 | let repositoryUrl = '';
|
52 | const { repository } = pkg;
|
53 | if (repository && repository.type && repository.url) {
|
54 | if (repository.type === 'git') repositoryUrl = repository.url;
|
55 | }
|
56 |
|
57 | const result = await askRepositoryUrl(repositoryUrl);
|
58 | body.repositoryUrl = result.repositoryUrl;
|
59 |
|
60 | spinner.start('Creating webhook. Please wait...');
|
61 | const response = await webhooks.createWebhook(siteName, 'bitbucket', body);
|
62 | spinner.stop();
|
63 |
|
64 | if (response.errors) {
|
65 | console.log(`Oops. Something went wrong:\n${response.errors}`);
|
66 | } else {
|
67 | console.log('Your webhook has been created.');
|
68 | }
|
69 | };
|
70 |
|
71 |
|
72 |
|
73 |
|
74 | const deleteHook = async () => {
|
75 | const pkg = await readPkg();
|
76 | const { siteName } = pkg.linc;
|
77 | if (!siteName) {
|
78 | throw new Error('No site name found in package.json.');
|
79 | }
|
80 |
|
81 | spinner.start('Deleting webhook. Please wait...');
|
82 | const response = await webhooks.deleteWebhook(siteName, 'bitbucket');
|
83 | spinner.stop();
|
84 |
|
85 | if (response.errors) {
|
86 | console.log(`Oops. Something went wrong:\n${response.errors}`);
|
87 | } else {
|
88 | console.log('Your webhook has been deleted.');
|
89 | }
|
90 | };
|
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 | module.exports.handler = argv => {
|
97 | const { command } = argv;
|
98 | if (!command) {
|
99 | console.log('You failed to provide a command. Valid commands are:');
|
100 | console.log(' - create: create a new webhook');
|
101 | console.log(' - delete: delete a existing webhook');
|
102 | process.exit(0);
|
103 | }
|
104 |
|
105 | let p;
|
106 | if (command === 'create') p = createHook;
|
107 | if (command === 'delete') p = deleteHook;
|
108 | if (p) {
|
109 | p().catch(err => {
|
110 | spinner.stop();
|
111 |
|
112 | console.log(err);
|
113 | });
|
114 | } else {
|
115 | console.log('You provided an invalid command.');
|
116 | }
|
117 | };
|