@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.
Files changed (135) hide show
  1. package/.gitlab-ci.yml +20 -3
  2. package/.npm/_cacache/index-v5/05/34/1929926becc54c1f69c0921ab74c461c1777ab3d43213900acd4779dbf27 +1 -1
  3. package/.npm/_cacache/index-v5/0b/57/19385728919a097d1777ef98285f6cdfca14b66511276b641ec4a3af64bc +1 -1
  4. package/.npm/_cacache/index-v5/0b/90/c147816be94e86ed9bbb4b9e20409e4791a8991fcfd41d7a44489dedd29b +1 -1
  5. package/.npm/_cacache/index-v5/0b/ac/1bc19a224468b5a9e4382b946d33bb4c236306c2cefe190e5e2db1ded98a +1 -1
  6. package/.npm/_cacache/index-v5/12/6d/f094b1c476935fbda8814b43ee001b439b1f793c265ee5bd97d566143fb4 +1 -1
  7. package/.npm/_cacache/index-v5/12/80/c192e66daf6ba49f528ae81b986857735e6d257bdf4b0b1758eb795cae9b +1 -1
  8. package/.npm/_cacache/index-v5/13/32/a5865acd35ae515cde972c2d6cbff2863e694975883870de78b62a80f30e +1 -1
  9. package/.npm/_cacache/index-v5/14/33/be443b6e6c3ef0ff8f09987bc62d5ef9e61259f3331c422182f6bb74fdeb +1 -1
  10. package/.npm/_cacache/index-v5/14/f7/87042931e5944467d47331c350feb4384bf9143ab6ceebf7108a55905843 +1 -1
  11. package/.npm/_cacache/index-v5/14/fa/f87baceab26935686548c742091e7014930673bc1f077574c54c4c6c2d2d +1 -1
  12. package/.npm/_cacache/index-v5/15/26/abf1072208668be6e34a4311ad25f34fc908c21abc17ef01b5836cef1879 +1 -1
  13. package/.npm/_cacache/index-v5/1a/fd/532a4c7bf52c908d567ded2bb11b0f3282f0733d0d079a5291c2f72e0077 +1 -1
  14. package/.npm/_cacache/index-v5/1b/15/2ed036cc76081b7f1bfb3aa59d491eb3b3602c9381ec8d81435ceecf56b5 +1 -1
  15. package/.npm/_cacache/index-v5/27/b7/7f36d855e73b72c900bef7ba44a2a553de3d77b218493b4ddb6ae6fce516 +1 -1
  16. package/.npm/_cacache/index-v5/27/cc/afd4aa090b087c509f17e75196209f498c916da50ee4e9f26bd8424fd6f7 +1 -1
  17. package/.npm/_cacache/index-v5/2d/80/b5e9ca2e40744e7fa089861626d2a29c62363c01729964f4cf0c3e8ee632 +1 -1
  18. package/.npm/_cacache/index-v5/2d/ed/7f785cb92982f557fdc81aec4081952ce428eb449dd91fa0867b6676fa17 +1 -1
  19. package/.npm/_cacache/index-v5/2e/30/64338ba8469bd5c48ab7843f9d06a83992a346cfd592194af9c6d4d6dc48 +1 -1
  20. package/.npm/_cacache/index-v5/2e/a8/503d5f11e5dcde5786e3973ff160d2acc4736af22f9cd5a883c26adc7824 +1 -1
  21. package/.npm/_cacache/index-v5/30/98/41b0d8db0052e964e4843260ec8a0b12f2541721317cd5ee90b07b6a4d59 +1 -1
  22. package/.npm/_cacache/index-v5/31/64/15cefe5f3b923ebb9c684b37db7451ccf335632aab377fa3c730ec2e79cd +1 -1
  23. package/.npm/_cacache/index-v5/31/ac/4d241faeb3fea9ec8318fd93dd55eb70a87cc8a6e3f849ccef9863882b4b +3 -3
  24. package/.npm/_cacache/index-v5/31/ca/a8c3ab0670811a3887ede187dcd3856d14272349a18f6844f7c8007cc05e +1 -1
  25. package/.npm/_cacache/index-v5/34/a0/f70f68dcf9baef2ff21f29fdd206513fe5b10736be36ddd2f65a654a8f23 +1 -1
  26. package/.npm/_cacache/index-v5/34/f7/8879c3cd1412a0890461590276aa13d0344cb4e09494a4b3d854a7c7660a +1 -1
  27. package/.npm/_cacache/index-v5/35/e5/adb97753b463aa67dc9f26f39e8a52f68bf467cf1187509be7da174c057d +1 -1
  28. package/.npm/_cacache/index-v5/37/53/b5dccfb634beb6de718b268b6434849f27d3cf60d426dc19472a642a3f01 +1 -1
  29. package/.npm/_cacache/index-v5/38/2e/fe53691fa43d2f5ac447c8a2431535ec49118be55bf483c6362d4f72c79b +1 -1
  30. package/.npm/_cacache/index-v5/3c/f6/26a7f7dccb969c764b8bdecb3667023c64bc1159e674fbeeca633c54964c +1 -1
  31. package/.npm/_cacache/index-v5/3d/dd/3e8c6b6c875addf2057fb5fa152fff0fab217f78a8e51c0aa457a925bf12 +1 -1
  32. package/.npm/_cacache/index-v5/3e/77/916dd3c99bb6e83a0217305b0a2a541f122d977edcb92fa6b58eed796c17 +1 -1
  33. package/.npm/_cacache/index-v5/40/62/d04e75208dec117f72a95a5989f81fac7565a530fd22f70ea5e3abc377c3 +2 -2
  34. package/.npm/_cacache/index-v5/42/89/e110619623b1c9111a6392de4b1a62a904fb08d0601f87b9c8e1d493f5d6 +1 -1
  35. package/.npm/_cacache/index-v5/46/5b/f3ce50d3f54a5d65ac316d3c71ef8a8f8bdb072b6dfabc2c69018c3e942a +1 -1
  36. package/.npm/_cacache/index-v5/48/17/0ecf04bc0839b23c609ec7bfea9d339fa2cc3ee5982716cf7465ffaea675 +1 -1
  37. package/.npm/_cacache/index-v5/53/aa/b41f4759346e1d3b6651322d78c7983a4a546cdd6c18c3eb56c944571e4b +1 -1
  38. package/.npm/_cacache/index-v5/57/4d/cdafdfd03e43ca95652cbbb0b23bbbbeef3e16fa307726cb2ae8a5658531 +1 -1
  39. package/.npm/_cacache/index-v5/58/c9/9f8c27572bf3034e8fa9cc74fc00878e45fa7d75d4570d4430e82bfb5ef3 +1 -1
  40. package/.npm/_cacache/index-v5/5a/8c/47e273da29b52c911f59eca44c62faa84be4bb59b1de259ba100ff968559 +1 -1
  41. package/.npm/_cacache/index-v5/5e/89/be4afbbaa5c56c070a74790be14bd112b9e1b3f251324d766264b2c5f880 +1 -1
  42. package/.npm/_cacache/index-v5/5e/e7/453bd89145eccf9d67f5797fb09e5a017b5b13f1ac45cb7b70bda45940ec +2 -2
  43. package/.npm/_cacache/index-v5/5f/57/67c3b0c63ea4198903509c050bb99de2eabd6a2fba583067c4f587dc25f7 +1 -1
  44. package/.npm/_cacache/index-v5/60/8c/b74a2ae1c6978d635a1a21438c553d956a762176742b2749d09db964bf4d +1 -1
  45. package/.npm/_cacache/index-v5/68/6b/1f834b2ea43c7a9d1ffd80eb09f9d44af0895dc31dc3955d4b4c797ea825 +1 -1
  46. package/.npm/_cacache/index-v5/6d/61/c9e7e8446341cea439547eb023fbf47c954ba932e6944a3fd50413c1e861 +1 -1
  47. package/.npm/_cacache/index-v5/6d/b3/82949bd186224f1f51cb3fabdad6a93aa6a64c685b395a36f0a34af15119 +1 -1
  48. package/.npm/_cacache/index-v5/6f/d8/170c71ac7185da1b8040f10243c7294ff9a667a27fffc3479ba2f222f014 +1 -1
  49. package/.npm/_cacache/index-v5/74/d3/f9a4984e5548c5f72b3dc858046781cc3a892b34b6b7e7c353fbc93aa060 +1 -1
  50. package/.npm/_cacache/index-v5/75/ec/5dd4c902abf3f9ae589620cd4fd5b6ccfe045b8abdfbfa050d1a5ba8c01e +1 -1
  51. package/.npm/_cacache/index-v5/77/be/4d3f23909fd5905444d34cb0ce78d5bf6ce157670ae6ed614389a2027d18 +1 -1
  52. package/.npm/_cacache/index-v5/7d/8f/423d7e791f7fedd6bef784f0f467761c619f209ce9c788f08b63e968a880 +1 -1
  53. package/.npm/_cacache/index-v5/80/da/c34ca077ec2051cad25b3313e4e75ff4ad2dc2b12a9c250cb9545c0adc4b +1 -1
  54. package/.npm/_cacache/index-v5/84/d7/a5acf52705a1beb66603196f4bc44e583052d0f1d5a23dfb5316da1811d3 +1 -1
  55. package/.npm/_cacache/index-v5/86/7a/c59a43ec4985d34346e5714968f7220d176ea3a61b55464a7fecae01ac47 +1 -1
  56. package/.npm/_cacache/index-v5/87/55/e56d34b37c3170079064597cabb288d076b0d0468eaba3b8a0cf8686ce1f +1 -1
  57. package/.npm/_cacache/index-v5/8a/c9/c10bf71d66461aba0899e81d7a146332c45dbbacb1693c38fc2e4e578e39 +3 -3
  58. package/.npm/_cacache/index-v5/8a/ee/e3e86b627c10a9fc4ed610c15792507293ba1c14e7ba839e22aec609f1e0 +1 -1
  59. package/.npm/_cacache/index-v5/8b/ee/c2ea22c4bf9c5ddcd0333850e543442de3364478847c7ebc382b1ff3a70d +2 -2
  60. package/.npm/_cacache/index-v5/8c/2d/fc95c0f3896963b4fe4b745b6d2bbc04a2a75f31f108ff740215559617f0 +1 -1
  61. package/.npm/_cacache/index-v5/8e/95/715914a073e3319f22dfec7ffac9df9f293d150c0d6723a60ce08ab7f735 +1 -1
  62. package/.npm/_cacache/index-v5/92/a4/7b5bd924b74993fc2b0de1a458842881545ca2cc22f6bc104a0db4fafdab +1 -1
  63. package/.npm/_cacache/index-v5/96/3a/a15f6c4dc3aeb3fd89c0b7a8c3ba58cb31a9b72c98e3b11a8ef1647b537f +1 -1
  64. package/.npm/_cacache/index-v5/96/b2/def9b882b950a49a7096d71afd5fce3a6a9454795fc060b1901e41d44620 +1 -1
  65. package/.npm/_cacache/index-v5/98/64/01faddae5e2bf199c5f8953942897841c5634b1800e246226ea5489f4584 +1 -1
  66. package/.npm/_cacache/index-v5/99/a9/8e746181ef13bc400da207da412881206f4d2004d75453373f6ee7b25ffa +1 -1
  67. package/.npm/_cacache/index-v5/9a/fc/baddd71f459a50b3c710a007fa7d59fa62febef98033b7331374bf02db64 +1 -1
  68. package/.npm/_cacache/index-v5/9b/55/1bc87872916d09156d5c7056d7ac2b245e7a7638b817eb3dbeafa9d33be8 +1 -1
  69. package/.npm/_cacache/index-v5/9b/b8/d45062af43674e433f967d20768d308ed6ce195be6acadfb7cfd21d11e67 +1 -1
  70. package/.npm/_cacache/index-v5/9c/0e/3faaf557a9613fb7f09b5cecc63ebe78da10371a1f2f58b636f8dcb9a914 +1 -1
  71. package/.npm/_cacache/index-v5/9c/b1/fff150691ce095677426e98bb894621ce4a88097d4b2c5c342224e1852ae +1 -1
  72. package/.npm/_cacache/index-v5/9d/eb/0927bbd589e18b447a3726f591019d6728da728f603e77a1ded3f78dc6eb +1 -1
  73. package/.npm/_cacache/index-v5/9f/43/3636172cbc03abf2262c921f9f71572e6b049aa3db8c65d166bcfe5aca5f +1 -1
  74. package/.npm/_cacache/index-v5/a0/9e/5b7b95cdee86846e4fbe92c9e16e0e7f337c77d2c12de9778522b15bed2e +1 -1
  75. package/.npm/_cacache/index-v5/a1/ff/6532bc014331c9b572482a4bd805bf54a7ff8b4ca179b1c811aff3dec690 +1 -1
  76. package/.npm/_cacache/index-v5/a7/11/13f3c5864a7e9d12ca50a19b99d77d88fbcebb1ceb7455eb7ff77f158b64 +1 -1
  77. package/.npm/_cacache/index-v5/aa/9b/8b6d9e0f45dde1c6af2a4fc211f9b3a74f14041dc04a8a20490a478660b2 +1 -1
  78. package/.npm/_cacache/index-v5/aa/c4/489c0e6a9e4cbd64a8acd4fbfda113e9dfdd114f464830471fda53fff0cd +1 -1
  79. package/.npm/_cacache/index-v5/ab/47/d7a88d46cb8996b726bc7ed9280b5eea26889ab7c848149032a6e8911e4b +1 -1
  80. package/.npm/_cacache/index-v5/ac/4c/71e880f5d5c742e0e3807e7f3c398e920dd019bbf723586f0a7342715580 +1 -1
  81. package/.npm/_cacache/index-v5/ac/86/c0732592365d753d382502d91754a3c88f8b20e22cc25a0327beb9429687 +1 -1
  82. package/.npm/_cacache/index-v5/b0/9b/1a1d76c3ad82dd54353bb8ac8397667df4c5db97e42abf0de3fab68065bb +1 -1
  83. package/.npm/_cacache/index-v5/b3/b3/05a8af0a671c32b41850c1223429fe74449cfcb4c7cac54a9c7c213dfcae +3 -3
  84. package/.npm/_cacache/index-v5/b3/ba/fbf7da5c8eb06d9cc72143e3d36d7f701447b4e0a221c40d4960e06c7296 +1 -1
  85. package/.npm/_cacache/index-v5/b5/5f/1a200e91b7580c5893016e1b1397b6a076ff51cc7c5d382c3b1f1e52edd5 +1 -1
  86. package/.npm/_cacache/index-v5/b6/a8/3bf06da815e92239da2bd4ef7322819b458ee23ae8db9f02dc9a3dca722f +1 -1
  87. package/.npm/_cacache/index-v5/b7/38/992d3e6c01fc9098d137f7dbccfcaa5f5124ba9c487e582e6e0d83f99d30 +1 -1
  88. package/.npm/_cacache/index-v5/b7/d6/b5986a5f5d44d726090a94a22a8dff7a7c391df4a4fa4862bb50b1da196b +1 -1
  89. package/.npm/_cacache/index-v5/ba/d5/f7d95a8e3571758f8b5d095a21909a8f6cdfe7fd2349f7f72b2801eef079 +1 -1
  90. package/.npm/_cacache/index-v5/bb/8a/9c0052bb21f628e48a1e8d25084ee4adb402eba28c747d0299ebf4c3185d +1 -1
  91. package/.npm/_cacache/index-v5/be/a3/c0779c8e0be92c748c91a7dad4e6f0fe57ba0158b6bb1bcfddd8fc56c934 +1 -1
  92. package/.npm/_cacache/index-v5/be/c2/aa68eca6cebd477430ae24727732ec08ee9fc9ef2482df77932eb2f413d9 +1 -1
  93. package/.npm/_cacache/index-v5/bf/7c/375aec77f76404d91225e72006a0105b2a6ec04bb02cfa365ebcd4a0232b +1 -1
  94. package/.npm/_cacache/index-v5/c0/15/8b360dbe06b62052f2a43702140af0bca66e2e4064d7d2016efb4a2a149a +1 -1
  95. package/.npm/_cacache/index-v5/c2/a4/488f71f39bc65742422faf2c74e3b330852ef2192dbb3198fed044e60c20 +1 -1
  96. package/.npm/_cacache/index-v5/c4/89/38b2ab5b89326ead12dbed7a2076caa44d1207dd6cdb3f9f93273843dcf5 +1 -1
  97. package/.npm/_cacache/index-v5/c4/ac/4511be3eecea50ee9cadc09a612f9be8598d7b29d5c8b1253c75fa283cc5 +1 -1
  98. package/.npm/_cacache/index-v5/c5/2d/90031096314e15f4fcc35c804c2180f88214a7851b531aa27bd64064f740 +1 -1
  99. package/.npm/_cacache/index-v5/c7/5e/2acc90bb8fd9d3150354ec8b2f7e7cc2c8e0e59efd575a1963f1ca66cbed +1 -1
  100. package/.npm/_cacache/index-v5/c9/f5/c4a24d8834c4e9523cc24e10c6db63876e3eecdb2cf33762b159e3a1e92f +1 -1
  101. package/.npm/_cacache/index-v5/cc/2d/3cc1e00b73d00c921b8f8c92faaae480a160fc63637ba7b098518db79e02 +1 -1
  102. package/.npm/_cacache/index-v5/cf/56/427919eefb09afe942b12902069325293191afa7d59ff0f2b016c402b4ec +1 -1
  103. package/.npm/_cacache/index-v5/d3/ba/564670f99cd2d757d1ac6209834faf1ce9a94ed856243cf090249d9b2b38 +1 -1
  104. package/.npm/_cacache/index-v5/d5/f4/0913a74f5e223a4fe6108493dd3b03c2d47259df459926160659513c9ad3 +1 -1
  105. package/.npm/_cacache/index-v5/dd/03/456ce7d8bffee20c3acf7e18ef6501b637d59a6fa3fa7bac5ed160b6be3f +1 -1
  106. package/.npm/_cacache/index-v5/e3/6a/b90e45414a9e52cdf1e4a96698065357795b9400d7af079b0a75ee8fd76d +1 -1
  107. package/.npm/_cacache/index-v5/e7/16/c0952e37a6a02b506441a59ee6b0e7fa873a515247763df9dddd162bbcf0 +1 -1
  108. package/.npm/_cacache/index-v5/e8/50/601e38974398787a5a8a8b8d835e29447814cd68ff6fe2e9629738e124c6 +1 -1
  109. package/.npm/_cacache/index-v5/ee/47/02714e9e61ca394444a92772fe85340de8bd216b58f59e1af25d5618303f +1 -1
  110. package/.npm/_cacache/index-v5/ef/74/026f830458505ca7ae44dac678900360af24ed6e76521eb12df5fadcf26f +1 -1
  111. package/.npm/_cacache/index-v5/f1/75/91238e32e2ac4d9c4976deec39a2e6ca85c0c678a4466a50ca4412272a7c +1 -1
  112. package/.npm/_cacache/index-v5/f2/1f/c662626ec8eafafa54476678b9f71799a74ee368f2b7845a6ec9f9174a4d +3 -3
  113. package/.npm/_cacache/index-v5/f5/a4/ca599571c5bcfc5351ca53c418a6cd9d162539528b1ed87a692a1677020e +1 -1
  114. package/.npm/_cacache/index-v5/f6/18/16e565c66306149a0b31bb2af01babb55bd65ef7cb85a8a11d486d933b60 +1 -1
  115. package/.npm/_cacache/index-v5/f8/f5/f04b833fa130e113a9093088ad108d8cf9b2b1d5a0336e48cbf0916b8686 +1 -1
  116. package/.npm/_cacache/index-v5/fa/88/31cbd6ca584e75edf3642c6f8b079c1f2b5eca1d7b2780ce2e86c24f1e84 +1 -1
  117. package/.npm/_cacache/index-v5/fb/ae/46c38299837b3b4dcee9dc45854a6901355864326b4e64c730727ca1c88a +1 -1
  118. package/.npm/_cacache/index-v5/fc/1c/958fc085ebdc42fa37d4985cba976a5cca21f678c751c968f8fe9b259455 +1 -1
  119. package/.npm/_cacache/index-v5/fd/2e/6ead8880f4d02a536a570e21b13b4e7c9700082833e556cd53e9e92bfd1b +1 -1
  120. package/.npm/_cacache/index-v5/fd/46/fa56121e15b7f090f8050d0c954bbc9452e4c7ddde82777b2e00552c4220 +1 -1
  121. package/Makefile +1 -0
  122. package/README.md +1 -1
  123. package/dist/index.js +22 -154
  124. package/dist/index.js.map +1 -1
  125. package/dist/templates/mxw-base-api-express/.gitlab-ci.yml +17 -0
  126. package/dist/templates/ts-library/.gitlab-ci.yml +20 -3
  127. package/dist/templates/ts-library/Makefile +1 -0
  128. package/dist/utils/template.js +159 -1
  129. package/dist/utils/template.js.map +1 -1
  130. package/package.json +1 -1
  131. package/src/index.ts +20 -191
  132. package/src/utils/template.ts +203 -0
  133. package/templates/mxw-base-api-express/.gitlab-ci.yml +17 -0
  134. package/templates/ts-library/.gitlab-ci.yml +20 -3
  135. 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 * as shell from 'shelljs';
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 { name, version } = require("../package.json");
6
+ const { version } = require("../package.json");
11
7
 
12
- const CHOICES = fs.readdirSync(path.join(__dirname, 'templates'));
13
-
14
- const QUESTIONS = [
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
- function getTemplateConfig(templatePath: string): TemplateConfig {
113
- const configPath = path.join(templatePath, '.template.json');
114
-
115
- if (!fs.existsSync(configPath)) return {};
116
-
117
- const templateConfigContent = fs.readFileSync(configPath);
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
- return {};
124
- }
125
-
126
- function createProject(projectPath: string) {
127
- if (fs.existsSync(projectPath)) {
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
- fs.mkdirSync(projectPath);
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();
@@ -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-rc-by-bybot/ || $CI_COMMIT_MESSAGE =~ /release-by-cibot/'
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 != ""
@@ -1,5 +1,6 @@
1
1
  MAKEFILE := $(abspath $(lastword $(MAKEFILE_LIST)))
2
2
  ROOT_PATH := $(shell pwd)
3
+ SERVICE_NAME := <%= projectName %>
3
4
 
4
5
  .PHONY: test
5
6