@zuplo/cli 6.19.4 → 6.19.6
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/__tests__/archive-utils.test.js +0 -4
- package/dist/__tests__/archive-utils.test.js.map +1 -1
- package/dist/cmds/deploy.d.ts.map +1 -1
- package/dist/cmds/deploy.js +2 -1
- package/dist/cmds/deploy.js.map +1 -1
- package/dist/common/validators/file-system-validator.d.ts +0 -10
- package/dist/common/validators/file-system-validator.d.ts.map +1 -1
- package/dist/common/validators/file-system-validator.js +1 -22
- package/dist/common/validators/file-system-validator.js.map +1 -1
- package/dist/deploy/archive.d.ts +0 -2
- package/dist/deploy/archive.d.ts.map +1 -1
- package/dist/deploy/archive.js +0 -2
- package/dist/deploy/archive.js.map +1 -1
- package/dist/deploy/handler.d.ts +1 -1
- package/dist/deploy/handler.d.ts.map +1 -1
- package/dist/deploy/handler.js.map +1 -1
- package/dist/list/handler.js +2 -2
- package/dist/list/handler.js.map +1 -1
- package/package.json +3 -3
|
@@ -26,13 +26,11 @@ describe("Archive utils", async function () {
|
|
|
26
26
|
dir: basicTestsPath,
|
|
27
27
|
environment: "basic-1234",
|
|
28
28
|
"api-key": "",
|
|
29
|
-
"verify-remote": false,
|
|
30
29
|
});
|
|
31
30
|
expect(results).to.not.be.empty;
|
|
32
31
|
expect(results.branch).to.equal("basic-1234");
|
|
33
32
|
expect(results.repoUrl).to.not.be.null;
|
|
34
33
|
expect(results.sha).to.not.be.null;
|
|
35
|
-
expect(results.verifyRemote).to.equal(false);
|
|
36
34
|
});
|
|
37
35
|
it("should allow metadata value override on repo url", async function () {
|
|
38
36
|
const results = await generateMetadata({
|
|
@@ -41,7 +39,6 @@ describe("Archive utils", async function () {
|
|
|
41
39
|
dir: basicTestsPath,
|
|
42
40
|
environment: "basic-1234",
|
|
43
41
|
"api-key": "",
|
|
44
|
-
"verify-remote": false,
|
|
45
42
|
"override-repo-url": "https://github.com/zuplo/test-override",
|
|
46
43
|
});
|
|
47
44
|
expect(results).to.not.be.empty;
|
|
@@ -49,7 +46,6 @@ describe("Archive utils", async function () {
|
|
|
49
46
|
expect(results.repoUrl).to.not.be.null;
|
|
50
47
|
expect(results.repoUrl).to.equal("https://github.com/zuplo/test-override");
|
|
51
48
|
expect(results.sha).to.not.be.null;
|
|
52
|
-
expect(results.verifyRemote).to.equal(false);
|
|
53
49
|
});
|
|
54
50
|
});
|
|
55
51
|
//# sourceMappingURL=archive-utils.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive-utils.test.js","sourceRoot":"","sources":["../../src/__tests__/archive-utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,OAAO,CACR,CAAC;AAEF,QAAQ,CAAC,eAAe,EAAE,KAAK;IAC7B,EAAE,CAAC,IAAI,CAAC,0CAA0C,EAAE;QAClD,MAAM,OAAO,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;QACrD,MAAM,aAAa,GAAI,MAAc,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrD,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7B,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACnC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9B,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK;QAC/C,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;YACrC,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE,cAAc;YACnB,WAAW,EAAE,YAAY;YACzB,SAAS,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"archive-utils.test.js","sourceRoot":"","sources":["../../src/__tests__/archive-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\nimport ignore from \"ignore\";\nimport path from \"node:path\";\nimport { describe, it } from \"node:test\";\nimport { fileURLToPath } from \"node:url\";\nimport { createIgnoreFunction, generateMetadata } from \"../deploy/archive.js\";\nconst __filename = fileURLToPath(import.meta.url); // get the resolved path to the file\nconst __dirname = path.dirname(__filename); // get the name of the directory\n\nconst basicTestsPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"..\",\n \"..\",\n \"test-fixtures\",\n \"basic\"\n);\n\ndescribe(\"Archive utils\", async function () {\n it.only(\"should not ignore .zuplo using gitignore\", function () {\n const ignores = createIgnoreFunction(basicTestsPath);\n const expectedRules = (ignore as any)().add(\".git/\");\n expectedRules.add(\".cache/\");\n expectedRules.add(\"dist/\");\n expectedRules.add(\"node_modules/\");\n expectedRules.add(\".env\");\n expectedRules.add(\".husky/_\");\n expectedRules.add(\".DS_Store\");\n\n expect(ignores._rules).to.deep.equal(expectedRules._rules);\n });\n\n it(\"should return default metadata values\", async function () {\n const results = await generateMetadata({\n account: \"zuplo-test\",\n project: \"basic\",\n dir: basicTestsPath,\n environment: \"basic-1234\",\n \"api-key\": \"\",\n });\n\n expect(results).to.not.be.empty;\n expect(results.branch).to.equal(\"basic-1234\");\n expect(results.repoUrl).to.not.be.null;\n expect(results.sha).to.not.be.null;\n });\n\n it(\"should allow metadata value override on repo url\", async function () {\n const results = await generateMetadata({\n account: \"zuplo-test\",\n project: \"basic\",\n dir: basicTestsPath,\n environment: \"basic-1234\",\n \"api-key\": \"\",\n \"override-repo-url\": \"https://github.com/zuplo/test-override\",\n });\n\n expect(results).to.not.be.empty;\n expect(results.branch).to.equal(\"basic-1234\");\n expect(results.repoUrl).to.not.be.null;\n expect(results.repoUrl).to.equal(\"https://github.com/zuplo/test-override\");\n expect(results.sha).to.not.be.null;\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAYV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAYV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAkDf,OAAO;;AArD/B,wBAyDE"}
|
package/dist/cmds/deploy.js
CHANGED
|
@@ -28,9 +28,10 @@ export default {
|
|
|
28
28
|
hidden: true,
|
|
29
29
|
})
|
|
30
30
|
.option("verify-remote", {
|
|
31
|
+
deprecated: true,
|
|
31
32
|
type: "boolean",
|
|
32
33
|
describe: "Verify that this Git repository matches the one configured on Zuplo. Use --no-verify-remote to disable.",
|
|
33
|
-
default:
|
|
34
|
+
default: false,
|
|
34
35
|
})
|
|
35
36
|
.option("environment", {
|
|
36
37
|
type: "string",
|
package/dist/cmds/deploy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AACvE,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAa,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAe;IACb,IAAI,EAAE,qDAAqD;IAC3D,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,SAAS;SAClB,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;aACD,MAAM,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,mCAAmC;YAC7C,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,eAAe,EAAE;YACvB,IAAI,EAAE,SAAS;YACf,QAAQ,EACN,yGAAyG;YAC3G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AACvE,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAa,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAe;IACb,IAAI,EAAE,qDAAqD;IAC3D,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,SAAS;SAClB,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;aACD,MAAM,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,mCAAmC;YAC7C,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,eAAe,EAAE;YACvB,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,SAAS;YACf,QAAQ,EACN,yGAAyG;YAC3G,OAAO,EAAE,KAAK;SACf,CAAC;aACD,MAAM,CAAC,aAAa,EAAE;YACrB,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,2EAA2E;SAC9E,CAAC;aACD,MAAM,CAAC,sBAAsB,EAAE;YAC9B,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,uDAAuD;SAClE,CAAC;aACD,MAAM,CAAC,mBAAmB,EAAE;YAC3B,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,iCAAiC;YAC3C,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,IAAI;SACb,CAAC;aACD,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;aACzB,OAAO,CAAC,eAAe,CAAC;aACxB,UAAU,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;aAC9C,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,OAAO,MAAM,IAAI,YAAY,CAC3B,6BAA6B,CAC9B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAClD,MAAM,MAAM,CAAC,IAAiB,CAAC,CAAC;IAClC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { configure } from \"../common/middleware/user-configuration.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport setBlocking from \"../common/output.js\";\nimport { validDeployDirectoryValidator } from \"../common/validators/file-system-validator.js\";\nimport { YargsChecker } from \"../common/validators/lib.js\";\nimport { Arguments, deploy } from \"../deploy/handler.js\";\n\nexport default {\n desc: \"Deploys current Git branch of the current directory\",\n command: \"deploy\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n })\n .option(\"project\", {\n type: \"string\",\n hidden: true,\n describe: \"The project name\",\n })\n .option(\"dir\", {\n type: \"string\",\n describe: \"The directory containing your zup\",\n default: \".\",\n normalize: true,\n hidden: true,\n })\n .option(\"verify-remote\", {\n deprecated: true,\n type: \"boolean\",\n describe:\n \"Verify that this Git repository matches the one configured on Zuplo. Use --no-verify-remote to disable.\",\n default: false,\n })\n .option(\"environment\", {\n type: \"string\",\n describe:\n \"The value to use for environment name, instead of the current branch name\",\n })\n .option(\"self-hosted-endpoint\", {\n type: \"string\",\n describe: \"The endpoint of your self-hosted service to deploy to\",\n })\n .option(\"override-repo-url\", {\n type: \"string\",\n describe: \"Override the repo url reference\",\n default: undefined,\n hidden: true,\n })\n .demandOption([\"api-key\"])\n .boolean(\"verify-remote\")\n .middleware([setBlocking, configure, identify])\n .check(async (argv) => {\n return await new YargsChecker<typeof argv>(\n validDeployDirectoryValidator\n ).check(argv);\n });\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zup deploy\" });\n await deploy(argv as Arguments);\n },\n};\n"]}
|
|
@@ -14,9 +14,6 @@ export declare class NoGitCommits extends Error {
|
|
|
14
14
|
export declare class NotOnAGitBranch extends Error {
|
|
15
15
|
constructor();
|
|
16
16
|
}
|
|
17
|
-
export declare class MissingGitRemote extends Error {
|
|
18
|
-
constructor();
|
|
19
|
-
}
|
|
20
17
|
export declare class GitVersionControlValidator implements ValidationRule<{
|
|
21
18
|
dir: string;
|
|
22
19
|
}> {
|
|
@@ -38,13 +35,6 @@ export declare class GitBranchValidator implements ValidationRule<{
|
|
|
38
35
|
dir: string;
|
|
39
36
|
}): Promise<Result>;
|
|
40
37
|
}
|
|
41
|
-
export declare class GitRemoteValidator implements ValidationRule<{
|
|
42
|
-
dir: string;
|
|
43
|
-
}> {
|
|
44
|
-
validate(option: {
|
|
45
|
-
dir: string;
|
|
46
|
-
}): Promise<Result>;
|
|
47
|
-
}
|
|
48
38
|
export declare class ZuploProjectValidator implements ValidationRule<{
|
|
49
39
|
dir: string;
|
|
50
40
|
}> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system-validator.d.ts","sourceRoot":"","sources":["../../../src/common/validators/file-system-validator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGtE,qBAAa,gBAAiB,SAAQ,KAAK;;CAK1C;AAED,qBAAa,gBAAiB,SAAQ,KAAK;;CAO1C;AAED,qBAAa,wBAAyB,SAAQ,KAAK;;CAOlD;AAED,qBAAa,YAAa,SAAQ,KAAK;;CAOtC;AAED,qBAAa,eAAgB,SAAQ,KAAK;;CAOzC;AAED,qBAAa,
|
|
1
|
+
{"version":3,"file":"file-system-validator.d.ts","sourceRoot":"","sources":["../../../src/common/validators/file-system-validator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGtE,qBAAa,gBAAiB,SAAQ,KAAK;;CAK1C;AAED,qBAAa,gBAAiB,SAAQ,KAAK;;CAO1C;AAED,qBAAa,wBAAyB,SAAQ,KAAK;;CAOlD;AAED,qBAAa,YAAa,SAAQ,KAAK;;CAOtC;AAED,qBAAa,eAAgB,SAAQ,KAAK;;CAOzC;AAED,qBAAa,0BACX,YAAW,cAAc,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;IAEpC,QAAQ,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAazD;AAED,qBAAa,kBAAmB,YAAW,cAAc,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;IAClE,QAAQ,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAoBzD;AAED,qBAAa,kBAAmB,YAAW,cAAc,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;IAClE,QAAQ,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAazD;AAED,qBAAa,qBAAsB,YAAW,cAAc,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;IACrE,QAAQ,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAsB1D;AAED,qBAAa,6BACX,YAAW,cAAc,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;IAEpC,QAAQ,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAkBzD;AAED,eAAO,MAAM,6BAA6B;SACnC,MAAM;aACF,MAAM,GAAG,SAAS;EAO5B,CAAC;AAEF,eAAO,MAAM,2BAA2B;SACjC,MAAM;EACuD,CAAC"}
|
|
@@ -35,12 +35,6 @@ export class NotOnAGitBranch extends Error {
|
|
|
35
35
|
Object.setPrototypeOf(this, NotOnAGitBranch.prototype);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
export class MissingGitRemote extends Error {
|
|
39
|
-
constructor() {
|
|
40
|
-
super("Invalid Git state: You do not have a remote origin configured. Run `git remote add origin <url>` to add the url of Git repository matching your project on Zuplo.");
|
|
41
|
-
Object.setPrototypeOf(this, MissingGitRemote.prototype);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
38
|
export class GitVersionControlValidator {
|
|
45
39
|
async validate(option) {
|
|
46
40
|
const { dir } = option;
|
|
@@ -92,21 +86,6 @@ export class GitBranchValidator {
|
|
|
92
86
|
return { ok: true };
|
|
93
87
|
}
|
|
94
88
|
}
|
|
95
|
-
export class GitRemoteValidator {
|
|
96
|
-
async validate(option) {
|
|
97
|
-
const { dir } = option;
|
|
98
|
-
const git = simpleGit({ baseDir: dir });
|
|
99
|
-
const remotes = await git.getRemotes(true);
|
|
100
|
-
const origin = remotes.find((r) => r.name === "origin");
|
|
101
|
-
if (!origin) {
|
|
102
|
-
return {
|
|
103
|
-
ok: false,
|
|
104
|
-
error: new MissingGitRemote(),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
return { ok: true };
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
89
|
export class ZuploProjectValidator {
|
|
111
90
|
async validate(options) {
|
|
112
91
|
const { dir } = options;
|
|
@@ -153,6 +132,6 @@ export class ZuploProjectHasTestsValidator {
|
|
|
153
132
|
}
|
|
154
133
|
}
|
|
155
134
|
}
|
|
156
|
-
export const validDeployDirectoryValidator = new CompositeValidator(new ZuploProjectValidator(), new GitVersionControlValidator(), new GitCommitValidator(), new GitBranchValidator(), new
|
|
135
|
+
export const validDeployDirectoryValidator = new CompositeValidator(new ZuploProjectValidator(), new GitVersionControlValidator(), new GitCommitValidator(), new GitBranchValidator(), new ProjectIsSetValidator());
|
|
157
136
|
export const validTestDirectoryValidator = new CompositeValidator(new ZuploProjectValidator(), new ZuploProjectHasTestsValidator());
|
|
158
137
|
//# sourceMappingURL=file-system-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system-validator.js","sourceRoot":"","sources":["../../../src/common/validators/file-system-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import fg from \"fast-glob\";\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { simpleGit } from \"simple-git\";\nimport { TEST_IN_FOLDER } from \"../constants.js\";\nimport { CompositeValidator, Result, ValidationRule } from \"./lib.js\";\nimport { ProjectIsSetValidator } from \"./project-name-validator.js\";\n\nexport class NotAGitRepoError extends Error {\n constructor() {\n super(\"Invalid directory: The current directory is not a Git repository.\");\n Object.setPrototypeOf(this, NotAGitRepoError.prototype);\n }\n}\n\nexport class NotAZuploProject extends Error {\n constructor() {\n super(\n \"Invalid directory: The current directory is not the root of a Zuplo project.\"\n );\n Object.setPrototypeOf(this, NotAZuploProject.prototype);\n }\n}\n\nexport class ZuploProjectMissingTests extends Error {\n constructor() {\n super(\n \"Invalid directory: The current directory does not contain any tests (*.test.ts) in the /tests folder. Create a at least one test of the form some-name.test.ts\"\n );\n Object.setPrototypeOf(this, ZuploProjectMissingTests.prototype);\n }\n}\n\nexport class NoGitCommits extends Error {\n constructor() {\n super(\n \"Invalid Git state: The current directory does not contain any commits. Make a commit before deploying.\"\n );\n Object.setPrototypeOf(this, NoGitCommits.prototype);\n }\n}\n\nexport class NotOnAGitBranch extends Error {\n constructor() {\n super(\n \"Invalid Git state: You are not on a branch. Run `git checkout -b <branch-name>` to create a new branch.\"\n );\n Object.setPrototypeOf(this, NotOnAGitBranch.prototype);\n }\n}\n\nexport class MissingGitRemote extends Error {\n constructor() {\n super(\n \"Invalid Git state: You do not have a remote origin configured. Run `git remote add origin <url>` to add the url of Git repository matching your project on Zuplo.\"\n );\n Object.setPrototypeOf(this, MissingGitRemote.prototype);\n }\n}\n\nexport class GitVersionControlValidator\n implements ValidationRule<{ dir: string }>\n{\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n try {\n await simpleGit({ baseDir: dir }).status();\n return { ok: true };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_err) {\n return {\n ok: false,\n error: new NotAGitRepoError(),\n };\n }\n }\n}\n\nexport class GitCommitValidator implements ValidationRule<{ dir: string }> {\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n try {\n const git = simpleGit({ baseDir: dir });\n const commits = await git.log({ maxCount: 1 });\n if (commits.total === 0) {\n return {\n ok: false,\n error: new NoGitCommits(),\n };\n }\n return { ok: true };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_err) {\n return {\n ok: false,\n error: new NoGitCommits(),\n };\n }\n }\n}\n\nexport class GitBranchValidator implements ValidationRule<{ dir: string }> {\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n const git = simpleGit({ baseDir: dir });\n const branch = await git.branch();\n if (!branch.current) {\n return {\n ok: false,\n error: new NotOnAGitBranch(),\n };\n }\n\n return { ok: true };\n }\n}\n\nexport class GitRemoteValidator implements ValidationRule<{ dir: string }> {\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n const git = simpleGit({ baseDir: dir });\n const remotes = await git.getRemotes(true);\n const origin = remotes.find((r) => r.name === \"origin\");\n if (!origin) {\n return {\n ok: false,\n error: new MissingGitRemote(),\n };\n }\n return { ok: true };\n }\n}\n\nexport class ZuploProjectValidator implements ValidationRule<{ dir: string }> {\n async validate(options: { dir: string }): Promise<Result> {\n const { dir } = options;\n try {\n if (existsSync(`${dir}/config`)) {\n const files = readdirSync(join(dir, \"config\"));\n const existingOASFiles =\n files.filter((file) => file.endsWith(\".oas.json\")).length >= 1;\n if (existingOASFiles === true) {\n return { ok: true };\n }\n }\n return {\n ok: false,\n error: new NotAZuploProject(),\n };\n } catch (err) {\n return {\n ok: false,\n error: err,\n };\n }\n }\n}\n\nexport class ZuploProjectHasTestsValidator\n implements ValidationRule<{ dir: string }>\n{\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n try {\n if (fg.sync(`${dir}/${TEST_IN_FOLDER}/**/*.test.ts`).length >= 1) {\n return { ok: true };\n } else {\n return {\n ok: false,\n error: new ZuploProjectMissingTests(),\n };\n }\n } catch (err) {\n return {\n ok: false,\n error: err,\n };\n }\n }\n}\n\nexport const validDeployDirectoryValidator = new CompositeValidator<{\n dir: string;\n project: string | undefined;\n}>(\n new ZuploProjectValidator(),\n new GitVersionControlValidator(),\n new GitCommitValidator(),\n new GitBranchValidator(),\n new GitRemoteValidator(),\n new ProjectIsSetValidator()\n);\n\nexport const validTestDirectoryValidator = new CompositeValidator<{\n dir: string;\n}>(new ZuploProjectValidator(), new ZuploProjectHasTestsValidator());\n"]}
|
|
1
|
+
{"version":3,"file":"file-system-validator.js","sourceRoot":"","sources":["../../../src/common/validators/file-system-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import fg from \"fast-glob\";\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { simpleGit } from \"simple-git\";\nimport { TEST_IN_FOLDER } from \"../constants.js\";\nimport { CompositeValidator, Result, ValidationRule } from \"./lib.js\";\nimport { ProjectIsSetValidator } from \"./project-name-validator.js\";\n\nexport class NotAGitRepoError extends Error {\n constructor() {\n super(\"Invalid directory: The current directory is not a Git repository.\");\n Object.setPrototypeOf(this, NotAGitRepoError.prototype);\n }\n}\n\nexport class NotAZuploProject extends Error {\n constructor() {\n super(\n \"Invalid directory: The current directory is not the root of a Zuplo project.\"\n );\n Object.setPrototypeOf(this, NotAZuploProject.prototype);\n }\n}\n\nexport class ZuploProjectMissingTests extends Error {\n constructor() {\n super(\n \"Invalid directory: The current directory does not contain any tests (*.test.ts) in the /tests folder. Create a at least one test of the form some-name.test.ts\"\n );\n Object.setPrototypeOf(this, ZuploProjectMissingTests.prototype);\n }\n}\n\nexport class NoGitCommits extends Error {\n constructor() {\n super(\n \"Invalid Git state: The current directory does not contain any commits. Make a commit before deploying.\"\n );\n Object.setPrototypeOf(this, NoGitCommits.prototype);\n }\n}\n\nexport class NotOnAGitBranch extends Error {\n constructor() {\n super(\n \"Invalid Git state: You are not on a branch. Run `git checkout -b <branch-name>` to create a new branch.\"\n );\n Object.setPrototypeOf(this, NotOnAGitBranch.prototype);\n }\n}\n\nexport class GitVersionControlValidator\n implements ValidationRule<{ dir: string }>\n{\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n try {\n await simpleGit({ baseDir: dir }).status();\n return { ok: true };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_err) {\n return {\n ok: false,\n error: new NotAGitRepoError(),\n };\n }\n }\n}\n\nexport class GitCommitValidator implements ValidationRule<{ dir: string }> {\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n try {\n const git = simpleGit({ baseDir: dir });\n const commits = await git.log({ maxCount: 1 });\n if (commits.total === 0) {\n return {\n ok: false,\n error: new NoGitCommits(),\n };\n }\n return { ok: true };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_err) {\n return {\n ok: false,\n error: new NoGitCommits(),\n };\n }\n }\n}\n\nexport class GitBranchValidator implements ValidationRule<{ dir: string }> {\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n const git = simpleGit({ baseDir: dir });\n const branch = await git.branch();\n if (!branch.current) {\n return {\n ok: false,\n error: new NotOnAGitBranch(),\n };\n }\n\n return { ok: true };\n }\n}\n\nexport class ZuploProjectValidator implements ValidationRule<{ dir: string }> {\n async validate(options: { dir: string }): Promise<Result> {\n const { dir } = options;\n try {\n if (existsSync(`${dir}/config`)) {\n const files = readdirSync(join(dir, \"config\"));\n const existingOASFiles =\n files.filter((file) => file.endsWith(\".oas.json\")).length >= 1;\n if (existingOASFiles === true) {\n return { ok: true };\n }\n }\n return {\n ok: false,\n error: new NotAZuploProject(),\n };\n } catch (err) {\n return {\n ok: false,\n error: err,\n };\n }\n }\n}\n\nexport class ZuploProjectHasTestsValidator\n implements ValidationRule<{ dir: string }>\n{\n async validate(option: { dir: string }): Promise<Result> {\n const { dir } = option;\n try {\n if (fg.sync(`${dir}/${TEST_IN_FOLDER}/**/*.test.ts`).length >= 1) {\n return { ok: true };\n } else {\n return {\n ok: false,\n error: new ZuploProjectMissingTests(),\n };\n }\n } catch (err) {\n return {\n ok: false,\n error: err,\n };\n }\n }\n}\n\nexport const validDeployDirectoryValidator = new CompositeValidator<{\n dir: string;\n project: string | undefined;\n}>(\n new ZuploProjectValidator(),\n new GitVersionControlValidator(),\n new GitCommitValidator(),\n new GitBranchValidator(),\n new ProjectIsSetValidator()\n);\n\nexport const validTestDirectoryValidator = new CompositeValidator<{\n dir: string;\n}>(new ZuploProjectValidator(), new ZuploProjectHasTestsValidator());\n"]}
|
package/dist/deploy/archive.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ export declare function archive(argv: Arguments): Promise<{
|
|
|
6
6
|
branch: string;
|
|
7
7
|
repoUrl: string;
|
|
8
8
|
sha: string;
|
|
9
|
-
verifyRemote: boolean;
|
|
10
9
|
};
|
|
11
10
|
}>;
|
|
12
11
|
export declare function createIgnoreFunction(normalizedDir: string): any;
|
|
@@ -14,6 +13,5 @@ export declare function generateMetadata(argv: Arguments): Promise<{
|
|
|
14
13
|
branch: string;
|
|
15
14
|
repoUrl: string;
|
|
16
15
|
sha: string;
|
|
17
|
-
verifyRemote: boolean;
|
|
18
16
|
}>;
|
|
19
17
|
//# sourceMappingURL=archive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/deploy/archive.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAS3C,wBAAsB,OAAO,CAAC,IAAI,EAAE,SAAS
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/deploy/archive.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAS3C,wBAAsB,OAAO,CAAC,IAAI,EAAE,SAAS;;;;;;;GA6D5C;AAID,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,OA2BzD;AAeD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS;;;;GAoDrD"}
|
package/dist/deploy/archive.js
CHANGED
|
@@ -115,12 +115,10 @@ export async function generateMetadata(argv) {
|
|
|
115
115
|
const repoUrl = argv["override-repo-url"]
|
|
116
116
|
? argv["override-repo-url"]
|
|
117
117
|
: (await git.listRemote(["--get-url"])).trim();
|
|
118
|
-
const verifyRemote = argv["verify-remote"];
|
|
119
118
|
return {
|
|
120
119
|
branch,
|
|
121
120
|
repoUrl,
|
|
122
121
|
sha,
|
|
123
|
-
verifyRemote,
|
|
124
122
|
};
|
|
125
123
|
}
|
|
126
124
|
async function writeGeneratedMetadata(dir, metadata) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/deploy/archive.ts"],"names":[],"mappings":"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","sourcesContent":["import ignore from \"ignore\";\nimport { minimatch } from \"minimatch\";\nimport { randomBytes } from \"node:crypto\";\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n Stats,\n writeFileSync,\n} from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join, relative, sep } from \"node:path\";\nimport { simpleGit } from \"simple-git\";\nimport * as tar from \"tar\";\nimport { DEPLOYER_METADATA_FILE } from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport { Arguments } from \"./handler.js\";\n\nexport const ARCHIVE_EXTENSION = \".tar.gz\";\n\nfunction createTempFileWithSuffix(suffix = ARCHIVE_EXTENSION) {\n const tempDir = tmpdir();\n const randomName = randomBytes(16).toString(\"hex\");\n const tempFilePath = join(tempDir, `${randomName}${suffix}`);\n return tempFilePath;\n}\n\nexport async function archive(argv: Arguments) {\n const tarball = createTempFileWithSuffix();\n const dir = argv.dir;\n const ignoreFn = createIgnoreFunction(dir);\n const normalizedDir = join(relative(process.cwd(), dir));\n\n const metadata = await prepareDeployerMetadata(argv);\n\n await tar.create(\n {\n gzip: true,\n file: tarball,\n filter: (path, stat) => {\n const stats = stat as unknown as Stats;\n const normalizedPath = stats.isDirectory()\n ? join(relative(process.cwd(), path), sep) // add / to help the ignore module determine that this is a folder\n : join(relative(process.cwd(), path));\n\n // special case to allow for processing of the root by tar (./)\n if (minimatch(normalizedPath, \"/\", { windowsPathsNoEscape: true })) {\n return true;\n }\n\n if (\n minimatch(normalizedPath, \".zuplo/\", { windowsPathsNoEscape: true })\n ) {\n // Need to return true to allow this to process the entries of the directory\n return true;\n }\n\n if (\n minimatch(normalizedPath, `.zuplo/${DEPLOYER_METADATA_FILE}`, {\n windowsPathsNoEscape: true,\n })\n ) {\n // Now on the second round when it enters the .zuplo folder, we specifically look for this file\n return true;\n }\n\n // We special case the .env files to allow for the self-hosted endpoint to be passed in\n if (normalizedPath === \".env\" || normalizedPath === \".env.zuplo\") {\n if (argv[\"self-hosted-endpoint\"]) {\n return true;\n }\n }\n\n const result = ignoreFn.ignores(normalizedPath);\n logger.trace(`${normalizedPath} ignored: ${result}`);\n\n // The way `tar` interprets true|false is \"opposite\" from ignore\n // When ignore returns true, it means that the .ignore file doesn't want it.\n // When tar return true, it means that we want it.\n return !result;\n },\n },\n [normalizedDir]\n );\n return {\n tarball,\n metadata,\n };\n}\n\n// Note that we do not recursively create an ignore function for each dir\n// We only create one for the top-level of the directory\nexport function createIgnoreFunction(normalizedDir: string) {\n // Most ignore files forget to ignore the .git directory\n\n // Need to do this conversion because of some weird confusion with the d.ts for ignore package in esm\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const baseIgnore = (ignore as any)().add(\".git/\");\n\n if (existsSync(`${normalizedDir}/.zupignore`)) {\n const zupignorePath = `${normalizedDir}/.zupignore`;\n logger.debug(`Using ${zupignorePath} to filter out files`);\n return baseIgnore.add(readFileSync(zupignorePath).toString());\n } else if (existsSync(`${normalizedDir}/.gitignore`)) {\n const gitignorePath = `${normalizedDir}/.gitignore`;\n logger.debug(`Using ${gitignorePath} to filter out files`);\n const gitIgnoreContent = readFileSync(gitignorePath).toString();\n // @NOTE - we should always include the .zuplo folder\n const gitIgnoreContentDotZuploRemoved = gitIgnoreContent.replace(\n /\\.zuplo[/]/,\n \"\"\n );\n return baseIgnore.add(gitIgnoreContentDotZuploRemoved);\n } else {\n logger.debug(\n \"Didn't find a .gitignore or .zupignore file. Defaulting to ignoring .git and node_modules.\"\n );\n return baseIgnore.add(\"node_modules/\");\n }\n}\n\ninterface DeployerMetadata {\n branch: string;\n repoUrl: string;\n sha: string;\n}\n\nasync function prepareDeployerMetadata(argv: Arguments) {\n const dir = argv.dir;\n const metadata = await generateMetadata(argv);\n await writeGeneratedMetadata(dir, metadata);\n return metadata;\n}\n\nexport async function generateMetadata(argv: Arguments) {\n const dir = argv.dir;\n const git = simpleGit({ baseDir: dir });\n\n let branch: string;\n if (argv.environment) {\n branch = argv.environment;\n } else {\n // Get the current branch from Git\n const status = await git.status();\n if (!status.current) {\n throw new Error(\"Invalid state: Directory is in detached head state.\");\n }\n branch = status.current.trim();\n\n // @NOTE - gitlab returns HEAD as the current branch when running git.status()\n // https://forum.gitlab.com/t/why-i-cant-get-the-branch-name/72462/6\n if (branch === \"HEAD\") {\n // Fetch remote branches to ensure the latest information\n await git.fetch([\"--all\"]);\n\n const branchCommit = await git.branch([\"-a\"]);\n const brancheRef = await git.branch([\n \"-r\",\n \"--contains\",\n branchCommit.current,\n ]);\n if (brancheRef && brancheRef.all && brancheRef.all[0]) {\n const originBranch = brancheRef.all[0];\n const cleanOriginBranch = originBranch.replace(/^origin\\//, \"\");\n if (!cleanOriginBranch) {\n throw new Error(\n \"Invalid state: Directory is in detached head state.\"\n );\n }\n branch = cleanOriginBranch.trim();\n }\n }\n }\n\n // Get the current sha\n const sha = (await git.revparse([\"HEAD\"])).trim();\n\n const repoUrl = argv[\"override-repo-url\"]\n ? argv[\"override-repo-url\"]\n : (await git.listRemote([\"--get-url\"])).trim();\n\n const verifyRemote = argv[\"verify-remote\"];\n\n return {\n branch,\n repoUrl,\n sha,\n verifyRemote,\n };\n}\n\nasync function writeGeneratedMetadata(dir: string, metadata: DeployerMetadata) {\n try {\n mkdirSync(`${dir}/.zuplo`);\n } catch (err) {\n if (err.code === \"EEXIST\") {\n // this is fine, which means that we don't create it and move on\n } else {\n throw err;\n }\n }\n await writeFileSync(\n `${dir}/.zuplo/${DEPLOYER_METADATA_FILE}`,\n JSON.stringify(metadata, null, 2),\n {\n flag: \"w\",\n }\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/deploy/archive.ts"],"names":[],"mappings":"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","sourcesContent":["import ignore from \"ignore\";\nimport { minimatch } from \"minimatch\";\nimport { randomBytes } from \"node:crypto\";\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n Stats,\n writeFileSync,\n} from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join, relative, sep } from \"node:path\";\nimport { simpleGit } from \"simple-git\";\nimport * as tar from \"tar\";\nimport { DEPLOYER_METADATA_FILE } from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport { Arguments } from \"./handler.js\";\n\nexport const ARCHIVE_EXTENSION = \".tar.gz\";\n\nfunction createTempFileWithSuffix(suffix = ARCHIVE_EXTENSION) {\n const tempDir = tmpdir();\n const randomName = randomBytes(16).toString(\"hex\");\n const tempFilePath = join(tempDir, `${randomName}${suffix}`);\n return tempFilePath;\n}\n\nexport async function archive(argv: Arguments) {\n const tarball = createTempFileWithSuffix();\n const dir = argv.dir;\n const ignoreFn = createIgnoreFunction(dir);\n const normalizedDir = join(relative(process.cwd(), dir));\n\n const metadata = await prepareDeployerMetadata(argv);\n\n await tar.create(\n {\n gzip: true,\n file: tarball,\n filter: (path, stat) => {\n const stats = stat as unknown as Stats;\n const normalizedPath = stats.isDirectory()\n ? join(relative(process.cwd(), path), sep) // add / to help the ignore module determine that this is a folder\n : join(relative(process.cwd(), path));\n\n // special case to allow for processing of the root by tar (./)\n if (minimatch(normalizedPath, \"/\", { windowsPathsNoEscape: true })) {\n return true;\n }\n\n if (\n minimatch(normalizedPath, \".zuplo/\", { windowsPathsNoEscape: true })\n ) {\n // Need to return true to allow this to process the entries of the directory\n return true;\n }\n\n if (\n minimatch(normalizedPath, `.zuplo/${DEPLOYER_METADATA_FILE}`, {\n windowsPathsNoEscape: true,\n })\n ) {\n // Now on the second round when it enters the .zuplo folder, we specifically look for this file\n return true;\n }\n\n // We special case the .env files to allow for the self-hosted endpoint to be passed in\n if (normalizedPath === \".env\" || normalizedPath === \".env.zuplo\") {\n if (argv[\"self-hosted-endpoint\"]) {\n return true;\n }\n }\n\n const result = ignoreFn.ignores(normalizedPath);\n logger.trace(`${normalizedPath} ignored: ${result}`);\n\n // The way `tar` interprets true|false is \"opposite\" from ignore\n // When ignore returns true, it means that the .ignore file doesn't want it.\n // When tar return true, it means that we want it.\n return !result;\n },\n },\n [normalizedDir]\n );\n return {\n tarball,\n metadata,\n };\n}\n\n// Note that we do not recursively create an ignore function for each dir\n// We only create one for the top-level of the directory\nexport function createIgnoreFunction(normalizedDir: string) {\n // Most ignore files forget to ignore the .git directory\n\n // Need to do this conversion because of some weird confusion with the d.ts for ignore package in esm\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const baseIgnore = (ignore as any)().add(\".git/\");\n\n if (existsSync(`${normalizedDir}/.zupignore`)) {\n const zupignorePath = `${normalizedDir}/.zupignore`;\n logger.debug(`Using ${zupignorePath} to filter out files`);\n return baseIgnore.add(readFileSync(zupignorePath).toString());\n } else if (existsSync(`${normalizedDir}/.gitignore`)) {\n const gitignorePath = `${normalizedDir}/.gitignore`;\n logger.debug(`Using ${gitignorePath} to filter out files`);\n const gitIgnoreContent = readFileSync(gitignorePath).toString();\n // @NOTE - we should always include the .zuplo folder\n const gitIgnoreContentDotZuploRemoved = gitIgnoreContent.replace(\n /\\.zuplo[/]/,\n \"\"\n );\n return baseIgnore.add(gitIgnoreContentDotZuploRemoved);\n } else {\n logger.debug(\n \"Didn't find a .gitignore or .zupignore file. Defaulting to ignoring .git and node_modules.\"\n );\n return baseIgnore.add(\"node_modules/\");\n }\n}\n\ninterface DeployerMetadata {\n branch: string;\n repoUrl: string;\n sha: string;\n}\n\nasync function prepareDeployerMetadata(argv: Arguments) {\n const dir = argv.dir;\n const metadata = await generateMetadata(argv);\n await writeGeneratedMetadata(dir, metadata);\n return metadata;\n}\n\nexport async function generateMetadata(argv: Arguments) {\n const dir = argv.dir;\n const git = simpleGit({ baseDir: dir });\n\n let branch: string;\n if (argv.environment) {\n branch = argv.environment;\n } else {\n // Get the current branch from Git\n const status = await git.status();\n if (!status.current) {\n throw new Error(\"Invalid state: Directory is in detached head state.\");\n }\n branch = status.current.trim();\n\n // @NOTE - gitlab returns HEAD as the current branch when running git.status()\n // https://forum.gitlab.com/t/why-i-cant-get-the-branch-name/72462/6\n if (branch === \"HEAD\") {\n // Fetch remote branches to ensure the latest information\n await git.fetch([\"--all\"]);\n\n const branchCommit = await git.branch([\"-a\"]);\n const brancheRef = await git.branch([\n \"-r\",\n \"--contains\",\n branchCommit.current,\n ]);\n if (brancheRef && brancheRef.all && brancheRef.all[0]) {\n const originBranch = brancheRef.all[0];\n const cleanOriginBranch = originBranch.replace(/^origin\\//, \"\");\n if (!cleanOriginBranch) {\n throw new Error(\n \"Invalid state: Directory is in detached head state.\"\n );\n }\n branch = cleanOriginBranch.trim();\n }\n }\n }\n\n // Get the current sha\n const sha = (await git.revparse([\"HEAD\"])).trim();\n\n const repoUrl = argv[\"override-repo-url\"]\n ? argv[\"override-repo-url\"]\n : (await git.listRemote([\"--get-url\"])).trim();\n\n return {\n branch,\n repoUrl,\n sha,\n };\n}\n\nasync function writeGeneratedMetadata(dir: string, metadata: DeployerMetadata) {\n try {\n mkdirSync(`${dir}/.zuplo`);\n } catch (err) {\n if (err.code === \"EEXIST\") {\n // this is fine, which means that we don't create it and move on\n } else {\n throw err;\n }\n }\n await writeFileSync(\n `${dir}/.zuplo/${DEPLOYER_METADATA_FILE}`,\n JSON.stringify(metadata, null, 2),\n {\n flag: \"w\",\n }\n );\n}\n"]}
|
package/dist/deploy/handler.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAW9D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAW9D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAC7C,SAAS,EACT,sBAAsB,CACvB,CAAC;AAEF,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,iBAO3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, parse, relative } from \"node:path\";\nimport {\n MAX_PRETTY_BRANCH_NAME as MAX_PRETTY_BRANCH_LENGTH,\n ZUPLO_SYSTEM_ENV_VAR,\n} from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n printSpinnerToConsole,\n printWarningToConsole,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\nimport { pullSystemConfig } from \"../link/populate.js\";\nimport { archive, ARCHIVE_EXTENSION, generateMetadata } from \"./archive.js\";\nimport {\n retrieveOrCreateEnvironment,\n UnableToAutoLinkToExistingProject,\n} from \"./environments.js\";\nimport { upload } from \"./file-upload.js\";\nimport { pollBuild, pollDeployment } from \"./poll-deployment.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n dir: string;\n environment?: string;\n \"api-key\": string;\n \"verify-remote\": boolean;\n \"self-hosted-endpoint\"?: string;\n \"override-repo-url\"?: string;\n}\n\nexport type SelfHostedArgs = RequiredProperties<\n Arguments,\n \"self-hosted-endpoint\"\n>;\n\nexport async function deploy(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await deployToSelfHosted(args);\n } else {\n await deployToSaas(argv);\n }\n}\n\nasync function deployToSaas(argv: Arguments) {\n // 1. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata}`);\n\n // 2. Build uploadUrl request\n const { account, project } = argv;\n const uploadUrlResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/deployments/sources`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n body: JSON.stringify({\n accountName: account,\n projectName: project,\n branchName: archiveMetadata.metadata.branch,\n }),\n }\n );\n\n if (uploadUrlResponse.ok) {\n // 3. Upload to request URL\n const { uploadUrl } = await uploadUrlResponse.json();\n const uploadResponse = await upload(archiveMetadata.tarball, uploadUrl);\n\n if (uploadResponse.ok) {\n const spinner = printSpinnerToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 5. Poll for status\n const fileId = parse(new URL(uploadUrl).pathname).base.replace(\n ARCHIVE_EXTENSION,\n \"\"\n );\n\n const { url, buildResult } = await pollDeployment(\n argv,\n fileId,\n account,\n project,\n spinner\n );\n if (url) {\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${url}`,\n spinner\n );\n } else {\n const diagnostics = buildResult;\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current branch ${\n archiveMetadata.metadata.branch\n } to project ${project} on account ${account}. Here's the diagnostics: ${JSON.stringify(\n diagnostics,\n null,\n 2\n )}`,\n spinner\n );\n }\n } else {\n logger.error(\n {\n status: uploadResponse.status,\n statusText: uploadResponse.statusText,\n },\n \"Failed to upload source to cloud storage\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to upload source to cloud storage. Try again later.\"\n );\n }\n } else {\n logger.error(\n {\n status: uploadUrlResponse.status,\n statusText: uploadUrlResponse.statusText,\n },\n \"Failed to retrieve uploadUrl\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to determine where to upload your files. Try again later.\"\n );\n }\n}\n\nasync function deployToSelfHosted(argv: SelfHostedArgs) {\n const { account, project } = argv;\n\n let existingZuploEnv: string | undefined;\n\n try {\n // 0. Finagle the URL first\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n // 1. Perform the link on-behalf-of-the-user\n // Store the current .env.zuplo if there is one and restore it later\n existingZuploEnv = retrieveExistingZuploEnv(argv);\n const branch = (await generateMetadata(argv)).branch;\n try {\n const environmentToAutoLink = await retrieveOrCreateEnvironment(\n branch,\n argv\n );\n await pullSystemConfig({\n dir: argv.dir,\n environment: environmentToAutoLink.name,\n \"api-key\": argv[\"api-key\"],\n });\n } catch (error) {\n if (error instanceof UnableToAutoLinkToExistingProject) {\n printWarningToConsole(\n `We are unable to fetch the environment variables from Zuplo for this project. \n Deployment will proceed but the environment variables will not be available. \n To fix this, check that the project, ${argv.project} exists and this api-key has access to it.`\n );\n } else {\n throw error;\n }\n }\n\n // 2. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata}`);\n\n // 3. Build uploadUrl request\n const form = new FormData();\n const deploymentName = `${project}-${getPrettyBranch(\n archiveMetadata.metadata.branch\n )}`;\n form.set(\n \"file\",\n new Blob([readFileSync(archiveMetadata.tarball)], {\n type: \"application/gzip\",\n })\n );\n form.set(\"projectName\", project);\n form.set(\"deploymentName\", deploymentName);\n\n const uploadUrlResponse = await fetch(`${endpoint}/v1/deployments/build`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n body: form,\n });\n\n if (uploadUrlResponse.ok) {\n const spinner = printSpinnerToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 4. Poll for build\n const { buildName } = await uploadUrlResponse.json();\n\n const buildResult = await pollBuild(argv, endpoint, buildName, spinner);\n\n if (buildResult.conditionType === \"Complete\") {\n // Retrieve the deployment\n const deploymentResponse = await fetch(\n `${endpoint}/v1/deployments/${deploymentName}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n const deploymentJSON: { deploymentUrl: string } =\n await deploymentResponse.json();\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${deploymentJSON.deploymentUrl}`,\n spinner\n );\n } else {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current environment. Here's the diagnostics: ${JSON.stringify(\n buildResult\n )}`,\n spinner\n );\n }\n } else {\n logger.error(\n await uploadUrlResponse.text(),\n \"Failed to upload to self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to upload to self-hosted build endpoint\"\n );\n }\n } catch (error) {\n logger.error(error);\n } finally {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n }\n}\n\nfunction retrieveExistingZuploEnv(argv: SelfHostedArgs): string | undefined {\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n if (existsSync(envFilePath)) {\n const envFileContent = readFileSync(envFilePath, \"utf-8\");\n return envFileContent;\n } else {\n return undefined;\n }\n}\n\nfunction restoreExistingZuploEnvAsNecessary(\n argv: SelfHostedArgs,\n originalValue: string | undefined\n) {\n if (originalValue) {\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n writeFileSync(envFilePath, originalValue);\n }\n}\n\nconst getPrettyBranch = (branch: string): string => {\n // https://ricardometring.com/javascript-replace-special-characters\n return (\n branch\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\") // Remove accents\n .replace(/([^\\w]+|\\s+)/g, \"-\") // Replace space and other characters by hyphen\n // eslint-disable-next-line no-useless-escape\n .replace(/\\-\\-+/g, \"-\") // Replaces multiple hyphens by one hyphen\n .replace(/(^-+|-+$)/, \"\") // Remove extra hyphens from beginning or end of the string\n .replaceAll(\"_\", \"-\") // Replace underscores by hyphens (Url hosts cannot have underscores)\n .toLowerCase()\n .substring(0, MAX_PRETTY_BRANCH_LENGTH)\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, parse, relative } from \"node:path\";\nimport {\n MAX_PRETTY_BRANCH_NAME as MAX_PRETTY_BRANCH_LENGTH,\n ZUPLO_SYSTEM_ENV_VAR,\n} from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n printSpinnerToConsole,\n printWarningToConsole,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\nimport { pullSystemConfig } from \"../link/populate.js\";\nimport { archive, ARCHIVE_EXTENSION, generateMetadata } from \"./archive.js\";\nimport {\n retrieveOrCreateEnvironment,\n UnableToAutoLinkToExistingProject,\n} from \"./environments.js\";\nimport { upload } from \"./file-upload.js\";\nimport { pollBuild, pollDeployment } from \"./poll-deployment.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n dir: string;\n environment?: string;\n \"api-key\": string;\n \"verify-remote\"?: boolean;\n \"self-hosted-endpoint\"?: string;\n \"override-repo-url\"?: string;\n}\n\nexport type SelfHostedArgs = RequiredProperties<\n Arguments,\n \"self-hosted-endpoint\"\n>;\n\nexport async function deploy(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await deployToSelfHosted(args);\n } else {\n await deployToSaas(argv);\n }\n}\n\nasync function deployToSaas(argv: Arguments) {\n // 1. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata}`);\n\n // 2. Build uploadUrl request\n const { account, project } = argv;\n const uploadUrlResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/deployments/sources`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n body: JSON.stringify({\n accountName: account,\n projectName: project,\n branchName: archiveMetadata.metadata.branch,\n }),\n }\n );\n\n if (uploadUrlResponse.ok) {\n // 3. Upload to request URL\n const { uploadUrl } = await uploadUrlResponse.json();\n const uploadResponse = await upload(archiveMetadata.tarball, uploadUrl);\n\n if (uploadResponse.ok) {\n const spinner = printSpinnerToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 5. Poll for status\n const fileId = parse(new URL(uploadUrl).pathname).base.replace(\n ARCHIVE_EXTENSION,\n \"\"\n );\n\n const { url, buildResult } = await pollDeployment(\n argv,\n fileId,\n account,\n project,\n spinner\n );\n if (url) {\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${url}`,\n spinner\n );\n } else {\n const diagnostics = buildResult;\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current branch ${\n archiveMetadata.metadata.branch\n } to project ${project} on account ${account}. Here's the diagnostics: ${JSON.stringify(\n diagnostics,\n null,\n 2\n )}`,\n spinner\n );\n }\n } else {\n logger.error(\n {\n status: uploadResponse.status,\n statusText: uploadResponse.statusText,\n },\n \"Failed to upload source to cloud storage\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to upload source to cloud storage. Try again later.\"\n );\n }\n } else {\n logger.error(\n {\n status: uploadUrlResponse.status,\n statusText: uploadUrlResponse.statusText,\n },\n \"Failed to retrieve uploadUrl\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to determine where to upload your files. Try again later.\"\n );\n }\n}\n\nasync function deployToSelfHosted(argv: SelfHostedArgs) {\n const { account, project } = argv;\n\n let existingZuploEnv: string | undefined;\n\n try {\n // 0. Finagle the URL first\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n // 1. Perform the link on-behalf-of-the-user\n // Store the current .env.zuplo if there is one and restore it later\n existingZuploEnv = retrieveExistingZuploEnv(argv);\n const branch = (await generateMetadata(argv)).branch;\n try {\n const environmentToAutoLink = await retrieveOrCreateEnvironment(\n branch,\n argv\n );\n await pullSystemConfig({\n dir: argv.dir,\n environment: environmentToAutoLink.name,\n \"api-key\": argv[\"api-key\"],\n });\n } catch (error) {\n if (error instanceof UnableToAutoLinkToExistingProject) {\n printWarningToConsole(\n `We are unable to fetch the environment variables from Zuplo for this project. \n Deployment will proceed but the environment variables will not be available. \n To fix this, check that the project, ${argv.project} exists and this api-key has access to it.`\n );\n } else {\n throw error;\n }\n }\n\n // 2. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata}`);\n\n // 3. Build uploadUrl request\n const form = new FormData();\n const deploymentName = `${project}-${getPrettyBranch(\n archiveMetadata.metadata.branch\n )}`;\n form.set(\n \"file\",\n new Blob([readFileSync(archiveMetadata.tarball)], {\n type: \"application/gzip\",\n })\n );\n form.set(\"projectName\", project);\n form.set(\"deploymentName\", deploymentName);\n\n const uploadUrlResponse = await fetch(`${endpoint}/v1/deployments/build`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n body: form,\n });\n\n if (uploadUrlResponse.ok) {\n const spinner = printSpinnerToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 4. Poll for build\n const { buildName } = await uploadUrlResponse.json();\n\n const buildResult = await pollBuild(argv, endpoint, buildName, spinner);\n\n if (buildResult.conditionType === \"Complete\") {\n // Retrieve the deployment\n const deploymentResponse = await fetch(\n `${endpoint}/v1/deployments/${deploymentName}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n const deploymentJSON: { deploymentUrl: string } =\n await deploymentResponse.json();\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${deploymentJSON.deploymentUrl}`,\n spinner\n );\n } else {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current environment. Here's the diagnostics: ${JSON.stringify(\n buildResult\n )}`,\n spinner\n );\n }\n } else {\n logger.error(\n await uploadUrlResponse.text(),\n \"Failed to upload to self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to upload to self-hosted build endpoint\"\n );\n }\n } catch (error) {\n logger.error(error);\n } finally {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n }\n}\n\nfunction retrieveExistingZuploEnv(argv: SelfHostedArgs): string | undefined {\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n if (existsSync(envFilePath)) {\n const envFileContent = readFileSync(envFilePath, \"utf-8\");\n return envFileContent;\n } else {\n return undefined;\n }\n}\n\nfunction restoreExistingZuploEnvAsNecessary(\n argv: SelfHostedArgs,\n originalValue: string | undefined\n) {\n if (originalValue) {\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n writeFileSync(envFilePath, originalValue);\n }\n}\n\nconst getPrettyBranch = (branch: string): string => {\n // https://ricardometring.com/javascript-replace-special-characters\n return (\n branch\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\") // Remove accents\n .replace(/([^\\w]+|\\s+)/g, \"-\") // Replace space and other characters by hyphen\n // eslint-disable-next-line no-useless-escape\n .replace(/\\-\\-+/g, \"-\") // Replaces multiple hyphens by one hyphen\n .replace(/(^-+|-+$)/, \"\") // Remove extra hyphens from beginning or end of the string\n .replaceAll(\"_\", \"-\") // Replace underscores by hyphens (Url hosts cannot have underscores)\n .toLowerCase()\n .substring(0, MAX_PRETTY_BRANCH_LENGTH)\n );\n};\n"]}
|
package/dist/list/handler.js
CHANGED
|
@@ -52,8 +52,8 @@ async function listFromSelfHosted(argv) {
|
|
|
52
52
|
await printResultToConsoleAndExitGracefully(output);
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
|
-
logger.error(JSON.stringify(await listResponse.json(), null, 2), "Failed to
|
|
56
|
-
await printCriticalFailureToConsoleAndExit("Error: Failed to
|
|
55
|
+
logger.error(JSON.stringify(await listResponse.json(), null, 2), "Failed to list deployments at self-hosted build endpoint");
|
|
56
|
+
await printCriticalFailureToConsoleAndExit("Error: Failed to list deployments at self-hosted build endpoint");
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
//# sourceMappingURL=handler.js.map
|
package/dist/list/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/list/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,oCAAoC,EACpC,yBAAyB,EACzB,qCAAqC,EACrC,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA2BvD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAe;IACxC,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAsB,CAAC;QACpC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAe;IACzC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,cAAc,EACjG;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE;SAC3C;KACF,CACF,CAAC;IAEF,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GACzB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW;aACvB,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACtC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,QAAQ,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;SAChD,EACD,8BAA8B,CAC/B,CAAC;QACF,yBAAyB,CACvB,uDAAuD,CACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAQD,KAAK,UAAU,kBAAkB,CAAC,IAAoB;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,iBAAiB,EAAE;QAC7D,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE;SAC3C;KACF,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GACzB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW;aACvB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAClD,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/list/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,oCAAoC,EACpC,yBAAyB,EACzB,qCAAqC,EACrC,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA2BvD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAe;IACxC,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAsB,CAAC;QACpC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAe;IACzC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,cAAc,EACjG;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE;SAC3C;KACF,CACF,CAAC;IAEF,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GACzB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW;aACvB,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACtC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,QAAQ,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;SAChD,EACD,8BAA8B,CAC/B,CAAC;QACF,yBAAyB,CACvB,uDAAuD,CACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAQD,KAAK,UAAU,kBAAkB,CAAC,IAAoB;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,iBAAiB,EAAE;QAC7D,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE;SAC3C;KACF,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GACzB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,WAAW;aACvB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,qCAAqC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAClD,0DAA0D,CAC3D,CAAC;QACF,MAAM,oCAAoC,CACxC,iEAAiE,CAClE,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n textOrJson,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n \"api-key\": string;\n \"self-hosted-endpoint\"?: string;\n}\n\ninterface Deployment {\n name: string;\n createdOn: string;\n loggingId: string;\n environment: string;\n accountName: string;\n projectName: string;\n state: \"IS_STARTING\" | \"STARTED\" | \"STOPPED\" | \"ERRORED\";\n message: null;\n branchName: string;\n userSub: string;\n url: string;\n environmentType: \"PRODUCTION\" | \"PREVIEW\" | \"WORKING_COPY\";\n}\n\ntype SimplifiedDeployment = Pick<Deployment, \"url\">;\ntype SelfHostedArgs = RequiredProperties<Arguments, \"self-hosted-endpoint\">;\n\nexport async function list(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await listFromSelfHosted(args);\n } else {\n await listFromSaas(argv);\n }\n}\n\nasync function listFromSaas(argv: Arguments) {\n const { account, project } = argv;\n const listResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/deployments`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n\n if (listResponse.ok) {\n const { data: deployments }: { data: SimplifiedDeployment[] } =\n await listResponse.json();\n\n const output = deployments\n .filter((deployment) => deployment.url)\n .map((deployment) => deployment.url)\n .join(\"\\n\");\n\n await printResultToConsoleAndExitGracefully(output);\n } else {\n logger.error(\n {\n status: listResponse.status,\n statusText: listResponse.statusText,\n response: textOrJson(await listResponse.text()),\n },\n \"Failed to list deployed zups\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to list deployed zups. Try again later.\"\n );\n }\n}\n\nexport interface SelfHostedDeployment {\n projectName: string;\n deploymentName: string;\n deploymentUrl: string;\n}\n\nasync function listFromSelfHosted(argv: SelfHostedArgs) {\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n const listResponse = await fetch(`${endpoint}/v1/deployments`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n });\n\n if (listResponse.ok) {\n const { data: deployments }: { data: SelfHostedDeployment[] } =\n await listResponse.json();\n\n const output = deployments\n .map((deployment) => deployment.deploymentUrl)\n .join(\"\\n\");\n\n await printResultToConsoleAndExitGracefully(output);\n } else {\n logger.error(\n JSON.stringify(await listResponse.json(), null, 2),\n \"Failed to list deployments at self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to list deployments at self-hosted build endpoint\"\n );\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zuplo/cli",
|
|
3
|
-
"version": "6.19.
|
|
3
|
+
"version": "6.19.6",
|
|
4
4
|
"repository": "https://github.com/zuplo/zuplo",
|
|
5
5
|
"author": "Zuplo, Inc.",
|
|
6
6
|
"type": "module",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"@opentelemetry/api": "^1.8.0",
|
|
30
30
|
"@sentry/node": "^7.119.2",
|
|
31
31
|
"@swc/core": "1.7.22",
|
|
32
|
-
"@zuplo/core": "^6.19.
|
|
33
|
-
"@zuplo/runtime": "^6.19.
|
|
32
|
+
"@zuplo/core": "^6.19.6",
|
|
33
|
+
"@zuplo/runtime": "^6.19.6",
|
|
34
34
|
"as-table": "^1.0.55",
|
|
35
35
|
"chalk": "^5.3.0",
|
|
36
36
|
"chokidar": "^3.5.3",
|