@catladder/cli 1.13.0 → 1.15.1
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/dist/apps/cli/commands/project/commandConfigSecrets.d.ts +2 -1
- package/dist/apps/cli/commands/project/commandConfigSecrets.js +54 -36
- package/dist/apps/cli/commands/project/commandConfigSecrets.js.map +1 -1
- package/dist/apps/cli/commands/project/{commandInitGitlab.d.ts → commandInitProject.old.d.ts} +0 -0
- package/dist/apps/cli/commands/project/{commandInitProject.js → commandInitProject.old.js} +1 -1
- package/dist/apps/cli/commands/project/commandInitProject.old.js.map +1 -0
- package/dist/apps/cli/commands/project/{commandInitProject.d.ts → commandSetup.d.ts} +0 -0
- package/dist/apps/cli/commands/project/commandSetup.js +58 -0
- package/dist/apps/cli/commands/project/commandSetup.js.map +1 -0
- package/dist/apps/cli/commands/project/index.js +3 -4
- package/dist/apps/cli/commands/project/index.js.map +1 -1
- package/dist/apps/cli/commands/project/setup/index.d.ts +2 -0
- package/dist/apps/cli/commands/project/setup/index.js +103 -0
- package/dist/apps/cli/commands/project/setup/index.js.map +1 -0
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.d.ts +2 -0
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.js +106 -0
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.js.map +1 -0
- package/dist/apps/cli/commands/project/setup/setupContext.d.ts +3 -0
- package/dist/apps/cli/commands/project/setup/setupContext.js +74 -0
- package/dist/apps/cli/commands/project/setup/setupContext.js.map +1 -0
- package/dist/apps/cli/commands/project/setup/setupKubernetes.d.ts +3 -0
- package/dist/apps/cli/commands/project/setup/setupKubernetes.js +132 -0
- package/dist/apps/cli/commands/project/setup/setupKubernetes.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/apps/cli/commands/project/commandConfigSecrets.ts +32 -21
- package/src/apps/cli/commands/project/{commandInitProject.ts → commandInitProject.old.ts} +0 -0
- package/src/apps/cli/commands/project/commandSetup.ts +12 -0
- package/src/apps/cli/commands/project/index.ts +4 -4
- package/src/apps/cli/commands/project/setup/index.ts +42 -0
- package/src/apps/cli/commands/project/setup/setupAccessTokens.ts +70 -0
- package/src/apps/cli/commands/project/setup/setupContext.ts +37 -0
- package/src/apps/cli/commands/project/setup/setupKubernetes.ts +112 -0
- package/dist/apps/cli/commands/project/commandInitGitlab.js +0 -202
- package/dist/apps/cli/commands/project/commandInitGitlab.js.map +0 -1
- package/dist/apps/cli/commands/project/commandInitProject.js.map +0 -1
- package/src/apps/cli/commands/project/commandInitGitlab.ts +0 -191
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"catladder": "./bin/catladder"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@catladder/pipeline": "1.
|
|
19
|
+
"@catladder/pipeline": "1.15.1",
|
|
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.
|
|
58
|
+
"version": "1.15.1"
|
|
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
|
-
|
|
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
|
};
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Vorpal from "vorpal";
|
|
2
|
+
import { setupProject } from "./setup";
|
|
3
|
+
|
|
4
|
+
export default async (vorpal: Vorpal) =>
|
|
5
|
+
vorpal
|
|
6
|
+
.command(
|
|
7
|
+
"project-setup",
|
|
8
|
+
"Initializes all environments and creates requires resources, service accounts, etc."
|
|
9
|
+
)
|
|
10
|
+
.action(async function () {
|
|
11
|
+
await setupProject(this);
|
|
12
|
+
});
|
|
@@ -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
|
|
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
|
-
|
|
32
|
-
|
|
31
|
+
commandSetup(vorpal);
|
|
32
|
+
|
|
33
33
|
commandEnvVars(vorpal);
|
|
34
34
|
|
|
35
35
|
commandNamespace(vorpal);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CommandInstance } from "vorpal";
|
|
2
|
+
import { getAllPipelineContexts } from "../../../../../config/getProjectConfig";
|
|
3
|
+
import { projectConfigSecrets } from "../commandConfigSecrets";
|
|
4
|
+
import { setupAccessTokens } from "./setupAccessTokens";
|
|
5
|
+
import { setupContext } from "./setupContext";
|
|
6
|
+
|
|
7
|
+
export const setupProject = async (instance: CommandInstance) => {
|
|
8
|
+
const allContext = await getAllPipelineContexts();
|
|
9
|
+
|
|
10
|
+
for (const context of allContext) {
|
|
11
|
+
await setupContext(instance, context);
|
|
12
|
+
}
|
|
13
|
+
await setupAccessTokens(instance);
|
|
14
|
+
instance.log("");
|
|
15
|
+
const { configSecrets } = await instance.prompt({
|
|
16
|
+
default: true,
|
|
17
|
+
message: "Before deployments work, you need to config secrets. Do it now?",
|
|
18
|
+
name: "configSecrets",
|
|
19
|
+
type: "confirm",
|
|
20
|
+
});
|
|
21
|
+
instance.log("");
|
|
22
|
+
if (configSecrets) {
|
|
23
|
+
await projectConfigSecrets(instance);
|
|
24
|
+
} else {
|
|
25
|
+
instance.log(
|
|
26
|
+
"👆 don't forget to config secret using `project-config-secrets`"
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
instance.log("");
|
|
30
|
+
instance.log("gitlab is ready! 🥂");
|
|
31
|
+
instance.log("\n");
|
|
32
|
+
instance.log("do not forget to make sure that:");
|
|
33
|
+
[
|
|
34
|
+
"you have __health route in place",
|
|
35
|
+
"lint and test are defined",
|
|
36
|
+
"secrets are configured (call project-config-secret)",
|
|
37
|
+
"eat your vegetables",
|
|
38
|
+
"be awesome 🤩",
|
|
39
|
+
].forEach((tip) => instance.log(` - ${tip}`));
|
|
40
|
+
instance.log("\n");
|
|
41
|
+
instance.log("\n");
|
|
42
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import open from "open";
|
|
2
|
+
import { CommandInstance } from "vorpal";
|
|
3
|
+
import { doGitlabRequest, getProjectInfo } from "../../../../../utils/gitlab";
|
|
4
|
+
|
|
5
|
+
export const setupAccessTokens = async (instance: CommandInstance) => {
|
|
6
|
+
const { id: projectId, web_url: projectWebUrl } = await getProjectInfo(
|
|
7
|
+
instance
|
|
8
|
+
);
|
|
9
|
+
const variables = await doGitlabRequest(
|
|
10
|
+
instance,
|
|
11
|
+
`projects/${projectId}/variables`
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
if (!variables.find((v: any) => v.key === "GL_TOKEN")) {
|
|
15
|
+
instance.log(
|
|
16
|
+
"I need add a GL_TOKEN to the project, so that semantic release will work\n"
|
|
17
|
+
);
|
|
18
|
+
instance.log(
|
|
19
|
+
"👉 Please please create a project access token in gitlab and copy its value into clipboard\n\n - name: something like 'semantic-release'\n - expires: leave empty\n - scopes: api, read_repository"
|
|
20
|
+
);
|
|
21
|
+
instance.log("\n");
|
|
22
|
+
|
|
23
|
+
const { understood } = await instance.prompt({
|
|
24
|
+
default: true,
|
|
25
|
+
message: "Understood and open gitlab now? 🤔",
|
|
26
|
+
name: "understood",
|
|
27
|
+
type: "confirm",
|
|
28
|
+
});
|
|
29
|
+
if (!understood) {
|
|
30
|
+
instance.log("continuing anyway...");
|
|
31
|
+
}
|
|
32
|
+
open(`${projectWebUrl}/-/settings/access_tokens`);
|
|
33
|
+
|
|
34
|
+
instance.log("\n");
|
|
35
|
+
|
|
36
|
+
instance.log("Enter your copied token now: ");
|
|
37
|
+
|
|
38
|
+
instance.log("\n");
|
|
39
|
+
const { GL_TOKEN } = await instance.prompt({
|
|
40
|
+
type: "password",
|
|
41
|
+
name: "GL_TOKEN",
|
|
42
|
+
message: "Access Token: ",
|
|
43
|
+
});
|
|
44
|
+
await doGitlabRequest(instance, `projects/${projectId}/variables`, {
|
|
45
|
+
key: "GL_TOKEN",
|
|
46
|
+
value: GL_TOKEN,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const deploy_tokens = await doGitlabRequest(
|
|
51
|
+
instance,
|
|
52
|
+
`projects/${projectId}/deploy_tokens`
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
if (
|
|
56
|
+
!deploy_tokens.find(
|
|
57
|
+
(v: { name: string }) => v.name === "gitlab-deploy-token"
|
|
58
|
+
)
|
|
59
|
+
) {
|
|
60
|
+
instance.log(
|
|
61
|
+
"I will setup the 'GitLab Deploy Token', so Kubernetes can pull images from this project."
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
await doGitlabRequest(instance, `projects/${projectId}/deploy_tokens`, {
|
|
65
|
+
id: projectId,
|
|
66
|
+
name: "gitlab-deploy-token",
|
|
67
|
+
scopes: ["read_registry"],
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Context, isOfDeployType } from "@catladder/pipeline";
|
|
2
|
+
import { CommandInstance } from "vorpal";
|
|
3
|
+
import { setupKubernetes } from "./setupKubernetes";
|
|
4
|
+
|
|
5
|
+
export const setupContext = async (
|
|
6
|
+
instance: CommandInstance,
|
|
7
|
+
context: Context
|
|
8
|
+
) => {
|
|
9
|
+
instance.log("");
|
|
10
|
+
instance.log(
|
|
11
|
+
"=================================================================================="
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
instance.log(
|
|
15
|
+
"🐱 🔧 setting up " +
|
|
16
|
+
context.environment.shortName +
|
|
17
|
+
":" +
|
|
18
|
+
context.componentName +
|
|
19
|
+
"..."
|
|
20
|
+
);
|
|
21
|
+
instance.log("");
|
|
22
|
+
const deployConfig = context.componentConfig.deploy;
|
|
23
|
+
if (isOfDeployType(deployConfig, "kubernetes")) {
|
|
24
|
+
await setupKubernetes(instance, context);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
instance.log("");
|
|
28
|
+
instance.log(
|
|
29
|
+
"✅ " +
|
|
30
|
+
context.environment.shortName +
|
|
31
|
+
":" +
|
|
32
|
+
context.componentName +
|
|
33
|
+
" done!"
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
instance.log("");
|
|
37
|
+
};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Context,
|
|
3
|
+
getFullKubernetesClusterName,
|
|
4
|
+
isOfDeployType,
|
|
5
|
+
} from "@catladder/pipeline";
|
|
6
|
+
import { CommandInstance } from "vorpal";
|
|
7
|
+
import { $ } from "zx";
|
|
8
|
+
import { connectToCluster } from "../../../../../utils/cluster";
|
|
9
|
+
import { upsertAllVariables } from "../../../../../utils/gitlab";
|
|
10
|
+
import ensureNamespace from "../utils/ensureNamespace";
|
|
11
|
+
|
|
12
|
+
export const setupKubernetes = async (
|
|
13
|
+
instance: CommandInstance,
|
|
14
|
+
context: Context
|
|
15
|
+
) => {
|
|
16
|
+
const deployConfig = context.componentConfig.deploy;
|
|
17
|
+
if (!isOfDeployType(deployConfig, "kubernetes")) {
|
|
18
|
+
throw new Error("cannot run setupKubernetes on non-kubernetes deployments");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const fullName = getFullKubernetesClusterName(deployConfig.cluster);
|
|
22
|
+
instance.log(`cluster: ${fullName}`);
|
|
23
|
+
|
|
24
|
+
await connectToCluster(fullName);
|
|
25
|
+
instance.log("");
|
|
26
|
+
instance.log("ensuring namespace ...");
|
|
27
|
+
const namespace = await ensureNamespace(context);
|
|
28
|
+
instance.log("Namespace " + namespace + " created / updated!");
|
|
29
|
+
instance.log("");
|
|
30
|
+
//$.verbose = true;
|
|
31
|
+
|
|
32
|
+
// we name the service account and the role and the role binding with the same name
|
|
33
|
+
// we currently create one per component to better separate them
|
|
34
|
+
instance.log("ensuring service accounts...");
|
|
35
|
+
const serviceAccountName = `cl-${context.componentName}-deploy`;
|
|
36
|
+
const KUBE_URL =
|
|
37
|
+
await $`TERM=dumb kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/ {print $NF}'`.then(
|
|
38
|
+
(s) => s.stdout.trim()
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
// first upsert service acount in the ns
|
|
42
|
+
try {
|
|
43
|
+
await $`kubectl delete serviceaccount --namespace ${namespace} ${serviceAccountName}`;
|
|
44
|
+
await $`kubectl delete rolebinding --namespace ${namespace} ${serviceAccountName}`;
|
|
45
|
+
await $`kubectl delete role --namespace ${namespace} ${serviceAccountName}`;
|
|
46
|
+
} catch (e) {
|
|
47
|
+
// ignore
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await $`kubectl create serviceaccount --namespace ${namespace} ${serviceAccountName}`;
|
|
51
|
+
|
|
52
|
+
// upsert role in the ns
|
|
53
|
+
|
|
54
|
+
await $`cat <<EOF | kubectl apply -f -
|
|
55
|
+
kind: Role
|
|
56
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
57
|
+
metadata:
|
|
58
|
+
namespace: ${namespace}
|
|
59
|
+
name: ${serviceAccountName}
|
|
60
|
+
rules:
|
|
61
|
+
- apiGroups: ["", "extensions", "apps", "networking.k8s.io", "batch"]
|
|
62
|
+
resources: ["deployments", "replicasets", "statefulsets", "pods", "secrets", "configmaps", "services", "ingresses", "serviceaccounts", "jobs", "cronjobs"]
|
|
63
|
+
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # You can also use ["*"]
|
|
64
|
+
---
|
|
65
|
+
kind: RoleBinding
|
|
66
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
67
|
+
metadata:
|
|
68
|
+
name: ${serviceAccountName}
|
|
69
|
+
namespace: ${namespace}
|
|
70
|
+
subjects:
|
|
71
|
+
- kind: ServiceAccount
|
|
72
|
+
name: ${serviceAccountName}
|
|
73
|
+
namespace: ${namespace}
|
|
74
|
+
roleRef:
|
|
75
|
+
kind: Role
|
|
76
|
+
name: ${serviceAccountName}
|
|
77
|
+
apiGroup: rbac.authorization.k8s.io
|
|
78
|
+
EOF
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
// get token name
|
|
82
|
+
const tokenName =
|
|
83
|
+
await $`kubectl get serviceaccount --namespace ${namespace} ${serviceAccountName} -o jsonpath='{.secrets[0].name}'`;
|
|
84
|
+
|
|
85
|
+
const KUBE_CA_PEM =
|
|
86
|
+
await $`kubectl get secret ${tokenName} --namespace ${namespace} -o jsonpath="{['data']['ca\\.crt']}"`.then(
|
|
87
|
+
(c) => c.stdout.trim()
|
|
88
|
+
);
|
|
89
|
+
const KUBE_TOKEN =
|
|
90
|
+
await $`kubectl get secret ${tokenName} --namespace ${namespace} -o jsonpath="{['data']['token']}" | base64 --decode`.then(
|
|
91
|
+
(c) => c.stdout.trim()
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const vars = {
|
|
95
|
+
KUBE_TOKEN,
|
|
96
|
+
KUBE_CA_PEM,
|
|
97
|
+
KUBE_URL,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
instance.log("service accounts created / updated!");
|
|
101
|
+
|
|
102
|
+
instance.log("");
|
|
103
|
+
instance.log("pusing secrets to gitlab...");
|
|
104
|
+
|
|
105
|
+
await upsertAllVariables(
|
|
106
|
+
instance,
|
|
107
|
+
vars,
|
|
108
|
+
context.environment.shortName,
|
|
109
|
+
context.componentName
|
|
110
|
+
);
|
|
111
|
+
instance.log("done!");
|
|
112
|
+
};
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
-
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
-
return cooked;
|
|
5
|
-
};
|
|
6
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
8
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
9
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
10
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
11
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
12
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
|
-
});
|
|
14
|
-
};
|
|
15
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
16
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
17
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
18
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
19
|
-
function step(op) {
|
|
20
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
21
|
-
while (_) try {
|
|
22
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
23
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
24
|
-
switch (op[0]) {
|
|
25
|
-
case 0: case 1: t = op; break;
|
|
26
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
27
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
28
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
29
|
-
default:
|
|
30
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
31
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
32
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
33
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
34
|
-
if (t[2]) _.ops.pop();
|
|
35
|
-
_.trys.pop(); continue;
|
|
36
|
-
}
|
|
37
|
-
op = body.call(thisArg, _);
|
|
38
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
39
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
43
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
|
-
};
|
|
45
|
-
exports.__esModule = true;
|
|
46
|
-
var pipeline_1 = require("@catladder/pipeline");
|
|
47
|
-
var zx_1 = require("zx");
|
|
48
|
-
var getProjectConfig_1 = require("../../../../config/getProjectConfig");
|
|
49
|
-
var cluster_1 = require("../../../../utils/cluster");
|
|
50
|
-
var gitlab_1 = require("../../../../utils/gitlab");
|
|
51
|
-
var ensureNamespace_1 = __importDefault(require("./utils/ensureNamespace"));
|
|
52
|
-
var open_1 = __importDefault(require("open"));
|
|
53
|
-
exports["default"] = (function (vorpal) { return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
-
return __generator(this, function (_a) {
|
|
55
|
-
return [2 /*return*/, vorpal
|
|
56
|
-
.command("project-init-gitlab", "Initializes the gitlab repo, e.g. connects the cluster to it")
|
|
57
|
-
.action(function () {
|
|
58
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
59
|
-
var allContext, _i, allContext_1, context, deployConfig, fullName, namespace, serviceAccountName, KUBE_URL, e_1, tokenName, KUBE_CA_PEM, KUBE_TOKEN, vars, _a, projectId, projectWebUrl, variables, understood, GL_TOKEN, deploy_tokens;
|
|
60
|
-
var _this = this;
|
|
61
|
-
return __generator(this, function (_b) {
|
|
62
|
-
switch (_b.label) {
|
|
63
|
-
case 0: return [4 /*yield*/, (0, getProjectConfig_1.getAllPipelineContexts)()];
|
|
64
|
-
case 1:
|
|
65
|
-
allContext = _b.sent();
|
|
66
|
-
_i = 0, allContext_1 = allContext;
|
|
67
|
-
_b.label = 2;
|
|
68
|
-
case 2:
|
|
69
|
-
if (!(_i < allContext_1.length)) return [3 /*break*/, 19];
|
|
70
|
-
context = allContext_1[_i];
|
|
71
|
-
deployConfig = context.componentConfig.deploy;
|
|
72
|
-
if (!(0, pipeline_1.isOfDeployType)(deployConfig, "kubernetes")) return [3 /*break*/, 18];
|
|
73
|
-
fullName = (0, pipeline_1.getFullKubernetesClusterName)(deployConfig.cluster);
|
|
74
|
-
this.log("connecting ".concat(context.environment.shortName, ":").concat(context.componentName, " ").concat(fullName));
|
|
75
|
-
return [4 /*yield*/, (0, cluster_1.connectToCluster)(fullName)];
|
|
76
|
-
case 3:
|
|
77
|
-
_b.sent();
|
|
78
|
-
return [4 /*yield*/, (0, ensureNamespace_1["default"])(context)];
|
|
79
|
-
case 4:
|
|
80
|
-
namespace = _b.sent();
|
|
81
|
-
serviceAccountName = "cl-".concat(context.componentName, "-deploy");
|
|
82
|
-
return [4 /*yield*/, (0, zx_1.$)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["TERM=dumb kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/ {print $NF}'"], ["TERM=dumb kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/ {print $NF}'"]))).then(function (s) { return s.stdout.trim(); })];
|
|
83
|
-
case 5:
|
|
84
|
-
KUBE_URL = _b.sent();
|
|
85
|
-
_b.label = 6;
|
|
86
|
-
case 6:
|
|
87
|
-
_b.trys.push([6, 10, , 11]);
|
|
88
|
-
return [4 /*yield*/, (0, zx_1.$)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["kubectl delete serviceaccount --namespace ", " ", ""], ["kubectl delete serviceaccount --namespace ", " ", ""])), namespace, serviceAccountName)];
|
|
89
|
-
case 7:
|
|
90
|
-
_b.sent();
|
|
91
|
-
return [4 /*yield*/, (0, zx_1.$)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["kubectl delete rolebinding --namespace ", " ", ""], ["kubectl delete rolebinding --namespace ", " ", ""])), namespace, serviceAccountName)];
|
|
92
|
-
case 8:
|
|
93
|
-
_b.sent();
|
|
94
|
-
return [4 /*yield*/, (0, zx_1.$)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["kubectl delete role --namespace ", " ", ""], ["kubectl delete role --namespace ", " ", ""])), namespace, serviceAccountName)];
|
|
95
|
-
case 9:
|
|
96
|
-
_b.sent();
|
|
97
|
-
return [3 /*break*/, 11];
|
|
98
|
-
case 10:
|
|
99
|
-
e_1 = _b.sent();
|
|
100
|
-
return [3 /*break*/, 11];
|
|
101
|
-
case 11: return [4 /*yield*/, (0, zx_1.$)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["kubectl create serviceaccount --namespace ", " ", ""], ["kubectl create serviceaccount --namespace ", " ", ""])), namespace, serviceAccountName)];
|
|
102
|
-
case 12:
|
|
103
|
-
_b.sent();
|
|
104
|
-
// upsert role in the ns
|
|
105
|
-
return [4 /*yield*/, (0, zx_1.$)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["cat <<EOF | kubectl apply -f -\nkind: Role\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n namespace: ", "\n name: ", "\nrules:\n- apiGroups: [\"\", \"extensions\", \"apps\", \"networking.k8s.io\", \"batch\"]\n resources: [\"deployments\", \"replicasets\", \"statefulsets\", \"pods\", \"secrets\", \"configmaps\", \"services\", \"ingresses\", \"serviceaccounts\", \"jobs\", \"cronjobs\"]\n verbs: [\"get\", \"list\", \"watch\", \"create\", \"update\", \"patch\", \"delete\"] # You can also use [\"*\"]\n---\nkind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: ", "\n namespace: ", "\nsubjects:\n - kind: ServiceAccount\n name: ", "\n namespace: ", "\nroleRef:\n kind: Role\n name: ", "\n apiGroup: rbac.authorization.k8s.io\nEOF\n "], ["cat <<EOF | kubectl apply -f -\nkind: Role\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n namespace: ", "\n name: ", "\nrules:\n- apiGroups: [\"\", \"extensions\", \"apps\", \"networking.k8s.io\", \"batch\"]\n resources: [\"deployments\", \"replicasets\", \"statefulsets\", \"pods\", \"secrets\", \"configmaps\", \"services\", \"ingresses\", \"serviceaccounts\", \"jobs\", \"cronjobs\"]\n verbs: [\"get\", \"list\", \"watch\", \"create\", \"update\", \"patch\", \"delete\"] # You can also use [\"*\"]\n---\nkind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: ", "\n namespace: ", "\nsubjects:\n - kind: ServiceAccount\n name: ", "\n namespace: ", "\nroleRef:\n kind: Role\n name: ", "\n apiGroup: rbac.authorization.k8s.io\nEOF\n "])), namespace, serviceAccountName, serviceAccountName, namespace, serviceAccountName, namespace, serviceAccountName)];
|
|
106
|
-
case 13:
|
|
107
|
-
// upsert role in the ns
|
|
108
|
-
_b.sent();
|
|
109
|
-
return [4 /*yield*/, (0, zx_1.$)(templateObject_7 || (templateObject_7 = __makeTemplateObject(["kubectl get serviceaccount --namespace ", " ", " -o jsonpath='{.secrets[0].name}'"], ["kubectl get serviceaccount --namespace ", " ", " -o jsonpath='{.secrets[0].name}'"])), namespace, serviceAccountName)];
|
|
110
|
-
case 14:
|
|
111
|
-
tokenName = _b.sent();
|
|
112
|
-
return [4 /*yield*/, (0, zx_1.$)(templateObject_8 || (templateObject_8 = __makeTemplateObject(["kubectl get secret ", " --namespace ", " -o jsonpath=\"{['data']['ca\\.crt']}\""], ["kubectl get secret ", " --namespace ", " -o jsonpath=\"{['data']['ca\\\\.crt']}\""])), tokenName, namespace).then(function (c) { return c.stdout.trim(); })];
|
|
113
|
-
case 15:
|
|
114
|
-
KUBE_CA_PEM = _b.sent();
|
|
115
|
-
return [4 /*yield*/, (0, zx_1.$)(templateObject_9 || (templateObject_9 = __makeTemplateObject(["kubectl get secret ", " --namespace ", " -o jsonpath=\"{['data']['token']}\" | base64 --decode"], ["kubectl get secret ", " --namespace ", " -o jsonpath=\"{['data']['token']}\" | base64 --decode"])), tokenName, namespace).then(function (c) { return c.stdout.trim(); })];
|
|
116
|
-
case 16:
|
|
117
|
-
KUBE_TOKEN = _b.sent();
|
|
118
|
-
vars = {
|
|
119
|
-
KUBE_TOKEN: KUBE_TOKEN,
|
|
120
|
-
KUBE_CA_PEM: KUBE_CA_PEM,
|
|
121
|
-
KUBE_URL: KUBE_URL
|
|
122
|
-
};
|
|
123
|
-
return [4 /*yield*/, (0, gitlab_1.upsertAllVariables)(this, vars, context.environment.shortName, context.componentName)];
|
|
124
|
-
case 17:
|
|
125
|
-
_b.sent();
|
|
126
|
-
_b.label = 18;
|
|
127
|
-
case 18:
|
|
128
|
-
_i++;
|
|
129
|
-
return [3 /*break*/, 2];
|
|
130
|
-
case 19: return [4 /*yield*/, (0, gitlab_1.getProjectInfo)(this)];
|
|
131
|
-
case 20:
|
|
132
|
-
_a = _b.sent(), projectId = _a.id, projectWebUrl = _a.web_url;
|
|
133
|
-
return [4 /*yield*/, (0, gitlab_1.doGitlabRequest)(this, "projects/".concat(projectId, "/variables"))];
|
|
134
|
-
case 21:
|
|
135
|
-
variables = _b.sent();
|
|
136
|
-
if (!!variables.find(function (v) { return v.key === "GL_TOKEN"; })) return [3 /*break*/, 25];
|
|
137
|
-
this.log("I need add a GL_TOKEN to the project, so that semantic release will work\n");
|
|
138
|
-
this.log("👉 Please please create a project access token in gitlab and copy its value into clipboard\n\n - name: something like 'semantic-release'\n - expires: leave empty\n - scopes: api, read_repository");
|
|
139
|
-
this.log("\n");
|
|
140
|
-
return [4 /*yield*/, this.prompt({
|
|
141
|
-
"default": true,
|
|
142
|
-
message: "Understood and open gitlab now? 🤔",
|
|
143
|
-
name: "understood",
|
|
144
|
-
type: "confirm"
|
|
145
|
-
})];
|
|
146
|
-
case 22:
|
|
147
|
-
understood = (_b.sent()).understood;
|
|
148
|
-
if (!understood) {
|
|
149
|
-
this.log("continuing anyway...");
|
|
150
|
-
}
|
|
151
|
-
(0, open_1["default"])("".concat(projectWebUrl, "/-/settings/access_tokens"));
|
|
152
|
-
this.log("\n");
|
|
153
|
-
this.log("Enter your copied token now: ");
|
|
154
|
-
this.log("\n");
|
|
155
|
-
return [4 /*yield*/, this.prompt({
|
|
156
|
-
type: "password",
|
|
157
|
-
name: "GL_TOKEN",
|
|
158
|
-
message: "Access Token: "
|
|
159
|
-
})];
|
|
160
|
-
case 23:
|
|
161
|
-
GL_TOKEN = (_b.sent()).GL_TOKEN;
|
|
162
|
-
return [4 /*yield*/, (0, gitlab_1.doGitlabRequest)(this, "projects/".concat(projectId, "/variables"), {
|
|
163
|
-
key: "GL_TOKEN",
|
|
164
|
-
value: GL_TOKEN
|
|
165
|
-
})];
|
|
166
|
-
case 24:
|
|
167
|
-
_b.sent();
|
|
168
|
-
_b.label = 25;
|
|
169
|
-
case 25: return [4 /*yield*/, (0, gitlab_1.doGitlabRequest)(this, "projects/".concat(projectId, "/deploy_tokens"))];
|
|
170
|
-
case 26:
|
|
171
|
-
deploy_tokens = _b.sent();
|
|
172
|
-
if (!!deploy_tokens.find(function (v) { return v.name === "gitlab-deploy-token"; })) return [3 /*break*/, 28];
|
|
173
|
-
this.log("I will setup the 'GitLab Deploy Token', so Kubernetes can pull images from this project.");
|
|
174
|
-
return [4 /*yield*/, (0, gitlab_1.doGitlabRequest)(this, "projects/".concat(projectId, "/deploy_tokens"), {
|
|
175
|
-
id: projectId,
|
|
176
|
-
name: "gitlab-deploy-token",
|
|
177
|
-
scopes: ["read_registry"]
|
|
178
|
-
})];
|
|
179
|
-
case 27:
|
|
180
|
-
_b.sent();
|
|
181
|
-
_b.label = 28;
|
|
182
|
-
case 28:
|
|
183
|
-
this.log("gitlab is ready! 🥂");
|
|
184
|
-
this.log("\n");
|
|
185
|
-
this.log("do not forget to make sure that:");
|
|
186
|
-
[
|
|
187
|
-
"you have __health route in place",
|
|
188
|
-
"lint and test are defined",
|
|
189
|
-
"eat your vegetables",
|
|
190
|
-
"be awesome 🤩",
|
|
191
|
-
].forEach(function (tip) { return _this.log(" - ".concat(tip)); });
|
|
192
|
-
this.log("\n");
|
|
193
|
-
this.log("\n");
|
|
194
|
-
return [2 /*return*/];
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
})];
|
|
199
|
-
});
|
|
200
|
-
}); });
|
|
201
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9;
|
|
202
|
-
//# sourceMappingURL=commandInitGitlab.js.map
|
|
@@ -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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"}
|