@catladder/cli 1.13.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -16,7 +16,7 @@
16
16
  "catladder": "./bin/catladder"
17
17
  },
18
18
  "dependencies": {
19
- "@catladder/pipeline": "1.13.0",
19
+ "@catladder/pipeline": "1.14.0",
20
20
  "@kubernetes/client-node": "^0.16.2",
21
21
  "child-process-promise": "^2.2.1",
22
22
  "command-exists-promise": "^2.0.2",
@@ -55,5 +55,5 @@
55
55
  "eslint": "^8.7.0",
56
56
  "typescript": "^4.5.4"
57
57
  },
58
- "version": "1.13.0"
58
+ "version": "1.14.0"
59
59
  }
@@ -172,6 +172,32 @@ const doItFor = async (
172
172
  }
173
173
  };
174
174
 
175
+ export const projectConfigSecrets = async (
176
+ vorpal: CommandInstance,
177
+ envComponent?: string
178
+ ) => {
179
+ if (!envComponent) {
180
+ const allEnvAndcomponents = await getAllComponentsWithAllEnvsHierarchical();
181
+ await doItFor(vorpal, allEnvAndcomponents);
182
+ } else {
183
+ const { env, componentName } = parseChoice(envComponent);
184
+
185
+ // componentName can be null. in this case, iterate over all components
186
+ if (!componentName) {
187
+ const components = await getProjectComponents();
188
+ await doItFor(
189
+ vorpal,
190
+ Object.fromEntries(components.map((c) => [c, [env]]))
191
+ );
192
+ }
193
+ if (componentName) {
194
+ await doItFor(vorpal, {
195
+ [componentName]: [env],
196
+ });
197
+ }
198
+ }
199
+ };
200
+
175
201
  export default async (vorpal: Vorpal) => {
176
202
  vorpal
177
203
  .command(
@@ -180,26 +206,6 @@ export default async (vorpal: Vorpal) => {
180
206
  )
181
207
  .autocomplete(await allEnvsAndAllComponents())
182
208
  .action(async function ({ envComponent }) {
183
- if (!envComponent) {
184
- const allEnvAndcomponents =
185
- await getAllComponentsWithAllEnvsHierarchical();
186
- await doItFor(this, allEnvAndcomponents);
187
- } else {
188
- const { env, componentName } = parseChoice(envComponent);
189
-
190
- // componentName can be null. in this case, iterate over all components
191
- if (!componentName) {
192
- const components = await getProjectComponents();
193
- await doItFor(
194
- this,
195
- Object.fromEntries(components.map((c) => [c, [env]]))
196
- );
197
- }
198
- if (componentName) {
199
- await doItFor(this, {
200
- [componentName]: [env],
201
- });
202
- }
203
- }
209
+ return await projectConfigSecrets(this, envComponent);
204
210
  });
205
211
  };
@@ -13,32 +13,45 @@ import {
13
13
  } from "../../../../utils/gitlab";
14
14
  import ensureNamespace from "./utils/ensureNamespace";
15
15
  import open from "open";
16
+ import { projectConfigSecrets } from "./commandConfigSecrets";
16
17
 
17
18
  export default async (vorpal: Vorpal) =>
18
19
  vorpal
19
20
  .command(
20
- "project-init-gitlab",
21
- "Initializes the gitlab repo, e.g. connects the cluster to it"
21
+ "project-setup",
22
+ "Initializes all environments and creates requires resources, service accounts, etc."
22
23
  )
23
24
  .action(async function () {
24
25
  const allContext = await getAllPipelineContexts();
25
26
 
26
27
  for (const context of allContext) {
28
+ this.log("");
29
+ this.log("=========================================");
30
+
31
+ this.log(
32
+ "setting up " +
33
+ context.environment.shortName +
34
+ ":" +
35
+ context.componentName +
36
+ "..."
37
+ );
38
+ this.log("");
27
39
  const deployConfig = context.componentConfig.deploy;
28
40
  if (isOfDeployType(deployConfig, "kubernetes")) {
29
41
  const fullName = getFullKubernetesClusterName(deployConfig.cluster);
30
- this.log(
31
- `connecting ${context.environment.shortName}:${context.componentName} ${fullName}`
32
- );
42
+ this.log(`cluster: ${fullName}`);
33
43
 
34
44
  await connectToCluster(fullName);
35
-
45
+ this.log("");
46
+ this.log("ensuring namespace ...");
36
47
  const namespace = await ensureNamespace(context);
37
-
48
+ this.log("Namespace " + namespace + " created / updated!");
49
+ this.log("");
38
50
  //$.verbose = true;
39
51
 
40
52
  // we name the service account and the role and the role binding with the same name
41
53
  // we currently create one per component to better separate them
54
+ this.log("ensuring service accounts...");
42
55
  const serviceAccountName = `cl-${context.componentName}-deploy`;
43
56
  const KUBE_URL =
44
57
  await $`TERM=dumb kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/ {print $NF}'`.then(
@@ -104,13 +117,22 @@ EOF
104
117
  KUBE_URL,
105
118
  };
106
119
 
120
+ this.log("service accounts created / updated!");
121
+
122
+ this.log("");
123
+ this.log("pusing secrets to gitlab...");
124
+
107
125
  await upsertAllVariables(
108
126
  this,
109
127
  vars,
110
128
  context.environment.shortName,
111
129
  context.componentName
112
130
  );
131
+ this.log("done!");
113
132
  }
133
+
134
+ this.log("=========================================");
135
+ this.log("");
114
136
  }
115
137
 
116
138
  const { id: projectId, web_url: projectWebUrl } = await getProjectInfo(
@@ -177,12 +199,30 @@ EOF
177
199
  scopes: ["read_registry"],
178
200
  });
179
201
  }
202
+ this.log();
203
+ const { configSecrets } = await this.prompt({
204
+ default: true,
205
+ message:
206
+ "Before deployments work, you need to config secrets. Do it now?",
207
+ name: "configSecrets",
208
+ type: "confirm",
209
+ });
210
+ this.log();
211
+ if (configSecrets) {
212
+ await projectConfigSecrets(this);
213
+ } else {
214
+ this.log(
215
+ "👆 don't forget to config secret using `project-config-secrets`"
216
+ );
217
+ }
218
+ this.log();
180
219
  this.log("gitlab is ready! 🥂");
181
220
  this.log("\n");
182
221
  this.log("do not forget to make sure that:");
183
222
  [
184
223
  "you have __health route in place",
185
224
  "lint and test are defined",
225
+ "secrets are configured (call project-config-secret)",
186
226
  "eat your vegetables",
187
227
  "be awesome 🤩",
188
228
  ].forEach((tip) => this.log(` - ${tip}`));
@@ -8,8 +8,8 @@ import commandEnvVars from "./commandEnvVars";
8
8
  import commandGetMyTotalWorktime from "./commandGetMyTotalWorktime";
9
9
  import commandGetShell from "./commandGetShell";
10
10
  import commandGitlabCi from "./commandGitlabCi";
11
- import commandInitGitlab from "./commandInitGitlab";
12
- import commandInitProject from "./commandInitProject";
11
+ import commandSetup from "./commandSetup";
12
+ //import commandInitProject from "./commandInitProject.old";
13
13
  import commandListPods from "./commandListPods";
14
14
  import commandMigrateHelm3 from "./commandMigrateHelm3";
15
15
  import commandNamespace from "./commandNamespace";
@@ -28,8 +28,8 @@ import commandReloadConfig from "./commandReloadConfig";
28
28
 
29
29
  export default async (vorpal: Vorpal) => {
30
30
  commandReloadConfig(vorpal);
31
- commandInitProject(vorpal);
32
- commandInitGitlab(vorpal);
31
+ commandSetup(vorpal);
32
+
33
33
  commandEnvVars(vorpal);
34
34
 
35
35
  commandNamespace(vorpal);
@@ -1 +0,0 @@
1
- {"version":3,"file":"commandInitGitlab.js","sourceRoot":"","sources":["../../../../../src/apps/cli/commands/project/commandInitGitlab.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"commandInitProject.js","sourceRoot":"","sources":["../../../../../src/apps/cli/commands/project/commandInitProject.ts"],"names":[],"mappings":"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"}