projen 0.48.0 → 0.49.2

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 (297) hide show
  1. package/.jsii +6276 -1413
  2. package/.prettierignore +1 -0
  3. package/.prettierrc.json +3 -0
  4. package/API.md +1111 -41
  5. package/changelog.md +2 -8
  6. package/docs/gitlab.md +67 -0
  7. package/lib/_resolve.d.ts +1 -1
  8. package/lib/_resolve.js +5 -7
  9. package/lib/awscdk/auto-discover.d.ts +4 -4
  10. package/lib/awscdk/auto-discover.js +2 -2
  11. package/lib/awscdk/{java-app.d.ts → awscdk-app-java.d.ts} +13 -30
  12. package/lib/awscdk/awscdk-app-java.js +91 -0
  13. package/lib/awscdk/awscdk-app-ts.d.ts +5 -5
  14. package/lib/awscdk/awscdk-app-ts.js +35 -34
  15. package/lib/awscdk/awscdk-construct.d.ts +3 -3
  16. package/lib/awscdk/awscdk-construct.js +12 -10
  17. package/lib/awscdk/awscdk-deps-java.d.ts +14 -0
  18. package/lib/awscdk/awscdk-deps-java.js +30 -0
  19. package/lib/awscdk/awscdk-deps-js.d.ts +14 -0
  20. package/lib/awscdk/awscdk-deps-js.js +31 -0
  21. package/lib/awscdk/awscdk-deps.d.ts +59 -11
  22. package/lib/awscdk/awscdk-deps.js +27 -23
  23. package/lib/awscdk/cdk-config.d.ts +3 -3
  24. package/lib/awscdk/cdk-config.js +5 -5
  25. package/lib/awscdk/cdk-tasks.d.ts +3 -3
  26. package/lib/awscdk/cdk-tasks.js +21 -20
  27. package/lib/awscdk/index.d.ts +11 -9
  28. package/lib/awscdk/index.js +4 -2
  29. package/lib/awscdk/integration-test.d.ts +4 -4
  30. package/lib/awscdk/integration-test.js +15 -13
  31. package/lib/awscdk/internal.js +16 -16
  32. package/lib/awscdk/lambda-function.d.ts +4 -4
  33. package/lib/awscdk/lambda-function.js +29 -29
  34. package/lib/build/build-workflow.d.ts +5 -5
  35. package/lib/build/build-workflow.js +36 -30
  36. package/lib/build/index.d.ts +1 -1
  37. package/lib/build/index.js +1 -1
  38. package/lib/builtin-example.task.js +3 -3
  39. package/lib/cdk/construct-lib.d.ts +1 -1
  40. package/lib/cdk/construct-lib.js +4 -4
  41. package/lib/cdk/consts.d.ts +2 -2
  42. package/lib/cdk/consts.js +5 -5
  43. package/lib/cdk/index.d.ts +3 -3
  44. package/lib/cdk/index.js +1 -1
  45. package/lib/cdk/jsii-docgen.d.ts +1 -1
  46. package/lib/cdk/jsii-docgen.js +7 -7
  47. package/lib/cdk/jsii-project.d.ts +3 -3
  48. package/lib/cdk/jsii-project.js +39 -39
  49. package/lib/cdk8s/cdk8s-app-ts.d.ts +1 -1
  50. package/lib/cdk8s/cdk8s-app-ts.js +28 -21
  51. package/lib/cdk8s/cdk8s-construct.d.ts +1 -1
  52. package/lib/cdk8s/cdk8s-construct.js +10 -6
  53. package/lib/cdk8s/index.d.ts +2 -2
  54. package/lib/cdk8s/index.js +1 -1
  55. package/lib/cdktf/cdktf-construct.d.ts +1 -1
  56. package/lib/cdktf/cdktf-construct.js +4 -4
  57. package/lib/cdktf/index.d.ts +1 -1
  58. package/lib/cdktf/index.js +1 -1
  59. package/lib/cleanup.js +20 -14
  60. package/lib/cli/cmds/new.js +71 -42
  61. package/lib/cli/index.js +27 -10
  62. package/lib/cli/macros.js +15 -11
  63. package/lib/cli/synth.d.ts +1 -1
  64. package/lib/cli/synth.js +15 -12
  65. package/lib/cli/tasks.d.ts +2 -2
  66. package/lib/cli/tasks.js +9 -6
  67. package/lib/cli/util.js +4 -4
  68. package/lib/clobber.d.ts +2 -2
  69. package/lib/clobber.js +14 -10
  70. package/lib/common.js +7 -9
  71. package/lib/component.d.ts +1 -1
  72. package/lib/component.js +2 -2
  73. package/lib/dependencies.d.ts +2 -2
  74. package/lib/dependencies.js +14 -12
  75. package/lib/dev-env.d.ts +1 -1
  76. package/lib/dev-env.js +2 -2
  77. package/lib/docker-compose.d.ts +2 -2
  78. package/lib/docker-compose.js +23 -19
  79. package/lib/file.d.ts +2 -2
  80. package/lib/file.js +7 -5
  81. package/lib/gitattributes.d.ts +2 -2
  82. package/lib/gitattributes.js +7 -8
  83. package/lib/github/auto-approve.d.ts +2 -2
  84. package/lib/github/auto-approve.js +25 -15
  85. package/lib/github/auto-merge.d.ts +2 -2
  86. package/lib/github/auto-merge.js +14 -14
  87. package/lib/github/constants.d.ts +1 -1
  88. package/lib/github/constants.js +4 -4
  89. package/lib/github/dependabot.d.ts +2 -2
  90. package/lib/github/dependabot.js +16 -14
  91. package/lib/github/github-project.d.ts +5 -5
  92. package/lib/github/github-project.js +14 -10
  93. package/lib/github/github.d.ts +7 -7
  94. package/lib/github/github.js +7 -5
  95. package/lib/github/index.d.ts +13 -13
  96. package/lib/github/index.js +1 -1
  97. package/lib/github/mergify.d.ts +2 -2
  98. package/lib/github/mergify.js +3 -3
  99. package/lib/github/pr-template.d.ts +2 -2
  100. package/lib/github/pr-template.js +5 -5
  101. package/lib/github/pull-request-lint.d.ts +2 -2
  102. package/lib/github/pull-request-lint.js +17 -14
  103. package/lib/github/stale-util.d.ts +1 -1
  104. package/lib/github/stale-util.js +2 -3
  105. package/lib/github/stale.d.ts +2 -2
  106. package/lib/github/stale.js +28 -20
  107. package/lib/github/task-workflow.d.ts +4 -4
  108. package/lib/github/task-workflow.js +12 -10
  109. package/lib/github/workflow-actions.d.ts +2 -2
  110. package/lib/github/workflow-actions.js +22 -20
  111. package/lib/github/workflows-model.d.ts +20 -20
  112. package/lib/github/workflows-model.js +1 -1
  113. package/lib/github/workflows.d.ts +4 -4
  114. package/lib/github/workflows.js +42 -27
  115. package/lib/gitlab/configuration-model.d.ts +1308 -0
  116. package/lib/gitlab/configuration-model.js +122 -0
  117. package/lib/gitlab/configuration.d.ts +260 -0
  118. package/lib/gitlab/configuration.js +296 -0
  119. package/lib/gitlab/gitlab-configuration.d.ts +30 -0
  120. package/lib/gitlab/gitlab-configuration.js +49 -0
  121. package/lib/gitlab/index.d.ts +4 -0
  122. package/lib/gitlab/index.js +17 -0
  123. package/lib/gitlab/nested-configuration.d.ts +26 -0
  124. package/lib/gitlab/nested-configuration.js +38 -0
  125. package/lib/gitpod.d.ts +4 -4
  126. package/lib/gitpod.js +12 -9
  127. package/lib/ignore-file.d.ts +2 -2
  128. package/lib/ignore-file.js +10 -13
  129. package/lib/index.d.ts +47 -46
  130. package/lib/index.js +2 -1
  131. package/lib/ini.d.ts +3 -3
  132. package/lib/ini.js +4 -4
  133. package/lib/inventory.d.ts +1 -1
  134. package/lib/inventory.js +34 -30
  135. package/lib/java/index.d.ts +7 -7
  136. package/lib/java/index.js +1 -1
  137. package/lib/java/java-project.d.ts +7 -6
  138. package/lib/java/java-project.js +11 -13
  139. package/lib/java/junit.d.ts +3 -3
  140. package/lib/java/junit.js +17 -17
  141. package/lib/java/maven-compile.d.ts +3 -3
  142. package/lib/java/maven-compile.js +7 -7
  143. package/lib/java/maven-packaging.d.ts +3 -3
  144. package/lib/java/maven-packaging.js +12 -16
  145. package/lib/java/maven-sample.d.ts +2 -2
  146. package/lib/java/maven-sample.js +12 -12
  147. package/lib/java/pom.d.ts +2 -2
  148. package/lib/java/pom.js +16 -14
  149. package/lib/java/projenrc.d.ts +3 -3
  150. package/lib/java/projenrc.js +35 -25
  151. package/lib/javascript/bundler.d.ts +3 -3
  152. package/lib/javascript/bundler.js +14 -12
  153. package/lib/javascript/eslint.d.ts +4 -3
  154. package/lib/javascript/eslint.js +102 -86
  155. package/lib/javascript/index.d.ts +10 -10
  156. package/lib/javascript/index.js +1 -1
  157. package/lib/javascript/jest.d.ts +4 -4
  158. package/lib/javascript/jest.js +48 -37
  159. package/lib/javascript/node-package.d.ts +9 -2
  160. package/lib/javascript/node-package.js +111 -81
  161. package/lib/javascript/node-project.d.ts +11 -11
  162. package/lib/javascript/node-project.js +78 -52
  163. package/lib/javascript/npm-config.d.ts +2 -2
  164. package/lib/javascript/npm-config.js +4 -4
  165. package/lib/javascript/prettier.d.ts +4 -4
  166. package/lib/javascript/prettier.js +5 -5
  167. package/lib/javascript/projenrc.d.ts +2 -2
  168. package/lib/javascript/projenrc.js +8 -8
  169. package/lib/javascript/render-options.d.ts +2 -2
  170. package/lib/javascript/render-options.js +23 -18
  171. package/lib/javascript/typescript-config.d.ts +2 -2
  172. package/lib/javascript/typescript-config.js +5 -5
  173. package/lib/javascript/upgrade-dependencies.d.ts +4 -4
  174. package/lib/javascript/upgrade-dependencies.js +67 -53
  175. package/lib/javascript/util.js +2 -2
  176. package/lib/json.d.ts +3 -3
  177. package/lib/json.js +4 -4
  178. package/lib/license.d.ts +2 -2
  179. package/lib/license.js +7 -7
  180. package/lib/logger.d.ts +2 -2
  181. package/lib/logger.js +14 -9
  182. package/lib/logging.js +2 -2
  183. package/lib/makefile.d.ts +2 -2
  184. package/lib/makefile.js +12 -15
  185. package/lib/object-file.d.ts +2 -2
  186. package/lib/object-file.js +9 -7
  187. package/lib/option-hints.js +1 -1
  188. package/lib/project-build.d.ts +3 -3
  189. package/lib/project-build.js +14 -14
  190. package/lib/project.d.ts +14 -14
  191. package/lib/project.js +41 -23
  192. package/lib/projects.d.ts +1 -1
  193. package/lib/projects.js +10 -11
  194. package/lib/projenrc-json.d.ts +2 -2
  195. package/lib/projenrc-json.js +5 -5
  196. package/lib/python/index.d.ts +13 -13
  197. package/lib/python/index.js +1 -1
  198. package/lib/python/pip.d.ts +4 -4
  199. package/lib/python/pip.js +16 -12
  200. package/lib/python/poetry.d.ts +7 -7
  201. package/lib/python/poetry.js +41 -33
  202. package/lib/python/projenrc.d.ts +2 -2
  203. package/lib/python/projenrc.js +24 -21
  204. package/lib/python/pytest.d.ts +2 -2
  205. package/lib/python/pytest.js +19 -19
  206. package/lib/python/python-deps.d.ts +2 -2
  207. package/lib/python/python-deps.js +1 -1
  208. package/lib/python/python-packaging.d.ts +2 -2
  209. package/lib/python/python-packaging.js +1 -1
  210. package/lib/python/python-project.d.ts +7 -7
  211. package/lib/python/python-project.js +14 -13
  212. package/lib/python/python-sample.d.ts +2 -2
  213. package/lib/python/python-sample.js +17 -17
  214. package/lib/python/requirements-file.d.ts +3 -3
  215. package/lib/python/requirements-file.js +7 -8
  216. package/lib/python/setuppy.d.ts +2 -2
  217. package/lib/python/setuppy.js +23 -23
  218. package/lib/python/setuptools.d.ts +4 -4
  219. package/lib/python/setuptools.js +11 -11
  220. package/lib/python/venv.d.ts +3 -3
  221. package/lib/python/venv.js +6 -6
  222. package/lib/readme.d.ts +2 -2
  223. package/lib/readme.js +5 -3
  224. package/lib/release/bump-version.d.ts +1 -1
  225. package/lib/release/bump-version.js +37 -26
  226. package/lib/release/bump-version.task.js +7 -7
  227. package/lib/release/index.d.ts +3 -3
  228. package/lib/release/index.js +1 -1
  229. package/lib/release/publisher.d.ts +4 -4
  230. package/lib/release/publisher.js +93 -78
  231. package/lib/release/release-trigger.js +3 -3
  232. package/lib/release/release.d.ts +6 -6
  233. package/lib/release/release.js +37 -23
  234. package/lib/release/reset-version.task.js +4 -4
  235. package/lib/release/tag-version.js +1 -1
  236. package/lib/release/tag-version.task.js +3 -3
  237. package/lib/release/update-changelog.js +6 -4
  238. package/lib/release/update-changelog.task.js +4 -4
  239. package/lib/run-projenrc-json.task.js +5 -5
  240. package/lib/sample-file.d.ts +2 -2
  241. package/lib/sample-file.js +8 -8
  242. package/lib/semver.js +17 -7
  243. package/lib/source-code.d.ts +2 -2
  244. package/lib/source-code.js +5 -5
  245. package/lib/task-model.js +1 -1
  246. package/lib/task-runtime.d.ts +1 -1
  247. package/lib/task-runtime.js +27 -27
  248. package/lib/task.d.ts +1 -1
  249. package/lib/task.js +2 -2
  250. package/lib/tasks.d.ts +3 -3
  251. package/lib/tasks.js +5 -5
  252. package/lib/testing.d.ts +1 -1
  253. package/lib/testing.js +2 -2
  254. package/lib/textfile.d.ts +2 -2
  255. package/lib/textfile.js +3 -3
  256. package/lib/toml.d.ts +3 -3
  257. package/lib/toml.js +4 -4
  258. package/lib/typescript/index.d.ts +3 -3
  259. package/lib/typescript/index.js +1 -1
  260. package/lib/typescript/projenrc.d.ts +2 -2
  261. package/lib/typescript/projenrc.js +10 -10
  262. package/lib/typescript/typescript-typedoc.d.ts +1 -1
  263. package/lib/typescript/typescript-typedoc.js +4 -4
  264. package/lib/typescript/typescript.d.ts +3 -3
  265. package/lib/typescript/typescript.js +59 -62
  266. package/lib/util/semver.js +33 -33
  267. package/lib/util/synth.d.ts +1 -1
  268. package/lib/util/synth.js +15 -12
  269. package/lib/util.js +39 -32
  270. package/lib/version.d.ts +3 -3
  271. package/lib/version.js +12 -12
  272. package/lib/vscode/devcontainer.d.ts +4 -4
  273. package/lib/vscode/devcontainer.js +13 -8
  274. package/lib/vscode/index.d.ts +3 -3
  275. package/lib/vscode/index.js +1 -1
  276. package/lib/vscode/launch-config.d.ts +2 -2
  277. package/lib/vscode/launch-config.js +4 -4
  278. package/lib/vscode/vscode.d.ts +3 -3
  279. package/lib/vscode/vscode.js +2 -2
  280. package/lib/web/index.d.ts +4 -4
  281. package/lib/web/index.js +1 -1
  282. package/lib/web/next.d.ts +3 -3
  283. package/lib/web/next.js +241 -237
  284. package/lib/web/postcss.d.ts +3 -3
  285. package/lib/web/postcss.js +9 -6
  286. package/lib/web/react.d.ts +4 -4
  287. package/lib/web/react.js +172 -177
  288. package/lib/web/tailwind.d.ts +2 -2
  289. package/lib/web/tailwind.js +3 -3
  290. package/lib/xmlfile.d.ts +3 -3
  291. package/lib/xmlfile.js +5 -5
  292. package/lib/yaml.d.ts +3 -3
  293. package/lib/yaml.js +4 -4
  294. package/package.json +4 -1
  295. package/releasetag.txt +1 -1
  296. package/version.txt +1 -1
  297. package/lib/awscdk/java-app.js +0 -90
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CiConfiguration = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const path = require("path");
7
+ const case_1 = require("case");
8
+ const component_1 = require("../component");
9
+ const yaml_1 = require("../yaml");
10
+ /**
11
+ * (experimental) CI for GitLab.
12
+ *
13
+ * A CI is a configurable automated process made up of one or more stages/jobs.
14
+ *
15
+ * @see https://docs.gitlab.com/ee/ci/yaml/
16
+ * @experimental
17
+ */
18
+ class CiConfiguration extends component_1.Component {
19
+ /**
20
+ * @experimental
21
+ */
22
+ constructor(project, name, options) {
23
+ var _b;
24
+ super(project);
25
+ /**
26
+ * (experimental) Defines default scripts that should run *after* all jobs.
27
+ *
28
+ * Can be overriden by the job level `afterScript`.
29
+ *
30
+ * @experimental
31
+ */
32
+ this.defaultAfterScript = [];
33
+ /**
34
+ * (experimental) Defines default scripts that should run *before* all jobs.
35
+ *
36
+ * Can be overriden by the job level `afterScript`.
37
+ *
38
+ * @experimental
39
+ */
40
+ this.defaultBeforeScript = [];
41
+ /**
42
+ * A default list of additional Docker images to run scripts in. The service image is linked to the image specified in the image parameter.
43
+ */
44
+ this.defaultServices = [];
45
+ /**
46
+ * (experimental) Used to select a specific runner from the list of all runners that are available for the project.
47
+ *
48
+ * @experimental
49
+ */
50
+ this.defaultTags = [];
51
+ /**
52
+ * Can be `Include` or `Include[]`. Each `Include` will be a string, or an
53
+ * object with properties for the method if including external YAML file. The external
54
+ * content will be fetched, included and evaluated along the `.gitlab-ci.yml`.
55
+ */
56
+ this.include = [];
57
+ /**
58
+ * (experimental) Groups jobs into stages.
59
+ *
60
+ * All jobs in one stage must complete before next stage is
61
+ * executed. Defaults to ['build', 'test', 'deploy'].
62
+ *
63
+ * @experimental
64
+ */
65
+ this.stages = [];
66
+ /**
67
+ * (experimental) Global variables that are passed to jobs.
68
+ *
69
+ * If the job already has that variable defined, the job-level variable takes precedence.
70
+ *
71
+ * @experimental
72
+ */
73
+ this.variables = {};
74
+ /**
75
+ * (experimental) The jobs in the CI configuration.
76
+ *
77
+ * @experimental
78
+ */
79
+ this.jobs = {};
80
+ this.project = project;
81
+ this.name = path.parse(name).name;
82
+ this.path =
83
+ this.name === "gitlab-ci"
84
+ ? ".gitlab-ci.yml"
85
+ : `.gitlab/ci-templates/${name.toLocaleLowerCase()}.yml`;
86
+ this.file = new yaml_1.YamlFile(this.project, this.path, {
87
+ obj: () => this.renderCI(),
88
+ });
89
+ const defaults = options === null || options === void 0 ? void 0 : options.default;
90
+ if (defaults) {
91
+ this.defaultAfterScript.push(...((_b = defaults.afterScript) !== null && _b !== void 0 ? _b : []));
92
+ this.defaultArtifacts = defaults.artifacts;
93
+ defaults.beforeScript &&
94
+ this.defaultBeforeScript.push(...defaults.beforeScript);
95
+ this.defaultCache = defaults.cache;
96
+ this.defaultImage = defaults.image;
97
+ this.defaultInterruptible = defaults.interruptible;
98
+ this.defaultRetry = defaults.retry;
99
+ defaults.services && this.addServices(...defaults.services);
100
+ defaults.tags && this.defaultTags.push(...defaults.tags);
101
+ this.defaultTimeout = defaults.timeout;
102
+ }
103
+ this.pages = options === null || options === void 0 ? void 0 : options.pages;
104
+ this.workflow = options === null || options === void 0 ? void 0 : options.workflow;
105
+ if (options === null || options === void 0 ? void 0 : options.stages) {
106
+ this.addStages(...options.stages);
107
+ }
108
+ if (options === null || options === void 0 ? void 0 : options.variables) {
109
+ this.addJobs(options.variables);
110
+ }
111
+ if (options === null || options === void 0 ? void 0 : options.jobs) {
112
+ this.addJobs(options.jobs);
113
+ }
114
+ }
115
+ /**
116
+ * (experimental) Add additional yml/yaml files to the CI includes.
117
+ *
118
+ * @param includes The includes to add.
119
+ * @experimental
120
+ */
121
+ addIncludes(...includes) {
122
+ for (const additional of includes) {
123
+ this.assertIsValidInclude(additional);
124
+ for (const existing of this.include) {
125
+ if (this.areEqualIncludes(existing, additional)) {
126
+ throw new Error(`${this.name}: GitLab CI ${existing} already contains one or more templates specified in ${additional}.`);
127
+ }
128
+ }
129
+ this.include.push(additional);
130
+ }
131
+ }
132
+ /**
133
+ * Throw an error if the provided Include is invalid.
134
+ * @see https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/config/external/mapper.rb
135
+ * @param include the Include to validate.
136
+ */
137
+ assertIsValidInclude(include) {
138
+ const combos = [
139
+ include.local,
140
+ include.file && include.project,
141
+ include.remote,
142
+ include.template,
143
+ ];
144
+ const len = combos.filter((x) => Boolean(x)).length;
145
+ if (len !== 1) {
146
+ throw new Error(`${this.name}: GitLab CI include ${include} contains ${len} property combination(s).
147
+ A valid include configuration specifies *one* of the following property combinations.
148
+ * local
149
+ * file, project
150
+ * remote
151
+ * template
152
+ `);
153
+ }
154
+ }
155
+ /**
156
+ * Check if the equality of Includes.
157
+ * @see https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/config/external/mapper.rb
158
+ * @param x First include to compare.
159
+ * @param y Second include to compare.
160
+ * @returns Whether the includes are equal.
161
+ */
162
+ areEqualIncludes(x, y) {
163
+ if (x.local === y.local && x.local !== undefined) {
164
+ return true;
165
+ }
166
+ else if (x.template === y.template && x.template !== undefined) {
167
+ return true;
168
+ }
169
+ else if (x.remote === y.remote && x.remote !== undefined) {
170
+ return true;
171
+ }
172
+ else if (x.project === y.project && x.ref === y.ref) {
173
+ const xFiles = x.file ? x.file : [];
174
+ const yFiles = y.file ? y.file : [];
175
+ const allFiles = xFiles.concat(yFiles);
176
+ return new Set(allFiles).size !== allFiles.length;
177
+ }
178
+ return false;
179
+ }
180
+ /**
181
+ * (experimental) Add additional services.
182
+ *
183
+ * @param services The services to add.
184
+ * @experimental
185
+ */
186
+ addServices(...services) {
187
+ for (const additional of services) {
188
+ for (const existing of this.defaultServices) {
189
+ if (additional.name === existing.name &&
190
+ additional.alias === existing.alias) {
191
+ throw new Error(`${this.name}: GitLab CI already contains service ${additional}.`);
192
+ }
193
+ }
194
+ this.defaultServices.push(additional);
195
+ }
196
+ }
197
+ /**
198
+ * (experimental) Add a globally defined variable to the CI configuration.
199
+ *
200
+ * @param variables The variables to add.
201
+ * @experimental
202
+ */
203
+ addGlobalVariables(variables) {
204
+ for (const [key, value] of Object.entries(variables)) {
205
+ if (this.variables[key] !== undefined) {
206
+ throw new Error(`${this.name}: GitLab CI already contains variable ${key}.`);
207
+ }
208
+ this.variables[key] = value;
209
+ }
210
+ }
211
+ /**
212
+ * (experimental) Add stages to the CI configuration if not already present.
213
+ *
214
+ * @param stages stages to add.
215
+ * @experimental
216
+ */
217
+ addStages(...stages) {
218
+ for (const stage of stages) {
219
+ if (!this.stages.includes(stage)) {
220
+ this.stages.push(stage);
221
+ }
222
+ }
223
+ }
224
+ /**
225
+ * (experimental) Add jobs and their stages to the CI configuration.
226
+ *
227
+ * @param jobs Jobs to add.
228
+ * @experimental
229
+ */
230
+ addJobs(jobs) {
231
+ for (const [key, value] of Object.entries(jobs)) {
232
+ if (this.jobs[key] !== undefined) {
233
+ throw new Error(`${this.name}: GitLab CI already contains job ${key}.`);
234
+ }
235
+ this.jobs[key] = value;
236
+ if (value.stage) {
237
+ this.addStages(value.stage);
238
+ }
239
+ }
240
+ }
241
+ renderCI() {
242
+ return {
243
+ default: this.renderDefault(),
244
+ include: this.include.length > 0 ? snakeCaseKeys(this.include) : undefined,
245
+ pages: snakeCaseKeys(this.pages),
246
+ services: this.defaultServices.length > 0
247
+ ? snakeCaseKeys(this.defaultServices)
248
+ : undefined,
249
+ variables: Object.entries(this.variables).length > 0 ? this.variables : undefined,
250
+ workflow: snakeCaseKeys(this.workflow),
251
+ stages: this.stages.length > 0 ? this.stages : undefined,
252
+ ...snakeCaseKeys(this.jobs),
253
+ };
254
+ }
255
+ renderDefault() {
256
+ const defaults = {
257
+ afterScript: this.defaultAfterScript.length > 0
258
+ ? this.defaultAfterScript
259
+ : undefined,
260
+ artifacts: this.defaultArtifacts,
261
+ beforeScript: this.defaultBeforeScript.length > 0
262
+ ? this.defaultBeforeScript
263
+ : undefined,
264
+ cache: this.defaultCache,
265
+ image: this.defaultImage,
266
+ interruptible: this.defaultInterruptible,
267
+ retry: this.defaultRetry,
268
+ services: this.defaultServices.length > 0 ? this.defaultServices : undefined,
269
+ tags: this.defaultTags.length > 0 ? this.defaultTags : undefined,
270
+ timeout: this.defaultTimeout,
271
+ };
272
+ return Object.values(defaults).filter((x) => x).length
273
+ ? snakeCaseKeys(defaults)
274
+ : undefined;
275
+ }
276
+ }
277
+ exports.CiConfiguration = CiConfiguration;
278
+ _a = JSII_RTTI_SYMBOL_1;
279
+ CiConfiguration[_a] = { fqn: "projen.gitlab.CiConfiguration", version: "0.49.2" };
280
+ function snakeCaseKeys(obj) {
281
+ if (typeof obj !== "object" || obj == null) {
282
+ return obj;
283
+ }
284
+ if (Array.isArray(obj)) {
285
+ return obj.map(snakeCaseKeys);
286
+ }
287
+ const result = {};
288
+ for (let [k, v] of Object.entries(obj)) {
289
+ if (typeof v === "object" && v != null) {
290
+ v = snakeCaseKeys(v);
291
+ }
292
+ result[case_1.snake(k)] = v;
293
+ }
294
+ return result;
295
+ }
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naXRsYWIvY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBNkI7QUFDN0IsNENBQXlDO0FBRXpDLGtDQUFtQzs7Ozs7Ozs7O0FBK0JuQyxNQUFhLGVBQWdCLFNBQVEscUJBQVM7Ozs7SUFpRDVDLFlBQ0UsT0FBZ0IsRUFDaEIsSUFBWSxFQUNaLE9BQWdDOztRQUVoQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Ozs7Ozs7O1FBNUNELHVCQUFrQixHQUFhLEVBQUUsQ0FBQzs7Ozs7Ozs7UUFJbEMsd0JBQW1CLEdBQWEsRUFBRSxDQUFDO1FBU25EOztXQUVHO1FBQ0ssb0JBQWUsR0FBYyxFQUFFLENBQUM7Ozs7OztRQUUvQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUdwQzs7OztXQUlHO1FBQ0ssWUFBTyxHQUFjLEVBQUUsQ0FBQzs7Ozs7Ozs7O1FBSWhCLFdBQU0sR0FBYSxFQUFFLENBQUM7Ozs7Ozs7O1FBRXRCLGNBQVMsR0FDdkIsRUFBRSxDQUFDOzs7Ozs7UUFJVyxTQUFJLEdBQXdCLEVBQUUsQ0FBQztRQVE3QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJO1lBQ1AsSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXO2dCQUN2QixDQUFDLENBQUMsZ0JBQWdCO2dCQUNsQixDQUFDLENBQUMsd0JBQXdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGVBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDaEQsR0FB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QyxjQUFjO1NBQzdCLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3BELENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQzs7QUF2UEgsMENBd1BDOzs7QUFFRCxTQUFTLGFBQWEsQ0FBYyxHQUFNO0lBQ3hDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDMUMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFRLENBQUM7S0FDdEM7SUFFRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBQzNDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDdEMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QjtRQUNELE1BQU0sQ0FBQyxZQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDdEI7SUFDRCxPQUFPLE1BQWEsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgc25ha2UgfSBmcm9tIFwiY2FzZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBZYW1sRmlsZSB9IGZyb20gXCIuLi95YW1sXCI7XG5pbXBvcnQge1xuICBBcnRpZmFjdHMsXG4gIENhY2hlLFxuICBEZWZhdWx0LFxuICBJbWFnZSxcbiAgSW5jbHVkZSxcbiAgSm9iLFxuICBSZXRyeSxcbiAgU2VydmljZSxcbiAgVmFyaWFibGVDb25maWcsXG4gIFdvcmtmbG93LFxufSBmcm9tIFwiLi9jb25maWd1cmF0aW9uLW1vZGVsXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIENpQ29uZmlndXJhdGlvbk9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGVmYXVsdD86IERlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBwYWdlcz86IEpvYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB3b3JrZmxvdz86IFdvcmtmbG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc3RhZ2VzPzogc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGpvYnM/OiBSZWNvcmQ8c3RyaW5nLCBKb2I+O1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIENpQ29uZmlndXJhdGlvbiBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBQcm9qZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IFlhbWxGaWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0QWZ0ZXJTY3JpcHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdEFydGlmYWN0cz86IEFydGlmYWN0cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRCZWZvcmVTY3JpcHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRDYWNoZT86IENhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0SW1hZ2U/OiBJbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0SW50ZXJydXB0aWJsZT86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSZXRyeT86IFJldHJ5O1xuICAvKipcbiAgICogQSBkZWZhdWx0IGxpc3Qgb2YgYWRkaXRpb25hbCBEb2NrZXIgaW1hZ2VzIHRvIHJ1biBzY3JpcHRzIGluLiBUaGUgc2VydmljZSBpbWFnZSBpcyBsaW5rZWQgdG8gdGhlIGltYWdlIHNwZWNpZmllZCBpbiB0aGUgIGltYWdlIHBhcmFtZXRlci5cbiAgICovXG4gIHByaXZhdGUgZGVmYXVsdFNlcnZpY2VzOiBTZXJ2aWNlW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkZWZhdWx0VGFnczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkZWZhdWx0VGltZW91dD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhbiBiZSBgSW5jbHVkZWAgb3IgYEluY2x1ZGVbXWAuIEVhY2ggYEluY2x1ZGVgIHdpbGwgYmUgYSBzdHJpbmcsIG9yIGFuXG4gICAqIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgZm9yIHRoZSBtZXRob2QgaWYgaW5jbHVkaW5nIGV4dGVybmFsIFlBTUwgZmlsZS4gVGhlIGV4dGVybmFsXG4gICAqIGNvbnRlbnQgd2lsbCBiZSBmZXRjaGVkLCBpbmNsdWRlZCBhbmQgZXZhbHVhdGVkIGFsb25nIHRoZSBgLmdpdGxhYi1jaS55bWxgLlxuICAgKi9cbiAgcHJpdmF0ZSBpbmNsdWRlOiBJbmNsdWRlW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBwYWdlcz86IEpvYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBWYXJpYWJsZUNvbmZpZyB8IHN0cmluZz4gPVxuICAgIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvdz86IFdvcmtmbG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGpvYnM6IFJlY29yZDxzdHJpbmcsIEpvYj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm9qZWN0OiBQcm9qZWN0LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ2lDb25maWd1cmF0aW9uT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgIHRoaXMubmFtZSA9IHBhdGgucGFyc2UobmFtZSkubmFtZTtcbiAgICB0aGlzLnBhdGggPVxuICAgICAgdGhpcy5uYW1lID09PSBcImdpdGxhYi1jaVwiXG4gICAgICAgID8gXCIuZ2l0bGFiLWNpLnltbFwiXG4gICAgICAgIDogYC5naXRsYWIvY2ktdGVtcGxhdGVzLyR7bmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpfS55bWxgO1xuICAgIHRoaXMuZmlsZSA9IG5ldyBZYW1sRmlsZSh0aGlzLnByb2plY3QsIHRoaXMucGF0aCwge1xuICAgICAgb2JqOiAoKSA9PiB0aGlzLnJlbmRlckNJKCksXG4gICAgfSk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSBvcHRpb25zPy5kZWZhdWx0O1xuICAgIGlmIChkZWZhdWx0cykge1xuICAgICAgdGhpcy5kZWZhdWx0QWZ0ZXJTY3JpcHQucHVzaCguLi4oZGVmYXVsdHMuYWZ0ZXJTY3JpcHQgPz8gW10pKTtcbiAgICAgIHRoaXMuZGVmYXVsdEFydGlmYWN0cyA9IGRlZmF1bHRzLmFydGlmYWN0cztcbiAgICAgIGRlZmF1bHRzLmJlZm9yZVNjcmlwdCAmJlxuICAgICAgICB0aGlzLmRlZmF1bHRCZWZvcmVTY3JpcHQucHVzaCguLi5kZWZhdWx0cy5iZWZvcmVTY3JpcHQpO1xuICAgICAgdGhpcy5kZWZhdWx0Q2FjaGUgPSBkZWZhdWx0cy5jYWNoZTtcbiAgICAgIHRoaXMuZGVmYXVsdEltYWdlID0gZGVmYXVsdHMuaW1hZ2U7XG4gICAgICB0aGlzLmRlZmF1bHRJbnRlcnJ1cHRpYmxlID0gZGVmYXVsdHMuaW50ZXJydXB0aWJsZTtcbiAgICAgIHRoaXMuZGVmYXVsdFJldHJ5ID0gZGVmYXVsdHMucmV0cnk7XG4gICAgICBkZWZhdWx0cy5zZXJ2aWNlcyAmJiB0aGlzLmFkZFNlcnZpY2VzKC4uLmRlZmF1bHRzLnNlcnZpY2VzKTtcbiAgICAgIGRlZmF1bHRzLnRhZ3MgJiYgdGhpcy5kZWZhdWx0VGFncy5wdXNoKC4uLmRlZmF1bHRzLnRhZ3MpO1xuICAgICAgdGhpcy5kZWZhdWx0VGltZW91dCA9IGRlZmF1bHRzLnRpbWVvdXQ7XG4gICAgfVxuICAgIHRoaXMucGFnZXMgPSBvcHRpb25zPy5wYWdlcztcbiAgICB0aGlzLndvcmtmbG93ID0gb3B0aW9ucz8ud29ya2Zsb3c7XG4gICAgaWYgKG9wdGlvbnM/LnN0YWdlcykge1xuICAgICAgdGhpcy5hZGRTdGFnZXMoLi4ub3B0aW9ucy5zdGFnZXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8udmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmFkZEpvYnMob3B0aW9ucy52YXJpYWJsZXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uam9icykge1xuICAgICAgdGhpcy5hZGRKb2JzKG9wdGlvbnMuam9icyk7XG4gICAgfVxuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRJbmNsdWRlcyguLi5pbmNsdWRlczogSW5jbHVkZVtdKSB7XG4gICAgZm9yIChjb25zdCBhZGRpdGlvbmFsIG9mIGluY2x1ZGVzKSB7XG4gICAgICB0aGlzLmFzc2VydElzVmFsaWRJbmNsdWRlKGFkZGl0aW9uYWwpO1xuICAgICAgZm9yIChjb25zdCBleGlzdGluZyBvZiB0aGlzLmluY2x1ZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxJbmNsdWRlcyhleGlzdGluZywgYWRkaXRpb25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHt0aGlzLm5hbWV9OiBHaXRMYWIgQ0kgJHtleGlzdGluZ30gYWxyZWFkeSBjb250YWlucyBvbmUgb3IgbW9yZSB0ZW1wbGF0ZXMgc3BlY2lmaWVkIGluICR7YWRkaXRpb25hbH0uYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaW5jbHVkZS5wdXNoKGFkZGl0aW9uYWwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgSW5jbHVkZSBpcyBpbnZhbGlkLlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0bGFiLmNvbS9naXRsYWItb3JnL2dpdGxhYi8tL2Jsb2IvbWFzdGVyL2xpYi9naXRsYWIvY2kvY29uZmlnL2V4dGVybmFsL21hcHBlci5yYlxuICAgKiBAcGFyYW0gaW5jbHVkZSB0aGUgSW5jbHVkZSB0byB2YWxpZGF0ZS5cbiAgICovXG4gIHByaXZhdGUgYXNzZXJ0SXNWYWxpZEluY2x1ZGUoaW5jbHVkZTogSW5jbHVkZSkge1xuICAgIGNvbnN0IGNvbWJvcyA9IFtcbiAgICAgIGluY2x1ZGUubG9jYWwsXG4gICAgICBpbmNsdWRlLmZpbGUgJiYgaW5jbHVkZS5wcm9qZWN0LFxuICAgICAgaW5jbHVkZS5yZW1vdGUsXG4gICAgICBpbmNsdWRlLnRlbXBsYXRlLFxuICAgIF07XG4gICAgY29uc3QgbGVuID0gY29tYm9zLmZpbHRlcigoeCkgPT4gQm9vbGVhbih4KSkubGVuZ3RoO1xuICAgIGlmIChsZW4gIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy5uYW1lfTogR2l0TGFiIENJIGluY2x1ZGUgJHtpbmNsdWRlfSBjb250YWlucyAke2xlbn0gcHJvcGVydHkgY29tYmluYXRpb24ocykuXG4gICAgICAgIEEgdmFsaWQgaW5jbHVkZSBjb25maWd1cmF0aW9uIHNwZWNpZmllcyAqb25lKiBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnR5IGNvbWJpbmF0aW9ucy5cbiAgICAgICAgKiBsb2NhbFxuICAgICAgICAqIGZpbGUsIHByb2plY3RcbiAgICAgICAgKiByZW1vdGVcbiAgICAgICAgKiB0ZW1wbGF0ZSAgXG4gICAgICAgIGBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBlcXVhbGl0eSBvZiBJbmNsdWRlcy5cbiAgICogQHNlZSBodHRwczovL2dpdGxhYi5jb20vZ2l0bGFiLW9yZy9naXRsYWIvLS9ibG9iL21hc3Rlci9saWIvZ2l0bGFiL2NpL2NvbmZpZy9leHRlcm5hbC9tYXBwZXIucmJcbiAgICogQHBhcmFtIHggRmlyc3QgaW5jbHVkZSB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0geSBTZWNvbmQgaW5jbHVkZSB0byBjb21wYXJlLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBpbmNsdWRlcyBhcmUgZXF1YWwuXG4gICAqL1xuICBwcml2YXRlIGFyZUVxdWFsSW5jbHVkZXMoeDogSW5jbHVkZSwgeTogSW5jbHVkZSk6IGJvb2xlYW4ge1xuICAgIGlmICh4LmxvY2FsID09PSB5LmxvY2FsICYmIHgubG9jYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh4LnRlbXBsYXRlID09PSB5LnRlbXBsYXRlICYmIHgudGVtcGxhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh4LnJlbW90ZSA9PT0geS5yZW1vdGUgJiYgeC5yZW1vdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh4LnByb2plY3QgPT09IHkucHJvamVjdCAmJiB4LnJlZiA9PT0geS5yZWYpIHtcbiAgICAgIGNvbnN0IHhGaWxlcyA9IHguZmlsZSA/IHguZmlsZSA6IFtdO1xuICAgICAgY29uc3QgeUZpbGVzID0geS5maWxlID8geS5maWxlIDogW107XG4gICAgICBjb25zdCBhbGxGaWxlcyA9IHhGaWxlcy5jb25jYXQoeUZpbGVzKTtcbiAgICAgIHJldHVybiBuZXcgU2V0KGFsbEZpbGVzKS5zaXplICE9PSBhbGxGaWxlcy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkU2VydmljZXMoLi4uc2VydmljZXM6IFNlcnZpY2VbXSkge1xuICAgIGZvciAoY29uc3QgYWRkaXRpb25hbCBvZiBzZXJ2aWNlcykge1xuICAgICAgZm9yIChjb25zdCBleGlzdGluZyBvZiB0aGlzLmRlZmF1bHRTZXJ2aWNlcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYWRkaXRpb25hbC5uYW1lID09PSBleGlzdGluZy5uYW1lICYmXG4gICAgICAgICAgYWRkaXRpb25hbC5hbGlhcyA9PT0gZXhpc3RpbmcuYWxpYXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7dGhpcy5uYW1lfTogR2l0TGFiIENJIGFscmVhZHkgY29udGFpbnMgc2VydmljZSAke2FkZGl0aW9uYWx9LmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlcy5wdXNoKGFkZGl0aW9uYWwpO1xuICAgIH1cbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZEdsb2JhbFZhcmlhYmxlcyh2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XG4gICAgICBpZiAodGhpcy52YXJpYWJsZXNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0aGlzLm5hbWV9OiBHaXRMYWIgQ0kgYWxyZWFkeSBjb250YWlucyB2YXJpYWJsZSAke2tleX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy52YXJpYWJsZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRTdGFnZXMoLi4uc3RhZ2VzOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICBpZiAoIXRoaXMuc3RhZ2VzLmluY2x1ZGVzKHN0YWdlKSkge1xuICAgICAgICB0aGlzLnN0YWdlcy5wdXNoKHN0YWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkSm9icyhqb2JzOiBSZWNvcmQ8c3RyaW5nLCBKb2I+KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoam9icykpIHtcbiAgICAgIGlmICh0aGlzLmpvYnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5hbWV9OiBHaXRMYWIgQ0kgYWxyZWFkeSBjb250YWlucyBqb2IgJHtrZXl9LmApO1xuICAgICAgfVxuICAgICAgdGhpcy5qb2JzW2tleV0gPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZS5zdGFnZSkge1xuICAgICAgICB0aGlzLmFkZFN0YWdlcyh2YWx1ZS5zdGFnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDSSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVmYXVsdDogdGhpcy5yZW5kZXJEZWZhdWx0KCksXG4gICAgICBpbmNsdWRlOlxuICAgICAgICB0aGlzLmluY2x1ZGUubGVuZ3RoID4gMCA/IHNuYWtlQ2FzZUtleXModGhpcy5pbmNsdWRlKSA6IHVuZGVmaW5lZCxcbiAgICAgIHBhZ2VzOiBzbmFrZUNhc2VLZXlzKHRoaXMucGFnZXMpLFxuICAgICAgc2VydmljZXM6XG4gICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHNuYWtlQ2FzZUtleXModGhpcy5kZWZhdWx0U2VydmljZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB2YXJpYWJsZXM6XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMudmFyaWFibGVzKS5sZW5ndGggPiAwID8gdGhpcy52YXJpYWJsZXMgOiB1bmRlZmluZWQsXG4gICAgICB3b3JrZmxvdzogc25ha2VDYXNlS2V5cyh0aGlzLndvcmtmbG93KSxcbiAgICAgIHN0YWdlczogdGhpcy5zdGFnZXMubGVuZ3RoID4gMCA/IHRoaXMuc3RhZ2VzIDogdW5kZWZpbmVkLFxuICAgICAgLi4uc25ha2VDYXNlS2V5cyh0aGlzLmpvYnMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckRlZmF1bHQoKSB7XG4gICAgY29uc3QgZGVmYXVsdHM6IERlZmF1bHQgPSB7XG4gICAgICBhZnRlclNjcmlwdDpcbiAgICAgICAgdGhpcy5kZWZhdWx0QWZ0ZXJTY3JpcHQubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5kZWZhdWx0QWZ0ZXJTY3JpcHRcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGFydGlmYWN0czogdGhpcy5kZWZhdWx0QXJ0aWZhY3RzLFxuICAgICAgYmVmb3JlU2NyaXB0OlxuICAgICAgICB0aGlzLmRlZmF1bHRCZWZvcmVTY3JpcHQubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5kZWZhdWx0QmVmb3JlU2NyaXB0XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjYWNoZTogdGhpcy5kZWZhdWx0Q2FjaGUsXG4gICAgICBpbWFnZTogdGhpcy5kZWZhdWx0SW1hZ2UsXG4gICAgICBpbnRlcnJ1cHRpYmxlOiB0aGlzLmRlZmF1bHRJbnRlcnJ1cHRpYmxlLFxuICAgICAgcmV0cnk6IHRoaXMuZGVmYXVsdFJldHJ5LFxuICAgICAgc2VydmljZXM6XG4gICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2VzLmxlbmd0aCA+IDAgPyB0aGlzLmRlZmF1bHRTZXJ2aWNlcyA6IHVuZGVmaW5lZCxcbiAgICAgIHRhZ3M6IHRoaXMuZGVmYXVsdFRhZ3MubGVuZ3RoID4gMCA/IHRoaXMuZGVmYXVsdFRhZ3MgOiB1bmRlZmluZWQsXG4gICAgICB0aW1lb3V0OiB0aGlzLmRlZmF1bHRUaW1lb3V0LFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZGVmYXVsdHMpLmZpbHRlcigoeCkgPT4geCkubGVuZ3RoXG4gICAgICA/IHNuYWtlQ2FzZUtleXMoZGVmYXVsdHMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzbmFrZUNhc2VLZXlzPFQgPSB1bmtub3duPihvYmo6IFQpOiBUIHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgb2JqID09IG51bGwpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKHNuYWtlQ2FzZUtleXMpIGFzIGFueTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChsZXQgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsKSB7XG4gICAgICB2ID0gc25ha2VDYXNlS2V5cyh2KTtcbiAgICB9XG4gICAgcmVzdWx0W3NuYWtlKGspXSA9IHY7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCBhcyBhbnk7XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import { CiConfigurationOptions } from ".";
2
+ import { Project } from "../project";
3
+ import { CiConfiguration } from "./configuration";
4
+ import { NestedConfiguration } from "./nested-configuration";
5
+ /**
6
+ * (experimental) A GitLab CI for the main `.gitlab-ci.yml` file.
7
+ *
8
+ * @experimental
9
+ */
10
+ export declare class GitlabConfiguration extends CiConfiguration {
11
+ /**
12
+ * @experimental
13
+ */
14
+ readonly nestedTemplates: Record<string, NestedConfiguration>;
15
+ /**
16
+ * @experimental
17
+ */
18
+ constructor(project: Project, options?: CiConfigurationOptions);
19
+ /**
20
+ * (experimental) Creates and adds nested templates to the includes of the main CI.
21
+ *
22
+ * Additionally adds their stages to the main CI if they are not already present.
23
+ * You can futher customize nested templates through the `nestedTemplates` property.
24
+ * E.g. gitlabConfig.nestedTemplates['templateName']?.addStages('stageName')
25
+ *
26
+ * @param config a record the names and configuraitons of the templates.
27
+ * @experimental
28
+ */
29
+ createNestedTemplates(config: Record<string, CiConfigurationOptions>): void;
30
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GitlabConfiguration = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const configuration_1 = require("./configuration");
7
+ const nested_configuration_1 = require("./nested-configuration");
8
+ /**
9
+ * (experimental) A GitLab CI for the main `.gitlab-ci.yml` file.
10
+ *
11
+ * @experimental
12
+ */
13
+ class GitlabConfiguration extends configuration_1.CiConfiguration {
14
+ /**
15
+ * @experimental
16
+ */
17
+ constructor(project, options) {
18
+ super(project, "gitlab-ci", options);
19
+ /**
20
+ * @experimental
21
+ */
22
+ this.nestedTemplates = {};
23
+ }
24
+ /**
25
+ * (experimental) Creates and adds nested templates to the includes of the main CI.
26
+ *
27
+ * Additionally adds their stages to the main CI if they are not already present.
28
+ * You can futher customize nested templates through the `nestedTemplates` property.
29
+ * E.g. gitlabConfig.nestedTemplates['templateName']?.addStages('stageName')
30
+ *
31
+ * @param config a record the names and configuraitons of the templates.
32
+ * @experimental
33
+ */
34
+ createNestedTemplates(config) {
35
+ for (const [name, options] of Object.entries(config)) {
36
+ if (this.nestedTemplates[name] !== undefined) {
37
+ throw new Error(`${this.name}: GitLab CI already contains template "${name}".`);
38
+ }
39
+ const template = new nested_configuration_1.NestedConfiguration(this.project, this, name, options);
40
+ this.nestedTemplates[template.name] = template;
41
+ this.addIncludes({ local: template.path });
42
+ this.addStages(...template.stages);
43
+ }
44
+ }
45
+ }
46
+ exports.GitlabConfiguration = GitlabConfiguration;
47
+ _a = JSII_RTTI_SYMBOL_1;
48
+ GitlabConfiguration[_a] = { fqn: "projen.gitlab.GitlabConfiguration", version: "0.49.2" };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0bGFiLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0bGFiL2dpdGxhYi1jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsbURBQWtEO0FBQ2xELGlFQUE2RDs7Ozs7O0FBRzdELE1BQWEsbUJBQW9CLFNBQVEsK0JBQWU7Ozs7SUFFdEQsWUFBWSxPQUFnQixFQUFFLE9BQWdDO1FBQzVELEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7O1FBRnZCLG9CQUFlLEdBQXdDLEVBQUUsQ0FBQztJQUcxRSxDQUFDOzs7Ozs7Ozs7OztJQUdNLHFCQUFxQixDQUFDLE1BQThDO1FBQ3pFLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQzVDLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLENBQUMsSUFBSSwwQ0FBMEMsSUFBSSxJQUFJLENBQy9ELENBQUM7YUFDSDtZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksMENBQW1CLENBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxFQUNKLElBQUksRUFDSixPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDOztBQXhCSCxrREF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaUNvbmZpZ3VyYXRpb25PcHRpb25zIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgQ2lDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgTmVzdGVkQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL25lc3RlZC1jb25maWd1cmF0aW9uXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBHaXRsYWJDb25maWd1cmF0aW9uIGV4dGVuZHMgQ2lDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IG5lc3RlZFRlbXBsYXRlczogUmVjb3JkPHN0cmluZywgTmVzdGVkQ29uZmlndXJhdGlvbj4gPSB7fTtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9ucz86IENpQ29uZmlndXJhdGlvbk9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBcImdpdGxhYi1jaVwiLCBvcHRpb25zKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgY3JlYXRlTmVzdGVkVGVtcGxhdGVzKGNvbmZpZzogUmVjb3JkPHN0cmluZywgQ2lDb25maWd1cmF0aW9uT3B0aW9ucz4pIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBvcHRpb25zXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcpKSB7XG4gICAgICBpZiAodGhpcy5uZXN0ZWRUZW1wbGF0ZXNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5uYW1lfTogR2l0TGFiIENJIGFscmVhZHkgY29udGFpbnMgdGVtcGxhdGUgXCIke25hbWV9XCIuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgTmVzdGVkQ29uZmlndXJhdGlvbihcbiAgICAgICAgdGhpcy5wcm9qZWN0LFxuICAgICAgICB0aGlzLFxuICAgICAgICBuYW1lLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5uZXN0ZWRUZW1wbGF0ZXNbdGVtcGxhdGUubmFtZV0gPSB0ZW1wbGF0ZTtcbiAgICAgIHRoaXMuYWRkSW5jbHVkZXMoeyBsb2NhbDogdGVtcGxhdGUucGF0aCB9KTtcbiAgICAgIHRoaXMuYWRkU3RhZ2VzKC4uLnRlbXBsYXRlLnN0YWdlcyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from "./configuration";
2
+ export * from "./configuration-model";
3
+ export * from "./gitlab-configuration";
4
+ export * from "./nested-configuration";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./configuration"), exports);
14
+ __exportStar(require("./configuration-model"), exports);
15
+ __exportStar(require("./gitlab-configuration"), exports);
16
+ __exportStar(require("./nested-configuration"), exports);
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0bGFiL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyx3REFBc0M7QUFDdEMseURBQXVDO0FBQ3ZDLHlEQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbmZpZ3VyYXRpb24tbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dpdGxhYi1jb25maWd1cmF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uZXN0ZWQtY29uZmlndXJhdGlvblwiO1xuIl19
@@ -0,0 +1,26 @@
1
+ import { CiConfigurationOptions } from ".";
2
+ import { Project } from "../project";
3
+ import { CiConfiguration } from "./configuration";
4
+ import { GitlabConfiguration } from "./gitlab-configuration";
5
+ /**
6
+ * (experimental) A GitLab CI for templates that are created and included in the `.gitlab-ci.yml` file.
7
+ *
8
+ * @experimental
9
+ */
10
+ export declare class NestedConfiguration extends CiConfiguration {
11
+ /**
12
+ * @experimental
13
+ */
14
+ readonly parent: GitlabConfiguration;
15
+ /**
16
+ * @experimental
17
+ */
18
+ constructor(project: Project, parent: GitlabConfiguration, name: string, options?: CiConfigurationOptions);
19
+ /**
20
+ * (experimental) Add stages to the Nested configuration and the main CI file if not already present.
21
+ *
22
+ * @param stages stages to add.
23
+ * @experimental
24
+ */
25
+ addStages(...stages: string[]): void;
26
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NestedConfiguration = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const configuration_1 = require("./configuration");
7
+ /**
8
+ * (experimental) A GitLab CI for templates that are created and included in the `.gitlab-ci.yml` file.
9
+ *
10
+ * @experimental
11
+ */
12
+ class NestedConfiguration extends configuration_1.CiConfiguration {
13
+ /**
14
+ * @experimental
15
+ */
16
+ constructor(project, parent, name, options) {
17
+ super(project, name, options);
18
+ this.parent = parent;
19
+ }
20
+ /**
21
+ * (experimental) Add stages to the Nested configuration and the main CI file if not already present.
22
+ *
23
+ * @param stages stages to add.
24
+ * @experimental
25
+ */
26
+ addStages(...stages) {
27
+ for (const stage of stages) {
28
+ if (!this.stages.includes(stage)) {
29
+ this.stages.push(stage);
30
+ }
31
+ this.parent.addStages(stage);
32
+ }
33
+ }
34
+ }
35
+ exports.NestedConfiguration = NestedConfiguration;
36
+ _a = JSII_RTTI_SYMBOL_1;
37
+ NestedConfiguration[_a] = { fqn: "projen.gitlab.NestedConfiguration", version: "0.49.2" };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0bGFiL25lc3RlZC1jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsbURBQWtEOzs7Ozs7QUFJbEQsTUFBYSxtQkFBb0IsU0FBUSwrQkFBZTs7OztJQUV0RCxZQUNFLE9BQWdCLEVBQ2hCLE1BQTJCLEVBQzNCLElBQVksRUFDWixPQUFnQztRQUVoQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDOzs7Ozs7O0lBRU0sU0FBUyxDQUFDLEdBQUcsTUFBZ0I7UUFDbEMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQzs7QUFuQkgsa0RBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2lDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB7IENpQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7IEdpdGxhYkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9naXRsYWItY29uZmlndXJhdGlvblwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBOZXN0ZWRDb25maWd1cmF0aW9uIGV4dGVuZHMgQ2lDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhcmVudDogR2l0bGFiQ29uZmlndXJhdGlvbjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvamVjdDogUHJvamVjdCxcbiAgICBwYXJlbnQ6IEdpdGxhYkNvbmZpZ3VyYXRpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDaUNvbmZpZ3VyYXRpb25PcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QsIG5hbWUsIG9wdGlvbnMpO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkU3RhZ2VzKC4uLnN0YWdlczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgaWYgKCF0aGlzLnN0YWdlcy5pbmNsdWRlcyhzdGFnZSkpIHtcbiAgICAgICAgdGhpcy5zdGFnZXMucHVzaChzdGFnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcmVudC5hZGRTdGFnZXMoc3RhZ2UpO1xuICAgIH1cbiAgfVxufVxuIl19
package/lib/gitpod.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { Component } from './component';
2
- import { IDevEnvironment, DevEnvironmentOptions, DevEnvironmentDockerImage } from './dev-env';
3
- import { Project } from './project';
4
- import { Task } from './task';
1
+ import { Component } from "./component";
2
+ import { IDevEnvironment, DevEnvironmentOptions, DevEnvironmentDockerImage } from "./dev-env";
3
+ import { Project } from "./project";
4
+ import { Task } from "./task";
5
5
  /**
6
6
  * (experimental) Configure how the terminal should be opened relative to the previous task.
7
7
  *