@webiny/pulumi-sdk 0.0.0-mt-2 → 0.0.0-unstable.06b2ede40f

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/Pulumi.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ import execa from "execa";
2
+ type Command = string | string[];
3
+ export interface PulumiArgs {
4
+ [key: string]: string | boolean | undefined | string[];
5
+ }
6
+ export interface ExecaArgs {
7
+ env?: {
8
+ [key: string]: string | undefined;
9
+ };
10
+ [key: string]: any;
11
+ }
12
+ export interface Options {
13
+ args?: PulumiArgs;
14
+ execa?: ExecaArgs;
15
+ beforePulumiInstall?: () => any;
16
+ afterPulumiInstall?: () => any;
17
+ pulumiFolder?: string;
18
+ }
19
+ export interface RunArgs {
20
+ command: Command;
21
+ args?: PulumiArgs;
22
+ execa?: ExecaArgs;
23
+ beforePulumiInstall?: () => any;
24
+ afterPulumiInstall?: () => any;
25
+ }
26
+ export interface InstallArgs {
27
+ beforePulumiInstall?: () => any;
28
+ afterPulumiInstall?: () => any;
29
+ }
30
+ export declare const FLAG_NON_INTERACTIVE = "--non-interactive";
31
+ export declare class Pulumi {
32
+ options: Options;
33
+ pulumiFolder: string;
34
+ pulumiDownloadFolder: string;
35
+ pulumiBinaryPath: string;
36
+ constructor(options?: Options);
37
+ run(rawArgs: RunArgs): execa.ExecaChildProcess<string>;
38
+ install(rawArgs?: InstallArgs): Promise<boolean>;
39
+ ensureAwsPluginIsInstalled(): execa.ExecaSyncReturnValue<string> | undefined;
40
+ }
41
+ export {};
package/Pulumi.js ADDED
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.Pulumi = exports.FLAG_NON_INTERACTIVE = void 0;
9
+ var _os = _interopRequireDefault(require("os"));
10
+ var _execa = _interopRequireDefault(require("execa"));
11
+ var path = _interopRequireWildcard(require("path"));
12
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
13
+ var _merge = _interopRequireDefault(require("lodash/merge"));
14
+ var _kebabCase = _interopRequireDefault(require("lodash/kebabCase"));
15
+ var _set = _interopRequireDefault(require("lodash/set"));
16
+ var _downloadBinaries = _interopRequireDefault(require("./downloadBinaries"));
17
+ const FLAG_NON_INTERACTIVE = exports.FLAG_NON_INTERACTIVE = "--non-interactive";
18
+ class Pulumi {
19
+ constructor(options = {}) {
20
+ this.options = options;
21
+ this.pulumiDownloadFolder = path.join(options.pulumiFolder || process.cwd(), "pulumi-cli", _os.default.platform());
22
+ this.pulumiFolder = path.join(this.pulumiDownloadFolder, "pulumi");
23
+ this.pulumiBinaryPath = path.join(this.pulumiFolder, "pulumi");
24
+ }
25
+ run(rawArgs) {
26
+ this.ensureAwsPluginIsInstalled();
27
+ const args = (0, _merge.default)({}, this.options, rawArgs);
28
+ if (!Array.isArray(args.command)) {
29
+ args.command = [args.command];
30
+ }
31
+
32
+ // 1. Prepare Pulumi args.
33
+ const finalArgs = [];
34
+ for (const key in args.args) {
35
+ const value = args.args[key];
36
+ if (!value) {
37
+ continue;
38
+ }
39
+ if (Array.isArray(value)) {
40
+ for (let i = 0; i < value.length; i++) {
41
+ finalArgs.push(`--${(0, _kebabCase.default)(key)}`, value[i]);
42
+ }
43
+ continue;
44
+ }
45
+ if (typeof value === "boolean") {
46
+ finalArgs.push(`--${(0, _kebabCase.default)(key)}`);
47
+ continue;
48
+ }
49
+ finalArgs.push(`--${(0, _kebabCase.default)(key)}`, value);
50
+ }
51
+
52
+ // Prepare execa args.
53
+ if (!args.execa) {
54
+ args.execa = {};
55
+ }
56
+ (0, _set.default)(args.execa, "env.PULUMI_SKIP_UPDATE_CHECK", "true");
57
+ (0, _set.default)(args.execa, "env.PULUMI_HOME", this.pulumiFolder);
58
+ if (_os.default.arch() === "arm64") {
59
+ /**
60
+ * This variable is an attempt to resolve this issue:
61
+ * https://yaleman.org/post/2021/2021-01-01-apple-m1-terraform-and-golang/
62
+ */
63
+ (0, _set.default)(args.execa, "env.GODEBUG", "asyncpreemptoff=1");
64
+ }
65
+
66
+ // Use ";" when on Windows. For Mac and Linux, use ":".
67
+ const PATH_SEPARATOR = _os.default.platform() === "win32" ? ";" : ":";
68
+ const execaArgs = {
69
+ ...args.execa,
70
+ env: {
71
+ ...(args.execa.env || {}),
72
+ /**
73
+ * Due to an issue with Pulumi https://github.com/pulumi/pulumi/issues/8374, and even though this
74
+ * commit suggests it should already work like that https://github.com/pulumi/pulumi/commit/c878916901a997a9c0ffcbed23560e19e224a6f1,
75
+ * we need to specify the exact location of our Pulumi binaries, using the PATH environment variable, so it can correctly resolve
76
+ * plugins necessary for custom resources and dynamic providers to work.
77
+ */
78
+ PATH: this.pulumiFolder + PATH_SEPARATOR + process.env.PATH
79
+ }
80
+ };
81
+
82
+ // We want to keep the "interactive" output format of the Pulumi command when `--preview` flag is passed in.
83
+ const flags = args.command && args.command.includes("preview") ? [] : [FLAG_NON_INTERACTIVE];
84
+ return (0, _execa.default)(this.pulumiBinaryPath, [...args.command, ...finalArgs, ...flags], execaArgs);
85
+ }
86
+ async install(rawArgs) {
87
+ const args = (0, _merge.default)({}, this.options, rawArgs);
88
+ const installed = await (0, _downloadBinaries.default)(this.pulumiDownloadFolder, args.beforePulumiInstall, args.afterPulumiInstall);
89
+ if (installed) {
90
+ this.ensureAwsPluginIsInstalled();
91
+ }
92
+ return installed;
93
+ }
94
+ ensureAwsPluginIsInstalled() {
95
+ const {
96
+ version
97
+ } = require("@pulumi/aws/package.json");
98
+ const pluginExists = _fsExtra.default.pathExistsSync(path.join(this.pulumiFolder, "plugins", `resource-aws-${version}`, "pulumi-resource-aws"));
99
+ if (pluginExists) {
100
+ return;
101
+ }
102
+ return _execa.default.sync(this.pulumiBinaryPath, ["plugin", "install", "resource", "aws", version], {
103
+ stdio: "inherit",
104
+ env: {
105
+ PULUMI_HOME: this.pulumiFolder,
106
+ PULUMI_SKIP_UPDATE_CHECK: "true"
107
+ }
108
+ });
109
+ }
110
+ }
111
+ exports.Pulumi = Pulumi;
112
+
113
+ //# sourceMappingURL=Pulumi.js.map
package/Pulumi.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_os","_interopRequireDefault","require","_execa","path","_interopRequireWildcard","_fsExtra","_merge","_kebabCase","_set","_downloadBinaries","FLAG_NON_INTERACTIVE","exports","Pulumi","constructor","options","pulumiDownloadFolder","join","pulumiFolder","process","cwd","os","platform","pulumiBinaryPath","run","rawArgs","ensureAwsPluginIsInstalled","args","merge","Array","isArray","command","finalArgs","key","value","i","length","push","kebabCase","execa","set","arch","PATH_SEPARATOR","execaArgs","env","PATH","flags","includes","install","installed","downloadBinaries","beforePulumiInstall","afterPulumiInstall","version","pluginExists","fs","pathExistsSync","sync","stdio","PULUMI_HOME","PULUMI_SKIP_UPDATE_CHECK"],"sources":["Pulumi.ts"],"sourcesContent":["import os from \"os\";\nimport execa from \"execa\";\nimport * as path from \"path\";\nimport fs from \"fs-extra\";\nimport merge from \"lodash/merge\";\nimport kebabCase from \"lodash/kebabCase\";\nimport set from \"lodash/set\";\nimport downloadBinaries from \"./downloadBinaries\";\n\ntype Command = string | string[];\n\nexport interface PulumiArgs {\n [key: string]: string | boolean | undefined | string[];\n}\n\nexport interface ExecaArgs {\n env?: {\n [key: string]: string | undefined;\n };\n\n [key: string]: any;\n}\n\nexport interface Options {\n args?: PulumiArgs;\n execa?: ExecaArgs;\n beforePulumiInstall?: () => any;\n afterPulumiInstall?: () => any;\n\n // A folder into which the Pulumi CLI, along with all of its meta data and config files, will be set up.\n // It's recommended this folder is not checked in into a code repository, since the Pulumi CLI can store\n // sensitive information here, for example - user's Pulumi Service credentials.\n pulumiFolder?: string;\n}\n\nexport interface RunArgs {\n command: Command;\n\n args?: PulumiArgs;\n execa?: ExecaArgs;\n beforePulumiInstall?: () => any;\n afterPulumiInstall?: () => any;\n}\n\nexport interface InstallArgs {\n beforePulumiInstall?: () => any;\n afterPulumiInstall?: () => any;\n}\n\nexport const FLAG_NON_INTERACTIVE = \"--non-interactive\";\n\nexport class Pulumi {\n options: Options;\n pulumiFolder: string;\n pulumiDownloadFolder: string;\n pulumiBinaryPath: string;\n\n constructor(options: Options = {}) {\n this.options = options;\n\n this.pulumiDownloadFolder = path.join(\n options.pulumiFolder || process.cwd(),\n \"pulumi-cli\",\n os.platform()\n );\n\n this.pulumiFolder = path.join(this.pulumiDownloadFolder, \"pulumi\");\n this.pulumiBinaryPath = path.join(this.pulumiFolder, \"pulumi\");\n }\n\n run(rawArgs: RunArgs) {\n this.ensureAwsPluginIsInstalled();\n\n const args = merge({}, this.options, rawArgs);\n\n if (!Array.isArray(args.command)) {\n args.command = [args.command];\n }\n\n // 1. Prepare Pulumi args.\n const finalArgs = [];\n for (const key in args.args) {\n const value = args.args[key];\n if (!value) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n finalArgs.push(`--${kebabCase(key)}`, value[i]);\n }\n continue;\n }\n\n if (typeof value === \"boolean\") {\n finalArgs.push(`--${kebabCase(key)}`);\n continue;\n }\n\n finalArgs.push(`--${kebabCase(key)}`, value);\n }\n\n // Prepare execa args.\n if (!args.execa) {\n args.execa = {};\n }\n\n set(args.execa, \"env.PULUMI_SKIP_UPDATE_CHECK\", \"true\");\n set(args.execa, \"env.PULUMI_HOME\", this.pulumiFolder);\n\n if (os.arch() === \"arm64\") {\n /**\n * This variable is an attempt to resolve this issue:\n * https://yaleman.org/post/2021/2021-01-01-apple-m1-terraform-and-golang/\n */\n set(args.execa, \"env.GODEBUG\", \"asyncpreemptoff=1\");\n }\n\n // Use \";\" when on Windows. For Mac and Linux, use \":\".\n const PATH_SEPARATOR = os.platform() === \"win32\" ? \";\" : \":\";\n\n const execaArgs = {\n ...args.execa,\n env: {\n ...(args.execa.env || {}),\n /**\n * Due to an issue with Pulumi https://github.com/pulumi/pulumi/issues/8374, and even though this\n * commit suggests it should already work like that https://github.com/pulumi/pulumi/commit/c878916901a997a9c0ffcbed23560e19e224a6f1,\n * we need to specify the exact location of our Pulumi binaries, using the PATH environment variable, so it can correctly resolve\n * plugins necessary for custom resources and dynamic providers to work.\n */\n PATH: this.pulumiFolder + PATH_SEPARATOR + process.env.PATH\n }\n };\n\n // We want to keep the \"interactive\" output format of the Pulumi command when `--preview` flag is passed in.\n const flags =\n args.command && args.command.includes(\"preview\") ? [] : [FLAG_NON_INTERACTIVE];\n\n return execa(this.pulumiBinaryPath, [...args.command, ...finalArgs, ...flags], execaArgs);\n }\n\n async install(rawArgs?: InstallArgs): Promise<boolean> {\n const args = merge({}, this.options, rawArgs);\n\n const installed = await downloadBinaries(\n this.pulumiDownloadFolder,\n args.beforePulumiInstall,\n args.afterPulumiInstall\n );\n\n if (installed) {\n this.ensureAwsPluginIsInstalled();\n }\n\n return installed;\n }\n\n ensureAwsPluginIsInstalled() {\n const { version } = require(\"@pulumi/aws/package.json\");\n\n const pluginExists = fs.pathExistsSync(\n path.join(\n this.pulumiFolder,\n \"plugins\",\n `resource-aws-${version}`,\n \"pulumi-resource-aws\"\n )\n );\n\n if (pluginExists) {\n return;\n }\n\n return execa.sync(\n this.pulumiBinaryPath,\n [\"plugin\", \"install\", \"resource\", \"aws\", version],\n {\n stdio: \"inherit\",\n env: {\n PULUMI_HOME: this.pulumiFolder,\n PULUMI_SKIP_UPDATE_CHECK: \"true\"\n }\n }\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/README.md CHANGED
@@ -74,16 +74,3 @@ if (isPreview) {
74
74
  await toConsole();
75
75
  }
76
76
  ```
77
-
78
- ### Development
79
-
80
- #### Updating versions
81
- Currently, versions of the Pulumi code are hard-coded. For example, the version of Pulumi CLI we're currently downloading is set to `2.16.2`, the AWS plugin `3.22.0`. We define these in a couple of places:
82
-
83
- 1. In `src/index.ts`, check `AWS_PLUGIN_VERSION`.
84
- 2. In `src/downloadBinaries.ts`, check `PULUMI_VERSION`.
85
- 3. Finally, in `package.json`, we have the `@pulumi/aws` and `@pulumi/pulumi` in `dependencies`.
86
-
87
- When updating versions, make sure the versions in `package.json` and in files mentioned in `1` and `2`, are synced.
88
-
89
- And of course, once you change the version, please test with current dev repo at least. Everything should still be deployable from scratch.
@@ -1,2 +1,2 @@
1
- declare const _default: (downloadFolder: any, beforeInstall: any, afterInstall: any) => Promise<boolean>;
1
+ declare const _default: (downloadFolder: string, beforeInstall?: () => void, afterInstall?: () => void) => Promise<boolean>;
2
2
  export default _default;
@@ -1,105 +1,94 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = void 0;
7
-
8
- const os = require("os");
9
-
10
- const tar = require("tar");
11
-
12
- const fs = require("fs");
13
-
14
- const download = require("download");
15
-
16
- const path = require("path");
17
-
18
- const decompress = require("decompress");
19
-
20
- const semver = require("semver"); // We gotta sanitize the package version, since on a few occasions, we've detected the Pulumi version
8
+ var _os = _interopRequireDefault(require("os"));
9
+ var _tar = _interopRequireDefault(require("tar"));
10
+ var _fs = _interopRequireDefault(require("fs"));
11
+ var _path = _interopRequireDefault(require("path"));
12
+ var _decompress = _interopRequireDefault(require("decompress"));
13
+ var _semver = _interopRequireDefault(require("semver"));
14
+ var _downloadFile = require("./downloadFile");
15
+ // @ts-expect-error `tar` has no types.
16
+
17
+ // @ts-expect-error `tar` has no types.
18
+
19
+ // We need to sanitize the package version because, occasionally, we've noticed that the Pulumi version
21
20
  // can look like the following: "2.25.2+dirty". We want to ensure only "2.25.2" is returned.
22
21
  // @see https://github.com/pulumi/pulumi/issues/6847
23
-
24
-
25
22
  const getPulumiVersion = () => {
26
23
  const {
27
24
  version
28
25
  } = require("@pulumi/pulumi/package.json");
29
-
30
- return semver.clean(version);
26
+ return _semver.default.clean(version);
31
27
  };
32
-
33
28
  var _default = async (downloadFolder, beforeInstall, afterInstall) => {
34
- if (fs.existsSync(downloadFolder)) {
29
+ if (_fs.default.existsSync(downloadFolder)) {
35
30
  return false;
36
31
  }
37
-
38
32
  if (typeof beforeInstall === "function") {
39
33
  await beforeInstall();
40
34
  }
41
-
42
- const platform = os.platform();
43
-
35
+ const platform = _os.default.platform();
44
36
  switch (platform) {
45
37
  case "darwin":
46
38
  await setupDarwin(downloadFolder);
47
39
  break;
48
-
49
40
  case "linux":
50
41
  await setupLinux(downloadFolder);
51
42
  break;
52
-
53
43
  case "win32":
54
44
  await setupWindows(downloadFolder);
55
45
  break;
56
-
57
46
  default:
58
47
  throw Error(`Cannot download Pulumi binaries - platform "${platform}" not supported. Supported ones are "darwin", "linux", and "win32"`);
59
48
  }
60
-
61
49
  if (typeof afterInstall === "function") {
62
50
  await afterInstall();
63
51
  }
64
-
65
52
  return true;
66
53
  };
67
-
68
54
  exports.default = _default;
69
-
55
+ const SUPPORTED_ARCHITECTURES = ["x64", "arm64"];
70
56
  async function setupDarwin(downloadFolder) {
71
57
  const version = getPulumiVersion();
72
- const filename = `pulumi-v${version}-darwin-x64.tar.gz`;
58
+ const arch = SUPPORTED_ARCHITECTURES.includes(process.arch) ? process.arch : "x64";
59
+ const filename = `pulumi-v${version}-darwin-${arch}.tar.gz`;
73
60
  const downloadUrl = "https://get.pulumi.com/releases/sdk/" + filename;
74
- await download(downloadUrl, downloadFolder);
75
- await tar.extract({
61
+ const absoluteFilename = _path.default.join(downloadFolder, filename);
62
+ await (0, _downloadFile.downloadFile)(downloadUrl, absoluteFilename);
63
+ await _tar.default.extract({
76
64
  cwd: downloadFolder,
77
- file: path.join(downloadFolder, filename)
65
+ file: absoluteFilename
78
66
  });
79
- fs.unlinkSync(path.join(downloadFolder, filename));
67
+ _fs.default.unlinkSync(_path.default.join(downloadFolder, filename));
80
68
  }
81
-
82
69
  async function setupWindows(downloadFolder) {
83
70
  const version = getPulumiVersion();
84
71
  const filename = `pulumi-v${version}-windows-x64.zip`;
85
72
  const downloadUrl = "https://get.pulumi.com/releases/sdk/" + filename;
86
- await download(downloadUrl, downloadFolder);
87
- const archive = path.join(downloadFolder, filename);
88
- const destination = path.join(downloadFolder, "pulumi");
89
- await decompress(archive, destination, {
73
+ const absoluteFilename = _path.default.join(downloadFolder, filename);
74
+ await (0, _downloadFile.downloadFile)(downloadUrl, absoluteFilename);
75
+ const destination = _path.default.join(downloadFolder, "pulumi");
76
+ await (0, _decompress.default)(absoluteFilename, destination, {
90
77
  strip: 2
91
78
  });
92
- fs.unlinkSync(path.join(downloadFolder, filename));
79
+ _fs.default.unlinkSync(_path.default.join(downloadFolder, filename));
93
80
  }
94
-
95
81
  async function setupLinux(downloadFolder) {
96
82
  const version = getPulumiVersion();
97
83
  const filename = `pulumi-v${version}-linux-x64.tar.gz`;
98
84
  const downloadUrl = "https://get.pulumi.com/releases/sdk/" + filename;
99
- await download(downloadUrl, downloadFolder);
100
- await tar.extract({
85
+ const absoluteFilename = _path.default.join(downloadFolder, filename);
86
+ await (0, _downloadFile.downloadFile)(downloadUrl, absoluteFilename);
87
+ await _tar.default.extract({
101
88
  cwd: downloadFolder,
102
- file: path.join(downloadFolder, filename)
89
+ file: absoluteFilename
103
90
  });
104
- fs.unlinkSync(path.join(downloadFolder, filename));
105
- }
91
+ _fs.default.unlinkSync(_path.default.join(downloadFolder, filename));
92
+ }
93
+
94
+ //# sourceMappingURL=downloadBinaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_os","_interopRequireDefault","require","_tar","_fs","_path","_decompress","_semver","_downloadFile","getPulumiVersion","version","semver","clean","_default","downloadFolder","beforeInstall","afterInstall","fs","existsSync","platform","os","setupDarwin","setupLinux","setupWindows","Error","exports","default","SUPPORTED_ARCHITECTURES","arch","includes","process","filename","downloadUrl","absoluteFilename","path","join","downloadFile","tar","extract","cwd","file","unlinkSync","destination","decompress","strip"],"sources":["downloadBinaries.ts"],"sourcesContent":["import os from \"os\";\n// @ts-expect-error `tar` has no types.\nimport tar from \"tar\";\nimport fs from \"fs\";\nimport path from \"path\";\n// @ts-expect-error `tar` has no types.\nimport decompress from \"decompress\";\nimport semver from \"semver\";\nimport { downloadFile } from \"./downloadFile\";\n\n// We need to sanitize the package version because, occasionally, we've noticed that the Pulumi version\n// can look like the following: \"2.25.2+dirty\". We want to ensure only \"2.25.2\" is returned.\n// @see https://github.com/pulumi/pulumi/issues/6847\nconst getPulumiVersion = () => {\n const { version } = require(\"@pulumi/pulumi/package.json\");\n return semver.clean(version);\n};\n\nexport default async (\n downloadFolder: string,\n beforeInstall?: () => void,\n afterInstall?: () => void\n) => {\n if (fs.existsSync(downloadFolder)) {\n return false;\n }\n\n if (typeof beforeInstall === \"function\") {\n await beforeInstall();\n }\n\n const platform = os.platform();\n switch (platform) {\n case \"darwin\":\n await setupDarwin(downloadFolder);\n break;\n case \"linux\":\n await setupLinux(downloadFolder);\n break;\n case \"win32\":\n await setupWindows(downloadFolder);\n break;\n default:\n throw Error(\n `Cannot download Pulumi binaries - platform \"${platform}\" not supported. Supported ones are \"darwin\", \"linux\", and \"win32\"`\n );\n }\n\n if (typeof afterInstall === \"function\") {\n await afterInstall();\n }\n\n return true;\n};\n\nconst SUPPORTED_ARCHITECTURES = [\"x64\", \"arm64\"];\n\nasync function setupDarwin(downloadFolder: string) {\n const version = getPulumiVersion();\n const arch = SUPPORTED_ARCHITECTURES.includes(process.arch) ? process.arch : \"x64\";\n\n const filename = `pulumi-v${version}-darwin-${arch}.tar.gz`;\n const downloadUrl = \"https://get.pulumi.com/releases/sdk/\" + filename;\n\n const absoluteFilename = path.join(downloadFolder, filename);\n await downloadFile(downloadUrl, absoluteFilename);\n\n await tar.extract({\n cwd: downloadFolder,\n file: absoluteFilename\n });\n\n fs.unlinkSync(path.join(downloadFolder, filename));\n}\n\nasync function setupWindows(downloadFolder: string) {\n const version = getPulumiVersion();\n const filename = `pulumi-v${version}-windows-x64.zip`;\n const downloadUrl = \"https://get.pulumi.com/releases/sdk/\" + filename;\n\n const absoluteFilename = path.join(downloadFolder, filename);\n await downloadFile(downloadUrl, absoluteFilename);\n\n const destination = path.join(downloadFolder, \"pulumi\");\n await decompress(absoluteFilename, destination, { strip: 2 });\n\n fs.unlinkSync(path.join(downloadFolder, filename));\n}\n\nasync function setupLinux(downloadFolder: string) {\n const version = getPulumiVersion();\n const filename = `pulumi-v${version}-linux-x64.tar.gz`;\n const downloadUrl = \"https://get.pulumi.com/releases/sdk/\" + filename;\n\n const absoluteFilename = path.join(downloadFolder, filename);\n await downloadFile(downloadUrl, absoluteFilename);\n\n await tar.extract({\n cwd: downloadFolder,\n file: absoluteFilename\n });\n\n fs.unlinkSync(path.join(downloadFolder, filename));\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const downloadFile: (url: string, file: string) => Promise<void>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.downloadFile = void 0;
8
+ var _path = require("path");
9
+ var _fsExtra = require("fs-extra");
10
+ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
11
+ const downloadFile = async (url, file) => {
12
+ const res = await (0, _nodeFetch.default)(url);
13
+ await new Promise(async (resolve, reject) => {
14
+ await (0, _fsExtra.ensureDir)((0, _path.dirname)(file));
15
+ const fileStream = (0, _fsExtra.createWriteStream)(file);
16
+ res.body.pipe(fileStream);
17
+ res.body.on("error", err => {
18
+ reject(err);
19
+ });
20
+ fileStream.on("finish", () => {
21
+ resolve();
22
+ });
23
+ });
24
+ };
25
+ exports.downloadFile = downloadFile;
26
+
27
+ //# sourceMappingURL=downloadFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_path","require","_fsExtra","_nodeFetch","_interopRequireDefault","downloadFile","url","file","res","fetch","Promise","resolve","reject","ensureDir","dirname","fileStream","createWriteStream","body","pipe","on","err","exports"],"sources":["downloadFile.ts"],"sourcesContent":["import { dirname } from \"path\";\nimport { createWriteStream, ensureDir } from \"fs-extra\";\nimport fetch from \"node-fetch\";\n\nexport const downloadFile = async (url: string, file: string) => {\n const res = await fetch(url);\n\n await new Promise<void>(async (resolve, reject) => {\n await ensureDir(dirname(file));\n const fileStream = createWriteStream(file);\n res.body.pipe(fileStream);\n res.body.on(\"error\", err => {\n reject(err);\n });\n fileStream.on(\"finish\", () => {\n resolve();\n });\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEO,MAAMI,YAAY,GAAG,MAAAA,CAAOC,GAAW,EAAEC,IAAY,KAAK;EAC7D,MAAMC,GAAG,GAAG,MAAM,IAAAC,kBAAK,EAACH,GAAG,CAAC;EAE5B,MAAM,IAAII,OAAO,CAAO,OAAOC,OAAO,EAAEC,MAAM,KAAK;IAC/C,MAAM,IAAAC,kBAAS,EAAC,IAAAC,aAAO,EAACP,IAAI,CAAC,CAAC;IAC9B,MAAMQ,UAAU,GAAG,IAAAC,0BAAiB,EAACT,IAAI,CAAC;IAC1CC,GAAG,CAACS,IAAI,CAACC,IAAI,CAACH,UAAU,CAAC;IACzBP,GAAG,CAACS,IAAI,CAACE,EAAE,CAAC,OAAO,EAAEC,GAAG,IAAI;MACxBR,MAAM,CAACQ,GAAG,CAAC;IACf,CAAC,CAAC;IACFL,UAAU,CAACI,EAAE,CAAC,QAAQ,EAAE,MAAM;MAC1BR,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC;AAACU,OAAA,CAAAhB,YAAA,GAAAA,YAAA","ignoreList":[]}
package/index.d.ts CHANGED
@@ -1,37 +1 @@
1
- import execa from "execa";
2
- declare type Command = string | string[];
3
- declare type PulumiArgs = {
4
- [key: string]: string | boolean;
5
- };
6
- declare type ExecaArgs = {
7
- [key: string]: any;
8
- };
9
- declare type Options = {
10
- args?: PulumiArgs;
11
- execa?: ExecaArgs;
12
- beforePulumiInstall?: () => any;
13
- afterPulumiInstall?: () => any;
14
- pulumiFolder?: string;
15
- };
16
- declare type RunArgs = {
17
- command: Command;
18
- args?: PulumiArgs;
19
- execa?: ExecaArgs;
20
- beforePulumiInstall?: () => any;
21
- afterPulumiInstall?: () => any;
22
- };
23
- declare type InstallArgs = {
24
- beforePulumiInstall?: () => any;
25
- afterPulumiInstall?: () => any;
26
- };
27
- export declare const FLAG_NON_INTERACTIVE = "--non-interactive";
28
- export declare class Pulumi {
29
- options: Options;
30
- pulumiFolder: string;
31
- pulumiDownloadFolder: string;
32
- pulumiBinaryPath: string;
33
- constructor(options?: Options);
34
- run(rawArgs: RunArgs): execa.ExecaChildProcess<string>;
35
- install(rawArgs?: InstallArgs): Promise<boolean>;
36
- }
37
- export {};
1
+ export * from "./Pulumi";
package/index.js CHANGED
@@ -1,126 +1,18 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
- exports.Pulumi = exports.FLAG_NON_INTERACTIVE = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _set2 = _interopRequireDefault(require("lodash/set"));
13
-
14
- var _kebabCase2 = _interopRequireDefault(require("lodash/kebabCase"));
15
-
16
- var _merge2 = _interopRequireDefault(require("lodash/merge"));
17
-
18
- var _os = _interopRequireDefault(require("os"));
19
-
20
- var _execa = _interopRequireDefault(require("execa"));
21
-
22
- var path = _interopRequireWildcard(require("path"));
23
-
24
- var _downloadBinaries = _interopRequireDefault(require("./downloadBinaries"));
25
-
26
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
-
28
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
-
30
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
31
-
32
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
-
34
- const FLAG_NON_INTERACTIVE = "--non-interactive";
35
- exports.FLAG_NON_INTERACTIVE = FLAG_NON_INTERACTIVE;
36
-
37
- class Pulumi {
38
- constructor(options = {}) {
39
- (0, _defineProperty2.default)(this, "options", void 0);
40
- (0, _defineProperty2.default)(this, "pulumiFolder", void 0);
41
- (0, _defineProperty2.default)(this, "pulumiDownloadFolder", void 0);
42
- (0, _defineProperty2.default)(this, "pulumiBinaryPath", void 0);
43
- this.options = options;
44
- this.pulumiDownloadFolder = path.join(options.pulumiFolder || process.cwd(), "pulumi-cli", _os.default.platform());
45
- this.pulumiFolder = path.join(this.pulumiDownloadFolder, "pulumi");
46
- this.pulumiBinaryPath = path.join(this.pulumiFolder, "pulumi");
47
- }
48
-
49
- run(rawArgs) {
50
- const args = (0, _merge2.default)({}, this.options, rawArgs);
51
-
52
- if (!Array.isArray(args.command)) {
53
- args.command = [args.command];
54
- } // 1. Prepare Pulumi args.
55
-
56
-
57
- const finalArgs = [];
58
-
59
- for (const key in args.args) {
60
- const value = args.args[key];
61
-
62
- if (!value) {
63
- continue;
64
- }
65
-
66
- if (Array.isArray(value)) {
67
- for (let i = 0; i < value.length; i++) {
68
- finalArgs.push(`--${(0, _kebabCase2.default)(key)}`, value[i]);
69
- }
70
-
71
- continue;
72
- }
73
-
74
- if (typeof value === "boolean") {
75
- finalArgs.push(`--${(0, _kebabCase2.default)(key)}`);
76
- continue;
77
- }
78
-
79
- finalArgs.push(`--${(0, _kebabCase2.default)(key)}`, value);
80
- } // Prepare execa args.
81
-
82
-
83
- (0, _set2.default)(args.execa, "env.PULUMI_SKIP_UPDATE_CHECK", "true");
84
- (0, _set2.default)(args.execa, "env.PULUMI_HOME", this.pulumiFolder);
85
-
86
- const execaArgs = _objectSpread(_objectSpread({}, args.execa), {}, {
87
- env: _objectSpread(_objectSpread({}, args.execa.env || {}), {}, {
88
- /**
89
- * Due to an issue with Pulumi https://github.com/pulumi/pulumi/issues/8374, and even though this
90
- * commit suggests it should already work like that https://github.com/pulumi/pulumi/commit/c878916901a997a9c0ffcbed23560e19e224a6f1,
91
- * we need to specify the exact location of our Pulumi binaries, using the PATH environment variable, so it can correctly resolve
92
- * plugins necessary for custom resources and dynamic providers to work.
93
- */
94
- PATH: `${process.env.PATH};${this.pulumiFolder}`
95
- })
96
- }); // We want to keep the "interactive" output format of the Pulumi command when `--preview` flag is passed in.
97
-
98
-
99
- const flags = args.command && args.command.includes("preview") ? [] : [FLAG_NON_INTERACTIVE];
100
- return (0, _execa.default)(this.pulumiBinaryPath, [...args.command, ...finalArgs, ...flags], execaArgs);
101
- }
102
-
103
- async install(rawArgs) {
104
- const args = (0, _merge2.default)({}, this.options, rawArgs);
105
- const installed = await (0, _downloadBinaries.default)(this.pulumiDownloadFolder, args.beforePulumiInstall, args.afterPulumiInstall);
106
-
107
- if (installed) {
108
- const {
109
- version
110
- } = require("@pulumi/aws/package.json");
111
-
112
- await (0, _execa.default)(this.pulumiBinaryPath, ["plugin", "install", "resource", "aws", version], {
113
- stdio: "inherit",
114
- env: {
115
- PULUMI_HOME: this.pulumiFolder,
116
- PULUMI_SKIP_UPDATE_CHECK: "true"
117
- }
118
- });
6
+ var _Pulumi = require("./Pulumi");
7
+ Object.keys(_Pulumi).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _Pulumi[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _Pulumi[key];
119
14
  }
15
+ });
16
+ });
120
17
 
121
- return installed;
122
- }
123
-
124
- }
125
-
126
- exports.Pulumi = Pulumi;
18
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_Pulumi","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["index.ts"],"sourcesContent":["export * from \"./Pulumi\";\n"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/pulumi-sdk",
3
- "version": "0.0.0-mt-2",
3
+ "version": "0.0.0-unstable.06b2ede40f",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,23 +14,21 @@
14
14
  "directory": "dist"
15
15
  },
16
16
  "dependencies": {
17
- "@pulumi/aws": "^4.10.0",
18
- "@pulumi/pulumi": "< 3.18.0",
17
+ "@pulumi/aws": "6.67.0",
18
+ "@pulumi/pulumi": "3.147.0",
19
19
  "decompress": "4.2.1",
20
- "download": "5.0.3",
21
- "execa": "4.1.0",
20
+ "execa": "5.1.1",
21
+ "fs-extra": "11.2.0",
22
22
  "lodash": "4.17.21",
23
- "semver": "7.3.5",
24
- "tar": "6.1.11"
23
+ "node-fetch": "2.6.7",
24
+ "semver": "7.6.3",
25
+ "tar": "6.2.1"
25
26
  },
26
27
  "devDependencies": {
27
- "@babel/cli": "^7.5.5",
28
- "@babel/core": "^7.5.5",
29
- "@types/node": "^10.0.0",
30
- "@webiny/cli": "^0.0.0-mt-2",
31
- "@webiny/project-utils": "^0.0.0-mt-2",
32
- "rimraf": "^3.0.2",
33
- "typescript": "^4.1.3"
28
+ "@types/lodash": "4.17.13",
29
+ "@webiny/project-utils": "0.0.0-unstable.06b2ede40f",
30
+ "rimraf": "6.0.1",
31
+ "typescript": "5.3.3"
34
32
  },
35
33
  "adio": {
36
34
  "ignore": {
@@ -41,8 +39,8 @@
41
39
  }
42
40
  },
43
41
  "scripts": {
44
- "build": "yarn webiny run build",
45
- "watch": "yarn webiny run watch"
42
+ "build": "node ../cli/bin.js run build",
43
+ "watch": "node ../cli/bin.js run watch"
46
44
  },
47
- "gitHead": "3c0dcfb3c22c9f83107fdb97b25014cd03d9db7d"
45
+ "gitHead": "06b2ede40fc2212a70eeafd74afd50b56fb0ce82"
48
46
  }