@cdktn/provider-project 0.7.24

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 (330) hide show
  1. package/.jsii +419 -0
  2. package/API.md +4154 -0
  3. package/CLAUDE.md +172 -0
  4. package/LICENSE +355 -0
  5. package/README.md +82 -0
  6. package/lib/alert-open-prs.d.ts +14 -0
  7. package/lib/alert-open-prs.js +67 -0
  8. package/lib/auto-approve.d.ts +11 -0
  9. package/lib/auto-approve.js +70 -0
  10. package/lib/auto-close-community-issues.d.ts +15 -0
  11. package/lib/auto-close-community-issues.js +104 -0
  12. package/lib/automerge.d.ts +11 -0
  13. package/lib/automerge.js +67 -0
  14. package/lib/cdktf-config.d.ts +33 -0
  15. package/lib/cdktf-config.js +134 -0
  16. package/lib/copyright-headers.d.ts +4 -0
  17. package/lib/copyright-headers.js +44 -0
  18. package/lib/customized-license.d.ts +8 -0
  19. package/lib/customized-license.js +19 -0
  20. package/lib/dependabot.d.ts +8 -0
  21. package/lib/dependabot.js +40 -0
  22. package/lib/deprecate-packages.d.ts +14 -0
  23. package/lib/deprecate-packages.js +91 -0
  24. package/lib/force-release.d.ts +12 -0
  25. package/lib/force-release.js +112 -0
  26. package/lib/github-issues.d.ts +15 -0
  27. package/lib/github-issues.js +33 -0
  28. package/lib/index.d.ts +53 -0
  29. package/lib/index.js +447 -0
  30. package/lib/lock-issues.d.ts +13 -0
  31. package/lib/lock-issues.js +54 -0
  32. package/lib/package-info.d.ts +14 -0
  33. package/lib/package-info.js +7 -0
  34. package/lib/provider-upgrade.d.ts +17 -0
  35. package/lib/provider-upgrade.js +145 -0
  36. package/lib/readme.d.ts +21 -0
  37. package/lib/readme.js +147 -0
  38. package/lib/scripts/check-for-upgrades.d.ts +15 -0
  39. package/lib/scripts/check-for-upgrades.js +186 -0
  40. package/lib/scripts/should-release.d.ts +13 -0
  41. package/lib/scripts/should-release.js +96 -0
  42. package/lib/util/random-cron.d.ts +18 -0
  43. package/lib/util/random-cron.js +33 -0
  44. package/mise.toml +2 -0
  45. package/node_modules/camel-case/LICENSE +21 -0
  46. package/node_modules/camel-case/README.md +47 -0
  47. package/node_modules/camel-case/dist/index.d.ts +5 -0
  48. package/node_modules/camel-case/dist/index.js +23 -0
  49. package/node_modules/camel-case/dist/index.js.map +1 -0
  50. package/node_modules/camel-case/dist/index.spec.d.ts +1 -0
  51. package/node_modules/camel-case/dist/index.spec.js +26 -0
  52. package/node_modules/camel-case/dist/index.spec.js.map +1 -0
  53. package/node_modules/camel-case/dist.es2015/index.d.ts +5 -0
  54. package/node_modules/camel-case/dist.es2015/index.js +17 -0
  55. package/node_modules/camel-case/dist.es2015/index.js.map +1 -0
  56. package/node_modules/camel-case/dist.es2015/index.spec.d.ts +1 -0
  57. package/node_modules/camel-case/dist.es2015/index.spec.js +24 -0
  58. package/node_modules/camel-case/dist.es2015/index.spec.js.map +1 -0
  59. package/node_modules/camel-case/package.json +89 -0
  60. package/node_modules/capital-case/LICENSE +21 -0
  61. package/node_modules/capital-case/README.md +37 -0
  62. package/node_modules/capital-case/dist/index.d.ts +4 -0
  63. package/node_modules/capital-case/dist/index.js +16 -0
  64. package/node_modules/capital-case/dist/index.js.map +1 -0
  65. package/node_modules/capital-case/dist/index.spec.d.ts +1 -0
  66. package/node_modules/capital-case/dist/index.spec.js +24 -0
  67. package/node_modules/capital-case/dist/index.spec.js.map +1 -0
  68. package/node_modules/capital-case/dist.es2015/index.d.ts +4 -0
  69. package/node_modules/capital-case/dist.es2015/index.js +11 -0
  70. package/node_modules/capital-case/dist.es2015/index.js.map +1 -0
  71. package/node_modules/capital-case/dist.es2015/index.spec.d.ts +1 -0
  72. package/node_modules/capital-case/dist.es2015/index.spec.js +22 -0
  73. package/node_modules/capital-case/dist.es2015/index.spec.js.map +1 -0
  74. package/node_modules/capital-case/package.json +90 -0
  75. package/node_modules/change-case/LICENSE +21 -0
  76. package/node_modules/change-case/README.md +44 -0
  77. package/node_modules/change-case/dist/index.d.ts +11 -0
  78. package/node_modules/change-case/dist/index.js +15 -0
  79. package/node_modules/change-case/dist/index.js.map +1 -0
  80. package/node_modules/change-case/dist/index.spec.d.ts +1 -0
  81. package/node_modules/change-case/dist/index.spec.js +9 -0
  82. package/node_modules/change-case/dist/index.spec.js.map +1 -0
  83. package/node_modules/change-case/dist.es2015/index.d.ts +11 -0
  84. package/node_modules/change-case/dist.es2015/index.js +12 -0
  85. package/node_modules/change-case/dist.es2015/index.js.map +1 -0
  86. package/node_modules/change-case/dist.es2015/index.spec.d.ts +1 -0
  87. package/node_modules/change-case/dist.es2015/index.spec.js +7 -0
  88. package/node_modules/change-case/dist.es2015/index.spec.js.map +1 -0
  89. package/node_modules/change-case/package.json +101 -0
  90. package/node_modules/constant-case/LICENSE +21 -0
  91. package/node_modules/constant-case/README.md +37 -0
  92. package/node_modules/constant-case/dist/index.d.ts +3 -0
  93. package/node_modules/constant-case/dist/index.js +12 -0
  94. package/node_modules/constant-case/dist/index.js.map +1 -0
  95. package/node_modules/constant-case/dist/index.spec.d.ts +1 -0
  96. package/node_modules/constant-case/dist/index.spec.js +26 -0
  97. package/node_modules/constant-case/dist/index.spec.js.map +1 -0
  98. package/node_modules/constant-case/dist.es2015/index.d.ts +3 -0
  99. package/node_modules/constant-case/dist.es2015/index.js +8 -0
  100. package/node_modules/constant-case/dist.es2015/index.js.map +1 -0
  101. package/node_modules/constant-case/dist.es2015/index.spec.d.ts +1 -0
  102. package/node_modules/constant-case/dist.es2015/index.spec.js +24 -0
  103. package/node_modules/constant-case/dist.es2015/index.spec.js.map +1 -0
  104. package/node_modules/constant-case/package.json +90 -0
  105. package/node_modules/dot-case/LICENSE +21 -0
  106. package/node_modules/dot-case/README.md +37 -0
  107. package/node_modules/dot-case/dist/index.d.ts +3 -0
  108. package/node_modules/dot-case/dist/index.js +11 -0
  109. package/node_modules/dot-case/dist/index.js.map +1 -0
  110. package/node_modules/dot-case/dist/index.spec.d.ts +1 -0
  111. package/node_modules/dot-case/dist/index.spec.js +26 -0
  112. package/node_modules/dot-case/dist/index.spec.js.map +1 -0
  113. package/node_modules/dot-case/dist.es2015/index.d.ts +3 -0
  114. package/node_modules/dot-case/dist.es2015/index.js +7 -0
  115. package/node_modules/dot-case/dist.es2015/index.js.map +1 -0
  116. package/node_modules/dot-case/dist.es2015/index.spec.d.ts +1 -0
  117. package/node_modules/dot-case/dist.es2015/index.spec.js +24 -0
  118. package/node_modules/dot-case/dist.es2015/index.spec.js.map +1 -0
  119. package/node_modules/dot-case/package.json +89 -0
  120. package/node_modules/fs-extra/LICENSE +15 -0
  121. package/node_modules/fs-extra/README.md +262 -0
  122. package/node_modules/fs-extra/lib/copy/copy-sync.js +169 -0
  123. package/node_modules/fs-extra/lib/copy/copy.js +235 -0
  124. package/node_modules/fs-extra/lib/copy/index.js +7 -0
  125. package/node_modules/fs-extra/lib/empty/index.js +39 -0
  126. package/node_modules/fs-extra/lib/ensure/file.js +69 -0
  127. package/node_modules/fs-extra/lib/ensure/index.js +23 -0
  128. package/node_modules/fs-extra/lib/ensure/link.js +64 -0
  129. package/node_modules/fs-extra/lib/ensure/symlink-paths.js +99 -0
  130. package/node_modules/fs-extra/lib/ensure/symlink-type.js +31 -0
  131. package/node_modules/fs-extra/lib/ensure/symlink.js +82 -0
  132. package/node_modules/fs-extra/lib/fs/index.js +128 -0
  133. package/node_modules/fs-extra/lib/index.js +16 -0
  134. package/node_modules/fs-extra/lib/json/index.js +16 -0
  135. package/node_modules/fs-extra/lib/json/jsonfile.js +11 -0
  136. package/node_modules/fs-extra/lib/json/output-json-sync.js +12 -0
  137. package/node_modules/fs-extra/lib/json/output-json.js +12 -0
  138. package/node_modules/fs-extra/lib/mkdirs/index.js +14 -0
  139. package/node_modules/fs-extra/lib/mkdirs/make-dir.js +27 -0
  140. package/node_modules/fs-extra/lib/mkdirs/utils.js +21 -0
  141. package/node_modules/fs-extra/lib/move/index.js +7 -0
  142. package/node_modules/fs-extra/lib/move/move-sync.js +54 -0
  143. package/node_modules/fs-extra/lib/move/move.js +75 -0
  144. package/node_modules/fs-extra/lib/output-file/index.js +40 -0
  145. package/node_modules/fs-extra/lib/path-exists/index.js +12 -0
  146. package/node_modules/fs-extra/lib/remove/index.js +22 -0
  147. package/node_modules/fs-extra/lib/remove/rimraf.js +302 -0
  148. package/node_modules/fs-extra/lib/util/stat.js +154 -0
  149. package/node_modules/fs-extra/lib/util/utimes.js +26 -0
  150. package/node_modules/fs-extra/package.json +67 -0
  151. package/node_modules/graceful-fs/LICENSE +15 -0
  152. package/node_modules/graceful-fs/README.md +143 -0
  153. package/node_modules/graceful-fs/clone.js +23 -0
  154. package/node_modules/graceful-fs/graceful-fs.js +448 -0
  155. package/node_modules/graceful-fs/legacy-streams.js +118 -0
  156. package/node_modules/graceful-fs/package.json +53 -0
  157. package/node_modules/graceful-fs/polyfills.js +355 -0
  158. package/node_modules/header-case/LICENSE +21 -0
  159. package/node_modules/header-case/README.md +37 -0
  160. package/node_modules/header-case/dist/index.d.ts +3 -0
  161. package/node_modules/header-case/dist/index.js +11 -0
  162. package/node_modules/header-case/dist/index.js.map +1 -0
  163. package/node_modules/header-case/dist/index.spec.d.ts +1 -0
  164. package/node_modules/header-case/dist/index.spec.js +24 -0
  165. package/node_modules/header-case/dist/index.spec.js.map +1 -0
  166. package/node_modules/header-case/dist.es2015/index.d.ts +3 -0
  167. package/node_modules/header-case/dist.es2015/index.js +7 -0
  168. package/node_modules/header-case/dist.es2015/index.js.map +1 -0
  169. package/node_modules/header-case/dist.es2015/index.spec.d.ts +1 -0
  170. package/node_modules/header-case/dist.es2015/index.spec.js +22 -0
  171. package/node_modules/header-case/dist.es2015/index.spec.js.map +1 -0
  172. package/node_modules/header-case/package.json +89 -0
  173. package/node_modules/jsonfile/LICENSE +15 -0
  174. package/node_modules/jsonfile/README.md +230 -0
  175. package/node_modules/jsonfile/index.js +88 -0
  176. package/node_modules/jsonfile/package.json +40 -0
  177. package/node_modules/jsonfile/utils.js +14 -0
  178. package/node_modules/lower-case/LICENSE +21 -0
  179. package/node_modules/lower-case/README.md +35 -0
  180. package/node_modules/lower-case/dist/index.d.ts +8 -0
  181. package/node_modules/lower-case/dist/index.js +53 -0
  182. package/node_modules/lower-case/dist/index.js.map +1 -0
  183. package/node_modules/lower-case/dist/index.spec.d.ts +1 -0
  184. package/node_modules/lower-case/dist/index.spec.js +36 -0
  185. package/node_modules/lower-case/dist/index.spec.js.map +1 -0
  186. package/node_modules/lower-case/dist.es2015/index.d.ts +8 -0
  187. package/node_modules/lower-case/dist.es2015/index.js +48 -0
  188. package/node_modules/lower-case/dist.es2015/index.js.map +1 -0
  189. package/node_modules/lower-case/dist.es2015/index.spec.d.ts +1 -0
  190. package/node_modules/lower-case/dist.es2015/index.spec.js +34 -0
  191. package/node_modules/lower-case/dist.es2015/index.spec.js.map +1 -0
  192. package/node_modules/lower-case/package.json +87 -0
  193. package/node_modules/no-case/LICENSE +21 -0
  194. package/node_modules/no-case/README.md +37 -0
  195. package/node_modules/no-case/dist/index.d.ts +10 -0
  196. package/node_modules/no-case/dist/index.js +35 -0
  197. package/node_modules/no-case/dist/index.js.map +1 -0
  198. package/node_modules/no-case/dist/index.spec.d.ts +1 -0
  199. package/node_modules/no-case/dist/index.spec.js +59 -0
  200. package/node_modules/no-case/dist/index.spec.js.map +1 -0
  201. package/node_modules/no-case/dist.es2015/index.d.ts +10 -0
  202. package/node_modules/no-case/dist.es2015/index.js +31 -0
  203. package/node_modules/no-case/dist.es2015/index.js.map +1 -0
  204. package/node_modules/no-case/dist.es2015/index.spec.d.ts +1 -0
  205. package/node_modules/no-case/dist.es2015/index.spec.js +57 -0
  206. package/node_modules/no-case/dist.es2015/index.spec.js.map +1 -0
  207. package/node_modules/no-case/package.json +85 -0
  208. package/node_modules/param-case/LICENSE +21 -0
  209. package/node_modules/param-case/README.md +37 -0
  210. package/node_modules/param-case/dist/index.d.ts +3 -0
  211. package/node_modules/param-case/dist/index.js +11 -0
  212. package/node_modules/param-case/dist/index.js.map +1 -0
  213. package/node_modules/param-case/dist/index.spec.d.ts +1 -0
  214. package/node_modules/param-case/dist/index.spec.js +24 -0
  215. package/node_modules/param-case/dist/index.spec.js.map +1 -0
  216. package/node_modules/param-case/dist.es2015/index.d.ts +3 -0
  217. package/node_modules/param-case/dist.es2015/index.js +7 -0
  218. package/node_modules/param-case/dist.es2015/index.js.map +1 -0
  219. package/node_modules/param-case/dist.es2015/index.spec.d.ts +1 -0
  220. package/node_modules/param-case/dist.es2015/index.spec.js +22 -0
  221. package/node_modules/param-case/dist.es2015/index.spec.js.map +1 -0
  222. package/node_modules/param-case/package.json +91 -0
  223. package/node_modules/pascal-case/LICENSE +21 -0
  224. package/node_modules/pascal-case/README.md +47 -0
  225. package/node_modules/pascal-case/dist/index.d.ts +5 -0
  226. package/node_modules/pascal-case/dist/index.js +24 -0
  227. package/node_modules/pascal-case/dist/index.js.map +1 -0
  228. package/node_modules/pascal-case/dist/index.spec.d.ts +1 -0
  229. package/node_modules/pascal-case/dist/index.spec.js +25 -0
  230. package/node_modules/pascal-case/dist/index.spec.js.map +1 -0
  231. package/node_modules/pascal-case/dist.es2015/index.d.ts +5 -0
  232. package/node_modules/pascal-case/dist.es2015/index.js +18 -0
  233. package/node_modules/pascal-case/dist.es2015/index.js.map +1 -0
  234. package/node_modules/pascal-case/dist.es2015/index.spec.d.ts +1 -0
  235. package/node_modules/pascal-case/dist.es2015/index.spec.js +23 -0
  236. package/node_modules/pascal-case/dist.es2015/index.spec.js.map +1 -0
  237. package/node_modules/pascal-case/package.json +90 -0
  238. package/node_modules/path-case/LICENSE +21 -0
  239. package/node_modules/path-case/README.md +37 -0
  240. package/node_modules/path-case/dist/index.d.ts +3 -0
  241. package/node_modules/path-case/dist/index.js +11 -0
  242. package/node_modules/path-case/dist/index.js.map +1 -0
  243. package/node_modules/path-case/dist/index.spec.d.ts +1 -0
  244. package/node_modules/path-case/dist/index.spec.js +24 -0
  245. package/node_modules/path-case/dist/index.spec.js.map +1 -0
  246. package/node_modules/path-case/dist.es2015/index.d.ts +3 -0
  247. package/node_modules/path-case/dist.es2015/index.js +7 -0
  248. package/node_modules/path-case/dist.es2015/index.js.map +1 -0
  249. package/node_modules/path-case/dist.es2015/index.spec.d.ts +1 -0
  250. package/node_modules/path-case/dist.es2015/index.spec.js +22 -0
  251. package/node_modules/path-case/dist.es2015/index.spec.js.map +1 -0
  252. package/node_modules/path-case/package.json +88 -0
  253. package/node_modules/sentence-case/LICENSE +21 -0
  254. package/node_modules/sentence-case/README.md +37 -0
  255. package/node_modules/sentence-case/dist/index.d.ts +4 -0
  256. package/node_modules/sentence-case/dist/index.js +19 -0
  257. package/node_modules/sentence-case/dist/index.js.map +1 -0
  258. package/node_modules/sentence-case/dist/index.spec.d.ts +1 -0
  259. package/node_modules/sentence-case/dist/index.spec.js +24 -0
  260. package/node_modules/sentence-case/dist/index.spec.js.map +1 -0
  261. package/node_modules/sentence-case/dist.es2015/index.d.ts +4 -0
  262. package/node_modules/sentence-case/dist.es2015/index.js +14 -0
  263. package/node_modules/sentence-case/dist.es2015/index.js.map +1 -0
  264. package/node_modules/sentence-case/dist.es2015/index.spec.d.ts +1 -0
  265. package/node_modules/sentence-case/dist.es2015/index.spec.js +22 -0
  266. package/node_modules/sentence-case/dist.es2015/index.spec.js.map +1 -0
  267. package/node_modules/sentence-case/package.json +89 -0
  268. package/node_modules/snake-case/LICENSE +21 -0
  269. package/node_modules/snake-case/README.md +37 -0
  270. package/node_modules/snake-case/dist/index.d.ts +3 -0
  271. package/node_modules/snake-case/dist/index.js +11 -0
  272. package/node_modules/snake-case/dist/index.js.map +1 -0
  273. package/node_modules/snake-case/dist/index.spec.d.ts +1 -0
  274. package/node_modules/snake-case/dist/index.spec.js +25 -0
  275. package/node_modules/snake-case/dist/index.spec.js.map +1 -0
  276. package/node_modules/snake-case/dist.es2015/index.d.ts +3 -0
  277. package/node_modules/snake-case/dist.es2015/index.js +7 -0
  278. package/node_modules/snake-case/dist.es2015/index.js.map +1 -0
  279. package/node_modules/snake-case/dist.es2015/index.spec.d.ts +1 -0
  280. package/node_modules/snake-case/dist.es2015/index.spec.js +23 -0
  281. package/node_modules/snake-case/dist.es2015/index.spec.js.map +1 -0
  282. package/node_modules/snake-case/package.json +90 -0
  283. package/node_modules/tslib/CopyrightNotice.txt +15 -0
  284. package/node_modules/tslib/LICENSE.txt +12 -0
  285. package/node_modules/tslib/README.md +164 -0
  286. package/node_modules/tslib/SECURITY.md +41 -0
  287. package/node_modules/tslib/modules/index.d.ts +38 -0
  288. package/node_modules/tslib/modules/index.js +70 -0
  289. package/node_modules/tslib/modules/package.json +3 -0
  290. package/node_modules/tslib/package.json +47 -0
  291. package/node_modules/tslib/tslib.d.ts +460 -0
  292. package/node_modules/tslib/tslib.es6.html +1 -0
  293. package/node_modules/tslib/tslib.es6.js +402 -0
  294. package/node_modules/tslib/tslib.es6.mjs +401 -0
  295. package/node_modules/tslib/tslib.html +1 -0
  296. package/node_modules/tslib/tslib.js +484 -0
  297. package/node_modules/universalify/LICENSE +20 -0
  298. package/node_modules/universalify/README.md +76 -0
  299. package/node_modules/universalify/index.js +24 -0
  300. package/node_modules/universalify/package.json +34 -0
  301. package/node_modules/upper-case/README.md +34 -0
  302. package/node_modules/upper-case/dist/index.d.ts +8 -0
  303. package/node_modules/upper-case/dist/index.js +49 -0
  304. package/node_modules/upper-case/dist/index.js.map +1 -0
  305. package/node_modules/upper-case/dist/index.spec.d.ts +1 -0
  306. package/node_modules/upper-case/dist/index.spec.js +34 -0
  307. package/node_modules/upper-case/dist/index.spec.js.map +1 -0
  308. package/node_modules/upper-case/dist.es2015/index.d.ts +8 -0
  309. package/node_modules/upper-case/dist.es2015/index.js +44 -0
  310. package/node_modules/upper-case/dist.es2015/index.js.map +1 -0
  311. package/node_modules/upper-case/dist.es2015/index.spec.d.ts +1 -0
  312. package/node_modules/upper-case/dist.es2015/index.spec.js +32 -0
  313. package/node_modules/upper-case/dist.es2015/index.spec.js.map +1 -0
  314. package/node_modules/upper-case/package.json +86 -0
  315. package/node_modules/upper-case-first/LICENSE +21 -0
  316. package/node_modules/upper-case-first/README.md +32 -0
  317. package/node_modules/upper-case-first/dist/index.d.ts +4 -0
  318. package/node_modules/upper-case-first/dist/index.js +11 -0
  319. package/node_modules/upper-case-first/dist/index.js.map +1 -0
  320. package/node_modules/upper-case-first/dist/index.spec.d.ts +1 -0
  321. package/node_modules/upper-case-first/dist/index.spec.js +20 -0
  322. package/node_modules/upper-case-first/dist/index.spec.js.map +1 -0
  323. package/node_modules/upper-case-first/dist.es2015/index.d.ts +4 -0
  324. package/node_modules/upper-case-first/dist.es2015/index.js +7 -0
  325. package/node_modules/upper-case-first/dist.es2015/index.js.map +1 -0
  326. package/node_modules/upper-case-first/dist.es2015/index.spec.d.ts +1 -0
  327. package/node_modules/upper-case-first/dist.es2015/index.spec.js +18 -0
  328. package/node_modules/upper-case-first/dist.es2015/index.spec.js.map +1 -0
  329. package/node_modules/upper-case-first/package.json +87 -0
  330. package/package.json +181 -0
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AlertOpenPrs = void 0;
8
+ const github_1 = require("projen/lib/github");
9
+ const workflows_model_1 = require("projen/lib/github/workflows-model");
10
+ const random_cron_1 = require("./util/random-cron");
11
+ const DEFAULT_MAX_HOURS_OPEN = 2;
12
+ class AlertOpenPrs {
13
+ constructor(project, options) {
14
+ const { maxHoursOpen = DEFAULT_MAX_HOURS_OPEN, slackWebhookUrl, repository, } = options;
15
+ const workflow = new github_1.GithubWorkflow(project.github, "alert-open-prs");
16
+ workflow.on({
17
+ // run on weekdays sometime during working hours (8am-4pm UTC)
18
+ schedule: [
19
+ {
20
+ cron: (0, random_cron_1.generateRandomCron)({
21
+ project,
22
+ maxHour: 8,
23
+ hourOffset: 8,
24
+ schedule: random_cron_1.Schedule.Weekdays,
25
+ }),
26
+ },
27
+ ],
28
+ });
29
+ workflow.addJob("check-open-prs", {
30
+ runsOn: ["ubuntu-latest"],
31
+ permissions: {
32
+ pullRequests: workflows_model_1.JobPermission.READ,
33
+ },
34
+ env: {},
35
+ steps: [
36
+ {
37
+ name: "Find old PRs",
38
+ id: "old_prs",
39
+ run: [
40
+ `PR_LINKS=$(gh pr list --state open --repo="${repository}" --search "created:<$(date -d '-${maxHoursOpen}hours' +%FT%TZ)" --json url --jq "map(.url)" )`,
41
+ `if [ "$PR_LINKS" == "[]" ]; then`,
42
+ ` echo "No PRs open for more than ${maxHoursOpen} hour(s)"`,
43
+ `else`,
44
+ ` echo "pr_links=$PR_LINKS" >> $GITHUB_OUTPUT`,
45
+ `fi`,
46
+ ].join("\n"),
47
+ env: { GH_TOKEN: "${{ github.token }}" },
48
+ },
49
+ {
50
+ name: "Alert Slack on old PRs",
51
+ if: "${{ steps.old_prs.outputs.pr_links }}",
52
+ uses: "slackapi/slack-github-action",
53
+ with: {
54
+ webhook: slackWebhookUrl,
55
+ "webhook-type": "webhook-trigger",
56
+ payload: JSON.stringify({
57
+ pr_links: "${{ join(fromJSON(steps.old_prs.outputs.pr_links), ', ') }}",
58
+ }),
59
+ },
60
+ },
61
+ ],
62
+ continueOnError: true, // this job fails sometimes due to Slack timeouts (503s and 504s) but it's really not a big deal if it does
63
+ });
64
+ }
65
+ }
66
+ exports.AlertOpenPrs = AlertOpenPrs;
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtb3Blbi1wcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWxlcnQtb3Blbi1wcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBR0gsOENBQW1EO0FBQ25ELHVFQUFrRTtBQUNsRSxvREFBa0U7QUFFbEUsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7QUFRakMsTUFBYSxZQUFZO0lBQ3ZCLFlBQVksT0FBd0IsRUFBRSxPQUE0QjtRQUNoRSxNQUFNLEVBQ0osWUFBWSxHQUFHLHNCQUFzQixFQUNyQyxlQUFlLEVBQ2YsVUFBVSxHQUNYLEdBQUcsT0FBTyxDQUFDO1FBRVosTUFBTSxRQUFRLEdBQUcsSUFBSSx1QkFBYyxDQUFDLE9BQU8sQ0FBQyxNQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ1YsOERBQThEO1lBQzlELFFBQVEsRUFBRTtnQkFDUjtvQkFDRSxJQUFJLEVBQUUsSUFBQSxnQ0FBa0IsRUFBQzt3QkFDdkIsT0FBTzt3QkFDUCxPQUFPLEVBQUUsQ0FBQzt3QkFDVixVQUFVLEVBQUUsQ0FBQzt3QkFDYixRQUFRLEVBQUUsc0JBQVEsQ0FBQyxRQUFRO3FCQUM1QixDQUFDO2lCQUNIO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFO1lBQ2hDLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUN6QixXQUFXLEVBQUU7Z0JBQ1gsWUFBWSxFQUFFLCtCQUFhLENBQUMsSUFBSTthQUNqQztZQUNELEdBQUcsRUFBRSxFQUFFO1lBQ1AsS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixFQUFFLEVBQUUsU0FBUztvQkFDYixHQUFHLEVBQUU7d0JBQ0gsOENBQThDLFVBQVUsb0NBQW9DLFlBQVksZ0RBQWdEO3dCQUN4SixrQ0FBa0M7d0JBQ2xDLHFDQUFxQyxZQUFZLFdBQVc7d0JBQzVELE1BQU07d0JBQ04sK0NBQStDO3dCQUMvQyxJQUFJO3FCQUNMLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDWixHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUU7aUJBQ3pDO2dCQUNEO29CQUNFLElBQUksRUFBRSx3QkFBd0I7b0JBQzlCLEVBQUUsRUFBRSx1Q0FBdUM7b0JBQzNDLElBQUksRUFBRSw4QkFBOEI7b0JBQ3BDLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsZUFBZTt3QkFDeEIsY0FBYyxFQUFFLGlCQUFpQjt3QkFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7NEJBQ3RCLFFBQVEsRUFDTiw2REFBNkQ7eUJBQ2hFLENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtZQUNELGVBQWUsRUFBRSxJQUFJLEVBQUUsMkdBQTJHO1NBQ25JLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNERCxvQ0EyREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IGNkayB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IEdpdGh1YldvcmtmbG93IH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21Dcm9uLCBTY2hlZHVsZSB9IGZyb20gXCIuL3V0aWwvcmFuZG9tLWNyb25cIjtcblxuY29uc3QgREVGQVVMVF9NQVhfSE9VUlNfT1BFTiA9IDI7XG5cbmludGVyZmFjZSBBbGVydE9wZW5QcnNPcHRpb25zIHtcbiAgbWF4SG91cnNPcGVuPzogbnVtYmVyO1xuICBzbGFja1dlYmhvb2tVcmw6IHN0cmluZztcbiAgcmVwb3NpdG9yeTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQWxlcnRPcGVuUHJzIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogY2RrLkpzaWlQcm9qZWN0LCBvcHRpb25zOiBBbGVydE9wZW5QcnNPcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgbWF4SG91cnNPcGVuID0gREVGQVVMVF9NQVhfSE9VUlNfT1BFTixcbiAgICAgIHNsYWNrV2ViaG9va1VybCxcbiAgICAgIHJlcG9zaXRvcnksXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB3b3JrZmxvdyA9IG5ldyBHaXRodWJXb3JrZmxvdyhwcm9qZWN0LmdpdGh1YiEsIFwiYWxlcnQtb3Blbi1wcnNcIik7XG4gICAgd29ya2Zsb3cub24oe1xuICAgICAgLy8gcnVuIG9uIHdlZWtkYXlzIHNvbWV0aW1lIGR1cmluZyB3b3JraW5nIGhvdXJzICg4YW0tNHBtIFVUQylcbiAgICAgIHNjaGVkdWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjcm9uOiBnZW5lcmF0ZVJhbmRvbUNyb24oe1xuICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgIG1heEhvdXI6IDgsXG4gICAgICAgICAgICBob3VyT2Zmc2V0OiA4LFxuICAgICAgICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLldlZWtkYXlzLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB3b3JrZmxvdy5hZGRKb2IoXCJjaGVjay1vcGVuLXByc1wiLCB7XG4gICAgICBydW5zT246IFtcInVidW50dS1sYXRlc3RcIl0sXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBwdWxsUmVxdWVzdHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgIH0sXG4gICAgICBlbnY6IHt9LFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiRmluZCBvbGQgUFJzXCIsXG4gICAgICAgICAgaWQ6IFwib2xkX3Byc1wiLFxuICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgYFBSX0xJTktTPSQoZ2ggcHIgbGlzdCAtLXN0YXRlIG9wZW4gLS1yZXBvPVwiJHtyZXBvc2l0b3J5fVwiIC0tc2VhcmNoIFwiY3JlYXRlZDo8JChkYXRlIC1kICctJHttYXhIb3Vyc09wZW59aG91cnMnICslRlQlVFopXCIgLS1qc29uIHVybCAtLWpxIFwibWFwKC51cmwpXCIgKWAsXG4gICAgICAgICAgICBgaWYgWyBcIiRQUl9MSU5LU1wiID09IFwiW11cIiBdOyB0aGVuYCxcbiAgICAgICAgICAgIGAgIGVjaG8gXCJObyBQUnMgb3BlbiBmb3IgbW9yZSB0aGFuICR7bWF4SG91cnNPcGVufSBob3VyKHMpXCJgLFxuICAgICAgICAgICAgYGVsc2VgLFxuICAgICAgICAgICAgYCAgZWNobyBcInByX2xpbmtzPSRQUl9MSU5LU1wiID4+ICRHSVRIVUJfT1VUUFVUYCxcbiAgICAgICAgICAgIGBmaWAsXG4gICAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIGVudjogeyBHSF9UT0tFTjogXCIke3sgZ2l0aHViLnRva2VuIH19XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQWxlcnQgU2xhY2sgb24gb2xkIFBSc1wiLFxuICAgICAgICAgIGlmOiBcIiR7eyBzdGVwcy5vbGRfcHJzLm91dHB1dHMucHJfbGlua3MgfX1cIixcbiAgICAgICAgICB1c2VzOiBcInNsYWNrYXBpL3NsYWNrLWdpdGh1Yi1hY3Rpb25cIixcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICB3ZWJob29rOiBzbGFja1dlYmhvb2tVcmwsXG4gICAgICAgICAgICBcIndlYmhvb2stdHlwZVwiOiBcIndlYmhvb2stdHJpZ2dlclwiLFxuICAgICAgICAgICAgcGF5bG9hZDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBwcl9saW5rczpcbiAgICAgICAgICAgICAgICBcIiR7eyBqb2luKGZyb21KU09OKHN0ZXBzLm9sZF9wcnMub3V0cHV0cy5wcl9saW5rcyksICcsICcpIH19XCIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNvbnRpbnVlT25FcnJvcjogdHJ1ZSwgLy8gdGhpcyBqb2IgZmFpbHMgc29tZXRpbWVzIGR1ZSB0byBTbGFjayB0aW1lb3V0cyAoNTAzcyBhbmQgNTA0cykgYnV0IGl0J3MgcmVhbGx5IG5vdCBhIGJpZyBkZWFsIGlmIGl0IGRvZXNcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+ import { javascript } from "projen";
6
+ /**
7
+ * Approves PRs with the "auto-approve" label
8
+ */
9
+ export declare class AutoApprove {
10
+ constructor(project: javascript.NodeProject);
11
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AutoApprove = void 0;
8
+ const workflows_model_1 = require("projen/lib/github/workflows-model");
9
+ /**
10
+ * Approves PRs with the "auto-approve" label
11
+ */
12
+ class AutoApprove {
13
+ constructor(project) {
14
+ const workflow = project.github?.addWorkflow("auto-approve");
15
+ if (!workflow)
16
+ throw new Error("no workflow defined");
17
+ workflow.on({
18
+ pullRequestTarget: {
19
+ types: ["opened", "labeled", "ready_for_review", "reopened"],
20
+ },
21
+ });
22
+ workflow.concurrency = {
23
+ group: "${{ github.workflow }}-${{ github.head_ref }}",
24
+ };
25
+ const maintainerStatuses = `fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]')`;
26
+ workflow.addJobs({
27
+ approve: {
28
+ runsOn: ["ubuntu-latest"],
29
+ if: "contains(github.event.pull_request.labels.*.name, 'auto-approve') && github.event.pull_request.draft == false",
30
+ steps: [
31
+ {
32
+ name: "Checkout PR",
33
+ uses: "actions/checkout",
34
+ with: {
35
+ ref: "${{ env.GIT_REF }}",
36
+ repository: "${{ env.GIT_REPO }}",
37
+ },
38
+ },
39
+ {
40
+ name: "Auto-approve PRs by other users as team-cdk-terrain",
41
+ if: `github.event.pull_request.user.login != 'team-cdk-terrain' && (contains(${maintainerStatuses}, github.event.pull_request.author_association) || github.actor == 'dependabot[bot]')`,
42
+ run: "gh pr review $PR_ID --approve",
43
+ env: {
44
+ GH_TOKEN: "${{ secrets.PROJEN_GITHUB_TOKEN }}",
45
+ },
46
+ },
47
+ {
48
+ name: "Auto-approve PRs by team-cdk-terrain as github-actions[bot]",
49
+ if: "github.event.pull_request.user.login == 'team-cdk-terrain'",
50
+ run: "gh pr review $PR_ID --approve",
51
+ env: {
52
+ GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
53
+ },
54
+ },
55
+ ],
56
+ permissions: {
57
+ contents: workflows_model_1.JobPermission.READ,
58
+ pullRequests: workflows_model_1.JobPermission.WRITE,
59
+ },
60
+ env: {
61
+ GIT_REF: "${{ github.event.pull_request.head.ref }}",
62
+ GIT_REPO: "${{ github.event.pull_request.head.repo.full_name }}",
63
+ PR_ID: "${{ github.event.pull_request.number }}",
64
+ },
65
+ },
66
+ });
67
+ }
68
+ }
69
+ exports.AutoApprove = AutoApprove;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1hcHByb3ZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2F1dG8tYXBwcm92ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFHSCx1RUFBa0U7QUFFbEU7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFDdEIsWUFBWSxPQUErQjtRQUN6QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUV0RCxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ1YsaUJBQWlCLEVBQUU7Z0JBQ2pCLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDO2FBQzdEO1NBQ0YsQ0FBQyxDQUFDO1FBRUYsUUFBUSxDQUFDLFdBQW1CLEdBQUc7WUFDOUIsS0FBSyxFQUFFLCtDQUErQztTQUN2RCxDQUFDO1FBRUYsTUFBTSxrQkFBa0IsR0FBRyxpREFBaUQsQ0FBQztRQUM3RSxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ2YsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDekIsRUFBRSxFQUFFLCtHQUErRztnQkFDbkgsS0FBSyxFQUFFO29CQUNMO3dCQUNFLElBQUksRUFBRSxhQUFhO3dCQUNuQixJQUFJLEVBQUUsa0JBQWtCO3dCQUN4QixJQUFJLEVBQUU7NEJBQ0osR0FBRyxFQUFFLG9CQUFvQjs0QkFDekIsVUFBVSxFQUFFLHFCQUFxQjt5QkFDbEM7cUJBQ0Y7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLHFEQUFxRDt3QkFDM0QsRUFBRSxFQUFFLDJFQUEyRSxrQkFBa0IsdUZBQXVGO3dCQUN4TCxHQUFHLEVBQUUsK0JBQStCO3dCQUNwQyxHQUFHLEVBQUU7NEJBQ0gsUUFBUSxFQUFFLG9DQUFvQzt5QkFDL0M7cUJBQ0Y7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLDZEQUE2RDt3QkFDbkUsRUFBRSxFQUFFLDREQUE0RDt3QkFDaEUsR0FBRyxFQUFFLCtCQUErQjt3QkFDcEMsR0FBRyxFQUFFOzRCQUNILFFBQVEsRUFBRSw2QkFBNkI7eUJBQ3hDO3FCQUNGO2lCQUNGO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO29CQUM1QixZQUFZLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2lCQUNsQztnQkFDRCxHQUFHLEVBQUU7b0JBQ0gsT0FBTyxFQUFFLDJDQUEyQztvQkFDcEQsUUFBUSxFQUFFLHNEQUFzRDtvQkFDaEUsS0FBSyxFQUFFLHlDQUF5QztpQkFDakQ7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNERCxrQ0EyREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IGphdmFzY3JpcHQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuXG4vKipcbiAqIEFwcHJvdmVzIFBScyB3aXRoIHRoZSBcImF1dG8tYXBwcm92ZVwiIGxhYmVsXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRvQXBwcm92ZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IGphdmFzY3JpcHQuTm9kZVByb2plY3QpIHtcbiAgICBjb25zdCB3b3JrZmxvdyA9IHByb2plY3QuZ2l0aHViPy5hZGRXb3JrZmxvdyhcImF1dG8tYXBwcm92ZVwiKTtcblxuICAgIGlmICghd29ya2Zsb3cpIHRocm93IG5ldyBFcnJvcihcIm5vIHdvcmtmbG93IGRlZmluZWRcIik7XG5cbiAgICB3b3JrZmxvdy5vbih7XG4gICAgICBwdWxsUmVxdWVzdFRhcmdldDoge1xuICAgICAgICB0eXBlczogW1wib3BlbmVkXCIsIFwibGFiZWxlZFwiLCBcInJlYWR5X2Zvcl9yZXZpZXdcIiwgXCJyZW9wZW5lZFwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAod29ya2Zsb3cuY29uY3VycmVuY3kgYXMgYW55KSA9IHtcbiAgICAgIGdyb3VwOiBcIiR7eyBnaXRodWIud29ya2Zsb3cgfX0tJHt7IGdpdGh1Yi5oZWFkX3JlZiB9fVwiLFxuICAgIH07XG5cbiAgICBjb25zdCBtYWludGFpbmVyU3RhdHVzZXMgPSBgZnJvbUpTT04oJ1tcIk9XTkVSXCIsIFwiTUVNQkVSXCIsIFwiQ09MTEFCT1JBVE9SXCJdJylgO1xuICAgIHdvcmtmbG93LmFkZEpvYnMoe1xuICAgICAgYXBwcm92ZToge1xuICAgICAgICBydW5zT246IFtcInVidW50dS1sYXRlc3RcIl0sXG4gICAgICAgIGlmOiBcImNvbnRhaW5zKGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubGFiZWxzLioubmFtZSwgJ2F1dG8tYXBwcm92ZScpICYmIGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QuZHJhZnQgPT0gZmFsc2VcIixcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNoZWNrb3V0IFBSXCIsXG4gICAgICAgICAgICB1c2VzOiBcImFjdGlvbnMvY2hlY2tvdXRcIixcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgcmVmOiBcIiR7eyBlbnYuR0lUX1JFRiB9fVwiLFxuICAgICAgICAgICAgICByZXBvc2l0b3J5OiBcIiR7eyBlbnYuR0lUX1JFUE8gfX1cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkF1dG8tYXBwcm92ZSBQUnMgYnkgb3RoZXIgdXNlcnMgYXMgdGVhbS1jZGstdGVycmFpblwiLFxuICAgICAgICAgICAgaWY6IGBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LnVzZXIubG9naW4gIT0gJ3RlYW0tY2RrLXRlcnJhaW4nICYmIChjb250YWlucygke21haW50YWluZXJTdGF0dXNlc30sIGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QuYXV0aG9yX2Fzc29jaWF0aW9uKSB8fCBnaXRodWIuYWN0b3IgPT0gJ2RlcGVuZGFib3RbYm90XScpYCxcbiAgICAgICAgICAgIHJ1bjogXCJnaCBwciByZXZpZXcgJFBSX0lEIC0tYXBwcm92ZVwiLFxuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgIEdIX1RPS0VOOiBcIiR7eyBzZWNyZXRzLlBST0pFTl9HSVRIVUJfVE9LRU4gfX1cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkF1dG8tYXBwcm92ZSBQUnMgYnkgdGVhbS1jZGstdGVycmFpbiBhcyBnaXRodWItYWN0aW9uc1tib3RdXCIsXG4gICAgICAgICAgICBpZjogXCJnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LnVzZXIubG9naW4gPT0gJ3RlYW0tY2RrLXRlcnJhaW4nXCIsXG4gICAgICAgICAgICBydW46IFwiZ2ggcHIgcmV2aWV3ICRQUl9JRCAtLWFwcHJvdmVcIixcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICBHSF9UT0tFTjogXCIke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX1cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgfSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgR0lUX1JFRjogXCIke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5oZWFkLnJlZiB9fVwiLFxuICAgICAgICAgIEdJVF9SRVBPOiBcIiR7eyBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmhlYWQucmVwby5mdWxsX25hbWUgfX1cIixcbiAgICAgICAgICBQUl9JRDogXCIke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5udW1iZXIgfX1cIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+ import { javascript } from "projen";
6
+ interface AutoCloseCommunityIssuesOptions {
7
+ providerName: string;
8
+ }
9
+ /**
10
+ * Automatically closes issues and PRs by non-collaborators since this isn't the right place for them.
11
+ */
12
+ export declare class AutoCloseCommunityIssues {
13
+ constructor(project: javascript.NodeProject, options: AutoCloseCommunityIssuesOptions);
14
+ }
15
+ export {};
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AutoCloseCommunityIssues = void 0;
8
+ const workflows_model_1 = require("projen/lib/github/workflows-model");
9
+ /**
10
+ * Automatically closes issues and PRs by non-collaborators since this isn't the right place for them.
11
+ */
12
+ class AutoCloseCommunityIssues {
13
+ constructor(project, options) {
14
+ const { providerName } = options;
15
+ const issueWorkflow = project.github?.addWorkflow("auto-close-community-issues");
16
+ const prWorkflow = project.github?.addWorkflow("auto-close-community-prs");
17
+ if (!issueWorkflow)
18
+ throw new Error("no workflow defined");
19
+ if (!prWorkflow)
20
+ throw new Error("no workflow defined");
21
+ issueWorkflow.on({
22
+ issues: {
23
+ types: ["opened"],
24
+ },
25
+ });
26
+ prWorkflow.on({
27
+ pullRequestTarget: {
28
+ types: ["opened"],
29
+ },
30
+ });
31
+ const maintainerStatuses = `fromJSON('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]')`;
32
+ const comment = `Hi there! 👋 We appreciate your interest, but this is probably not the right place.
33
+ All the code in this repository is auto-generated using
34
+ [cdktn-provider-project](https://github.com/cdktn-io/cdktn-provider-project) and
35
+ [cdktn-repository-manager](https://github.com/cdktn-io/cdktn-repository-manager) from the source
36
+ [Terraform provider](https://github.com/terraform-providers/terraform-provider-${providerName}).
37
+ If there are problems, they should be addressed in one of those 3 repositories, not here,
38
+ as any changes here will just get overwritten the next time there is an update upstream.
39
+ Please open a new issue or PR in one of those repos. In the meantime, I'll auto-close this.
40
+ Thanks!`.replace(/\s+/g, " ");
41
+ issueWorkflow.addJob("autoclose", {
42
+ runsOn: ["ubuntu-latest"],
43
+ permissions: {
44
+ contents: workflows_model_1.JobPermission.READ,
45
+ issues: workflows_model_1.JobPermission.WRITE,
46
+ },
47
+ if: `github.event.issue.user.login != 'team-cdk-terrain' && !contains(${maintainerStatuses}, github.event.issue.author_association)`,
48
+ steps: [
49
+ {
50
+ name: "Checkout",
51
+ uses: "actions/checkout",
52
+ },
53
+ {
54
+ name: "Auto-close issues by non-collaborators",
55
+ env: {
56
+ GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
57
+ },
58
+ run: 'gh issue close ${{ github.event.issue.number }} --reason "not planned" --comment "' +
59
+ comment +
60
+ '"',
61
+ },
62
+ {
63
+ name: "Add labels",
64
+ env: {
65
+ GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
66
+ },
67
+ run: 'gh issue edit ${{ github.event.issue.number }} --add-label "invalid,wontfix"',
68
+ },
69
+ ],
70
+ });
71
+ prWorkflow.addJob("autoclose", {
72
+ runsOn: ["ubuntu-latest"],
73
+ permissions: {
74
+ contents: workflows_model_1.JobPermission.READ,
75
+ pullRequests: workflows_model_1.JobPermission.WRITE,
76
+ },
77
+ if: `github.event.pull_request.user.login != 'team-cdk-terrain' && github.actor != 'dependabot[bot]' && !contains(${maintainerStatuses}, github.event.pull_request.author_association)`,
78
+ steps: [
79
+ {
80
+ name: "Checkout",
81
+ uses: "actions/checkout",
82
+ },
83
+ {
84
+ name: "Auto-close PRs by non-collaborators",
85
+ env: {
86
+ GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
87
+ },
88
+ run: 'gh pr close ${{ github.event.pull_request.number }} --comment "' +
89
+ comment +
90
+ '"',
91
+ },
92
+ {
93
+ name: "Add labels",
94
+ env: {
95
+ GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
96
+ },
97
+ run: 'gh pr edit ${{ github.event.pull_request.number }} --add-label "invalid,wontfix"',
98
+ },
99
+ ],
100
+ });
101
+ }
102
+ }
103
+ exports.AutoCloseCommunityIssues = AutoCloseCommunityIssues;
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1jbG9zZS1jb21tdW5pdHktaXNzdWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2F1dG8tY2xvc2UtY29tbXVuaXR5LWlzc3Vlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFHSCx1RUFBa0U7QUFLbEU7O0dBRUc7QUFDSCxNQUFhLHdCQUF3QjtJQUNuQyxZQUNFLE9BQStCLEVBQy9CLE9BQXdDO1FBRXhDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDakMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQy9DLDZCQUE2QixDQUM5QixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUV4RCxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNsQjtTQUNGLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDWixpQkFBaUIsRUFBRTtnQkFDakIsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQ2xCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxrQkFBa0IsR0FBRyxnRUFBZ0UsQ0FBQztRQUM1RixNQUFNLE9BQU8sR0FDWDs7Ozt1RkFJaUYsWUFBWTs7OztjQUlyRixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFaEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDaEMsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2dCQUM1QixNQUFNLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2FBQzVCO1lBQ0QsRUFBRSxFQUFFLG9FQUFvRSxrQkFBa0IsMENBQTBDO1lBQ3BJLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLGtCQUFrQjtpQkFDekI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLHdDQUF3QztvQkFDOUMsR0FBRyxFQUFFO3dCQUNILFFBQVEsRUFBRSw2QkFBNkI7cUJBQ3hDO29CQUNELEdBQUcsRUFDRCxvRkFBb0Y7d0JBQ3BGLE9BQU87d0JBQ1AsR0FBRztpQkFDTjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsR0FBRyxFQUFFO3dCQUNILFFBQVEsRUFBRSw2QkFBNkI7cUJBQ3hDO29CQUNELEdBQUcsRUFBRSw4RUFBOEU7aUJBQ3BGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUM3QixNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7WUFDekIsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSwrQkFBYSxDQUFDLElBQUk7Z0JBQzVCLFlBQVksRUFBRSwrQkFBYSxDQUFDLEtBQUs7YUFDbEM7WUFDRCxFQUFFLEVBQUUsZ0hBQWdILGtCQUFrQixpREFBaUQ7WUFDdkwsS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxVQUFVO29CQUNoQixJQUFJLEVBQUUsa0JBQWtCO2lCQUN6QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUscUNBQXFDO29CQUMzQyxHQUFHLEVBQUU7d0JBQ0gsUUFBUSxFQUFFLDZCQUE2QjtxQkFDeEM7b0JBQ0QsR0FBRyxFQUNELGlFQUFpRTt3QkFDakUsT0FBTzt3QkFDUCxHQUFHO2lCQUNOO2dCQUNEO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixHQUFHLEVBQUU7d0JBQ0gsUUFBUSxFQUFFLDZCQUE2QjtxQkFDeEM7b0JBQ0QsR0FBRyxFQUFFLGtGQUFrRjtpQkFDeEY7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXJHRCw0REFxR0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IGphdmFzY3JpcHQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuXG5pbnRlcmZhY2UgQXV0b0Nsb3NlQ29tbXVuaXR5SXNzdWVzT3B0aW9ucyB7XG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nO1xufVxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IGNsb3NlcyBpc3N1ZXMgYW5kIFBScyBieSBub24tY29sbGFib3JhdG9ycyBzaW5jZSB0aGlzIGlzbid0IHRoZSByaWdodCBwbGFjZSBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1dG9DbG9zZUNvbW11bml0eUlzc3VlcyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb2plY3Q6IGphdmFzY3JpcHQuTm9kZVByb2plY3QsXG4gICAgb3B0aW9uczogQXV0b0Nsb3NlQ29tbXVuaXR5SXNzdWVzT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IHByb3ZpZGVyTmFtZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBpc3N1ZVdvcmtmbG93ID0gcHJvamVjdC5naXRodWI/LmFkZFdvcmtmbG93KFxuICAgICAgXCJhdXRvLWNsb3NlLWNvbW11bml0eS1pc3N1ZXNcIlxuICAgICk7XG4gICAgY29uc3QgcHJXb3JrZmxvdyA9IHByb2plY3QuZ2l0aHViPy5hZGRXb3JrZmxvdyhcImF1dG8tY2xvc2UtY29tbXVuaXR5LXByc1wiKTtcblxuICAgIGlmICghaXNzdWVXb3JrZmxvdykgdGhyb3cgbmV3IEVycm9yKFwibm8gd29ya2Zsb3cgZGVmaW5lZFwiKTtcbiAgICBpZiAoIXByV29ya2Zsb3cpIHRocm93IG5ldyBFcnJvcihcIm5vIHdvcmtmbG93IGRlZmluZWRcIik7XG5cbiAgICBpc3N1ZVdvcmtmbG93Lm9uKHtcbiAgICAgIGlzc3Vlczoge1xuICAgICAgICB0eXBlczogW1wib3BlbmVkXCJdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBwcldvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0VGFyZ2V0OiB7XG4gICAgICAgIHR5cGVzOiBbXCJvcGVuZWRcIl0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbnRhaW5lclN0YXR1c2VzID0gYGZyb21KU09OKCdbXCJPV05FUlwiLCBcIk1FTUJFUlwiLCBcIkNPTExBQk9SQVRPUlwiLCBcIkNPTlRSSUJVVE9SXCJdJylgO1xuICAgIGNvbnN0IGNvbW1lbnQgPVxuICAgICAgYEhpIHRoZXJlISDwn5GLIFdlIGFwcHJlY2lhdGUgeW91ciBpbnRlcmVzdCwgYnV0IHRoaXMgaXMgcHJvYmFibHkgbm90IHRoZSByaWdodCBwbGFjZS4gXG4gICAgICBBbGwgdGhlIGNvZGUgaW4gdGhpcyByZXBvc2l0b3J5IGlzIGF1dG8tZ2VuZXJhdGVkIHVzaW5nIFxuICAgICAgW2Nka3RuLXByb3ZpZGVyLXByb2plY3RdKGh0dHBzOi8vZ2l0aHViLmNvbS9jZGt0bi1pby9jZGt0bi1wcm92aWRlci1wcm9qZWN0KSBhbmQgXG4gICAgICBbY2RrdG4tcmVwb3NpdG9yeS1tYW5hZ2VyXShodHRwczovL2dpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcmVwb3NpdG9yeS1tYW5hZ2VyKSBmcm9tIHRoZSBzb3VyY2UgXG4gICAgICBbVGVycmFmb3JtIHByb3ZpZGVyXShodHRwczovL2dpdGh1Yi5jb20vdGVycmFmb3JtLXByb3ZpZGVycy90ZXJyYWZvcm0tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9KS4gXG4gICAgICBJZiB0aGVyZSBhcmUgcHJvYmxlbXMsIHRoZXkgc2hvdWxkIGJlIGFkZHJlc3NlZCBpbiBvbmUgb2YgdGhvc2UgMyByZXBvc2l0b3JpZXMsIG5vdCBoZXJlLCBcbiAgICAgIGFzIGFueSBjaGFuZ2VzIGhlcmUgd2lsbCBqdXN0IGdldCBvdmVyd3JpdHRlbiB0aGUgbmV4dCB0aW1lIHRoZXJlIGlzIGFuIHVwZGF0ZSB1cHN0cmVhbS4gXG4gICAgICBQbGVhc2Ugb3BlbiBhIG5ldyBpc3N1ZSBvciBQUiBpbiBvbmUgb2YgdGhvc2UgcmVwb3MuIEluIHRoZSBtZWFudGltZSwgSSdsbCBhdXRvLWNsb3NlIHRoaXMuIFxuICAgICAgVGhhbmtzIWAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIik7XG5cbiAgICBpc3N1ZVdvcmtmbG93LmFkZEpvYihcImF1dG9jbG9zZVwiLCB7XG4gICAgICBydW5zT246IFtcInVidW50dS1sYXRlc3RcIl0sXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBpc3N1ZXM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICB9LFxuICAgICAgaWY6IGBnaXRodWIuZXZlbnQuaXNzdWUudXNlci5sb2dpbiAhPSAndGVhbS1jZGstdGVycmFpbicgJiYgIWNvbnRhaW5zKCR7bWFpbnRhaW5lclN0YXR1c2VzfSwgZ2l0aHViLmV2ZW50Lmlzc3VlLmF1dGhvcl9hc3NvY2lhdGlvbilgLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQ2hlY2tvdXRcIixcbiAgICAgICAgICB1c2VzOiBcImFjdGlvbnMvY2hlY2tvdXRcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQXV0by1jbG9zZSBpc3N1ZXMgYnkgbm9uLWNvbGxhYm9yYXRvcnNcIixcbiAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgIEdIX1RPS0VOOiBcIiR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuOlxuICAgICAgICAgICAgJ2doIGlzc3VlIGNsb3NlICR7eyBnaXRodWIuZXZlbnQuaXNzdWUubnVtYmVyIH19IC0tcmVhc29uIFwibm90IHBsYW5uZWRcIiAtLWNvbW1lbnQgXCInICtcbiAgICAgICAgICAgIGNvbW1lbnQgK1xuICAgICAgICAgICAgJ1wiJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQWRkIGxhYmVsc1wiLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgR0hfVE9LRU46IFwiJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW46ICdnaCBpc3N1ZSBlZGl0ICR7eyBnaXRodWIuZXZlbnQuaXNzdWUubnVtYmVyIH19IC0tYWRkLWxhYmVsIFwiaW52YWxpZCx3b250Zml4XCInLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHByV29ya2Zsb3cuYWRkSm9iKFwiYXV0b2Nsb3NlXCIsIHtcbiAgICAgIHJ1bnNPbjogW1widWJ1bnR1LWxhdGVzdFwiXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBpZjogYGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbiAhPSAndGVhbS1jZGstdGVycmFpbicgJiYgZ2l0aHViLmFjdG9yICE9ICdkZXBlbmRhYm90W2JvdF0nICYmICFjb250YWlucygke21haW50YWluZXJTdGF0dXNlc30sIGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QuYXV0aG9yX2Fzc29jaWF0aW9uKWAsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJDaGVja291dFwiLFxuICAgICAgICAgIHVzZXM6IFwiYWN0aW9ucy9jaGVja291dFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBdXRvLWNsb3NlIFBScyBieSBub24tY29sbGFib3JhdG9yc1wiLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgR0hfVE9LRU46IFwiJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW46XG4gICAgICAgICAgICAnZ2ggcHIgY2xvc2UgJHt7IGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubnVtYmVyIH19IC0tY29tbWVudCBcIicgK1xuICAgICAgICAgICAgY29tbWVudCArXG4gICAgICAgICAgICAnXCInLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBZGQgbGFiZWxzXCIsXG4gICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICBHSF9UT0tFTjogXCIke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX1cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1bjogJ2doIHByIGVkaXQgJHt7IGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubnVtYmVyIH19IC0tYWRkLWxhYmVsIFwiaW52YWxpZCx3b250Zml4XCInLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+ import { javascript } from "projen";
6
+ /**
7
+ * Enables GitHub's built-in automerge for PRs with the "automerge" label
8
+ */
9
+ export declare class Automerge {
10
+ constructor(project: javascript.NodeProject);
11
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Automerge = void 0;
8
+ const workflows_model_1 = require("projen/lib/github/workflows-model");
9
+ /**
10
+ * Enables GitHub's built-in automerge for PRs with the "automerge" label
11
+ */
12
+ class Automerge {
13
+ constructor(project) {
14
+ const workflow = project.github?.addWorkflow("automerge");
15
+ if (!workflow)
16
+ throw new Error("no workflow defined");
17
+ workflow.on({
18
+ pullRequestTarget: {
19
+ types: [
20
+ "opened",
21
+ "labeled",
22
+ "ready_for_review",
23
+ "reopened",
24
+ "synchronize",
25
+ ],
26
+ },
27
+ });
28
+ workflow.concurrency = {
29
+ group: "${{ github.workflow }}-${{ github.head_ref }}",
30
+ };
31
+ const maintainerStatuses = `fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]')`;
32
+ workflow.addJobs({
33
+ automerge: {
34
+ runsOn: ["ubuntu-latest"],
35
+ if: "contains(github.event.pull_request.labels.*.name, 'automerge') && !contains(github.event.pull_request.labels.*.name, 'do-not-merge') && github.event.pull_request.draft == false",
36
+ steps: [
37
+ {
38
+ name: "Checkout",
39
+ uses: "actions/checkout",
40
+ with: {
41
+ ref: "${{ env.GIT_REF }}",
42
+ repository: "${{ env.GIT_REPO }}",
43
+ },
44
+ },
45
+ {
46
+ name: "Turn on automerge for this PR by a trusted user or bot",
47
+ if: `github.event.pull_request.user.login == 'team-cdk-terrain' || contains(${maintainerStatuses}, github.event.pull_request.author_association) || github.actor == 'dependabot[bot]'`,
48
+ run: "gh pr merge --auto --squash $PR_ID",
49
+ env: {
50
+ GH_TOKEN: "${{ secrets.PROJEN_GITHUB_TOKEN }}",
51
+ },
52
+ },
53
+ ],
54
+ permissions: {
55
+ contents: workflows_model_1.JobPermission.READ,
56
+ },
57
+ env: {
58
+ GIT_REF: "${{ github.event.pull_request.head.ref }}",
59
+ GIT_REPO: "${{ github.event.pull_request.head.repo.full_name }}",
60
+ PR_ID: "${{ github.event.pull_request.number }}",
61
+ },
62
+ },
63
+ });
64
+ }
65
+ }
66
+ exports.Automerge = Automerge;
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b21lcmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2F1dG9tZXJnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFHSCx1RUFBa0U7QUFFbEU7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUFDcEIsWUFBWSxPQUErQjtRQUN6QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUV0RCxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ1YsaUJBQWlCLEVBQUU7Z0JBQ2pCLEtBQUssRUFBRTtvQkFDTCxRQUFRO29CQUNSLFNBQVM7b0JBQ1Qsa0JBQWtCO29CQUNsQixVQUFVO29CQUNWLGFBQWE7aUJBQ2Q7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVGLFFBQVEsQ0FBQyxXQUFtQixHQUFHO1lBQzlCLEtBQUssRUFBRSwrQ0FBK0M7U0FDdkQsQ0FBQztRQUVGLE1BQU0sa0JBQWtCLEdBQUcsaURBQWlELENBQUM7UUFDN0UsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNmLFNBQVMsRUFBRTtnQkFDVCxNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQ3pCLEVBQUUsRUFBRSxrTEFBa0w7Z0JBQ3RMLEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsSUFBSSxFQUFFLGtCQUFrQjt3QkFDeEIsSUFBSSxFQUFFOzRCQUNKLEdBQUcsRUFBRSxvQkFBb0I7NEJBQ3pCLFVBQVUsRUFBRSxxQkFBcUI7eUJBQ2xDO3FCQUNGO29CQUNEO3dCQUNFLElBQUksRUFBRSx3REFBd0Q7d0JBQzlELEVBQUUsRUFBRSwwRUFBMEUsa0JBQWtCLHNGQUFzRjt3QkFDdEwsR0FBRyxFQUFFLG9DQUFvQzt3QkFDekMsR0FBRyxFQUFFOzRCQUNILFFBQVEsRUFBRSxvQ0FBb0M7eUJBQy9DO3FCQUNGO2lCQUNGO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2lCQUM3QjtnQkFDRCxHQUFHLEVBQUU7b0JBQ0gsT0FBTyxFQUFFLDJDQUEyQztvQkFDcEQsUUFBUSxFQUFFLHNEQUFzRDtvQkFDaEUsS0FBSyxFQUFFLHlDQUF5QztpQkFDakQ7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXhERCw4QkF3REMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IGphdmFzY3JpcHQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuXG4vKipcbiAqIEVuYWJsZXMgR2l0SHViJ3MgYnVpbHQtaW4gYXV0b21lcmdlIGZvciBQUnMgd2l0aCB0aGUgXCJhdXRvbWVyZ2VcIiBsYWJlbFxuICovXG5leHBvcnQgY2xhc3MgQXV0b21lcmdlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogamF2YXNjcmlwdC5Ob2RlUHJvamVjdCkge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gcHJvamVjdC5naXRodWI/LmFkZFdvcmtmbG93KFwiYXV0b21lcmdlXCIpO1xuXG4gICAgaWYgKCF3b3JrZmxvdykgdGhyb3cgbmV3IEVycm9yKFwibm8gd29ya2Zsb3cgZGVmaW5lZFwiKTtcblxuICAgIHdvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0VGFyZ2V0OiB7XG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgXCJvcGVuZWRcIixcbiAgICAgICAgICBcImxhYmVsZWRcIixcbiAgICAgICAgICBcInJlYWR5X2Zvcl9yZXZpZXdcIixcbiAgICAgICAgICBcInJlb3BlbmVkXCIsXG4gICAgICAgICAgXCJzeW5jaHJvbml6ZVwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgICh3b3JrZmxvdy5jb25jdXJyZW5jeSBhcyBhbnkpID0ge1xuICAgICAgZ3JvdXA6IFwiJHt7IGdpdGh1Yi53b3JrZmxvdyB9fS0ke3sgZ2l0aHViLmhlYWRfcmVmIH19XCIsXG4gICAgfTtcblxuICAgIGNvbnN0IG1haW50YWluZXJTdGF0dXNlcyA9IGBmcm9tSlNPTignW1wiT1dORVJcIiwgXCJNRU1CRVJcIiwgXCJDT0xMQUJPUkFUT1JcIl0nKWA7XG4gICAgd29ya2Zsb3cuYWRkSm9icyh7XG4gICAgICBhdXRvbWVyZ2U6IHtcbiAgICAgICAgcnVuc09uOiBbXCJ1YnVudHUtbGF0ZXN0XCJdLFxuICAgICAgICBpZjogXCJjb250YWlucyhnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmxhYmVscy4qLm5hbWUsICdhdXRvbWVyZ2UnKSAmJiAhY29udGFpbnMoZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5sYWJlbHMuKi5uYW1lLCAnZG8tbm90LW1lcmdlJykgJiYgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5kcmFmdCA9PSBmYWxzZVwiLFxuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ2hlY2tvdXRcIixcbiAgICAgICAgICAgIHVzZXM6IFwiYWN0aW9ucy9jaGVja291dFwiLFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICByZWY6IFwiJHt7IGVudi5HSVRfUkVGIH19XCIsXG4gICAgICAgICAgICAgIHJlcG9zaXRvcnk6IFwiJHt7IGVudi5HSVRfUkVQTyB9fVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiVHVybiBvbiBhdXRvbWVyZ2UgZm9yIHRoaXMgUFIgYnkgYSB0cnVzdGVkIHVzZXIgb3IgYm90XCIsXG4gICAgICAgICAgICBpZjogYGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbiA9PSAndGVhbS1jZGstdGVycmFpbicgfHwgY29udGFpbnMoJHttYWludGFpbmVyU3RhdHVzZXN9LCBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmF1dGhvcl9hc3NvY2lhdGlvbikgfHwgZ2l0aHViLmFjdG9yID09ICdkZXBlbmRhYm90W2JvdF0nYCxcbiAgICAgICAgICAgIHJ1bjogXCJnaCBwciBtZXJnZSAtLWF1dG8gLS1zcXVhc2ggJFBSX0lEXCIsXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgR0hfVE9LRU46IFwiJHt7IHNlY3JldHMuUFJPSkVOX0dJVEhVQl9UT0tFTiB9fVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIH0sXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIEdJVF9SRUY6IFwiJHt7IGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QuaGVhZC5yZWYgfX1cIixcbiAgICAgICAgICBHSVRfUkVQTzogXCIke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5oZWFkLnJlcG8uZnVsbF9uYW1lIH19XCIsXG4gICAgICAgICAgUFJfSUQ6IFwiJHt7IGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubnVtYmVyIH19XCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+ import { cdk } from "projen";
6
+ import { PackageInfo } from "./package-info";
7
+ interface CdktfConfigOptions {
8
+ terraformProvider: string;
9
+ providerName: string;
10
+ fqproviderName: string;
11
+ providerVersion: string;
12
+ cdktfVersion: string;
13
+ constructsVersion: string;
14
+ packageInfo: PackageInfo;
15
+ githubNamespace: string;
16
+ /**
17
+ * Whether or not this prebuilt provider is deprecated.
18
+ * If true, no new versions will be published.
19
+ */
20
+ isDeprecated: boolean;
21
+ /**
22
+ * An optional date when the project should be considered deprecated,
23
+ * to be used in the README text. If no date is provided, then the
24
+ * date of the build will be used by default.
25
+ */
26
+ deprecationDate?: string;
27
+ jsiiVersion?: string;
28
+ typescriptVersion?: string;
29
+ }
30
+ export declare class CdktfConfig {
31
+ constructor(project: cdk.JsiiProject, options: CdktfConfigOptions);
32
+ }
33
+ export {};
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CdktfConfig = void 0;
8
+ const path = require("path");
9
+ const fs_extra_1 = require("fs-extra");
10
+ const projen_1 = require("projen");
11
+ const readme_1 = require("./readme");
12
+ const CDKTF_JSON_FILE = "cdktf.json";
13
+ class CdktfConfig {
14
+ constructor(project, options) {
15
+ const { terraformProvider, providerName, jsiiVersion, typescriptVersion, isDeprecated, } = options;
16
+ const cdktfVersion = options.cdktfVersion;
17
+ const constructsVersion = options.constructsVersion;
18
+ project.addPeerDeps(`cdktf@${cdktfVersion}`);
19
+ project.addPeerDeps(`constructs@${constructsVersion}`);
20
+ project.addDevDeps(`cdktf@${cdktfVersion}`);
21
+ project.addDevDeps(`cdktf-cli@${cdktfVersion}`);
22
+ project.addDevDeps(`constructs@${constructsVersion}`);
23
+ if (jsiiVersion) {
24
+ project.addDevDeps(`jsii@${jsiiVersion}`);
25
+ }
26
+ if (typescriptVersion) {
27
+ project.addDevDeps(`typescript@${typescriptVersion}`);
28
+ }
29
+ const fetchTask = project.addTask("fetch", {
30
+ exec: `mkdir -p src && rm -rf ./src/* && cdktf get && cp -R .gen/providers/${providerName}/* ./src/ && cp .gen/versions.json ./src/version.json`,
31
+ env: {
32
+ CHECKPOINT_DISABLE: "1",
33
+ },
34
+ });
35
+ // execute projen after fetch to ensure that updates to version.json are picked up in package.json
36
+ fetchTask.spawn(project.tasks.tryFind("default"));
37
+ project.setScript("commit", 'git add -A && git commit -am "Update provider" || echo "No changes to commit"');
38
+ // eslint-disable-next-line quotes
39
+ project.setScript("should-release", `! git diff --exit-code v$(cat version.json | jq -r '.version') ./src ./package.json`);
40
+ project.setScript("prebump", "yarn fetch && yarn compile && yarn run commit && yarn run should-release");
41
+ project.setScript("compile", "jsii --silence-warnings=reserved-word");
42
+ project.setScript("build-provider", "yarn fetch && yarn compile && yarn docgen");
43
+ project.setScript("test", "jest --passWithNoTests");
44
+ project.addFields({ publishConfig: { access: "public" } });
45
+ project.addFields({
46
+ "standard-version": {
47
+ types: [
48
+ {
49
+ type: "feat",
50
+ section: "Features",
51
+ },
52
+ {
53
+ type: "fix",
54
+ section: "Bug Fixes",
55
+ },
56
+ {
57
+ type: "chore",
58
+ section: "Updates",
59
+ },
60
+ {
61
+ type: "docs",
62
+ hidden: true,
63
+ },
64
+ {
65
+ type: "style",
66
+ hidden: true,
67
+ },
68
+ {
69
+ type: "refactor",
70
+ hidden: true,
71
+ },
72
+ {
73
+ type: "perf",
74
+ hidden: true,
75
+ },
76
+ {
77
+ type: "test",
78
+ hidden: true,
79
+ },
80
+ ],
81
+ },
82
+ });
83
+ // set provider name and version from version.json (if it exists yet)
84
+ const versionFile = path.resolve(project.outdir, "src/version.json");
85
+ let fullyQualifiedProviderName = "<unknown>";
86
+ let actualProviderVersion = "<unknown>";
87
+ if ((0, fs_extra_1.existsSync)(versionFile)) {
88
+ const map = JSON.parse((0, fs_extra_1.readFileSync)(versionFile, "utf8"));
89
+ if (Object.keys(map).length !== 1) {
90
+ throw new Error("version.json must have exactly one entry. specifying multiple providers is not supported");
91
+ }
92
+ const [fqpn, version] = Object.entries(map)[0];
93
+ fullyQualifiedProviderName = fqpn;
94
+ actualProviderVersion = version;
95
+ }
96
+ project.addFields({
97
+ cdktf: {
98
+ isDeprecated,
99
+ provider: {
100
+ name: fullyQualifiedProviderName,
101
+ version: actualProviderVersion,
102
+ },
103
+ },
104
+ });
105
+ if (project.npmignore) {
106
+ project.npmignore.exclude(CDKTF_JSON_FILE);
107
+ project.npmignore.exclude(".gen");
108
+ project.npmignore.exclude(".terraform");
109
+ project.npmignore.exclude("cdktf.json");
110
+ project.npmignore.exclude("API.md");
111
+ project.npmignore.exclude("docs");
112
+ project.npmignore.exclude("scripts");
113
+ project.npmignore.exclude(".projenrc.js");
114
+ project.npmignore.exclude(".copywrite.hcl");
115
+ }
116
+ project.gitignore.exclude(".gen");
117
+ project.gitignore.exclude(".terraform");
118
+ project.gitignore.exclude("package-lock.json");
119
+ new projen_1.JsonFile(project, CDKTF_JSON_FILE, {
120
+ obj: {
121
+ language: "typescript",
122
+ app: "echo noop",
123
+ sendCrashReports: false,
124
+ terraformProviders: [terraformProvider],
125
+ },
126
+ });
127
+ new readme_1.ReadmeFile(project, "README.md", {
128
+ ...options,
129
+ underlyingTerraformVersion: actualProviderVersion,
130
+ });
131
+ }
132
+ }
133
+ exports.CdktfConfig = CdktfConfig;
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nka3RmLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCw2QkFBNkI7QUFDN0IsdUNBQW9EO0FBQ3BELG1DQUF1QztBQUV2QyxxQ0FBc0M7QUFFdEMsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDO0FBMEJyQyxNQUFhLFdBQVc7SUFDdEIsWUFBWSxPQUF3QixFQUFFLE9BQTJCO1FBQy9ELE1BQU0sRUFDSixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsWUFBWSxHQUNiLEdBQUcsT0FBTyxDQUFDO1FBRVosTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUMxQyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUVwRCxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBRXZELE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFFdEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFP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QUVILElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFO1lBQ25DLEdBQUcsT0FBTztZQUNWLDBCQUEwQixFQUFFLHFCQUFxQjtTQUNsRCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF4SkQsa0NBd0pDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7IEpzb25GaWxlLCBjZGsgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBQYWNrYWdlSW5mbyB9IGZyb20gXCIuL3BhY2thZ2UtaW5mb1wiO1xuaW1wb3J0IHsgUmVhZG1lRmlsZSB9IGZyb20gXCIuL3JlYWRtZVwiO1xuXG5jb25zdCBDREtURl9KU09OX0ZJTEUgPSBcImNka3RmLmpzb25cIjtcblxuaW50ZXJmYWNlIENka3RmQ29uZmlnT3B0aW9ucyB7XG4gIHRlcnJhZm9ybVByb3ZpZGVyOiBzdHJpbmc7XG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICBmcXByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICBwcm92aWRlclZlcnNpb246IHN0cmluZztcbiAgY2RrdGZWZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnN0cnVjdHNWZXJzaW9uOiBzdHJpbmc7XG4gIHBhY2thZ2VJbmZvOiBQYWNrYWdlSW5mbztcbiAgZ2l0aHViTmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHByZWJ1aWx0IHByb3ZpZGVyIGlzIGRlcHJlY2F0ZWQuXG4gICAqIElmIHRydWUsIG5vIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHB1Ymxpc2hlZC5cbiAgICovXG4gIGlzRGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGRhdGUgd2hlbiB0aGUgcHJvamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBkZXByZWNhdGVkLFxuICAgKiB0byBiZSB1c2VkIGluIHRoZSBSRUFETUUgdGV4dC4gSWYgbm8gZGF0ZSBpcyBwcm92aWRlZCwgdGhlbiB0aGVcbiAgICogZGF0ZSBvZiB0aGUgYnVpbGQgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBkZXByZWNhdGlvbkRhdGU/OiBzdHJpbmc7XG4gIGpzaWlWZXJzaW9uPzogc3RyaW5nO1xuICB0eXBlc2NyaXB0VmVyc2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENka3RmQ29uZmlnIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogY2RrLkpzaWlQcm9qZWN0LCBvcHRpb25zOiBDZGt0ZkNvbmZpZ09wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICB0ZXJyYWZvcm1Qcm92aWRlcixcbiAgICAgIHByb3ZpZGVyTmFtZSxcbiAgICAgIGpzaWlWZXJzaW9uLFxuICAgICAgdHlwZXNjcmlwdFZlcnNpb24sXG4gICAgICBpc0RlcHJlY2F0ZWQsXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBjZGt0ZlZlcnNpb24gPSBvcHRpb25zLmNka3RmVmVyc2lvbjtcbiAgICBjb25zdCBjb25zdHJ1Y3RzVmVyc2lvbiA9IG9wdGlvbnMuY29uc3RydWN0c1ZlcnNpb247XG5cbiAgICBwcm9qZWN0LmFkZFBlZXJEZXBzKGBjZGt0ZkAke2Nka3RmVmVyc2lvbn1gKTtcbiAgICBwcm9qZWN0LmFkZFBlZXJEZXBzKGBjb25zdHJ1Y3RzQCR7Y29uc3RydWN0c1ZlcnNpb259YCk7XG5cbiAgICBwcm9qZWN0LmFkZERldkRlcHMoYGNka3RmQCR7Y2RrdGZWZXJzaW9ufWApO1xuICAgIHByb2plY3QuYWRkRGV2RGVwcyhgY2RrdGYtY2xpQCR7Y2RrdGZWZXJzaW9ufWApO1xuICAgIHByb2plY3QuYWRkRGV2RGVwcyhgY29uc3RydWN0c0Ake2NvbnN0cnVjdHNWZXJzaW9ufWApO1xuXG4gICAgaWYgKGpzaWlWZXJzaW9uKSB7XG4gICAgICBwcm9qZWN0LmFkZERldkRlcHMoYGpzaWlAJHtqc2lpVmVyc2lvbn1gKTtcbiAgICB9XG4gICAgaWYgKHR5cGVzY3JpcHRWZXJzaW9uKSB7XG4gICAgICBwcm9qZWN0LmFkZERldkRlcHMoYHR5cGVzY3JpcHRAJHt0eXBlc2NyaXB0VmVyc2lvbn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmZXRjaFRhc2sgPSBwcm9qZWN0LmFkZFRhc2soXCJmZXRjaFwiLCB7XG4gICAgICBleGVjOiBgbWtkaXIgLXAgc3JjICYmIHJtIC1yZiAuL3NyYy8qICYmIGNka3RmIGdldCAmJiBjcCAtUiAuZ2VuL3Byb3ZpZGVycy8ke3Byb3ZpZGVyTmFtZX0vKiAuL3NyYy8gJiYgY3AgLmdlbi92ZXJzaW9ucy5qc29uIC4vc3JjL3ZlcnNpb24uanNvbmAsXG4gICAgICBlbnY6IHtcbiAgICAgICAgQ0hFQ0tQT0lOVF9ESVNBQkxFOiBcIjFcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gZXhlY3V0ZSBwcm9qZW4gYWZ0ZXIgZmV0Y2ggdG8gZW5zdXJlIHRoYXQgdXBkYXRlcyB0byB2ZXJzaW9uLmpzb24gYXJlIHBpY2tlZCB1cCBpbiBwYWNrYWdlLmpzb25cbiAgICBmZXRjaFRhc2suc3Bhd24ocHJvamVjdC50YXNrcy50cnlGaW5kKFwiZGVmYXVsdFwiKSEpO1xuXG4gICAgcHJvamVjdC5zZXRTY3JpcHQoXG4gICAgICBcImNvbW1pdFwiLFxuICAgICAgJ2dpdCBhZGQgLUEgJiYgZ2l0IGNvbW1pdCAtYW0gXCJVcGRhdGUgcHJvdmlkZXJcIiB8fCBlY2hvIFwiTm8gY2hhbmdlcyB0byBjb21taXRcIidcbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBxdW90ZXNcbiAgICBwcm9qZWN0LnNldFNjcmlwdChcbiAgICAgIFwic2hvdWxkLXJlbGVhc2VcIixcbiAgICAgIGAhIGdpdCBkaWZmIC0tZXhpdC1jb2RlIHYkKGNhdCB2ZXJzaW9uLmpzb24gfCBqcSAtciAnLnZlcnNpb24nKSAuL3NyYyAuL3BhY2thZ2UuanNvbmBcbiAgICApO1xuICAgIHByb2plY3Quc2V0U2NyaXB0KFxuICAgICAgXCJwcmVidW1wXCIsXG4gICAgICBcInlhcm4gZmV0Y2ggJiYgeWFybiBjb21waWxlICYmIHlhcm4gcnVuIGNvbW1pdCAmJiB5YXJuIHJ1biBzaG91bGQtcmVsZWFzZVwiXG4gICAgKTtcbiAgICBwcm9qZWN0LnNldFNjcmlwdChcImNvbXBpbGVcIiwgXCJqc2lpIC0tc2lsZW5jZS13YXJuaW5ncz1yZXNlcnZlZC13b3JkXCIpO1xuXG4gICAgcHJvamVjdC5zZXRTY3JpcHQoXG4gICAgICBcImJ1aWxkLXByb3ZpZGVyXCIsXG4gICAgICBcInlhcm4gZmV0Y2ggJiYgeWFybiBjb21waWxlICYmIHlhcm4gZG9jZ2VuXCJcbiAgICApO1xuICAgIHByb2plY3Quc2V0U2NyaXB0KFwidGVzdFwiLCBcImplc3QgLS1wYXNzV2l0aE5vVGVzdHNcIik7XG4gICAgcHJvamVjdC5hZGRGaWVsZHMoeyBwdWJsaXNoQ29uZmlnOiB7IGFjY2VzczogXCJwdWJsaWNcIiB9IH0pO1xuICAgIHByb2plY3QuYWRkRmllbGRzKHtcbiAgICAgIFwic3RhbmRhcmQtdmVyc2lvblwiOiB7XG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJmZWF0XCIsXG4gICAgICAgICAgICBzZWN0aW9uOiBcIkZlYXR1cmVzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImZpeFwiLFxuICAgICAgICAgICAgc2VjdGlvbjogXCJCdWcgRml4ZXNcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY2hvcmVcIixcbiAgICAgICAgICAgIHNlY3Rpb246IFwiVXBkYXRlc1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJkb2NzXCIsXG4gICAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInN0eWxlXCIsXG4gICAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInJlZmFjdG9yXCIsXG4gICAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInBlcmZcIixcbiAgICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGVzdFwiLFxuICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gc2V0IHByb3ZpZGVyIG5hbWUgYW5kIHZlcnNpb24gZnJvbSB2ZXJzaW9uLmpzb24gKGlmIGl0IGV4aXN0cyB5ZXQpXG4gICAgY29uc3QgdmVyc2lvbkZpbGUgPSBwYXRoLnJlc29sdmUocHJvamVjdC5vdXRkaXIsIFwic3JjL3ZlcnNpb24uanNvblwiKTtcblxuICAgIGxldCBmdWxseVF1YWxpZmllZFByb3ZpZGVyTmFtZSA9IFwiPHVua25vd24+XCI7XG4gICAgbGV0IGFjdHVhbFByb3ZpZGVyVmVyc2lvbiA9IFwiPHVua25vd24+XCI7XG4gICAgaWYgKGV4aXN0c1N5bmModmVyc2lvbkZpbGUpKSB7XG4gICAgICBjb25zdCBtYXAgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyh2ZXJzaW9uRmlsZSwgXCJ1dGY4XCIpKTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhtYXApLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJ2ZXJzaW9uLmpzb24gbXVzdCBoYXZlIGV4YWN0bHkgb25lIGVudHJ5LiBzcGVjaWZ5aW5nIG11bHRpcGxlIHByb3ZpZGVycyBpcyBub3Qgc3VwcG9ydGVkXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IFtmcXBuLCB2ZXJzaW9uXSA9IE9iamVjdC5lbnRyaWVzKG1hcClbMF07XG4gICAgICBmdWxseVF1YWxpZmllZFByb3ZpZGVyTmFtZSA9IGZxcG47XG4gICAgICBhY3R1YWxQcm92aWRlclZlcnNpb24gPSB2ZXJzaW9uIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBwcm9qZWN0LmFkZEZpZWxkcyh7XG4gICAgICBjZGt0Zjoge1xuICAgICAgICBpc0RlcHJlY2F0ZWQsXG4gICAgICAgIHByb3ZpZGVyOiB7XG4gICAgICAgICAgbmFtZTogZnVsbHlRdWFsaWZpZWRQcm92aWRlck5hbWUsXG4gICAgICAgICAgdmVyc2lvbjogYWN0dWFsUHJvdmlkZXJWZXJzaW9uLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChwcm9qZWN0Lm5wbWlnbm9yZSkge1xuICAgICAgcHJvamVjdC5ucG1pZ25vcmUuZXhjbHVkZShDREtURl9KU09OX0ZJTEUpO1xuICAgICAgcHJvamVjdC5ucG1pZ25vcmUuZXhjbHVkZShcIi5nZW5cIik7XG4gICAgICBwcm9qZWN0Lm5wbWlnbm9yZS5leGNsdWRlKFwiLnRlcnJhZm9ybVwiKTtcbiAgICAgIHByb2plY3QubnBtaWdub3JlLmV4Y2x1ZGUoXCJjZGt0Zi5qc29uXCIpO1xuICAgICAgcHJvamVjdC5ucG1pZ25vcmUuZXhjbHVkZShcIkFQSS5tZFwiKTtcbiAgICAgIHByb2plY3QubnBtaWdub3JlLmV4Y2x1ZGUoXCJkb2NzXCIpO1xuICAgICAgcHJvamVjdC5ucG1pZ25vcmUuZXhjbHVkZShcInNjcmlwdHNcIik7XG4gICAgICBwcm9qZWN0Lm5wbWlnbm9yZS5leGNsdWRlKFwiLnByb2plbnJjLmpzXCIpO1xuICAgICAgcHJvamVjdC5ucG1pZ25vcmUuZXhjbHVkZShcIi5jb3B5d3JpdGUuaGNsXCIpO1xuICAgIH1cbiAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKFwiLmdlblwiKTtcbiAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKFwiLnRlcnJhZm9ybVwiKTtcbiAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKFwicGFja2FnZS1sb2NrLmpzb25cIik7XG5cbiAgICBuZXcgSnNvbkZpbGUocHJvamVjdCwgQ0RLVEZfSlNPTl9GSUxFLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbGFuZ3VhZ2U6IFwidHlwZXNjcmlwdFwiLFxuICAgICAgICBhcHA6IFwiZWNobyBub29wXCIsXG4gICAgICAgIHNlbmRDcmFzaFJlcG9ydHM6IGZhbHNlLFxuICAgICAgICB0ZXJyYWZvcm1Qcm92aWRlcnM6IFt0ZXJyYWZvcm1Qcm92aWRlcl0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgbmV3IFJlYWRtZUZpbGUocHJvamVjdCwgXCJSRUFETUUubWRcIiwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHVuZGVybHlpbmdUZXJyYWZvcm1WZXJzaW9uOiBhY3R1YWxQcm92aWRlclZlcnNpb24sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import { cdk } from "projen";
2
+ export declare class CopyrightHeaders {
3
+ constructor(project: cdk.JsiiProject);
4
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CopyrightHeaders = void 0;
4
+ const projen_1 = require("projen");
5
+ class CopyrightHeaders {
6
+ constructor(project) {
7
+ // Run copywrite tool to add copyright headers to all files
8
+ // This runs on individual repositories that use this Projen template
9
+ project.buildWorkflow?.addPostBuildSteps({
10
+ name: "Setup Copywrite tool",
11
+ uses: "hashicorp/setup-copywrite",
12
+ }, { name: "Add headers using Copywrite tool", run: "copywrite headers" });
13
+ // copywrite config for the individual pre-built providers
14
+ new projen_1.TextFile(project, ".copywrite.hcl", {
15
+ lines: `schema_version = 1
16
+
17
+ project {
18
+ license = "MPL-2.0"
19
+ copyright_year = 2021
20
+
21
+ # (OPTIONAL) A list of globs that should not have copyright/license headers.
22
+ # Supports doublestar glob patterns for more flexibility in defining which
23
+ # files or folders should be ignored
24
+ header_ignore = [
25
+ "**/node_modules/**",
26
+ "lib/**",
27
+ "dist/**",
28
+ "logs/**",
29
+ "build/**",
30
+ ".gen/**",
31
+ ".github/ISSUE_TEMPLATE/**",
32
+ ".terraform/**",
33
+ "docs/**",
34
+ "API.md",
35
+ ".mergify.yml",
36
+ "scripts/*.js"
37
+ ]
38
+ }
39
+ `.split("\n"),
40
+ });
41
+ }
42
+ }
43
+ exports.CopyrightHeaders = CopyrightHeaders;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weXJpZ2h0LWhlYWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29weXJpZ2h0LWhlYWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXVDO0FBRXZDLE1BQWEsZ0JBQWdCO0lBQzNCLFlBQVksT0FBd0I7UUFDbEMsMkRBQTJEO1FBQzNELHFFQUFxRTtRQUNyRSxPQUFPLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUN0QztZQUNFLElBQUksRUFBRSxzQkFBc0I7WUFDNUIsSUFBSSxFQUFFLDJCQUEyQjtTQUNsQyxFQUNELEVBQUUsSUFBSSxFQUFFLGtDQUFrQyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxDQUN2RSxDQUFDO1FBRUYsMERBQTBEO1FBQzFELElBQUksaUJBQVEsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7WUFDdEMsS0FBSyxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3QlosQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBekNELDRDQXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNkaywgVGV4dEZpbGUgfSBmcm9tIFwicHJvamVuXCI7XG5cbmV4cG9ydCBjbGFzcyBDb3B5cmlnaHRIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogY2RrLkpzaWlQcm9qZWN0KSB7XG4gICAgLy8gUnVuIGNvcHl3cml0ZSB0b29sIHRvIGFkZCBjb3B5cmlnaHQgaGVhZGVycyB0byBhbGwgZmlsZXNcbiAgICAvLyBUaGlzIHJ1bnMgb24gaW5kaXZpZHVhbCByZXBvc2l0b3JpZXMgdGhhdCB1c2UgdGhpcyBQcm9qZW4gdGVtcGxhdGVcbiAgICBwcm9qZWN0LmJ1aWxkV29ya2Zsb3c/LmFkZFBvc3RCdWlsZFN0ZXBzKFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIlNldHVwIENvcHl3cml0ZSB0b29sXCIsXG4gICAgICAgIHVzZXM6IFwiaGFzaGljb3JwL3NldHVwLWNvcHl3cml0ZVwiLFxuICAgICAgfSxcbiAgICAgIHsgbmFtZTogXCJBZGQgaGVhZGVycyB1c2luZyBDb3B5d3JpdGUgdG9vbFwiLCBydW46IFwiY29weXdyaXRlIGhlYWRlcnNcIiB9XG4gICAgKTtcblxuICAgIC8vIGNvcHl3cml0ZSBjb25maWcgZm9yIHRoZSBpbmRpdmlkdWFsIHByZS1idWlsdCBwcm92aWRlcnNcbiAgICBuZXcgVGV4dEZpbGUocHJvamVjdCwgXCIuY29weXdyaXRlLmhjbFwiLCB7XG4gICAgICBsaW5lczogYHNjaGVtYV92ZXJzaW9uID0gMVxuXG5wcm9qZWN0IHtcbiAgbGljZW5zZSAgICAgICAgPSBcIk1QTC0yLjBcIlxuICBjb3B5cmlnaHRfeWVhciA9IDIwMjFcblxuICAjIChPUFRJT05BTCkgQSBsaXN0IG9mIGdsb2JzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGNvcHlyaWdodC9saWNlbnNlIGhlYWRlcnMuXG4gICMgU3VwcG9ydHMgZG91Ymxlc3RhciBnbG9iIHBhdHRlcm5zIGZvciBtb3JlIGZsZXhpYmlsaXR5IGluIGRlZmluaW5nIHdoaWNoXG4gICMgZmlsZXMgb3IgZm9sZGVycyBzaG91bGQgYmUgaWdub3JlZFxuICBoZWFkZXJfaWdub3JlID0gW1xuICAgIFwiKiovbm9kZV9tb2R1bGVzLyoqXCIsXG4gICAgXCJsaWIvKipcIixcbiAgICBcImRpc3QvKipcIixcbiAgICBcImxvZ3MvKipcIixcbiAgICBcImJ1aWxkLyoqXCIsXG4gICAgXCIuZ2VuLyoqXCIsXG4gICAgXCIuZ2l0aHViL0lTU1VFX1RFTVBMQVRFLyoqXCIsXG4gICAgXCIudGVycmFmb3JtLyoqXCIsXG4gICAgXCJkb2NzLyoqXCIsXG4gICAgXCJBUEkubWRcIixcbiAgICBcIi5tZXJnaWZ5LnltbFwiLFxuICAgIFwic2NyaXB0cy8qLmpzXCJcbiAgXVxufVxuYC5zcGxpdChcIlxcblwiKSxcbiAgICB9KTtcbiAgfVxufVxuIl19