@catladder/cli 1.12.0 → 1.15.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.12.0",
19
+ "@catladder/pipeline": "1.15.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.12.0"
58
+ "version": "1.15.0"
59
59
  }
@@ -138,6 +138,8 @@ const doItFor = async (
138
138
  }
139
139
  }
140
140
  }
141
+ instance.log("upserting all variables, please wait...");
142
+ instance.log("");
141
143
  for (const [componentName, envs] of Object.entries(envAndComponents)) {
142
144
  for (const env of envs) {
143
145
  await upsertAllVariables(
@@ -168,6 +170,35 @@ const doItFor = async (
168
170
  );
169
171
  }
170
172
  }
173
+ instance.log("✅ " + env + ":" + componentName);
174
+ }
175
+ }
176
+ instance.log("done! 😻");
177
+ instance.log("");
178
+ };
179
+
180
+ export const projectConfigSecrets = async (
181
+ vorpal: CommandInstance,
182
+ envComponent?: string
183
+ ) => {
184
+ if (!envComponent) {
185
+ const allEnvAndcomponents = await getAllComponentsWithAllEnvsHierarchical();
186
+ await doItFor(vorpal, 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
+ vorpal,
195
+ Object.fromEntries(components.map((c) => [c, [env]]))
196
+ );
197
+ }
198
+ if (componentName) {
199
+ await doItFor(vorpal, {
200
+ [componentName]: [env],
201
+ });
171
202
  }
172
203
  }
173
204
  };
@@ -180,26 +211,6 @@ export default async (vorpal: Vorpal) => {
180
211
  )
181
212
  .autocomplete(await allEnvsAndAllComponents())
182
213
  .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
- }
214
+ return await projectConfigSecrets(this, envComponent);
204
215
  });
205
216
  };
@@ -13,32 +13,47 @@ 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
+ );
32
+
33
+ this.log(
34
+ "setting up " +
35
+ context.environment.shortName +
36
+ ":" +
37
+ context.componentName +
38
+ "..."
39
+ );
40
+ this.log("");
27
41
  const deployConfig = context.componentConfig.deploy;
28
42
  if (isOfDeployType(deployConfig, "kubernetes")) {
29
43
  const fullName = getFullKubernetesClusterName(deployConfig.cluster);
30
- this.log(
31
- `connecting ${context.environment.shortName}:${context.componentName} ${fullName}`
32
- );
44
+ this.log(`cluster: ${fullName}`);
33
45
 
34
46
  await connectToCluster(fullName);
35
-
47
+ this.log("");
48
+ this.log("ensuring namespace ...");
36
49
  const namespace = await ensureNamespace(context);
37
-
50
+ this.log("Namespace " + namespace + " created / updated!");
51
+ this.log("");
38
52
  //$.verbose = true;
39
53
 
40
54
  // we name the service account and the role and the role binding with the same name
41
55
  // we currently create one per component to better separate them
56
+ this.log("ensuring service accounts...");
42
57
  const serviceAccountName = `cl-${context.componentName}-deploy`;
43
58
  const KUBE_URL =
44
59
  await $`TERM=dumb kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/ {print $NF}'`.then(
@@ -104,13 +119,29 @@ EOF
104
119
  KUBE_URL,
105
120
  };
106
121
 
122
+ this.log("service accounts created / updated!");
123
+
124
+ this.log("");
125
+ this.log("pusing secrets to gitlab...");
126
+
107
127
  await upsertAllVariables(
108
128
  this,
109
129
  vars,
110
130
  context.environment.shortName,
111
131
  context.componentName
112
132
  );
133
+ this.log("done!");
113
134
  }
135
+ this.log("");
136
+ this.log(
137
+ "✅ " +
138
+ context.environment.shortName +
139
+ ":" +
140
+ context.componentName +
141
+ " done!"
142
+ );
143
+
144
+ this.log("");
114
145
  }
115
146
 
116
147
  const { id: projectId, web_url: projectWebUrl } = await getProjectInfo(
@@ -177,12 +208,30 @@ EOF
177
208
  scopes: ["read_registry"],
178
209
  });
179
210
  }
211
+ this.log();
212
+ const { configSecrets } = await this.prompt({
213
+ default: true,
214
+ message:
215
+ "Before deployments work, you need to config secrets. Do it now?",
216
+ name: "configSecrets",
217
+ type: "confirm",
218
+ });
219
+ this.log();
220
+ if (configSecrets) {
221
+ await projectConfigSecrets(this);
222
+ } else {
223
+ this.log(
224
+ "👆 don't forget to config secret using `project-config-secrets`"
225
+ );
226
+ }
227
+ this.log();
180
228
  this.log("gitlab is ready! 🥂");
181
229
  this.log("\n");
182
230
  this.log("do not forget to make sure that:");
183
231
  [
184
232
  "you have __health route in place",
185
233
  "lint and test are defined",
234
+ "secrets are configured (call project-config-secret)",
186
235
  "eat your vegetables",
187
236
  "be awesome 🤩",
188
237
  ].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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"}