UNPKG

3.12 kBJavaScriptView Raw
1const ora = require('ora');
2const webhooks = require('./webhooks');
3const prompt = require('prompt');
4const readPkg = require('read-pkg');
5const usage = require('./usage');
6
7const spinner = ora();
8
9prompt.colors = false;
10prompt.message = '';
11prompt.delimiter = '';
12
13/**
14 * Ask for a username
15 */
16const askRepositoryUrl = suggestion => new Promise((resolve, reject) => {
17 const schema = {
18 properties: {
19 repositoryUrl: {
20 pattern: /^[^/@]+(?::\/\/|@)(?:github.com)[/:]([^/]+)\/([^.]+)(\.git)?$/,
21 default: suggestion,
22 description: 'Please enter your GitHub repository URL:',
23 message: 'Please enter a valid GitHub 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 * Create a new webhook
38 */
39const 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 // eslint-disable-next-line max-len
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, 'github', 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 * Delete existing hook
73 */
74const 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, 'github');
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 * Entry point for this module
94 * @param argv
95 */
96module.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};