@common-stack/generate-plugin 5.0.5-alpha.9 → 6.0.1-alpha.0

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 (307) hide show
  1. package/CHANGELOG.md +1 -85
  2. package/generators.json +15 -0
  3. package/lib/generators/add-backend/files/__tests__/test.ts.template +3 -2
  4. package/lib/generators/add-backend/files/package.json +5 -7
  5. package/lib/generators/add-backend/generator.cjs +5 -4
  6. package/lib/generators/add-backend/generator.cjs.map +1 -1
  7. package/lib/generators/add-backend/generator.mjs +6 -5
  8. package/lib/generators/add-backend/generator.mjs.map +1 -1
  9. package/lib/generators/add-backend/schema.json +6 -4
  10. package/lib/generators/add-browser-package/files/CHANGELOG.md +3119 -0
  11. package/lib/generators/add-browser-package/files/LICENSE +674 -0
  12. package/lib/generators/add-browser-package/files/jest.config.js +8 -0
  13. package/lib/generators/add-browser-package/files/package.json +49 -0
  14. package/lib/generators/add-browser-package/files/rollup.config.mjs +29 -0
  15. package/lib/generators/add-browser-package/files/src/index.ts.template +4 -0
  16. package/lib/generators/add-browser-package/files/src/interfaces/index.ts.template +1 -0
  17. package/lib/generators/add-browser-package/files/src/interfaces/interfaces.ts.template +1 -0
  18. package/lib/generators/add-browser-package/files/src/module.tsx.template +7 -0
  19. package/lib/generators/add-browser-package/files/tsconfig.json +28 -0
  20. package/lib/generators/add-browser-package/files/webpack.config.js +71 -0
  21. package/lib/generators/add-browser-package/generator.cjs +19 -0
  22. package/lib/generators/add-browser-package/generator.cjs.map +1 -0
  23. package/lib/generators/add-browser-package/generator.d.ts +4 -0
  24. package/lib/generators/add-browser-package/generator.mjs +19 -0
  25. package/lib/generators/add-browser-package/generator.mjs.map +1 -0
  26. package/lib/generators/add-browser-package/generator.spec.d.ts +1 -0
  27. package/lib/generators/add-browser-package/schema.json +19 -0
  28. package/lib/generators/add-frontend/generator.cjs +6 -5
  29. package/lib/generators/add-frontend/generator.cjs.map +1 -1
  30. package/lib/generators/add-frontend/generator.mjs +7 -6
  31. package/lib/generators/add-frontend/generator.mjs.map +1 -1
  32. package/lib/generators/add-frontend/schema.json +8 -5
  33. package/lib/generators/add-frontend/templates/package.json +8 -8
  34. package/lib/generators/add-fullstack/files/CHANGELOG.md +20 -0
  35. package/lib/generators/add-fullstack/files/CODE_OF_CONDUCT.md +94 -0
  36. package/lib/generators/add-fullstack/files/Dockerfile +10 -0
  37. package/lib/generators/add-fullstack/files/ISSUES.md +24 -0
  38. package/lib/generators/add-fullstack/files/Jenkinsfile +672 -0
  39. package/lib/generators/add-fullstack/files/LICENSE +21 -0
  40. package/lib/generators/add-fullstack/files/README.md +50 -0
  41. package/lib/generators/add-fullstack/files/ScreenShot.png +0 -0
  42. package/lib/generators/add-fullstack/files/babel.config.js +24 -0
  43. package/lib/generators/add-fullstack/files/build.config.js +32 -0
  44. package/lib/generators/add-fullstack/files/build.config.mjs +37 -0
  45. package/lib/generators/add-fullstack/files/codegen.yml +47 -0
  46. package/lib/generators/add-fullstack/files/commitlint.config.js +6 -0
  47. package/lib/generators/add-fullstack/files/config/development/dev.env.sample +21 -0
  48. package/lib/generators/add-fullstack/files/config/development/settings.json +9 -0
  49. package/lib/generators/add-fullstack/files/config/staging/docker-staging.env.sample +26 -0
  50. package/lib/generators/add-fullstack/files/config/staging/staging.env.sample +20 -0
  51. package/lib/generators/add-fullstack/files/config/test/test.env.sample +9 -0
  52. package/lib/generators/add-fullstack/files/docs/Moleculer.md +10 -0
  53. package/lib/generators/add-fullstack/files/docs/References.md +13 -0
  54. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/Adding_New_Modules.md +84 -0
  55. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/Desktop_Setup.md +12 -0
  56. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/DoAndDont.md +35 -0
  57. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/GitHooks.md +3 -0
  58. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/HowToContribute.md +14 -0
  59. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/How_to_Run_Various_Options.md +95 -0
  60. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/Known_Issues.md +19 -0
  61. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/Lint_And_Formatter.md +9 -0
  62. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/Project_Setup.md +159 -0
  63. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/Dynamically_Render_Components.md +57 -0
  64. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/HOC_With_Render_Props.md +87 -0
  65. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/Mongoose_Connection.md +45 -0
  66. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/React_Componet_Extensions.md +11 -0
  67. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/RxJS_notes.md +3 -0
  68. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/Styles_With_Type.md +52 -0
  69. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/Tutorials.md +12 -0
  70. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/faq.md +17 -0
  71. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/installation_issues.md +9 -0
  72. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/lerna-build-tools.md +504 -0
  73. package/lib/generators/add-fullstack/files/docs/development/CodeContribution/lerna-yarn-workspaces.md +82 -0
  74. package/lib/generators/add-fullstack/files/docs/development/Database/mongodb-test.md +6 -0
  75. package/lib/generators/add-fullstack/files/docs/development/Deployment/How_To_Setup_Jenkins.md +60 -0
  76. package/lib/generators/add-fullstack/files/docs/development/Deployment/JenkinsDeployment.md +16 -0
  77. package/lib/generators/add-fullstack/files/docs/development/Expo/expo-commands.md +5 -0
  78. package/lib/generators/add-fullstack/files/docs/development/Mobile/How_To_Make_Expo_Wrok_With_Monorepos.md +9 -0
  79. package/lib/generators/add-fullstack/files/docs/development/Mobile/React-Native-FAQ.md +4 -0
  80. package/lib/generators/add-fullstack/files/docs/development/Mobile/Run_mobile.md +9 -0
  81. package/lib/generators/add-fullstack/files/husky.config.js +6 -0
  82. package/lib/generators/add-fullstack/files/jenkins_variables.groovy +22 -0
  83. package/lib/generators/add-fullstack/files/jest-mongodb-config.js +12 -0
  84. package/lib/generators/add-fullstack/files/jest-transform-i18next.js +24 -0
  85. package/lib/generators/add-fullstack/files/jest.config.base.js +60 -0
  86. package/lib/generators/add-fullstack/files/jest.config.js +22 -0
  87. package/lib/generators/add-fullstack/files/jest.config.mongodb.js +3 -0
  88. package/lib/generators/add-fullstack/files/lerna.json +48 -0
  89. package/lib/generators/add-fullstack/files/lint-staged.config.js +4 -0
  90. package/lib/generators/add-fullstack/files/nx.json +20 -0
  91. package/lib/generators/add-fullstack/files/package.json +361 -0
  92. package/lib/generators/add-fullstack/files/prettier.config.js +8 -0
  93. package/lib/generators/add-fullstack/files/rollup.config.base.mjs +147 -0
  94. package/lib/generators/add-fullstack/files/tools/.eslintrc +5 -0
  95. package/lib/generators/add-fullstack/files/tools/cli/command-invoker.js +54 -0
  96. package/lib/generators/add-fullstack/files/tools/cli/commands/add-module.js +64 -0
  97. package/lib/generators/add-fullstack/files/tools/cli/commands/delete-module.js +56 -0
  98. package/lib/generators/add-fullstack/files/tools/cli/config.js +11 -0
  99. package/lib/generators/add-fullstack/files/tools/cli/helpers/util.js +76 -0
  100. package/lib/generators/add-fullstack/files/tools/cli.js +31 -0
  101. package/lib/generators/add-fullstack/files/tools/deploy-cli/runUpdateJenkinsfileVersion.js +30 -0
  102. package/lib/generators/add-fullstack/files/tools/deploy-cli/runUpdateVersionWrapper.js +32 -0
  103. package/lib/generators/add-fullstack/files/tools/deploy-cli/runUpdateYamlSettingsWrapper.js +38 -0
  104. package/lib/generators/add-fullstack/files/tools/deploy-cli/updateJenkinsfileVersion.js +62 -0
  105. package/lib/generators/add-fullstack/files/tools/deploy-cli/updateLernaVersion.js +51 -0
  106. package/lib/generators/add-fullstack/files/tools/deploy-cli/updateYamlSettings.js +53 -0
  107. package/lib/generators/add-fullstack/files/tools/deployVersionUpdate.js +39 -0
  108. package/lib/generators/add-fullstack/files/tools/esm-wrapper.js +7 -0
  109. package/lib/generators/add-fullstack/files/tools/get-symlinked-modules.js +44 -0
  110. package/lib/generators/add-fullstack/files/tools/sortPackageJson.mjs +46 -0
  111. package/lib/generators/add-fullstack/files/tools/update-dependency-link.js +107 -0
  112. package/lib/generators/add-fullstack/files/tools/update-dependency-version.js +106 -0
  113. package/lib/generators/add-fullstack/files/tools/webpack/server.config.js +165 -0
  114. package/lib/generators/add-fullstack/files/tools/webpack-util.js +14 -0
  115. package/lib/generators/add-fullstack/files/tools/webpackAppConfig.js +44 -0
  116. package/lib/generators/add-fullstack/files/transform.js +14 -0
  117. package/lib/generators/add-fullstack/files/tsconfig.json +26 -0
  118. package/lib/generators/add-fullstack/files/typings/graphql.d.ts.template +72 -0
  119. package/lib/generators/add-fullstack/files/typings/index.d.ts.template +123 -0
  120. package/lib/generators/add-fullstack/files/values-dev.yaml +74 -0
  121. package/lib/generators/add-fullstack/files/values-prod.yaml +67 -0
  122. package/lib/generators/add-fullstack/files/values-stage.yaml +70 -0
  123. package/lib/generators/add-fullstack/files/values.secret.json +11 -0
  124. package/lib/generators/add-fullstack/generator.cjs +18 -0
  125. package/lib/generators/add-fullstack/generator.cjs.map +1 -0
  126. package/lib/generators/add-fullstack/generator.d.ts +4 -0
  127. package/lib/generators/add-fullstack/generator.mjs +18 -0
  128. package/lib/generators/add-fullstack/generator.mjs.map +1 -0
  129. package/lib/generators/add-fullstack/generator.spec.d.ts +1 -0
  130. package/lib/generators/add-fullstack/schema.json +14 -0
  131. package/lib/generators/add-moleculer/files/CHANGELOG.md +2250 -0
  132. package/lib/generators/add-moleculer/files/Dockerfile +30 -0
  133. package/lib/generators/add-moleculer/files/charts/chart/.helmignore +21 -0
  134. package/lib/generators/add-moleculer/files/charts/chart/Chart.yaml +9 -0
  135. package/lib/generators/add-moleculer/files/charts/chart/values-dev.yaml +13 -0
  136. package/lib/generators/add-moleculer/files/charts/chart/values-prod.yaml +13 -0
  137. package/lib/generators/add-moleculer/files/charts/chart/values-stage.yaml +13 -0
  138. package/lib/generators/add-moleculer/files/draft.toml +61 -0
  139. package/lib/generators/add-moleculer/files/package.json +69 -0
  140. package/lib/generators/add-moleculer/files/rollup.config.mjs +36 -0
  141. package/lib/generators/add-moleculer/files/src/config/env-config.ts.template +20 -0
  142. package/lib/generators/add-moleculer/files/src/config/index.ts.template +1 -0
  143. package/lib/generators/add-moleculer/files/src/env.ts.template +5 -0
  144. package/lib/generators/add-moleculer/files/src/index.ts.template +13 -0
  145. package/lib/generators/add-moleculer/files/src/modules/index.ts.template +4 -0
  146. package/lib/generators/add-moleculer/files/src/modules/module.ts.template +31 -0
  147. package/lib/generators/add-moleculer/files/tsconfig.base.json +28 -0
  148. package/lib/generators/add-moleculer/files/tsconfig.json +16 -0
  149. package/lib/generators/add-moleculer/files/webpack.config.js +58 -0
  150. package/lib/generators/add-moleculer/generator.cjs +19 -0
  151. package/lib/generators/add-moleculer/generator.cjs.map +1 -0
  152. package/lib/generators/add-moleculer/generator.d.ts +4 -0
  153. package/lib/generators/add-moleculer/generator.mjs +19 -0
  154. package/lib/generators/add-moleculer/generator.mjs.map +1 -0
  155. package/lib/generators/add-moleculer/generator.spec.d.ts +1 -0
  156. package/lib/generators/add-moleculer/schema.json +19 -0
  157. package/lib/index.cjs +1 -1
  158. package/lib/index.d.ts +3 -0
  159. package/lib/index.mjs +1 -1
  160. package/lib/utils/index.cjs +6 -8
  161. package/lib/utils/index.cjs.map +1 -1
  162. package/lib/utils/index.d.ts +2 -0
  163. package/lib/utils/index.mjs +6 -8
  164. package/lib/utils/index.mjs.map +1 -1
  165. package/package.json +2 -2
  166. package/rollup.config.mjs +11 -5
  167. package/src/generators/add-backend/generator.spec.ts +1 -1
  168. package/src/generators/add-backend/generator.ts +6 -6
  169. package/src/generators/add-backend/schema.d.ts +1 -1
  170. package/src/generators/add-backend/schema.json +6 -4
  171. package/src/generators/add-browser-package/generator.spec.ts +20 -0
  172. package/src/generators/add-browser-package/generator.ts +23 -0
  173. package/src/generators/add-browser-package/schema.d.ts +4 -0
  174. package/src/generators/add-browser-package/schema.json +19 -0
  175. package/src/generators/add-frontend/generator.spec.ts +1 -1
  176. package/src/generators/add-frontend/generator.ts +6 -6
  177. package/src/generators/add-frontend/schema.d.ts +1 -1
  178. package/src/generators/add-frontend/schema.json +8 -5
  179. package/src/generators/add-fullstack/files/.browserslistrc +3 -0
  180. package/src/generators/add-fullstack/files/.eslintignore +3 -0
  181. package/src/generators/add-fullstack/files/.eslintrc.js +92 -0
  182. package/src/generators/add-fullstack/files/.gitattributes +5 -0
  183. package/src/generators/add-fullstack/files/.markdownlint.json +6 -0
  184. package/src/generators/add-fullstack/files/.markdownlintignore +5 -0
  185. package/src/generators/add-fullstack/files/.travis.yml +18 -0
  186. package/src/generators/add-fullstack/files/CHANGELOG.md +20 -0
  187. package/src/generators/add-fullstack/files/CODE_OF_CONDUCT.md +94 -0
  188. package/src/generators/add-fullstack/files/Dockerfile +10 -0
  189. package/src/generators/add-fullstack/files/ISSUES.md +24 -0
  190. package/src/generators/add-fullstack/files/Jenkinsfile +672 -0
  191. package/src/generators/add-fullstack/files/LICENSE +21 -0
  192. package/src/generators/add-fullstack/files/README.md +50 -0
  193. package/src/generators/add-fullstack/files/ScreenShot.png +0 -0
  194. package/src/generators/add-fullstack/files/babel.config.js +24 -0
  195. package/src/generators/add-fullstack/files/build.config.js +32 -0
  196. package/src/generators/add-fullstack/files/build.config.mjs +37 -0
  197. package/src/generators/add-fullstack/files/codegen.yml +47 -0
  198. package/src/generators/add-fullstack/files/commitlint.config.js +6 -0
  199. package/src/generators/add-fullstack/files/config/development/dev.env.sample +21 -0
  200. package/src/generators/add-fullstack/files/config/development/settings.json +9 -0
  201. package/src/generators/add-fullstack/files/config/staging/docker-staging.env.sample +26 -0
  202. package/src/generators/add-fullstack/files/config/staging/staging.env.sample +20 -0
  203. package/src/generators/add-fullstack/files/config/test/test.env.sample +9 -0
  204. package/src/generators/add-fullstack/files/docs/Moleculer.md +10 -0
  205. package/src/generators/add-fullstack/files/docs/References.md +13 -0
  206. package/src/generators/add-fullstack/files/docs/development/CodeContribution/Adding_New_Modules.md +84 -0
  207. package/src/generators/add-fullstack/files/docs/development/CodeContribution/Desktop_Setup.md +12 -0
  208. package/src/generators/add-fullstack/files/docs/development/CodeContribution/DoAndDont.md +35 -0
  209. package/src/generators/add-fullstack/files/docs/development/CodeContribution/GitHooks.md +3 -0
  210. package/src/generators/add-fullstack/files/docs/development/CodeContribution/HowToContribute.md +14 -0
  211. package/src/generators/add-fullstack/files/docs/development/CodeContribution/How_to_Run_Various_Options.md +95 -0
  212. package/src/generators/add-fullstack/files/docs/development/CodeContribution/Known_Issues.md +19 -0
  213. package/src/generators/add-fullstack/files/docs/development/CodeContribution/Lint_And_Formatter.md +9 -0
  214. package/src/generators/add-fullstack/files/docs/development/CodeContribution/Project_Setup.md +159 -0
  215. package/src/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/Dynamically_Render_Components.md +57 -0
  216. package/src/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/HOC_With_Render_Props.md +87 -0
  217. package/src/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/Mongoose_Connection.md +45 -0
  218. package/src/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/React_Componet_Extensions.md +11 -0
  219. package/src/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/RxJS_notes.md +3 -0
  220. package/src/generators/add-fullstack/files/docs/development/CodeContribution/React-Patterns/Styles_With_Type.md +52 -0
  221. package/src/generators/add-fullstack/files/docs/development/CodeContribution/Tutorials.md +12 -0
  222. package/src/generators/add-fullstack/files/docs/development/CodeContribution/faq.md +17 -0
  223. package/src/generators/add-fullstack/files/docs/development/CodeContribution/installation_issues.md +9 -0
  224. package/src/generators/add-fullstack/files/docs/development/CodeContribution/lerna-build-tools.md +504 -0
  225. package/src/generators/add-fullstack/files/docs/development/CodeContribution/lerna-yarn-workspaces.md +82 -0
  226. package/src/generators/add-fullstack/files/docs/development/Database/mongodb-test.md +6 -0
  227. package/src/generators/add-fullstack/files/docs/development/Deployment/How_To_Setup_Jenkins.md +60 -0
  228. package/src/generators/add-fullstack/files/docs/development/Deployment/JenkinsDeployment.md +16 -0
  229. package/src/generators/add-fullstack/files/docs/development/Expo/expo-commands.md +5 -0
  230. package/src/generators/add-fullstack/files/docs/development/Mobile/How_To_Make_Expo_Wrok_With_Monorepos.md +9 -0
  231. package/src/generators/add-fullstack/files/docs/development/Mobile/React-Native-FAQ.md +4 -0
  232. package/src/generators/add-fullstack/files/docs/development/Mobile/Run_mobile.md +9 -0
  233. package/src/generators/add-fullstack/files/husky.config.js +6 -0
  234. package/src/generators/add-fullstack/files/jenkins_variables.groovy +22 -0
  235. package/src/generators/add-fullstack/files/jest-mongodb-config.js +12 -0
  236. package/src/generators/add-fullstack/files/jest-transform-i18next.js +24 -0
  237. package/src/generators/add-fullstack/files/jest.config.base.js +60 -0
  238. package/src/generators/add-fullstack/files/jest.config.js +22 -0
  239. package/src/generators/add-fullstack/files/jest.config.mongodb.js +3 -0
  240. package/src/generators/add-fullstack/files/lerna.json +48 -0
  241. package/src/generators/add-fullstack/files/lint-staged.config.js +4 -0
  242. package/src/generators/add-fullstack/files/nx.json +20 -0
  243. package/src/generators/add-fullstack/files/package.json +361 -0
  244. package/src/generators/add-fullstack/files/prettier.config.js +8 -0
  245. package/src/generators/add-fullstack/files/rollup.config.base.mjs +147 -0
  246. package/src/generators/add-fullstack/files/tools/.eslintrc +5 -0
  247. package/src/generators/add-fullstack/files/tools/cli/command-invoker.js +54 -0
  248. package/src/generators/add-fullstack/files/tools/cli/commands/add-module.js +64 -0
  249. package/src/generators/add-fullstack/files/tools/cli/commands/delete-module.js +56 -0
  250. package/src/generators/add-fullstack/files/tools/cli/config.js +11 -0
  251. package/src/generators/add-fullstack/files/tools/cli/helpers/util.js +76 -0
  252. package/src/generators/add-fullstack/files/tools/cli.js +31 -0
  253. package/src/generators/add-fullstack/files/tools/deploy-cli/runUpdateJenkinsfileVersion.js +30 -0
  254. package/src/generators/add-fullstack/files/tools/deploy-cli/runUpdateVersionWrapper.js +32 -0
  255. package/src/generators/add-fullstack/files/tools/deploy-cli/runUpdateYamlSettingsWrapper.js +38 -0
  256. package/src/generators/add-fullstack/files/tools/deploy-cli/updateJenkinsfileVersion.js +62 -0
  257. package/src/generators/add-fullstack/files/tools/deploy-cli/updateLernaVersion.js +51 -0
  258. package/src/generators/add-fullstack/files/tools/deploy-cli/updateYamlSettings.js +53 -0
  259. package/src/generators/add-fullstack/files/tools/deployVersionUpdate.js +39 -0
  260. package/src/generators/add-fullstack/files/tools/esm-wrapper.js +7 -0
  261. package/src/generators/add-fullstack/files/tools/get-symlinked-modules.js +44 -0
  262. package/src/generators/add-fullstack/files/tools/sortPackageJson.mjs +46 -0
  263. package/src/generators/add-fullstack/files/tools/update-dependency-link.js +107 -0
  264. package/src/generators/add-fullstack/files/tools/update-dependency-version.js +106 -0
  265. package/src/generators/add-fullstack/files/tools/webpack/server.config.js +165 -0
  266. package/src/generators/add-fullstack/files/tools/webpack-util.js +14 -0
  267. package/src/generators/add-fullstack/files/tools/webpackAppConfig.js +44 -0
  268. package/src/generators/add-fullstack/files/transform.js +14 -0
  269. package/src/generators/add-fullstack/files/tsconfig.json +26 -0
  270. package/src/generators/add-fullstack/files/typings/graphql.d.ts.template +72 -0
  271. package/src/generators/add-fullstack/files/typings/index.d.ts.template +123 -0
  272. package/src/generators/add-fullstack/files/values-dev.yaml +74 -0
  273. package/src/generators/add-fullstack/files/values-prod.yaml +67 -0
  274. package/src/generators/add-fullstack/files/values-stage.yaml +70 -0
  275. package/src/generators/add-fullstack/files/values.secret.json +11 -0
  276. package/src/generators/add-fullstack/generator.spec.ts +20 -0
  277. package/src/generators/add-fullstack/generator.ts +22 -0
  278. package/src/generators/add-fullstack/schema.d.ts +3 -0
  279. package/src/generators/add-fullstack/schema.json +14 -0
  280. package/src/generators/add-moleculer/files/.dockerignore +5 -0
  281. package/src/generators/add-moleculer/files/.draft-tasks.toml +0 -0
  282. package/src/generators/add-moleculer/files/.draftignore +4 -0
  283. package/src/generators/add-moleculer/files/CHANGELOG.md +2250 -0
  284. package/src/generators/add-moleculer/files/Dockerfile +30 -0
  285. package/src/generators/add-moleculer/files/charts/chart/.helmignore +21 -0
  286. package/src/generators/add-moleculer/files/charts/chart/Chart.yaml +9 -0
  287. package/src/generators/add-moleculer/files/charts/chart/values-dev.yaml +13 -0
  288. package/src/generators/add-moleculer/files/charts/chart/values-prod.yaml +13 -0
  289. package/src/generators/add-moleculer/files/charts/chart/values-stage.yaml +13 -0
  290. package/src/generators/add-moleculer/files/draft.toml +61 -0
  291. package/src/generators/add-moleculer/files/package.json +69 -0
  292. package/src/generators/add-moleculer/files/rollup.config.mjs +36 -0
  293. package/src/generators/add-moleculer/files/src/config/env-config.ts.template +20 -0
  294. package/src/generators/add-moleculer/files/src/config/index.ts.template +1 -0
  295. package/src/generators/add-moleculer/files/src/env.ts.template +5 -0
  296. package/src/generators/add-moleculer/files/src/index.ts.template +13 -0
  297. package/src/generators/add-moleculer/files/src/modules/index.ts.template +4 -0
  298. package/src/generators/add-moleculer/files/src/modules/module.ts.template +31 -0
  299. package/src/generators/add-moleculer/files/tsconfig.base.json +28 -0
  300. package/src/generators/add-moleculer/files/tsconfig.json +16 -0
  301. package/src/generators/add-moleculer/files/webpack.config.js +58 -0
  302. package/src/generators/add-moleculer/generator.spec.ts +20 -0
  303. package/src/generators/add-moleculer/generator.ts +23 -0
  304. package/src/generators/add-moleculer/schema.d.ts +4 -0
  305. package/src/generators/add-moleculer/schema.json +19 -0
  306. package/src/index.ts +3 -0
  307. package/src/utils/index.ts +8 -0
@@ -0,0 +1,672 @@
1
+ // Global Variable so it can be changed between stages
2
+ def GIT_BRANCH_NAME=getGitBranchName()
3
+
4
+ pipeline {
5
+ agent {
6
+ kubernetes{
7
+ label 'slave-2cpu-8gb'
8
+ }
9
+ }
10
+ parameters {
11
+ string(name: 'REPOSITORY_SERVER', defaultValue: 'gcr.io/stack-test-186501', description: 'Registry server URL to pull/push images', trim: true)
12
+ string(name: 'BASE_NAMESPACE', defaultValue: 'default', description: 'In which namespace micro services needs to be deploy', trim: true)
13
+ string(name: 'CONNECTION_ID', defaultValue: 'test', description: 'connection id', trim: true)
14
+ string(name: 'WORKSPACE_ID', defaultValue: 'fullstack-pro', description: 'workspace id', trim: true)
15
+ string(name: 'UNIQUE_NAME', defaultValue: 'default', description: 'chart name', trim: true)
16
+ string(name: 'VERSION', defaultValue: 'v3', description: 'version of the deployment', trim: true)
17
+ string(name: 'HEMERA_LOG_LEVEL', defaultValue: 'info', description: 'log level for hemera')
18
+ string(name: 'LOG_LEVEL', defaultValue: 'info', description: 'log level')
19
+ string(name: 'DEPLOYMENT_PATH', defaultValue: '/servers', description: 'folder path to load helm charts')
20
+ string(name: 'PUBLISH_BRANCH', defaultValue: 'devpublish3', description: 'the publish branch for packages release')
21
+ string(name: 'EXCLUDE_SETTING_NAMESPACE_FILTER', defaultValue: 'brigade', description: 'exclude setting namespace that matches search string')
22
+ string(name: 'GIT_CREDENTIAL_ID', defaultValue: 'fullstack-pro-github-deploy-key', description: 'jenkins credential id of git deploy secret')
23
+ string(name: 'BUILD_MODULE_TO_INCLUDE', defaultValue: '@sample-stack*', description: 'build env')
24
+ string(name: 'REPOSITORY_SSH_URL', defaultValue: 'git@github.com:CDEBase/fullstack-pro.git', description: 'ssh url of the git repository')
25
+ string(name: 'REPOSITORY_BRANCH', defaultValue: 'develop3', description: 'the branch with changes')
26
+ string(name: 'DEVELOP_BRANCH', defaultValue: 'develop3', description: 'the branch for the development')
27
+ string(name: 'MASTER_BRANCH', defaultValue: 'master', description: 'Master branch as default branch for production.')
28
+
29
+ // by default first value of the choice will be choosen
30
+ choice choices: ['auto', 'force'], description: 'Choose merge strategy', name: 'NPM_PUBLISH_STRATEGY'
31
+ choice choices: ['yarn', 'npm'], description: 'Choose build strategy', name: 'BUILD_STRATEGY'
32
+ choice choices: ['0.7.9','0.7.7', '0.6.0'], description: 'Choose Idestack chart version', name: 'IDESTACK_CHART_VERSION'
33
+ choice choices: ['nodejs18', 'nodejs16', 'nodejs14'], description: 'Choose NodeJS version', name: 'NODEJS_TOOL_VERSION'
34
+ choice choices: ['buildOnly', 'buildAndTest', 'buildAndPublish', 'mobileBuild', 'mobilePreview', 'mobilePreviewLocal', 'mobilePreviewSubmit', 'mobileProd', 'mobileProdSubmit', 'devDeployOnly', 'stageDeploy', 'stageDeployOnly', 'prodDeploy', 'prodDeployOnly', 'allenv'], description: 'Where to deploy micro services?', name: 'ENV_CHOICE'
35
+ choice choices: ['all', 'ios', 'android' ], description: 'Mobile type if it is mobile build?', name: 'MOBILE_CHOICE'
36
+ booleanParam (defaultValue: false, description: 'Skip production release approval', name: 'SKIP_RELEASE_APPROVAL')
37
+ booleanParam (defaultValue: false, description: 'Tick to enable debug mode', name: 'ENABLE_DEBUG')
38
+ string(name: 'BUILD_TIME_OUT', defaultValue: '120', description: 'Build timeout in minutes', trim: true)
39
+ }
40
+
41
+ // Setup common + secret key variables for pipeline.
42
+ environment {
43
+ BUILD_COMMAND = getBuildCommand()
44
+ NAMESPACE = "${params.BASE_NAMESPACE}-${params.VERSION}"
45
+ PYTHON = '/usr/bin/python'
46
+ GCR_KEY = credentials('jenkins-gcr-login-key')
47
+ EXPO_TOKEN = credentials('expo_cdmbase_token')
48
+ GIT_PR_BRANCH_NAME = getGitPrBranchName()
49
+ GITHUB_HELM_REPO_TOKEN = credentials('github-helm-repo-access-token')
50
+ }
51
+
52
+ // Initialize npm and docker commands using plugins
53
+ tools {
54
+ nodejs params.NODEJS_TOOL_VERSION
55
+ }
56
+
57
+ stages {
58
+ stage('define environment') {
59
+ steps {
60
+ // skip the build if ends with `[skip ci]` which is equivalent to regex `.*\[skip ci\\]\\s`
61
+ scmSkip(deleteBuild: true, skipPattern:'.*\\[skip ci\\]\\s')
62
+ checkout([$class: 'GitSCM', branches: [[name: '*/' + params.REPOSITORY_BRANCH]],
63
+ doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'WipeWorkspace']],
64
+ submoduleCfg: [], userRemoteConfigs: [[credentialsId: params.GIT_CREDENTIAL_ID, url: params.REPOSITORY_SSH_URL]]])
65
+ sh "git checkout ${env.GIT_PR_BRANCH_NAME}"
66
+ }
67
+ }
68
+
69
+ stage('Unlock secrets') { //unlock keys for all runs
70
+ environment { deployment_env = 'dev' }
71
+ steps {
72
+ sh '''
73
+ gpg --import /tmp/gpg-public-key/gpg-public-key.pub
74
+ gpg --import /tmp/gpg-private-key/gpg-private-key.key
75
+ git-crypt unlock
76
+ '''
77
+ load "./jenkins_variables.groovy"
78
+ }
79
+ }
80
+
81
+ // Install packages. If
82
+ // a. any branch
83
+ // b. ENV_CHOICE set not selected `dev`, `stage` or `prod`
84
+ stage('Install git repository') {
85
+ steps {
86
+ sh """
87
+ echo "what is docker git version $GIT_BRANCH_NAME -- ${params.ENV_CHOICE}"
88
+ ${params.BUILD_STRATEGY} install
89
+ ${params.BUILD_STRATEGY} run lerna
90
+ """
91
+ }
92
+ }
93
+
94
+ stage('Mobile Build') {
95
+ when {
96
+ expression { params.ENV_CHOICE == 'mobileBuild' || params.ENV_CHOICE == 'mobilePreview' || params.ENV_CHOICE == 'mobilePreviewLocal' || params.ENV_CHOICE == 'mobilePreviewSubmit' || params.ENV_CHOICE == 'mobileProd' || params.ENV_CHOICE == 'mobileProdSubmit' }
97
+ }
98
+ steps {
99
+ sshagent(credentials: [params.GIT_CREDENTIAL_ID]) {
100
+ sh """
101
+ rm .npmrc
102
+ lerna exec --scope=*mobile-device ${params.BUILD_STRATEGY} ${env.BUILD_COMMAND}
103
+ git checkout -- .npmrc
104
+ yarn gitcommit
105
+ git pull origin ${params.REPOSITORY_BRANCH}
106
+ git push origin ${params.REPOSITORY_BRANCH}
107
+ """
108
+ }
109
+ }
110
+ }
111
+
112
+ // Run build for all cases except when ENV_CHOICE is 'buildAndPublish' and `dev`, `stage` or `prod`
113
+ stage('Build Packages') {
114
+ when {
115
+ expression { params.ENV_CHOICE == 'buildOnly' || params.ENV_CHOICE == 'buildAndTest' || params.ENV_CHOICE == 'buildAndPublish' }
116
+ }
117
+ steps {
118
+ sh """
119
+ ${params.BUILD_STRATEGY} run build
120
+ """
121
+ }
122
+ }
123
+
124
+ // Test build for all cases except when ENV_CHOICE is 'buildAndPublish' and `dev`, `stage` or `prod`
125
+ stage('Test Packages') {
126
+ when {
127
+ expression { params.ENV_CHOICE == 'buildAndTest' }
128
+ }
129
+ steps {
130
+ sh """
131
+ ${params.BUILD_STRATEGY} run test
132
+ """
133
+ }
134
+ }
135
+
136
+ // if PR is from branch other than `develop` then merge to `develop` if we chose ENV_CHOICE as 'buildAndPublish'.
137
+ // Skip this stage. Future implementation.
138
+ stage('Merge PR, Install, Build') {
139
+ when {
140
+ expression { params.ENV_CHOICE == '1' }
141
+ }
142
+ steps {
143
+ sh """
144
+ git checkout ${params.DEVELOP_BRANCH}
145
+ git merge ${env.GIT_PR_BRANCH_NAME} -m 'auto merging ${params.GIT_PR_BRANCH_NAME} \r\n[skip ci]'
146
+ git push origin ${params.DEVELOP_BRANCH}
147
+ ${params.BUILD_STRATEGY} install
148
+ ${params.BUILD_STRATEGY} run lerna
149
+ ${params.BUILD_STRATEGY} run build
150
+ """
151
+ script {
152
+ GIT_BRANCH_NAME = params.DEVELOP_BRANCH
153
+ }
154
+ }
155
+ }
156
+
157
+ // publish packages to npm repository.
158
+ // commit new package-lock.json that might get generated during install
159
+ // Build will be ignore with tag '[skip ci]'
160
+ stage('Publish Packages') {
161
+ when {
162
+ expression { GIT_BRANCH_NAME == params.DEVELOP_BRANCH }
163
+ expression { params.ENV_CHOICE == 'buildOnly' || params.ENV_CHOICE == 'buildAndPublish' }
164
+ }
165
+ steps {
166
+ script {
167
+ GIT_BRANCH_NAME = params.PUBLISH_BRANCH
168
+ }
169
+ sshagent(credentials: [params.GIT_CREDENTIAL_ID]) {
170
+ sh """
171
+ git add -A
172
+ git diff --staged --quiet || git commit -am 'auto build [skip ci] \r\n'
173
+ git fetch origin ${params.DEVELOP_BRANCH}
174
+ git checkout ${params.DEVELOP_BRANCH}
175
+ ${params.BUILD_STRATEGY} run devpublish:${params.NPM_PUBLISH_STRATEGY};
176
+ git push origin ${params.DEVELOP_BRANCH}
177
+ git checkout ${params.PUBLISH_BRANCH}
178
+ """
179
+ }
180
+ }
181
+ }
182
+
183
+ stage('Docker login') {
184
+ steps {
185
+ sh 'cat "$GCR_KEY" | docker login -u _json_key --password-stdin https://gcr.io'
186
+ }
187
+ }
188
+
189
+ stage('Dev Docker Images') {
190
+ options {
191
+ timeout(time: params.BUILD_TIME_OUT, unit: 'MINUTES')
192
+ }
193
+ when {
194
+ // Docker build need be performed in PUBLISH branch only
195
+ expression { GIT_BRANCH_NAME == params.PUBLISH_BRANCH }
196
+ expression { params.ENV_CHOICE == 'buildOnly' }
197
+ }
198
+
199
+ // Below variable is only set to load all (variables, functions) from jenkins_variables.groovy file.
200
+ environment {
201
+ deployment_env = 'dev'
202
+ BUILD_MODULE_TO_INCLUDE = "${params.BUILD_MODULE_TO_INCLUDE}"
203
+ }
204
+ steps {
205
+ load "./jenkins_variables.groovy"
206
+ script {
207
+ def servers = getDirs(pwd() + params.DEPLOYMENT_PATH)
208
+ def frontendProjects = servers.findAll { it.startsWith('frontend-') }
209
+ def otherProjects = servers - frontendProjects
210
+
211
+ // Create parallel stages for non-frontend projects
212
+ def parallelStagesMap = otherProjects.collectEntries {
213
+ ["${it}" : generateBuildStage(it)]
214
+ }
215
+
216
+ // Run the first frontend project in parallel with others
217
+ if (frontendProjects.size() > 0) {
218
+ parallelStagesMap["${frontendProjects[0]}"] = generateBuildStage(frontendProjects[0])
219
+ frontendProjects.remove(0)
220
+ }
221
+
222
+ // Run non-frontend projects in parallel
223
+ parallel parallelStagesMap
224
+
225
+ // Run remaining frontend projects sequentially
226
+ frontendProjects.each {
227
+ stage("${it}") {
228
+ runBuildStage(it)
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
234
+
235
+ // Below are dev stages
236
+ stage('Dev deployment') {
237
+ environment {
238
+ deployment_env = 'dev'
239
+ }
240
+ when {
241
+ expression { GIT_BRANCH_NAME == params.PUBLISH_BRANCH || GIT_BRANCH_NAME == params.DEVELOP_BRANCH }
242
+ expression { params.ENV_CHOICE == 'buildOnly' || params.ENV_CHOICE == 'devDeployOnly' }
243
+ beforeInput true
244
+ }
245
+
246
+ steps {
247
+ withKubeConfig([credentialsId: 'kubernetes-dev-cluster-r1', serverUrl: "https://34.74.64.165"]) {
248
+ sh """
249
+ helm repo add stable https://charts.helm.sh/stable
250
+ helm repo add incubator https://charts.helm.sh/incubator
251
+ helm repo add kube-orchestration https://"""+ GITHUB_HELM_REPO_TOKEN +"""@raw.githubusercontent.com/cdmbase/kube-orchestration/develop/helm-packages
252
+ helm repo update
253
+ """
254
+ script {
255
+ nameSpaceCheck = sh(script: "kubectl get ns | tr '\\n' ','", returnStdout: true)
256
+ if (!nameSpaceCheck.contains(env.NAMESPACE)) { sh "kubectl create ns " + env.NAMESPACE }
257
+
258
+ def servers = getDirs(pwd() + params.DEPLOYMENT_PATH)
259
+ def parallelStagesMap = servers.collectEntries {
260
+ ["${it}" : generateStage(it, deployment_env)]
261
+ }
262
+ parallel parallelStagesMap
263
+ }
264
+ }
265
+ }
266
+ } // End of dev deployment code block.
267
+
268
+ // Only master branch will be merged
269
+ stage('Merge Develop to master & Install') {
270
+ when {
271
+ expression { GIT_BRANCH_NAME == params.MASTER_BRANCH }
272
+ expression { params.ENV_CHOICE == 'stageDeploy' || params.ENV_CHOICE == 'prodDeploy' }
273
+ }
274
+ steps {
275
+ sh """
276
+ git add -A
277
+ git diff --staged --quiet || git commit -am 'pre merge to master \r\n[skip ci]'
278
+ git checkout ${params.REPOSITORY_BRANCH}
279
+ git merge origin/${params.DEVELOP_BRANCH} -m 'auto merging ${params.DEVELOP_BRANCH} \r\n[skip ci]'
280
+ ${params.BUILD_STRATEGY} install
281
+ ${params.BUILD_STRATEGY} run lerna
282
+ """
283
+ script {
284
+ GIT_BRANCH_NAME = params.REPOSITORY_BRANCH
285
+ }
286
+ }
287
+ }
288
+
289
+ // Run build for all cases except when ENV_CHOICE is 'buildAndPublish' and `dev`, `stage` or `prod`
290
+ stage('Prod Build Packages') {
291
+ when {
292
+ expression { GIT_BRANCH_NAME == params.MASTER_BRANCH }
293
+ expression { params.ENV_CHOICE == 'stageDeploy' || params.ENV_CHOICE == 'prodDeploy' }
294
+ }
295
+ steps {
296
+ sh """
297
+ ${params.BUILD_STRATEGY} run build
298
+ """
299
+ }
300
+ }
301
+
302
+ // publish packages to npm repository.
303
+ // commit new package-lock.json that might get generated during install
304
+ // Build will be ignore with tag '[skip ci]'
305
+ stage('Prod Publish Packages') {
306
+ when {
307
+ expression { GIT_BRANCH_NAME == params.MASTER_BRANCH }
308
+ expression { params.ENV_CHOICE == 'stageDeploy' || params.ENV_CHOICE == 'prodDeploy' }
309
+ }
310
+ steps {
311
+ script {
312
+ GIT_BRANCH_NAME = params.PUBLISH_BRANCH
313
+ }
314
+ sshagent(credentials: [params.GIT_CREDENTIAL_ID]) {
315
+ sh """
316
+ git add -A
317
+ git diff --staged --quiet || git commit -am 'auto build [skip ci]\r\n'
318
+ git fetch origin ${params.MASTER_BRANCH}
319
+ git checkout ${params.MASTER_BRANCH}
320
+ ${params.BUILD_STRATEGY} run publish:${params.NPM_PUBLISH_STRATEGY};
321
+ git push origin ${params.MASTER_BRANCH}
322
+ git checkout ${params.PUBLISH_BRANCH}
323
+ """
324
+ }
325
+ }
326
+ }
327
+
328
+ // Build Docker containers for production.
329
+ stage('Prod Docker Images') {
330
+ options {
331
+ timeout(time: params.BUILD_TIME_OUT, unit: 'MINUTES')
332
+ }
333
+ when {
334
+ // required to be in Publish branch to build docker
335
+ expression { GIT_BRANCH_NAME == params.PUBLISH_BRANCH }
336
+ expression { params.ENV_CHOICE == 'stageDeploy' || params.ENV_CHOICE == 'prodDeploy' }
337
+ }
338
+
339
+ // Below variable is only set to load all (variables, functions) from jenkins_variables.groovy file.
340
+ environment { deployment_env = 'prod' }
341
+ steps {
342
+ load "./jenkins_variables.groovy"
343
+ script {
344
+ def servers = getDirs(pwd() + params.DEPLOYMENT_PATH)
345
+ def frontendProjects = servers.findAll { it.startsWith('frontend-') }
346
+ def otherProjects = servers - frontendProjects
347
+
348
+ // Create parallel stages for non-frontend projects
349
+ def parallelStagesMap = otherProjects.collectEntries {
350
+ ["${it}" : generateBuildStage(it)]
351
+ }
352
+
353
+ // First frontend project
354
+ if (frontendProjects) {
355
+ parallelStagesMap["${frontendProjects[0]}"] = generateBuildStage(frontendProjects[0])
356
+ frontendProjects.remove(0)
357
+ }
358
+
359
+ // Run non-frontend projects in parallel
360
+ parallel parallelStagesMap
361
+
362
+ // Run remaining frontend projects sequentially
363
+ frontendProjects.each {
364
+ stage("${it}") {
365
+ steps {
366
+ runBuildStage(it)
367
+ }
368
+ }
369
+ }
370
+ }
371
+ }
372
+ } // End of production docker build.
373
+
374
+ // Below are stage code block
375
+ stage('Stage Deployment') {
376
+ options {
377
+ timeout(time: 300, unit: 'SECONDS')
378
+ }
379
+ environment {
380
+ deployment_env = 'stage'
381
+ }
382
+ when {
383
+ expression { GIT_BRANCH_NAME == params.MASTER_BRANCH || GIT_BRANCH_NAME == params.PUBLISH_BRANCH }
384
+ expression { params.ENV_CHOICE == 'stageDeploy' || params.ENV_CHOICE == 'stageDeployOnly' }
385
+ beforeInput true
386
+ }
387
+
388
+ steps {
389
+ load "./jenkins_variables.groovy"
390
+ withKubeConfig([credentialsId: 'kubernetes-staging-cluster', serverUrl: 'https://34.139.244.149']) {
391
+ sh """
392
+ helm repo add stable https://charts.helm.sh/stable
393
+ helm repo add incubator https://charts.helm.sh/incubator
394
+ helm repo add kube-orchestration https://"""+ GITHUB_HELM_REPO_TOKEN +"""@raw.githubusercontent.com/cdmbase/kube-orchestration/develop/helm-packages
395
+ helm repo update
396
+ """
397
+ script {
398
+ nameSpaceCheck = sh(script: "kubectl get ns | tr '\\n' ','", returnStdout: true)
399
+ if (!nameSpaceCheck.contains(env.NAMESPACE)) { sh "kubectl create ns " + env.NAMESPACE }
400
+
401
+ def servers = getDirs(pwd() + params.DEPLOYMENT_PATH)
402
+ def parallelStagesMap = servers.collectEntries {
403
+ ["${it}" : generateStage(it, deployment_env)]
404
+ }
405
+ parallel parallelStagesMap
406
+ }
407
+ }
408
+ }
409
+ } // End of staging deployment code block.
410
+
411
+ stage('Release?') {
412
+ when {
413
+ expression { GIT_BRANCH_NAME == params.PUBLISH_BRANCH }
414
+ expression { params.ENV_CHOICE == 'prodDeploy' || params.ENV_CHOICE == 'prodDeployOnly' }
415
+ expression { params.SKIP_RELEASE_APPROVAL == false }
416
+ }
417
+ options {
418
+ timeout time: 900, unit: 'SECONDS'
419
+ }
420
+ steps {
421
+ slackSend (color: '#2596BE', message: "Approval Needed for Production Release: Job '${env.JOB_NAME}' BUILD NUMBER: '${env.BUILD_NUMBER}' to be approved. Click <${env.RUN_DISPLAY_URL}|here> to approve it.", channel: 'idestack-automation')
422
+
423
+ script {
424
+ env.DO_RELEASE = input message: 'Want to deploy fullstack-pro on prod cluster?',
425
+ parameters: [choice(choices: ['yes', 'no'], description: 'Deploy branch in Production?', name: 'PROD_DEPLOYMENT')]
426
+ }
427
+ milestone 1
428
+ }
429
+ }
430
+
431
+ // Below are production stages
432
+ stage('Prod Deployment') {
433
+ options {
434
+ timeout(time: 300, unit: 'SECONDS')
435
+ }
436
+ environment {
437
+ deployment_env = 'prod'
438
+ }
439
+ when {
440
+ // Only execute the step when the release has been approved or skipped in the deployment.
441
+ expression { env.DO_RELEASE == 'yes' || params.SKIP_RELEASE_APPROVAL == true }
442
+ expression { GIT_BRANCH_NAME == params.PUBLISH_BRANCH }
443
+ expression { params.ENV_CHOICE == 'prodDeploy' || params.ENV_CHOICE == 'prodDeployOnly' }
444
+ }
445
+
446
+ steps {
447
+ lock('release') {
448
+ milestone 2
449
+ load "./jenkins_variables.groovy"
450
+ withKubeConfig([credentialsId: 'kubernetes-prod-cluster-r1', serverUrl: 'https://35.229.71.215']) {
451
+ sh """
452
+ helm repo add stable https://charts.helm.sh/stable
453
+ helm repo add incubator https://charts.helm.sh/incubator
454
+ helm repo add kube-orchestration https://"""+ GITHUB_HELM_REPO_TOKEN +"""@raw.githubusercontent.com/cdmbase/kube-orchestration/develop/helm-packages
455
+ helm repo update
456
+ """
457
+ script {
458
+ nameSpaceCheck = sh(script: "kubectl get ns | tr '\\n' ','", returnStdout: true)
459
+ if (!nameSpaceCheck.contains(env.NAMESPACE)) { sh "kubectl create ns " + env.NAMESPACE }
460
+
461
+ def servers = getDirs(pwd() + params.DEPLOYMENT_PATH)
462
+ def parallelStagesMap = servers.collectEntries {
463
+ ["${it}" : generateStage(it, deployment_env)]
464
+ }
465
+ parallel parallelStagesMap
466
+
467
+ slackSend (color: '#2596BE', message: "Done: Job '${env.JOB_NAME}' BUILD NUMBER: '${env.BUILD_NUMBER}' is completed. click <${env.RUN_DISPLAY_URL}|here> to see the log.", channel: 'idestack-automation')
468
+ }
469
+ }
470
+ }
471
+ }
472
+ } // End of production deployment code block.
473
+ }
474
+
475
+ post {
476
+ always {
477
+ deleteDir()
478
+ }
479
+ success {
480
+ slackSend (color: '#00FF00', message: "SUCCESSFUL: Job '${env.JOB_NAME}' BUILD NUMBER: '${env.BUILD_NUMBER}' Job success. click <${env.RUN_DISPLAY_URL}|here> to see the log.", channel: 'idestack-automation')
481
+ }
482
+ failure {
483
+ slackSend (color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME}' BUILD NUMBER: '${env.BUILD_NUMBER}' Job failed. click <${env.RUN_DISPLAY_URL}|here> to see the log.", channel: 'idestack-automation')
484
+ }
485
+ }
486
+ }
487
+
488
+ def getBuildCommand() {
489
+ if (params.ENV_CHOICE == 'mobileBuild') {
490
+ return 'build:auto'
491
+ }
492
+ if (params.ENV_CHOICE == 'mobilePreview') {
493
+ return 'build:preview:' + params.MOBILE_CHOICE
494
+ }
495
+ if (params.ENV_CHOICE == 'mobilePreviewLocal') {
496
+ return 'build:previewLocal:' + params.MOBILE_CHOICE
497
+ }
498
+ if (params.ENV_CHOICE == 'mobilePreviewSubmit') {
499
+ return 'build:previewSubmit:' + params.MOBILE_CHOICE
500
+ }
501
+ if (params.ENV_CHOICE == 'mobileProd') {
502
+ return 'build:prod:' + params.MOBILE_CHOICE
503
+ }
504
+ if (params.ENV_CHOICE == 'mobileProdSubmit') {
505
+ return 'build:prodSubmit:' + params.MOBILE_CHOICE
506
+ }
507
+ if (params.ENABLE_DEBUG.toBoolean()) {
508
+ return 'build:debug'
509
+ } else {
510
+ return 'build'
511
+ }
512
+ }
513
+
514
+ def getGitPrBranchName() {
515
+ if (env.ghprbSourceBranch) {
516
+ return env.ghprbSourceBranch
517
+ } else {
518
+ return params.REPOSITORY_BRANCH
519
+ }
520
+ }
521
+
522
+ def getGitBranchName() {
523
+ if (env.ghprbSourceBranch) {
524
+ return env.ghprbSourceBranch
525
+ } else {
526
+ return params.REPOSITORY_BRANCH
527
+ }
528
+ }
529
+
530
+ @NonCPS
531
+ //TODO: Fix below get method for Jenkins slave if possible.
532
+ def getDirs1(path) {
533
+ def currentDir = new File(path)
534
+ def dirs = []
535
+ currentDir.eachDir() {
536
+ dirs << it.name
537
+ }
538
+ return dirs
539
+ }
540
+
541
+ // Below function to work in Jenkins slave
542
+ def getDirs(path) {
543
+ def currentDir = sh(script: "ls -CF " + path + " | tr '/' ' '", returnStdout: true)
544
+ def dirs = []
545
+ (currentDir.split()).each {
546
+ dirs << "${it}"
547
+ }
548
+ return dirs
549
+ }
550
+
551
+ def generateStage(server, environmentType) {
552
+ return {
553
+ stage("stage: ${server}") {
554
+ echo "This is ${server}."
555
+ def filterExist = "${server}".contains(params.EXCLUDE_SETTING_NAMESPACE_FILTER)
556
+ def namespace = filterExist ? '' : "--namespace=${env.NAMESPACE}"
557
+ def name = getName(pwd() + "${params.DEPLOYMENT_PATH}/${server}/package.json")
558
+ def version = getVersion(pwd() + params.DEPLOYMENT_PATH + "/${server}/package.json")
559
+ def valuesFile = "values-${environmentType}.yaml"
560
+ // deploy anything matching `*backend-server` or `*frontend-server` to use idestack chart
561
+ try {
562
+ if ("${server}".endsWith("backend-server") | "${server}".endsWith("frontend-server")) {
563
+ echo "add deployment flag to - ${server} "
564
+
565
+ if ("${server}".endsWith("frontend-server")) {
566
+ deployment_flag = " --set backend.enabled='false' --set external.enabled='true'"
567
+ }
568
+
569
+ if ("${server}".endsWith("backend-server")) {
570
+ deployment_flag = " --set frontend.enabled='false' --set external.enabled='false' --set ingress.enabled=false "
571
+ }
572
+
573
+ sh """
574
+ helm upgrade -i \
575
+ ${server} \
576
+ -f "${valuesFile}" \
577
+ ${namespace} \
578
+ ${deployment_flag} \
579
+ --set frontend.image="${REPOSITORY_SERVER}/${name}" \
580
+ --set frontend.imageTag=${version} \
581
+ --set backend.image="${REPOSITORY_SERVER}/${name}" \
582
+ --set backend.imageTag=${version} \
583
+ --set settings.workspaceId="${WORKSPACE_ID}" \
584
+ --set frontend.pullPolicy=Always \
585
+ --set backend.pullPolicy=Always \
586
+ --set VERSION=${VERSION} \
587
+ --version=${IDESTACK_CHART_VERSION} \
588
+ kube-orchestration/idestack
589
+ """
590
+ } else {
591
+ sh """
592
+ cd .${params.DEPLOYMENT_PATH}/${server}
593
+ helm dependency update charts/chart/
594
+ helm upgrade -i \
595
+ ${server}-api \
596
+ -f "charts/chart/${valuesFile}" \
597
+ ${namespace} \
598
+ --set global.image.repository=${REPOSITORY_SERVER}/${name} \
599
+ --set global.image.tag=${version} \
600
+ --set VERSION=${VERSION} \
601
+ charts/chart
602
+ """
603
+ }
604
+ } catch (Exception err) {
605
+ slackSend (color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME}' BUILD NUMBER: '${env.BUILD_NUMBER}' Job failed in stage deployment ${server}. click <${env.RUN_DISPLAY_URL}|here> to see the log. Error: ${err.toString()}", channel: 'idestack-automation')
606
+ println err
607
+ throw(err)
608
+ }
609
+ }
610
+ }
611
+ }
612
+
613
+ // Docker build parllel loop
614
+ def generateBuildStage(server) {
615
+ return {
616
+ stage("stage: ${server}") {
617
+ try {
618
+ echo "This is ${server}."
619
+ def name = getName(pwd() + params.DEPLOYMENT_PATH + "/${server}/package.json")
620
+ def version = getVersion(pwd() + params.DEPLOYMENT_PATH + "/${server}/package.json")
621
+
622
+ buildAndPushDockerImage(server, name, version)
623
+ } catch (e) {
624
+ slackSend(color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME}' BUILD NUMBER: '${env.BUILD_NUMBER}' Job failed in stage docker-build ${server}. click <${env.RUN_DISPLAY_URL}|here> to see the log. Error: ${e}", channel: 'idestack-automation')
625
+ throw(e)
626
+ }
627
+ }
628
+ }
629
+ }
630
+
631
+ def runBuildStage(server) {
632
+ try {
633
+ echo "This is ${server}."
634
+ def name = getName(pwd() + params.DEPLOYMENT_PATH + "/${server}/package.json")
635
+ def version = getVersion(pwd() + params.DEPLOYMENT_PATH + "/${server}/package.json")
636
+
637
+ buildAndPushDockerImage(server, name, version)
638
+ } catch (e) {
639
+ slackSend(color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME}' BUILD NUMBER: '${env.BUILD_NUMBER}' Job failed in stage docker-build ${server}. click <${env.RUN_DISPLAY_URL}|here> to see the log. Error: ${e}", channel: 'idestack-automation')
640
+ throw(e)
641
+ }
642
+ }
643
+
644
+ def buildAndPushDockerImage(server, name, version) {
645
+ def imageExists = sh(script: "docker manifest inspect ${REPOSITORY_SERVER}/${name}:${version} > /dev/null 2>&1 && echo 'true' || echo 'false'", returnStdout: true).trim()
646
+
647
+ if (imageExists == 'true') {
648
+ echo "Docker image ${REPOSITORY_SERVER}/${name}:${version} already exists. Skipping build."
649
+ } else {
650
+ sh """
651
+ lerna exec --scope=*${server} ${params.BUILD_STRATEGY} run docker:${env.BUILD_COMMAND};
652
+ docker tag ${name}:${version} ${REPOSITORY_SERVER}/${name}:${version}
653
+ docker push ${REPOSITORY_SERVER}/${name}:${version}
654
+ docker rmi ${REPOSITORY_SERVER}/${name}:${version}
655
+ """
656
+ }
657
+ }
658
+
659
+ import groovy.json.JsonSlurper
660
+ def getVersion(json_file_path) {
661
+ def inputFile = readFile(json_file_path)
662
+ def InputJSON = new JsonSlurper().parseText(inputFile)
663
+ def version = InputJSON.version
664
+ return version
665
+ }
666
+
667
+ def getName(json_file_path) {
668
+ def inputFile = readFile(json_file_path)
669
+ def InputJSON = new JsonSlurper().parseText(inputFile)
670
+ def name = InputJSON.name
671
+ return name
672
+ }
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2017 CDMBase LLC.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.