@nathapp/na-cli 1.0.0-rc.11 → 1.0.0-rc.13
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/.gitlab-ci.yml +20 -3
- package/.npm/_cacache/index-v5/05/34/1929926becc54c1f69c0921ab74c461c1777ab3d43213900acd4779dbf27 +1 -1
- package/.npm/_cacache/index-v5/0b/57/19385728919a097d1777ef98285f6cdfca14b66511276b641ec4a3af64bc +1 -1
- package/.npm/_cacache/index-v5/0b/90/c147816be94e86ed9bbb4b9e20409e4791a8991fcfd41d7a44489dedd29b +1 -1
- package/.npm/_cacache/index-v5/0b/ac/1bc19a224468b5a9e4382b946d33bb4c236306c2cefe190e5e2db1ded98a +1 -1
- package/.npm/_cacache/index-v5/12/6d/f094b1c476935fbda8814b43ee001b439b1f793c265ee5bd97d566143fb4 +1 -1
- package/.npm/_cacache/index-v5/12/80/c192e66daf6ba49f528ae81b986857735e6d257bdf4b0b1758eb795cae9b +1 -1
- package/.npm/_cacache/index-v5/13/32/a5865acd35ae515cde972c2d6cbff2863e694975883870de78b62a80f30e +1 -1
- package/.npm/_cacache/index-v5/14/33/be443b6e6c3ef0ff8f09987bc62d5ef9e61259f3331c422182f6bb74fdeb +1 -1
- package/.npm/_cacache/index-v5/14/f7/87042931e5944467d47331c350feb4384bf9143ab6ceebf7108a55905843 +1 -1
- package/.npm/_cacache/index-v5/14/fa/f87baceab26935686548c742091e7014930673bc1f077574c54c4c6c2d2d +1 -1
- package/.npm/_cacache/index-v5/15/26/abf1072208668be6e34a4311ad25f34fc908c21abc17ef01b5836cef1879 +1 -1
- package/.npm/_cacache/index-v5/1a/fd/532a4c7bf52c908d567ded2bb11b0f3282f0733d0d079a5291c2f72e0077 +1 -1
- package/.npm/_cacache/index-v5/1b/15/2ed036cc76081b7f1bfb3aa59d491eb3b3602c9381ec8d81435ceecf56b5 +1 -1
- package/.npm/_cacache/index-v5/27/b7/7f36d855e73b72c900bef7ba44a2a553de3d77b218493b4ddb6ae6fce516 +1 -1
- package/.npm/_cacache/index-v5/27/cc/afd4aa090b087c509f17e75196209f498c916da50ee4e9f26bd8424fd6f7 +1 -1
- package/.npm/_cacache/index-v5/2d/80/b5e9ca2e40744e7fa089861626d2a29c62363c01729964f4cf0c3e8ee632 +1 -1
- package/.npm/_cacache/index-v5/2d/ed/7f785cb92982f557fdc81aec4081952ce428eb449dd91fa0867b6676fa17 +1 -1
- package/.npm/_cacache/index-v5/2e/30/64338ba8469bd5c48ab7843f9d06a83992a346cfd592194af9c6d4d6dc48 +1 -1
- package/.npm/_cacache/index-v5/2e/a8/503d5f11e5dcde5786e3973ff160d2acc4736af22f9cd5a883c26adc7824 +1 -1
- package/.npm/_cacache/index-v5/30/98/41b0d8db0052e964e4843260ec8a0b12f2541721317cd5ee90b07b6a4d59 +1 -1
- package/.npm/_cacache/index-v5/31/64/15cefe5f3b923ebb9c684b37db7451ccf335632aab377fa3c730ec2e79cd +1 -1
- package/.npm/_cacache/index-v5/31/ac/4d241faeb3fea9ec8318fd93dd55eb70a87cc8a6e3f849ccef9863882b4b +3 -3
- package/.npm/_cacache/index-v5/31/ca/a8c3ab0670811a3887ede187dcd3856d14272349a18f6844f7c8007cc05e +1 -1
- package/.npm/_cacache/index-v5/34/a0/f70f68dcf9baef2ff21f29fdd206513fe5b10736be36ddd2f65a654a8f23 +1 -1
- package/.npm/_cacache/index-v5/34/f7/8879c3cd1412a0890461590276aa13d0344cb4e09494a4b3d854a7c7660a +1 -1
- package/.npm/_cacache/index-v5/35/e5/adb97753b463aa67dc9f26f39e8a52f68bf467cf1187509be7da174c057d +1 -1
- package/.npm/_cacache/index-v5/37/53/b5dccfb634beb6de718b268b6434849f27d3cf60d426dc19472a642a3f01 +1 -1
- package/.npm/_cacache/index-v5/38/2e/fe53691fa43d2f5ac447c8a2431535ec49118be55bf483c6362d4f72c79b +1 -1
- package/.npm/_cacache/index-v5/3c/f6/26a7f7dccb969c764b8bdecb3667023c64bc1159e674fbeeca633c54964c +1 -1
- package/.npm/_cacache/index-v5/3d/dd/3e8c6b6c875addf2057fb5fa152fff0fab217f78a8e51c0aa457a925bf12 +1 -1
- package/.npm/_cacache/index-v5/3e/77/916dd3c99bb6e83a0217305b0a2a541f122d977edcb92fa6b58eed796c17 +1 -1
- package/.npm/_cacache/index-v5/40/62/d04e75208dec117f72a95a5989f81fac7565a530fd22f70ea5e3abc377c3 +2 -2
- package/.npm/_cacache/index-v5/42/89/e110619623b1c9111a6392de4b1a62a904fb08d0601f87b9c8e1d493f5d6 +1 -1
- package/.npm/_cacache/index-v5/46/5b/f3ce50d3f54a5d65ac316d3c71ef8a8f8bdb072b6dfabc2c69018c3e942a +1 -1
- package/.npm/_cacache/index-v5/48/17/0ecf04bc0839b23c609ec7bfea9d339fa2cc3ee5982716cf7465ffaea675 +1 -1
- package/.npm/_cacache/index-v5/53/aa/b41f4759346e1d3b6651322d78c7983a4a546cdd6c18c3eb56c944571e4b +1 -1
- package/.npm/_cacache/index-v5/57/4d/cdafdfd03e43ca95652cbbb0b23bbbbeef3e16fa307726cb2ae8a5658531 +1 -1
- package/.npm/_cacache/index-v5/58/c9/9f8c27572bf3034e8fa9cc74fc00878e45fa7d75d4570d4430e82bfb5ef3 +1 -1
- package/.npm/_cacache/index-v5/5a/8c/47e273da29b52c911f59eca44c62faa84be4bb59b1de259ba100ff968559 +1 -1
- package/.npm/_cacache/index-v5/5e/89/be4afbbaa5c56c070a74790be14bd112b9e1b3f251324d766264b2c5f880 +1 -1
- package/.npm/_cacache/index-v5/5e/e7/453bd89145eccf9d67f5797fb09e5a017b5b13f1ac45cb7b70bda45940ec +2 -2
- package/.npm/_cacache/index-v5/5f/57/67c3b0c63ea4198903509c050bb99de2eabd6a2fba583067c4f587dc25f7 +1 -1
- package/.npm/_cacache/index-v5/60/8c/b74a2ae1c6978d635a1a21438c553d956a762176742b2749d09db964bf4d +1 -1
- package/.npm/_cacache/index-v5/68/6b/1f834b2ea43c7a9d1ffd80eb09f9d44af0895dc31dc3955d4b4c797ea825 +1 -1
- package/.npm/_cacache/index-v5/6d/61/c9e7e8446341cea439547eb023fbf47c954ba932e6944a3fd50413c1e861 +1 -1
- package/.npm/_cacache/index-v5/6d/b3/82949bd186224f1f51cb3fabdad6a93aa6a64c685b395a36f0a34af15119 +1 -1
- package/.npm/_cacache/index-v5/6f/d8/170c71ac7185da1b8040f10243c7294ff9a667a27fffc3479ba2f222f014 +1 -1
- package/.npm/_cacache/index-v5/74/d3/f9a4984e5548c5f72b3dc858046781cc3a892b34b6b7e7c353fbc93aa060 +1 -1
- package/.npm/_cacache/index-v5/75/ec/5dd4c902abf3f9ae589620cd4fd5b6ccfe045b8abdfbfa050d1a5ba8c01e +1 -1
- package/.npm/_cacache/index-v5/77/be/4d3f23909fd5905444d34cb0ce78d5bf6ce157670ae6ed614389a2027d18 +1 -1
- package/.npm/_cacache/index-v5/7d/8f/423d7e791f7fedd6bef784f0f467761c619f209ce9c788f08b63e968a880 +1 -1
- package/.npm/_cacache/index-v5/80/da/c34ca077ec2051cad25b3313e4e75ff4ad2dc2b12a9c250cb9545c0adc4b +1 -1
- package/.npm/_cacache/index-v5/84/d7/a5acf52705a1beb66603196f4bc44e583052d0f1d5a23dfb5316da1811d3 +1 -1
- package/.npm/_cacache/index-v5/86/7a/c59a43ec4985d34346e5714968f7220d176ea3a61b55464a7fecae01ac47 +1 -1
- package/.npm/_cacache/index-v5/87/55/e56d34b37c3170079064597cabb288d076b0d0468eaba3b8a0cf8686ce1f +1 -1
- package/.npm/_cacache/index-v5/8a/c9/c10bf71d66461aba0899e81d7a146332c45dbbacb1693c38fc2e4e578e39 +3 -3
- package/.npm/_cacache/index-v5/8a/ee/e3e86b627c10a9fc4ed610c15792507293ba1c14e7ba839e22aec609f1e0 +1 -1
- package/.npm/_cacache/index-v5/8b/ee/c2ea22c4bf9c5ddcd0333850e543442de3364478847c7ebc382b1ff3a70d +2 -2
- package/.npm/_cacache/index-v5/8c/2d/fc95c0f3896963b4fe4b745b6d2bbc04a2a75f31f108ff740215559617f0 +1 -1
- package/.npm/_cacache/index-v5/8e/95/715914a073e3319f22dfec7ffac9df9f293d150c0d6723a60ce08ab7f735 +1 -1
- package/.npm/_cacache/index-v5/92/a4/7b5bd924b74993fc2b0de1a458842881545ca2cc22f6bc104a0db4fafdab +1 -1
- package/.npm/_cacache/index-v5/96/3a/a15f6c4dc3aeb3fd89c0b7a8c3ba58cb31a9b72c98e3b11a8ef1647b537f +1 -1
- package/.npm/_cacache/index-v5/96/b2/def9b882b950a49a7096d71afd5fce3a6a9454795fc060b1901e41d44620 +1 -1
- package/.npm/_cacache/index-v5/98/64/01faddae5e2bf199c5f8953942897841c5634b1800e246226ea5489f4584 +1 -1
- package/.npm/_cacache/index-v5/99/a9/8e746181ef13bc400da207da412881206f4d2004d75453373f6ee7b25ffa +1 -1
- package/.npm/_cacache/index-v5/9a/fc/baddd71f459a50b3c710a007fa7d59fa62febef98033b7331374bf02db64 +1 -1
- package/.npm/_cacache/index-v5/9b/55/1bc87872916d09156d5c7056d7ac2b245e7a7638b817eb3dbeafa9d33be8 +1 -1
- package/.npm/_cacache/index-v5/9b/b8/d45062af43674e433f967d20768d308ed6ce195be6acadfb7cfd21d11e67 +1 -1
- package/.npm/_cacache/index-v5/9c/0e/3faaf557a9613fb7f09b5cecc63ebe78da10371a1f2f58b636f8dcb9a914 +1 -1
- package/.npm/_cacache/index-v5/9c/b1/fff150691ce095677426e98bb894621ce4a88097d4b2c5c342224e1852ae +1 -1
- package/.npm/_cacache/index-v5/9d/eb/0927bbd589e18b447a3726f591019d6728da728f603e77a1ded3f78dc6eb +1 -1
- package/.npm/_cacache/index-v5/9f/43/3636172cbc03abf2262c921f9f71572e6b049aa3db8c65d166bcfe5aca5f +1 -1
- package/.npm/_cacache/index-v5/a0/9e/5b7b95cdee86846e4fbe92c9e16e0e7f337c77d2c12de9778522b15bed2e +1 -1
- package/.npm/_cacache/index-v5/a1/ff/6532bc014331c9b572482a4bd805bf54a7ff8b4ca179b1c811aff3dec690 +1 -1
- package/.npm/_cacache/index-v5/a7/11/13f3c5864a7e9d12ca50a19b99d77d88fbcebb1ceb7455eb7ff77f158b64 +1 -1
- package/.npm/_cacache/index-v5/aa/9b/8b6d9e0f45dde1c6af2a4fc211f9b3a74f14041dc04a8a20490a478660b2 +1 -1
- package/.npm/_cacache/index-v5/aa/c4/489c0e6a9e4cbd64a8acd4fbfda113e9dfdd114f464830471fda53fff0cd +1 -1
- package/.npm/_cacache/index-v5/ab/47/d7a88d46cb8996b726bc7ed9280b5eea26889ab7c848149032a6e8911e4b +1 -1
- package/.npm/_cacache/index-v5/ac/4c/71e880f5d5c742e0e3807e7f3c398e920dd019bbf723586f0a7342715580 +1 -1
- package/.npm/_cacache/index-v5/ac/86/c0732592365d753d382502d91754a3c88f8b20e22cc25a0327beb9429687 +1 -1
- package/.npm/_cacache/index-v5/b0/9b/1a1d76c3ad82dd54353bb8ac8397667df4c5db97e42abf0de3fab68065bb +1 -1
- package/.npm/_cacache/index-v5/b3/b3/05a8af0a671c32b41850c1223429fe74449cfcb4c7cac54a9c7c213dfcae +3 -3
- package/.npm/_cacache/index-v5/b3/ba/fbf7da5c8eb06d9cc72143e3d36d7f701447b4e0a221c40d4960e06c7296 +1 -1
- package/.npm/_cacache/index-v5/b5/5f/1a200e91b7580c5893016e1b1397b6a076ff51cc7c5d382c3b1f1e52edd5 +1 -1
- package/.npm/_cacache/index-v5/b6/a8/3bf06da815e92239da2bd4ef7322819b458ee23ae8db9f02dc9a3dca722f +1 -1
- package/.npm/_cacache/index-v5/b7/38/992d3e6c01fc9098d137f7dbccfcaa5f5124ba9c487e582e6e0d83f99d30 +1 -1
- package/.npm/_cacache/index-v5/b7/d6/b5986a5f5d44d726090a94a22a8dff7a7c391df4a4fa4862bb50b1da196b +1 -1
- package/.npm/_cacache/index-v5/ba/d5/f7d95a8e3571758f8b5d095a21909a8f6cdfe7fd2349f7f72b2801eef079 +1 -1
- package/.npm/_cacache/index-v5/bb/8a/9c0052bb21f628e48a1e8d25084ee4adb402eba28c747d0299ebf4c3185d +1 -1
- package/.npm/_cacache/index-v5/be/a3/c0779c8e0be92c748c91a7dad4e6f0fe57ba0158b6bb1bcfddd8fc56c934 +1 -1
- package/.npm/_cacache/index-v5/be/c2/aa68eca6cebd477430ae24727732ec08ee9fc9ef2482df77932eb2f413d9 +1 -1
- package/.npm/_cacache/index-v5/bf/7c/375aec77f76404d91225e72006a0105b2a6ec04bb02cfa365ebcd4a0232b +1 -1
- package/.npm/_cacache/index-v5/c0/15/8b360dbe06b62052f2a43702140af0bca66e2e4064d7d2016efb4a2a149a +1 -1
- package/.npm/_cacache/index-v5/c2/a4/488f71f39bc65742422faf2c74e3b330852ef2192dbb3198fed044e60c20 +1 -1
- package/.npm/_cacache/index-v5/c4/89/38b2ab5b89326ead12dbed7a2076caa44d1207dd6cdb3f9f93273843dcf5 +1 -1
- package/.npm/_cacache/index-v5/c4/ac/4511be3eecea50ee9cadc09a612f9be8598d7b29d5c8b1253c75fa283cc5 +1 -1
- package/.npm/_cacache/index-v5/c5/2d/90031096314e15f4fcc35c804c2180f88214a7851b531aa27bd64064f740 +1 -1
- package/.npm/_cacache/index-v5/c7/5e/2acc90bb8fd9d3150354ec8b2f7e7cc2c8e0e59efd575a1963f1ca66cbed +1 -1
- package/.npm/_cacache/index-v5/c9/f5/c4a24d8834c4e9523cc24e10c6db63876e3eecdb2cf33762b159e3a1e92f +1 -1
- package/.npm/_cacache/index-v5/cc/2d/3cc1e00b73d00c921b8f8c92faaae480a160fc63637ba7b098518db79e02 +1 -1
- package/.npm/_cacache/index-v5/cf/56/427919eefb09afe942b12902069325293191afa7d59ff0f2b016c402b4ec +1 -1
- package/.npm/_cacache/index-v5/d3/ba/564670f99cd2d757d1ac6209834faf1ce9a94ed856243cf090249d9b2b38 +1 -1
- package/.npm/_cacache/index-v5/d5/f4/0913a74f5e223a4fe6108493dd3b03c2d47259df459926160659513c9ad3 +1 -1
- package/.npm/_cacache/index-v5/dd/03/456ce7d8bffee20c3acf7e18ef6501b637d59a6fa3fa7bac5ed160b6be3f +1 -1
- package/.npm/_cacache/index-v5/e3/6a/b90e45414a9e52cdf1e4a96698065357795b9400d7af079b0a75ee8fd76d +1 -1
- package/.npm/_cacache/index-v5/e7/16/c0952e37a6a02b506441a59ee6b0e7fa873a515247763df9dddd162bbcf0 +1 -1
- package/.npm/_cacache/index-v5/e8/50/601e38974398787a5a8a8b8d835e29447814cd68ff6fe2e9629738e124c6 +1 -1
- package/.npm/_cacache/index-v5/ee/47/02714e9e61ca394444a92772fe85340de8bd216b58f59e1af25d5618303f +1 -1
- package/.npm/_cacache/index-v5/ef/74/026f830458505ca7ae44dac678900360af24ed6e76521eb12df5fadcf26f +1 -1
- package/.npm/_cacache/index-v5/f1/75/91238e32e2ac4d9c4976deec39a2e6ca85c0c678a4466a50ca4412272a7c +1 -1
- package/.npm/_cacache/index-v5/f2/1f/c662626ec8eafafa54476678b9f71799a74ee368f2b7845a6ec9f9174a4d +3 -3
- package/.npm/_cacache/index-v5/f5/a4/ca599571c5bcfc5351ca53c418a6cd9d162539528b1ed87a692a1677020e +1 -1
- package/.npm/_cacache/index-v5/f6/18/16e565c66306149a0b31bb2af01babb55bd65ef7cb85a8a11d486d933b60 +1 -1
- package/.npm/_cacache/index-v5/f8/f5/f04b833fa130e113a9093088ad108d8cf9b2b1d5a0336e48cbf0916b8686 +1 -1
- package/.npm/_cacache/index-v5/fa/88/31cbd6ca584e75edf3642c6f8b079c1f2b5eca1d7b2780ce2e86c24f1e84 +1 -1
- package/.npm/_cacache/index-v5/fb/ae/46c38299837b3b4dcee9dc45854a6901355864326b4e64c730727ca1c88a +1 -1
- package/.npm/_cacache/index-v5/fc/1c/958fc085ebdc42fa37d4985cba976a5cca21f678c751c968f8fe9b259455 +1 -1
- package/.npm/_cacache/index-v5/fd/2e/6ead8880f4d02a536a570e21b13b4e7c9700082833e556cd53e9e92bfd1b +1 -1
- package/.npm/_cacache/index-v5/fd/46/fa56121e15b7f090f8050d0c954bbc9452e4c7ddde82777b2e00552c4220 +1 -1
- package/Makefile +1 -0
- package/README.md +1 -1
- package/dist/index.js +22 -154
- package/dist/index.js.map +1 -1
- package/dist/templates/mxw-base-api-express/.gitlab-ci.yml +17 -0
- package/dist/templates/ts-library/.gitlab-ci.yml +20 -3
- package/dist/templates/ts-library/Makefile +1 -0
- package/dist/utils/template.js +159 -1
- package/dist/utils/template.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +20 -191
- package/src/utils/template.ts +203 -0
- package/templates/mxw-base-api-express/.gitlab-ci.yml +17 -0
- package/templates/ts-library/.gitlab-ci.yml +20 -3
- package/templates/ts-library/Makefile +1 -0
package/src/index.ts
CHANGED
|
@@ -1,202 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import * as inquirer from 'inquirer';
|
|
4
|
-
import * as fs from 'fs';
|
|
5
3
|
import * as path from 'path';
|
|
6
|
-
import
|
|
7
|
-
import * as template from './utils/template';
|
|
8
|
-
import chalk from 'chalk';
|
|
4
|
+
import { generateTemplate } from './utils/template';
|
|
9
5
|
import * as yargs from 'yargs';
|
|
10
|
-
const {
|
|
6
|
+
const { version } = require("../package.json");
|
|
11
7
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
{
|
|
16
|
-
name: 'template',
|
|
17
|
-
type: 'list',
|
|
18
|
-
message: 'What project template would you like to generate?',
|
|
19
|
-
choices: CHOICES,
|
|
20
|
-
when: () => !yargs.argv['template']
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
name: 'name',
|
|
24
|
-
type: 'input',
|
|
25
|
-
message: 'Project name:',
|
|
26
|
-
when: () => !yargs.argv['name'],
|
|
27
|
-
validate: (input: string) => {
|
|
28
|
-
if (/^([A-Za-z\-\_\d])+$/.test(input)) return true;
|
|
29
|
-
else return 'Project name may only include letters, numbers, underscores and hashes.';
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
name: 'author',
|
|
34
|
-
type: 'input',
|
|
35
|
-
message: 'Author:',
|
|
36
|
-
when: () => !yargs.argv['author']
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
name: "run_install",
|
|
40
|
-
type: "confirm",
|
|
41
|
-
message: "Do you want to run npm install after template created?",
|
|
42
|
-
},
|
|
43
|
-
];
|
|
44
|
-
|
|
45
|
-
const CURR_DIR = process.cwd();
|
|
46
|
-
|
|
47
|
-
export interface TemplateConfig {
|
|
48
|
-
files?: string[]
|
|
49
|
-
postMessage?: string
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface CliOptions {
|
|
53
|
-
projectName: string
|
|
54
|
-
templateName: string
|
|
55
|
-
templatePath: string
|
|
56
|
-
tartgetPath: string
|
|
57
|
-
config: TemplateConfig
|
|
58
|
-
}
|
|
59
|
-
console.log(`Welcome to ${name} version ${version}`);
|
|
60
|
-
inquirer.prompt(QUESTIONS)
|
|
61
|
-
.then(answers => {
|
|
62
|
-
|
|
63
|
-
answers = Object.assign({}, answers, yargs.argv);
|
|
64
|
-
// @ts-ignore
|
|
65
|
-
const projectChoice = answers['template'];
|
|
66
|
-
// @ts-ignore
|
|
67
|
-
const projectName = answers['name'];
|
|
68
|
-
// @ts-ignore
|
|
69
|
-
const author = answers['author'];
|
|
70
|
-
// @ts-ignore
|
|
71
|
-
const runInstall = answers['run_install'];
|
|
72
|
-
const templatePath = path.join(__dirname, 'templates', projectChoice);
|
|
73
|
-
const tartgetPath = path.join(CURR_DIR, projectName);
|
|
74
|
-
const templateConfig = getTemplateConfig(templatePath);
|
|
75
|
-
|
|
76
|
-
const options: CliOptions = {
|
|
77
|
-
projectName,
|
|
78
|
-
templateName: projectChoice,
|
|
79
|
-
templatePath,
|
|
80
|
-
tartgetPath,
|
|
81
|
-
config: templateConfig
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if (!createProject(tartgetPath)) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
createDirectoryContents(templatePath, projectName, templateConfig, author);
|
|
89
|
-
|
|
90
|
-
if (runInstall && !postProcess(options)) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
showMessage(options);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
function showMessage(options: CliOptions) {
|
|
98
|
-
console.log('');
|
|
99
|
-
console.log(chalk.green('Done.'));
|
|
100
|
-
console.log(chalk.green(`Go into the project: cd ${options.projectName}`));
|
|
101
|
-
|
|
102
|
-
const message = options.config.postMessage;
|
|
103
|
-
|
|
104
|
-
if (message) {
|
|
105
|
-
console.log('');
|
|
106
|
-
console.log(chalk.yellow(message));
|
|
107
|
-
console.log('');
|
|
108
|
-
}
|
|
8
|
+
function runGenerateTemplate() {
|
|
9
|
+
const TEMPLATE_PATH = path.join(__dirname, 'templates');
|
|
10
|
+
const CURR_DIR = process.cwd();
|
|
109
11
|
|
|
12
|
+
generateTemplate(TEMPLATE_PATH, CURR_DIR)
|
|
110
13
|
}
|
|
111
14
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (templateConfigContent) {
|
|
120
|
-
return JSON.parse(templateConfigContent.toString());
|
|
15
|
+
yargs.version(version).command({
|
|
16
|
+
command: 'generate',
|
|
17
|
+
describe: 'generate project template',
|
|
18
|
+
builder: (yargs) => yargs.options({}),
|
|
19
|
+
handler: (argv: {}) => {
|
|
20
|
+
runGenerateTemplate()
|
|
121
21
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
console.log(chalk.red(`Folder ${projectPath} exists. Delete or use another name.`));
|
|
129
|
-
return false;
|
|
22
|
+
}).command({
|
|
23
|
+
command: 'gen',
|
|
24
|
+
describe: 'generate project template, "generate" command alias',
|
|
25
|
+
builder: (yargs) => yargs.options({}),
|
|
26
|
+
handler: (argv: {}) => {
|
|
27
|
+
runGenerateTemplate()
|
|
130
28
|
}
|
|
29
|
+
}).help().alias("help", "h").showHelpOnFail(true);
|
|
131
30
|
|
|
132
|
-
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
function postProcess(options: CliOptions) {
|
|
137
|
-
console.log('');
|
|
138
|
-
console.log("running post installation..please wait...")
|
|
139
|
-
if (isNode(options)) {
|
|
140
|
-
return postProcessNode(options);
|
|
141
|
-
}
|
|
142
|
-
return true;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function isNode(options: CliOptions) {
|
|
146
|
-
return fs.existsSync(path.join(options.templatePath, 'package.json'));
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function postProcessNode(options: CliOptions) {
|
|
150
|
-
shell.cd(options.tartgetPath);
|
|
151
|
-
|
|
152
|
-
let cmd = '';
|
|
153
|
-
|
|
154
|
-
if (shell.which('yarn')) {
|
|
155
|
-
cmd = 'yarn';
|
|
156
|
-
} else if (shell.which('npm')) {
|
|
157
|
-
cmd = 'npm install';
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (cmd) {
|
|
161
|
-
const result = shell.exec(cmd);
|
|
162
|
-
|
|
163
|
-
if (result.code !== 0) {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
} else {
|
|
167
|
-
console.log(chalk.red('No yarn or npm found. Cannot run installation.'));
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return true;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
const SKIP_FILES = ['node_modules', '.template.json'];
|
|
174
|
-
|
|
175
|
-
function createDirectoryContents(templatePath: string, projectName: string, config: TemplateConfig, author?: string) {
|
|
176
|
-
const filesToCreate = fs.readdirSync(templatePath);
|
|
177
|
-
|
|
178
|
-
filesToCreate.forEach(file => {
|
|
179
|
-
const origFilePath = path.join(templatePath, file);
|
|
180
|
-
|
|
181
|
-
// get stats about the current file
|
|
182
|
-
const stats = fs.statSync(origFilePath);
|
|
183
|
-
|
|
184
|
-
if (SKIP_FILES.indexOf(file) > -1) return;
|
|
185
|
-
|
|
186
|
-
if (stats.isFile()) {
|
|
187
|
-
let contents = fs.readFileSync(origFilePath, 'utf8');
|
|
188
|
-
|
|
189
|
-
if (file === '.npmignore-rename') file = '.npmignore';
|
|
190
|
-
|
|
191
|
-
contents = template.render(contents, { projectName, author });
|
|
192
|
-
|
|
193
|
-
const writePath = path.join(CURR_DIR, projectName, file);
|
|
194
|
-
fs.writeFileSync(writePath, contents, 'utf8');
|
|
195
|
-
} else if (stats.isDirectory()) {
|
|
196
|
-
fs.mkdirSync(path.join(CURR_DIR, projectName, file));
|
|
197
|
-
|
|
198
|
-
// recursive call
|
|
199
|
-
createDirectoryContents(path.join(templatePath, file), path.join(projectName, file), config, author);
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
}
|
|
31
|
+
yargs.parse();
|
package/src/utils/template.ts
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import * as ejs from 'ejs';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as inquirer from 'inquirer';
|
|
4
|
+
import * as shell from 'shelljs';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import * as yargs from 'yargs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
|
|
9
|
+
const { name, version } = require("../../package.json");
|
|
10
|
+
|
|
11
|
+
export interface TemplateConfig {
|
|
12
|
+
files?: string[]
|
|
13
|
+
postMessage?: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface CliOptions {
|
|
17
|
+
projectName: string
|
|
18
|
+
templateName: string
|
|
19
|
+
templatePath: string
|
|
20
|
+
tartgetPath: string
|
|
21
|
+
config: TemplateConfig
|
|
22
|
+
}
|
|
2
23
|
|
|
3
24
|
export interface TemplateData {
|
|
4
25
|
projectName: string
|
|
@@ -7,4 +28,186 @@ export interface TemplateData {
|
|
|
7
28
|
|
|
8
29
|
export function render(content: string, data: TemplateData) {
|
|
9
30
|
return ejs.render(content, data);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
export function generateTemplate(templateDir: string, targetDirectory: string) {
|
|
35
|
+
const templateChoices = fs.readdirSync(templateDir);
|
|
36
|
+
|
|
37
|
+
const QUESTIONS = [
|
|
38
|
+
{
|
|
39
|
+
name: 'template',
|
|
40
|
+
type: 'list',
|
|
41
|
+
message: 'What project template would you like to generate?',
|
|
42
|
+
choices: templateChoices,
|
|
43
|
+
when: () => !yargs.argv['template']
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'name',
|
|
47
|
+
type: 'input',
|
|
48
|
+
message: 'Project name:',
|
|
49
|
+
when: () => !yargs.argv['name'],
|
|
50
|
+
validate: (input: string) => {
|
|
51
|
+
if (/^([A-Za-z\-\_\d])+$/.test(input)) return true;
|
|
52
|
+
else return 'Project name may only include letters, numbers, underscores and hashes.';
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'author',
|
|
57
|
+
type: 'input',
|
|
58
|
+
message: 'Author:',
|
|
59
|
+
when: () => !yargs.argv['author']
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "run_install",
|
|
63
|
+
type: "confirm",
|
|
64
|
+
message: "Do you want to run npm install after template created?",
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
console.log(`Welcome to ${name} version ${version}`);
|
|
70
|
+
inquirer.prompt(QUESTIONS)
|
|
71
|
+
.then(answers => {
|
|
72
|
+
|
|
73
|
+
answers = Object.assign({}, answers, yargs.argv);
|
|
74
|
+
// @ts-ignore
|
|
75
|
+
const projectChoice = answers['template'];
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
const projectName = answers['name'];
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
const author = answers['author'];
|
|
80
|
+
// @ts-ignore
|
|
81
|
+
const runInstall = answers['run_install'];
|
|
82
|
+
const templatePath = path.join(templateDir, projectChoice);
|
|
83
|
+
const tartgetPath = path.join(targetDirectory, projectName);
|
|
84
|
+
const templateConfig = getTemplateConfig(templatePath);
|
|
85
|
+
|
|
86
|
+
const options: CliOptions = {
|
|
87
|
+
projectName,
|
|
88
|
+
templateName: projectChoice,
|
|
89
|
+
templatePath,
|
|
90
|
+
tartgetPath,
|
|
91
|
+
config: templateConfig
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (!createProject(tartgetPath)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
createDirectoryContents(templatePath, projectName, templateConfig, author);
|
|
99
|
+
|
|
100
|
+
if (runInstall && !postProcess(options)) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
showMessage(options);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
function showMessage(options: CliOptions) {
|
|
108
|
+
console.log('');
|
|
109
|
+
console.log(chalk.green('Done.'));
|
|
110
|
+
console.log(chalk.green(`Go into the project: cd ${options.projectName}`));
|
|
111
|
+
|
|
112
|
+
const message = options.config.postMessage;
|
|
113
|
+
|
|
114
|
+
if (message) {
|
|
115
|
+
console.log('');
|
|
116
|
+
console.log(chalk.yellow(message));
|
|
117
|
+
console.log('');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function getTemplateConfig(templatePath: string): TemplateConfig {
|
|
123
|
+
const configPath = path.join(templatePath, '.template.json');
|
|
124
|
+
|
|
125
|
+
if (!fs.existsSync(configPath)) return {};
|
|
126
|
+
|
|
127
|
+
const templateConfigContent = fs.readFileSync(configPath);
|
|
128
|
+
|
|
129
|
+
if (templateConfigContent) {
|
|
130
|
+
return JSON.parse(templateConfigContent.toString());
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return {};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function createProject(projectPath: string) {
|
|
137
|
+
if (fs.existsSync(projectPath)) {
|
|
138
|
+
console.log(chalk.red(`Folder ${projectPath} exists. Delete or use another name.`));
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
fs.mkdirSync(projectPath);
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function postProcess(options: CliOptions) {
|
|
147
|
+
console.log('');
|
|
148
|
+
console.log("running post installation..please wait...")
|
|
149
|
+
if (isNode(options)) {
|
|
150
|
+
return postProcessNode(options);
|
|
151
|
+
}
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function isNode(options: CliOptions) {
|
|
156
|
+
return fs.existsSync(path.join(options.templatePath, 'package.json'));
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function postProcessNode(options: CliOptions) {
|
|
160
|
+
shell.cd(options.tartgetPath);
|
|
161
|
+
|
|
162
|
+
let cmd = '';
|
|
163
|
+
|
|
164
|
+
if (shell.which('yarn')) {
|
|
165
|
+
cmd = 'yarn';
|
|
166
|
+
} else if (shell.which('npm')) {
|
|
167
|
+
cmd = 'npm install';
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (cmd) {
|
|
171
|
+
const result = shell.exec(cmd);
|
|
172
|
+
|
|
173
|
+
if (result.code !== 0) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
} else {
|
|
177
|
+
console.log(chalk.red('No yarn or npm found. Cannot run installation.'));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const SKIP_FILES = ['node_modules', '.template.json'];
|
|
184
|
+
|
|
185
|
+
function createDirectoryContents(templatePath: string, projectName: string, config: TemplateConfig, author?: string) {
|
|
186
|
+
const filesToCreate = fs.readdirSync(templatePath);
|
|
187
|
+
|
|
188
|
+
filesToCreate.forEach(file => {
|
|
189
|
+
const origFilePath = path.join(templatePath, file);
|
|
190
|
+
|
|
191
|
+
// get stats about the current file
|
|
192
|
+
const stats = fs.statSync(origFilePath);
|
|
193
|
+
|
|
194
|
+
if (SKIP_FILES.indexOf(file) > -1) return;
|
|
195
|
+
|
|
196
|
+
if (stats.isFile()) {
|
|
197
|
+
let contents = fs.readFileSync(origFilePath, 'utf8');
|
|
198
|
+
|
|
199
|
+
if (file === '.npmignore-rename') file = '.npmignore';
|
|
200
|
+
|
|
201
|
+
contents = render(contents, { projectName, author });
|
|
202
|
+
|
|
203
|
+
const writePath = path.join(targetDirectory, projectName, file);
|
|
204
|
+
fs.writeFileSync(writePath, contents, 'utf8');
|
|
205
|
+
} else if (stats.isDirectory()) {
|
|
206
|
+
fs.mkdirSync(path.join(targetDirectory, projectName, file));
|
|
207
|
+
|
|
208
|
+
// recursive call
|
|
209
|
+
createDirectoryContents(path.join(templatePath, file), path.join(projectName, file), config, author);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
10
213
|
}
|
|
@@ -17,6 +17,7 @@ stages:
|
|
|
17
17
|
- build-commit
|
|
18
18
|
# mark release commit as verified
|
|
19
19
|
- release
|
|
20
|
+
- notify
|
|
20
21
|
|
|
21
22
|
run-test:
|
|
22
23
|
stage: test
|
|
@@ -153,3 +154,19 @@ run-release:
|
|
|
153
154
|
when: never
|
|
154
155
|
# Tag was created
|
|
155
156
|
- if: '$CI_COMMIT_TAG != null'
|
|
157
|
+
|
|
158
|
+
run-notify:
|
|
159
|
+
stage: notify
|
|
160
|
+
image: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/node:10.20.0-alpine-ci-1
|
|
161
|
+
before_script:
|
|
162
|
+
- apk --no-cache add curl
|
|
163
|
+
script:
|
|
164
|
+
- 'curl -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"$TELEGRAM_CHAT_ID\", \"text\": \"CI: $CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME version:$(make version) has been released \"}" https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage'
|
|
165
|
+
rules:
|
|
166
|
+
# NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT merge request and NOT tag was created
|
|
167
|
+
- if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_TAG != null'
|
|
168
|
+
when: never
|
|
169
|
+
- if: $TELEGRAM_BOT_TOKEN != null
|
|
170
|
+
- if: $TELEGRAM_BOT_TOKEN != ""
|
|
171
|
+
- if: $TELEGRAM_CHAT_ID != null
|
|
172
|
+
- if: $TELEGRAM_CHAT_ID != ""
|
|
@@ -5,7 +5,7 @@ stages:
|
|
|
5
5
|
- build
|
|
6
6
|
- build-commit
|
|
7
7
|
- release
|
|
8
|
-
|
|
8
|
+
- notify
|
|
9
9
|
|
|
10
10
|
run-test:
|
|
11
11
|
stage: test
|
|
@@ -13,7 +13,7 @@ run-test:
|
|
|
13
13
|
script:
|
|
14
14
|
- make test
|
|
15
15
|
rules:
|
|
16
|
-
- if: '$CI_COMMIT_MESSAGE =~ /release-
|
|
16
|
+
- if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/'
|
|
17
17
|
when: never
|
|
18
18
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
19
19
|
- if: '$CI_COMMIT_REF_PROTECTED == "true"'
|
|
@@ -113,4 +113,21 @@ run-release:
|
|
|
113
113
|
- if: '$CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
114
114
|
when: never
|
|
115
115
|
# Tag was created
|
|
116
|
-
- if: '$CI_COMMIT_TAG != null'
|
|
116
|
+
- if: '$CI_COMMIT_TAG != null'
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
run-notify:
|
|
120
|
+
stage: notify
|
|
121
|
+
image: registry-intl.cn-hongkong.aliyuncs.com/gkci/node:10.20.0-alpine-ci-1
|
|
122
|
+
before_script:
|
|
123
|
+
- apk --no-cache add curl
|
|
124
|
+
script:
|
|
125
|
+
- 'curl -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"$TELEGRAM_CHAT_ID\", \"text\": \"CI: $CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME version:$(make version) has been released \"}" https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage'
|
|
126
|
+
rules:
|
|
127
|
+
# NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT merge request and NOT tag was created
|
|
128
|
+
- if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_TAG != null'
|
|
129
|
+
when: never
|
|
130
|
+
- if: $TELEGRAM_BOT_TOKEN != null
|
|
131
|
+
- if: $TELEGRAM_BOT_TOKEN != ""
|
|
132
|
+
- if: $TELEGRAM_CHAT_ID != null
|
|
133
|
+
- if: $TELEGRAM_CHAT_ID != ""
|