projen-cdktf-hybrid-construct 0.1.50 → 0.1.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.projenrc.ts CHANGED
@@ -13,7 +13,7 @@ const project = new typescript.TypeScriptProject({
13
13
  license: "MIT",
14
14
  copyrightOwner: "Daniel Schmidt",
15
15
 
16
- deps: ["projen", "@types/uuid", "uuid"],
16
+ deps: ["projen", "@types/uuid", "uuid", "@types/change-case", "change-case"],
17
17
  devDeps: ["fs-extra", "glob", "@types/fs-extra", "@types/glob"],
18
18
 
19
19
  release: true,
package/README.md CHANGED
@@ -21,7 +21,6 @@ If you want to write a CDKTF construct and also publish it as a Terraform Module
21
21
  const { HybridModule } = require("projen-cdktf-hybrid-construct");
22
22
 
23
23
  const project = new HybridModule({
24
- defaultReleaseBranch: "main",
25
24
  // The name of the module & repository need to start with terraform-cdk-
26
25
  name: "terraform-cdk-my-new-hybrid-construct",
27
26
  repositoryUrl:
@@ -67,8 +66,8 @@ project.synth();
67
66
 
68
67
  If you want to republish an existing Terraform module as a CDKTF construct or if you want to repackage them with an easier to use API you can use the `TerraformModule` template.
69
68
 
70
- ````js
71
- const { HybridModule } = require("projen-cdktf-hybrid-construct");
69
+ ```js
70
+ const { TerraformModule } = require("projen-cdktf-hybrid-construct");
72
71
 
73
72
  const project = new TerraformModule({
74
73
  name: "my-module",
@@ -91,13 +90,30 @@ const project = new TerraformModule({
91
90
  });
92
91
 
93
92
  project.synth();
94
-
95
-
93
+ ```
96
94
 
97
95
  ## Publishing
98
96
 
99
97
  ### Open Source
100
98
 
99
+ We have a helper method for easy configuration, but there are still some manual steps required.
100
+
101
+ ```js
102
+ const {
103
+ HybridModule,
104
+ publishToRegistries,
105
+ } = require("projen-cdktf-hybrid-construct");
106
+
107
+ const project = new HybridModule({
108
+ // ... all the other options
109
+ ...publishToRegistries({
110
+ name: "my-new-hybrid-construct",
111
+ namespace: "my-org",
112
+ registries: ["npm", "pypi", "nuget", "maven"],
113
+ }),
114
+ });
115
+ ```
116
+
101
117
  #### Terraform
102
118
 
103
119
  1. [Sign in at the registry](https://registry.terraform.io/sign-in)
@@ -115,7 +131,8 @@ Please make sure your repository name starts with `terraform-cdk-`.
115
131
 
116
132
  1. Create an account at [pypi.org](https://pypi.org/)
117
133
  2. Create an [API token](https://pypi.org/help/#apitoken) on pypi
118
- 3. Set the `publishToPypi` section in the options of `HybridModule` or `TerraformModule`
134
+ 3. Create a [GitHub Action Secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository) with the name `TWINE_USERNAME` and the value `__token__` and a second one with the name `TWINE_PASSWORD` and the value of the token
135
+ 4. Set the `publishToPypi` section in the options of `HybridModule` or `TerraformModule` (or use the helper mentioned above)
119
136
 
120
137
  ```js
121
138
  const name = "name-of-my-hybrid-construct";
@@ -127,12 +144,18 @@ new HybridModule({
127
144
  module: name.replace(/-/g, "_"),
128
145
  },
129
146
  });
130
- ````
147
+ ```
131
148
 
132
149
  #### Maven (Java)
133
150
 
134
151
  1. [Create a Sonatype account and repository](https://central.sonatype.org/publish/publish-guide/#introduction)
135
- 2. Setup the `publishToMaven` section in the options of `HybridModule` or `TerraformModule`
152
+ 2. Create [GitHub Action Secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository) to configure maven:
153
+ - `MAVEN_USERNAME`
154
+ - `MAVEN_PASSWORD`
155
+ - `MAVEN_STAGING_PROFILE_ID`
156
+ - `MAVEN_GPG_PRIVATE_KEY_PASSPHRASE`
157
+ - `MAVEN_GPG_PRIVATE_KEY_PASSPHRASE`
158
+ 3. Setup the `publishToMaven` section in the options of `HybridModule` or `TerraformModule` (or use the helper mentioned above)
136
159
 
137
160
  ```js
138
161
  const githubNamespace = "my-org";
@@ -152,7 +175,8 @@ new HybridModule({
152
175
 
153
176
  1. [Create a NuGet account](https://www.nuget.org/users/account/LogOn) (you might need to create a Microsoft Account if you don't have one)
154
177
  2. [Create API keys](https://docs.microsoft.com/en-us/nuget/nuget-org/publish-a-package#create-api-keys)
155
- 3. Setup the `publishToNuget` section in the options of `HybridModule` or `TerraformModule`
178
+ 3. Create a [GitHub Action Secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository) with the name `NUGET_API_KEY` and the value of the token
179
+ 4. Setup the `publishToNuget` section in the options of `HybridModule` or `TerraformModule` (or use the helper mentioned above)
156
180
 
157
181
  ```js
158
182
  const githubNamespace = "my-org";
package/lib/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./hybrid-module";
2
2
  export * from "./terraform-module";
3
+ export * from "./publishing";
package/lib/index.js CHANGED
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./hybrid-module"), exports);
18
18
  __exportStar(require("./terraform-module"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyxxREFBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9oeWJyaWQtbW9kdWxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZXJyYWZvcm0tbW9kdWxlXCI7XG4iXX0=
19
+ __exportStar(require("./publishing"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyxxREFBbUM7QUFDbkMsK0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vaHlicmlkLW1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVycmFmb3JtLW1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHVibGlzaGluZ1wiO1xuIl19
@@ -0,0 +1,13 @@
1
+ import { ConstructLibraryOptions } from "projen/lib/cdk";
2
+ export declare type Registry = "npm" | "maven" | "nuget" | "pypi";
3
+ export declare type PublishOptions = {
4
+ name: string;
5
+ namespace: string;
6
+ registries: Registry[];
7
+ };
8
+ declare type Mutable<T> = {
9
+ -readonly [k in keyof T]: T[k];
10
+ };
11
+ declare type Config = Mutable<Pick<ConstructLibraryOptions, "publishToPypi" | "publishToMaven" | "publishToNuget" | "releaseToNpm">>;
12
+ export declare function publishToRegistries(options: PublishOptions): Config;
13
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publishToRegistries = void 0;
4
+ const change_case_1 = require("change-case");
5
+ function publishToRegistries(options) {
6
+ const { name, namespace, registries } = options;
7
+ const sanitizedNamespace = namespace.replace(/-/gi, "_");
8
+ const sanitizedName = name.replace(/-/gi, "_");
9
+ const config = {
10
+ releaseToNpm: registries.includes("npm"),
11
+ };
12
+ if (registries.includes("pypi")) {
13
+ config.publishToPypi = {
14
+ distName: `${sanitizedNamespace}-${sanitizedName}`,
15
+ module: `${sanitizedNamespace}_${sanitizedName}`,
16
+ };
17
+ }
18
+ if (registries.includes("maven")) {
19
+ config.publishToMaven = {
20
+ javaPackage: `com.${sanitizedNamespace}.${sanitizedName}`,
21
+ mavenGroupId: `com.${sanitizedNamespace}`,
22
+ mavenArtifactId: sanitizedName,
23
+ };
24
+ }
25
+ if (registries.includes("nuget")) {
26
+ const nugetName = `${(0, change_case_1.pascalCase)(namespace)}.${(0, change_case_1.pascalCase)(name)}`;
27
+ config.publishToNuget = {
28
+ dotNetNamespace: nugetName,
29
+ packageId: nugetName,
30
+ };
31
+ }
32
+ return config;
33
+ }
34
+ exports.publishToRegistries = publishToRegistries;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wdWJsaXNoaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF5QztBQXFCekMsU0FBZ0IsbUJBQW1CLENBQUMsT0FBdUI7SUFDekQsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2hELE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0MsTUFBTSxNQUFNLEdBQVc7UUFDckIsWUFBWSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0tBQ3pDLENBQUM7SUFFRixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDL0IsTUFBTSxDQUFDLGFBQWEsR0FBRztZQUNyQixRQUFRLEVBQUUsR0FBRyxrQkFBa0IsSUFBSSxhQUFhLEVBQUU7WUFDbEQsTUFBTSxFQUFFLEdBQUcsa0JBQWtCLElBQUksYUFBYSxFQUFFO1NBQ2pELENBQUM7S0FDSDtJQUNELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNoQyxNQUFNLENBQUMsY0FBYyxHQUFHO1lBQ3RCLFdBQVcsRUFBRSxPQUFPLGtCQUFrQixJQUFJLGFBQWEsRUFBRTtZQUN6RCxZQUFZLEVBQUUsT0FBTyxrQkFBa0IsRUFBRTtZQUN6QyxlQUFlLEVBQUUsYUFBYTtTQUMvQixDQUFDO0tBQ0g7SUFDRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFBLHdCQUFVLEVBQUMsU0FBUyxDQUFDLElBQUksSUFBQSx3QkFBVSxFQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakUsTUFBTSxDQUFDLGNBQWMsR0FBRztZQUN0QixlQUFlLEVBQUUsU0FBUztZQUMxQixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBN0JELGtEQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhc2NhbENhc2UgfSBmcm9tIFwiY2hhbmdlLWNhc2VcIjtcbmltcG9ydCB7IENvbnN0cnVjdExpYnJhcnlPcHRpb25zIH0gZnJvbSBcInByb2plbi9saWIvY2RrXCI7XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdHJ5ID0gXCJucG1cIiB8IFwibWF2ZW5cIiB8IFwibnVnZXRcIiB8IFwicHlwaVwiO1xuXG5leHBvcnQgdHlwZSBQdWJsaXNoT3B0aW9ucyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgcmVnaXN0cmllczogUmVnaXN0cnlbXTtcbn07XG50eXBlIE11dGFibGU8VD4gPSB7XG4gIC1yZWFkb25seSBbayBpbiBrZXlvZiBUXTogVFtrXTtcbn07XG5cbnR5cGUgQ29uZmlnID0gTXV0YWJsZTxcbiAgUGljazxcbiAgICBDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyxcbiAgICBcInB1Ymxpc2hUb1B5cGlcIiB8IFwicHVibGlzaFRvTWF2ZW5cIiB8IFwicHVibGlzaFRvTnVnZXRcIiB8IFwicmVsZWFzZVRvTnBtXCJcbiAgPlxuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hUb1JlZ2lzdHJpZXMob3B0aW9uczogUHVibGlzaE9wdGlvbnMpOiBDb25maWcge1xuICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgcmVnaXN0cmllcyB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc2FuaXRpemVkTmFtZXNwYWNlID0gbmFtZXNwYWNlLnJlcGxhY2UoLy0vZ2ksIFwiX1wiKTtcbiAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IG5hbWUucmVwbGFjZSgvLS9naSwgXCJfXCIpO1xuICBjb25zdCBjb25maWc6IENvbmZpZyA9IHtcbiAgICByZWxlYXNlVG9OcG06IHJlZ2lzdHJpZXMuaW5jbHVkZXMoXCJucG1cIiksXG4gIH07XG5cbiAgaWYgKHJlZ2lzdHJpZXMuaW5jbHVkZXMoXCJweXBpXCIpKSB7XG4gICAgY29uZmlnLnB1Ymxpc2hUb1B5cGkgPSB7XG4gICAgICBkaXN0TmFtZTogYCR7c2FuaXRpemVkTmFtZXNwYWNlfS0ke3Nhbml0aXplZE5hbWV9YCxcbiAgICAgIG1vZHVsZTogYCR7c2FuaXRpemVkTmFtZXNwYWNlfV8ke3Nhbml0aXplZE5hbWV9YCxcbiAgICB9O1xuICB9XG4gIGlmIChyZWdpc3RyaWVzLmluY2x1ZGVzKFwibWF2ZW5cIikpIHtcbiAgICBjb25maWcucHVibGlzaFRvTWF2ZW4gPSB7XG4gICAgICBqYXZhUGFja2FnZTogYGNvbS4ke3Nhbml0aXplZE5hbWVzcGFjZX0uJHtzYW5pdGl6ZWROYW1lfWAsXG4gICAgICBtYXZlbkdyb3VwSWQ6IGBjb20uJHtzYW5pdGl6ZWROYW1lc3BhY2V9YCxcbiAgICAgIG1hdmVuQXJ0aWZhY3RJZDogc2FuaXRpemVkTmFtZSxcbiAgICB9O1xuICB9XG4gIGlmIChyZWdpc3RyaWVzLmluY2x1ZGVzKFwibnVnZXRcIikpIHtcbiAgICBjb25zdCBudWdldE5hbWUgPSBgJHtwYXNjYWxDYXNlKG5hbWVzcGFjZSl9LiR7cGFzY2FsQ2FzZShuYW1lKX1gO1xuICAgIGNvbmZpZy5wdWJsaXNoVG9OdWdldCA9IHtcbiAgICAgIGRvdE5ldE5hbWVzcGFjZTogbnVnZXROYW1lLFxuICAgICAgcGFja2FnZUlkOiBudWdldE5hbWUsXG4gICAgfTtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufVxuIl19
package/package.json CHANGED
@@ -53,13 +53,15 @@
53
53
  "typescript": "^4.6.4"
54
54
  },
55
55
  "dependencies": {
56
+ "@types/change-case": "^2.3.1",
56
57
  "@types/uuid": "^8.3.4",
58
+ "change-case": "^4.1.2",
57
59
  "projen": "^0.53.6",
58
60
  "uuid": "^8.3.2"
59
61
  },
60
62
  "main": "lib/index.js",
61
63
  "license": "MIT",
62
- "version": "0.1.50",
64
+ "version": "0.1.53",
63
65
  "jest": {
64
66
  "testMatch": [
65
67
  "<rootDir>/src/**/__tests__/**/*.ts?(x)",