pepr 0.52.3-nightly.0 → 0.52.3-nightly.10

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 (53) hide show
  1. package/dist/cli/banner.d.ts +1 -1
  2. package/dist/cli/banner.d.ts.map +1 -1
  3. package/dist/cli/build/build.helpers.d.ts +1 -1
  4. package/dist/cli/build/build.helpers.d.ts.map +1 -1
  5. package/dist/cli/build/buildModule.d.ts +1 -2
  6. package/dist/cli/build/buildModule.d.ts.map +1 -1
  7. package/dist/cli/build/index.d.ts.map +1 -1
  8. package/dist/cli/deploy/buildAndDeploy.d.ts +5 -0
  9. package/dist/cli/deploy/buildAndDeploy.d.ts.map +1 -0
  10. package/dist/cli/deploy/imagePullSecret.d.ts +16 -0
  11. package/dist/cli/deploy/imagePullSecret.d.ts.map +1 -0
  12. package/dist/cli/deploy/index.d.ts +3 -0
  13. package/dist/cli/deploy/index.d.ts.map +1 -0
  14. package/dist/cli/deploy/userConfirmation.d.ts +4 -0
  15. package/dist/cli/deploy/userConfirmation.d.ts.map +1 -0
  16. package/dist/cli/init/createProjectFiles.d.ts +3 -0
  17. package/dist/cli/init/createProjectFiles.d.ts.map +1 -0
  18. package/dist/cli/init/doPostInitActions.d.ts +2 -0
  19. package/dist/cli/init/doPostInitActions.d.ts.map +1 -0
  20. package/dist/cli/init/index.d.ts +1 -1
  21. package/dist/cli/init/index.d.ts.map +1 -1
  22. package/dist/cli/init/setupProjectStructure.d.ts +2 -0
  23. package/dist/cli/init/setupProjectStructure.d.ts.map +1 -0
  24. package/dist/cli/init/templates.d.ts +3 -9
  25. package/dist/cli/init/templates.d.ts.map +1 -1
  26. package/dist/cli/init/walkthrough.d.ts.map +1 -1
  27. package/dist/cli.js +187 -206
  28. package/dist/controller.js +1 -1
  29. package/dist/lib/controller/index.d.ts.map +1 -1
  30. package/dist/lib.js +1 -0
  31. package/dist/lib.js.map +2 -2
  32. package/package.json +8 -14
  33. package/src/cli/banner.ts +25 -59
  34. package/src/cli/build/build.helpers.ts +3 -9
  35. package/src/cli/build/buildModule.ts +1 -1
  36. package/src/cli/build/index.ts +9 -5
  37. package/src/cli/deploy/buildAndDeploy.ts +48 -0
  38. package/src/cli/deploy/imagePullSecret.ts +68 -0
  39. package/src/cli/deploy/index.ts +40 -0
  40. package/src/cli/deploy/userConfirmation.ts +16 -0
  41. package/src/cli/init/createProjectFiles.ts +45 -0
  42. package/src/cli/init/doPostInitActions.ts +23 -0
  43. package/src/cli/init/index.ts +18 -84
  44. package/src/cli/init/setupProjectStructure.ts +8 -0
  45. package/src/cli/init/templates.ts +2 -4
  46. package/src/cli/init/walkthrough.ts +3 -0
  47. package/src/cli.ts +1 -1
  48. package/src/lib/assets/k8sObjects.ts +6 -6
  49. package/src/lib/assets/yaml/overridesFile.ts +6 -6
  50. package/src/lib/controller/index.ts +1 -0
  51. package/dist/cli/deploy.d.ts +0 -21
  52. package/dist/cli/deploy.d.ts.map +0 -1
  53. package/src/cli/deploy.ts +0 -170
package/src/cli/deploy.ts DELETED
@@ -1,170 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- // SPDX-FileCopyrightText: 2023-Present The Pepr Authors
3
-
4
- import prompt from "prompts";
5
- import { CapabilityExport } from "../lib/types";
6
- import { Assets } from "../lib/assets/assets";
7
- import { ImagePullSecret } from "../lib/types";
8
- import { Command } from "commander";
9
- import { buildModule } from "./build/buildModule";
10
- import { deployImagePullSecret, deployWebhook } from "../lib/assets/deploy";
11
- import { namespaceDeploymentsReady } from "../lib/deploymentChecks";
12
- import { sanitizeName } from "./init/utils";
13
- import { validateCapabilityNames } from "../lib/helpers";
14
- import { namespaceComplianceValidator } from "../lib/helpers";
15
- import { loadCapabilities } from "../lib/assets/loader";
16
-
17
- interface ImagePullSecretDetails {
18
- pullSecret?: string;
19
- dockerServer?: string;
20
- dockerUsername?: string;
21
- dockerEmail?: string;
22
- dockerPassword?: string;
23
- }
24
-
25
- export function validateImagePullSecretDetails(details: ImagePullSecretDetails): {
26
- valid: boolean;
27
- error?: string;
28
- } {
29
- if (!details.pullSecret) {
30
- return { valid: true };
31
- }
32
-
33
- // https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names
34
- if (details.pullSecret !== sanitizeName(details.pullSecret)) {
35
- return {
36
- valid: false,
37
- error: `Invalid --pullSecret. Must be valid name as defined in RFC 1123.`,
38
- };
39
- }
40
-
41
- const missing: string[] = [];
42
- if (!details.dockerEmail) {
43
- missing.push("--docker-email");
44
- }
45
- if (!details.dockerServer) {
46
- missing.push("--docker-server");
47
- }
48
- if (!details.dockerUsername) {
49
- missing.push("--docker-username");
50
- }
51
- if (!details.dockerPassword) {
52
- missing.push("--docker-password");
53
- }
54
-
55
- if (missing.length > 0) {
56
- return {
57
- valid: false,
58
- error: `Error: Must provide ${missing.join(", ")} when providing --pull-secret`,
59
- };
60
- }
61
-
62
- return { valid: true };
63
- }
64
-
65
- type ValidatedImagePullSecretDetails = Required<ImagePullSecretDetails>;
66
-
67
- function generateImagePullSecret(details: ValidatedImagePullSecretDetails): ImagePullSecret {
68
- const auth = Buffer.from(`${details.dockerUsername}:${details.dockerPassword}`).toString(
69
- "base64",
70
- );
71
- return {
72
- auths: {
73
- [details.dockerServer]: {
74
- username: details.dockerUsername,
75
- password: details.dockerPassword,
76
- email: details.dockerEmail,
77
- auth,
78
- },
79
- },
80
- };
81
- }
82
-
83
- export async function getUserConfirmation(opts: { yes: boolean }): Promise<boolean> {
84
- if (opts.yes) {
85
- return true;
86
- }
87
-
88
- // Prompt the user to confirm
89
- const confirmation = await prompt({
90
- type: "confirm",
91
- name: "yes",
92
- message: "This will remove and redeploy the module. Continue?",
93
- });
94
-
95
- return confirmation.yes ? true : false;
96
- }
97
-
98
- async function buildAndDeployModule(image: string, force: boolean): Promise<void> {
99
- const builtModule = await buildModule("dist");
100
- if (!builtModule) {
101
- return;
102
- }
103
-
104
- // Generate a secret for the module
105
- const webhook = new Assets(
106
- { ...builtModule.cfg.pepr, description: builtModule.cfg.description },
107
- builtModule.path,
108
- [],
109
- );
110
- webhook.image = image ?? webhook.image;
111
- const capabilities = await loadCapabilities(webhook.path);
112
- for (const capability of capabilities) {
113
- validateNamespaces(capability, webhook);
114
- }
115
- try {
116
- await webhook.deploy(deployWebhook, force, builtModule.cfg.pepr.webhookTimeout ?? 10);
117
-
118
- // wait for capabilities to be loaded and test names
119
- validateCapabilityNames(webhook.capabilities);
120
-
121
- // Wait for the pepr-system resources to be fully up
122
- await namespaceDeploymentsReady();
123
- console.info(`✅ Module deployed successfully`);
124
- } catch (e) {
125
- console.error(`Error deploying module:`, e);
126
- process.exit(1);
127
- }
128
- }
129
-
130
- export default function (program: Command): void {
131
- program
132
- .command("deploy")
133
- .description("Deploy a Pepr Module")
134
- .option("-E, --docker-email <email>", "Email for Docker registry.")
135
- .option("-P, --docker-password <password>", "Password for Docker registry.")
136
- .option("-S, --docker-server <server>", "Docker server address.")
137
- .option("-U, --docker-username <username>", "Docker registry username.")
138
- .option("-f, --force", "Force deploy the module, override manager field.")
139
- .option("-i, --image <image>", "Override the image tag.")
140
- .option("-p, --pull-secret <name>", "Deploy imagePullSecret for Controller private registry.")
141
- .option("-y, --yes", "Skip confirmation prompts.")
142
- .action(async opts => {
143
- const valResp = validateImagePullSecretDetails(opts);
144
- if (!valResp.valid) {
145
- console.error(valResp.error);
146
- process.exit(1);
147
- }
148
-
149
- if (opts.pullSecret) {
150
- await deployImagePullSecret(generateImagePullSecret(opts), opts.pullSecret);
151
- return;
152
- }
153
-
154
- if (!(await getUserConfirmation(opts))) {
155
- process.exit(0);
156
- }
157
-
158
- await buildAndDeployModule(opts.image, opts.force);
159
- });
160
- }
161
-
162
- export function validateNamespaces(capability: CapabilityExport, webhook: Assets): void {
163
- namespaceComplianceValidator(capability, webhook.alwaysIgnore?.namespaces);
164
- namespaceComplianceValidator(
165
- capability,
166
- webhook.config.admission?.alwaysIgnore?.namespaces,
167
- false,
168
- );
169
- namespaceComplianceValidator(capability, webhook.config.watch?.alwaysIgnore?.namespaces, true);
170
- }