@powerlines/plugin-terraform 0.1.75 → 0.1.76

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/index.cjs CHANGED
@@ -44,7 +44,7 @@ const plugin = (options = {}) => {
44
44
  },
45
45
  async deploy() {
46
46
  this.info(`Creating resources for Terraform stack: ${this.config.terraform.stackName}`);
47
- await this.$$internal.callHook("terraform:deploy", { sequential: true });
47
+ await this.callHook("terraform:deploy", { sequential: true });
48
48
  this.info(`Deploying Terraform stack: ${this.config.terraform.stackName}`);
49
49
  if (this.config.terraform.destroy) await (0, execa.execaCommand)([
50
50
  this.terraform.command,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;YAiCY,MAAA;IACR,SAAA,GAAY,sBAAA;EAAA;EAAA,UAGJ,UAAA,kBAA4B,aAAA;IACpC,SAAA;MAJY;;;;;;;;MAaV,MAAA,IAAU,IAAA,EAAM,QAAA,KAAa,YAAA;IAAA;EAAA;AAAA;;;;;;;;;cAatB,MAAA,oBACM,sBAAA,GAAyB,sBAAA,EAE1C,OAAA,GAAS,sBAAA,KACR,MAAA,CAAO,QAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;YAgCY,MAAA;IACR,SAAA,GAAY,sBAAA;EAAA;EAAA,UAGJ,UAAA,kBAA4B,aAAA;IACpC,SAAA;MAJY;;;;;;;;MAaV,MAAA,IAAU,IAAA,EAAM,QAAA,KAAa,YAAA;IAAA;EAAA;AAAA;;;;;;;;;cAatB,MAAA,oBACM,sBAAA,GAAyB,sBAAA,EAE1C,OAAA,GAAS,sBAAA,KACR,MAAA,CAAO,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;YAiCY,MAAA;IACR,SAAA,GAAY,sBAAA;EAAA;EAAA,UAGJ,UAAA,kBAA4B,aAAA;IACpC,SAAA;MAJY;;;;;;;;MAaV,MAAA,IAAU,IAAA,EAAM,QAAA,KAAa,YAAA;IAAA;EAAA;AAAA;;;;;;;;;cAatB,MAAA,oBACM,sBAAA,GAAyB,sBAAA,EAE1C,OAAA,GAAS,sBAAA,KACR,MAAA,CAAO,QAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;YAgCY,MAAA;IACR,SAAA,GAAY,sBAAA;EAAA;EAAA,UAGJ,UAAA,kBAA4B,aAAA;IACpC,SAAA;MAJY;;;;;;;;MAaV,MAAA,IAAU,IAAA,EAAM,QAAA,KAAa,YAAA;IAAA;EAAA;AAAA;;;;;;;;;cAatB,MAAA,oBACM,sBAAA,GAAyB,sBAAA,EAE1C,OAAA,GAAS,sBAAA,KACR,MAAA,CAAO,QAAA"}
package/dist/index.mjs CHANGED
@@ -41,7 +41,7 @@ const plugin = (options = {}) => {
41
41
  },
42
42
  async deploy() {
43
43
  this.info(`Creating resources for Terraform stack: ${this.config.terraform.stackName}`);
44
- await this.$$internal.callHook("terraform:deploy", { sequential: true });
44
+ await this.callHook("terraform:deploy", { sequential: true });
45
45
  this.info(`Deploying Terraform stack: ${this.config.terraform.stackName}`);
46
46
  if (this.config.terraform.destroy) await execaCommand([
47
47
  this.terraform.command,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { isSetString } from \"@stryke/type-checks\";\nimport { MaybePromise } from \"@stryke/types/base\";\nimport defu from \"defu\";\nimport { execaCommand } from \"execa\";\nimport { Plugin, PluginContext } from \"powerlines\";\nimport { getOrganizationName, getWorkspaceName } from \"powerlines/plugin-utils\";\nimport { which } from \"shelljs\";\nimport { TerraformContext } from \"./types\";\nimport { Unstable_TerraformPluginContext } from \"./types/_internal\";\nimport { TerraformPluginContext, TerraformPluginOptions } from \"./types/plugin\";\n\nexport type * from \"./types\";\n\ndeclare module \"powerlines\" {\n interface Config {\n terraform?: TerraformPluginOptions;\n }\n\n interface BasePlugin<TContext extends PluginContext> {\n terraform?: {\n /**\n * Run the Terraform deployment to create or update infrastructure resources defined in the Terraform program. This hook is executed after the main build process, allowing you to manage your infrastructure as code using Terraform directly from your Powerlines plugin.\n *\n * @remarks\n * This hook will execute the Terraform program defined in the `config` hook, which should be used to define the infrastructure resources. The Terraform program will be executed sequentially, allowing you to define resources in multiple hooks if needed. The resources defined in the Terraform program will be passed to the next hook invocation, allowing you to manage dependencies between resources defined in different hooks.\n *\n * @param this - The plugin context.\n */\n deploy?: (this: TContext) => MaybePromise<void>;\n };\n }\n}\n\n/**\n * A package containing a Powerlines plugin to configure infrastructure and deploy a project using Terraform IaC.\n *\n * @see https://www.terraform.io\n *\n * @param options - The Terraform plugin user configuration options.\n * @returns A Powerlines plugin to configure infrastructure and deploy a project using Terraform.\n */\nexport const plugin = <\n TContext extends TerraformPluginContext = TerraformPluginContext\n>(\n options: TerraformPluginOptions = {}\n): Plugin<TContext>[] => {\n return [\n {\n name: \"terraform\",\n async config() {\n return {\n deploy: {\n terraform: defu(options, {\n autoApproval: false,\n planFile: \"plan.out\",\n formatWrite: false,\n upgrade: false,\n destroy: false,\n migrateState: false,\n lock: true,\n reconfigure: false\n })\n }\n };\n },\n async configResolved() {\n this.terraform ??= {} as TerraformContext;\n\n const command = which(\"terragrunt\")\n ? \"terragrunt\"\n : which(\"tofu\")\n ? \"tofu\"\n : which(\"terraform\")\n ? \"terraform\"\n : null;\n if (!command) {\n throw new Error(\n \"Both OpenTofu and Terraform are not installed. Please install one of the two before running this executor.\"\n );\n }\n\n this.terraform.command = command;\n\n const organizationName = kebabCase(getOrganizationName(this));\n const workspaceName = kebabCase(await getWorkspaceName(this));\n const projectName = kebabCase(this.config.name);\n\n this.config.terraform.stackName ??= `${organizationName || workspaceName || projectName}-${\n workspaceName &&\n workspaceName !== organizationName &&\n workspaceName !== projectName\n ? `${workspaceName}-`\n : \"\"\n }${projectName}-${this.config.mode}`;\n },\n async deploy() {\n this.info(\n `Creating resources for Terraform stack: ${this.config.terraform.stackName}`\n );\n\n await (\n this as unknown as Unstable_TerraformPluginContext\n ).$$internal.callHook(\"terraform:deploy\", {\n sequential: true\n });\n\n this.info(\n `Deploying Terraform stack: ${this.config.terraform.stackName}`\n );\n\n if (this.config.terraform.destroy) {\n await execaCommand(\n [\n this.terraform.command,\n this.terraform.command === \"terragrunt\"\n ? this.config.terraform.stackName\n : undefined,\n \"destroy\",\n this.config.terraform.autoApproval && \"--auto-approve\",\n this.config.terraform.varFile &&\n `--var ${this.config.terraform.varFile}`,\n isSetString(this.config.terraform.planFile) &&\n this.config.terraform.planFile\n ]\n .filter(Boolean)\n .join(\" \"),\n {\n preferLocal: true,\n shell: true,\n stdio: \"inherit\",\n cwd: this.infrastructurePath,\n env:\n this.config.mode === \"production\"\n ? {\n TF_IN_AUTOMATION: \"true\",\n TF_INPUT: \"0\"\n }\n : {}\n }\n );\n }\n\n await execaCommand(\n [\n this.terraform.command,\n this.terraform.command === \"terragrunt\"\n ? this.config.terraform.stackName\n : undefined,\n \"apply\",\n this.config.terraform.autoApproval && \"--auto-approve\",\n this.config.terraform.varFile &&\n `--var ${this.config.terraform.varFile}`,\n isSetString(this.config.terraform.planFile) &&\n this.config.terraform.planFile\n ]\n .filter(Boolean)\n .join(\" \"),\n {\n preferLocal: true,\n shell: true,\n stdio: \"inherit\",\n cwd: this.infrastructurePath,\n env:\n this.config.mode === \"production\"\n ? {\n TF_IN_AUTOMATION: \"true\",\n TF_INPUT: \"0\"\n }\n : {}\n }\n );\n\n this.info(`Successfully deployed ${this.config.terraform.stackName}`);\n }\n }\n ] as Plugin<TContext>[];\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;;;AA4DA,MAAa,UAGX,UAAkC,EAAE,KACb;AACvB,QAAO,CACL;EACE,MAAM;EACN,MAAM,SAAS;AACb,UAAO,EACL,QAAQ,EACN,WAAW,KAAK,SAAS;IACvB,cAAc;IACd,UAAU;IACV,aAAa;IACb,SAAS;IACT,SAAS;IACT,cAAc;IACd,MAAM;IACN,aAAa;IACd,CAAC,EACH,EACF;;EAEH,MAAM,iBAAiB;AACrB,QAAK,cAAc,EAAE;GAErB,MAAM,UAAU,MAAM,aAAa,GAC/B,eACA,MAAM,OAAO,GACX,SACA,MAAM,YAAY,GAChB,cACA;AACR,OAAI,CAAC,QACH,OAAM,IAAI,MACR,6GACD;AAGH,QAAK,UAAU,UAAU;GAEzB,MAAM,mBAAmB,UAAU,oBAAoB,KAAK,CAAC;GAC7D,MAAM,gBAAgB,UAAU,MAAM,iBAAiB,KAAK,CAAC;GAC7D,MAAM,cAAc,UAAU,KAAK,OAAO,KAAK;AAE/C,QAAK,OAAO,UAAU,cAAc,GAAG,oBAAoB,iBAAiB,YAAY,GACtF,iBACA,kBAAkB,oBAClB,kBAAkB,cACd,GAAG,cAAc,KACjB,KACH,YAAY,GAAG,KAAK,OAAO;;EAEhC,MAAM,SAAS;AACb,QAAK,KACH,2CAA2C,KAAK,OAAO,UAAU,YAClE;AAED,SACE,KACA,WAAW,SAAS,oBAAoB,EACxC,YAAY,MACb,CAAC;AAEF,QAAK,KACH,8BAA8B,KAAK,OAAO,UAAU,YACrD;AAED,OAAI,KAAK,OAAO,UAAU,QACxB,OAAM,aACJ;IACE,KAAK,UAAU;IACf,KAAK,UAAU,YAAY,eACvB,KAAK,OAAO,UAAU,YACtB;IACJ;IACA,KAAK,OAAO,UAAU,gBAAgB;IACtC,KAAK,OAAO,UAAU,WACpB,SAAS,KAAK,OAAO,UAAU;IACjC,YAAY,KAAK,OAAO,UAAU,SAAS,IACzC,KAAK,OAAO,UAAU;IACzB,CACE,OAAO,QAAQ,CACf,KAAK,IAAI,EACZ;IACE,aAAa;IACb,OAAO;IACP,OAAO;IACP,KAAK,KAAK;IACV,KACE,KAAK,OAAO,SAAS,eACjB;KACE,kBAAkB;KAClB,UAAU;KACX,GACD,EAAE;IACT,CACF;AAGH,SAAM,aACJ;IACE,KAAK,UAAU;IACf,KAAK,UAAU,YAAY,eACvB,KAAK,OAAO,UAAU,YACtB;IACJ;IACA,KAAK,OAAO,UAAU,gBAAgB;IACtC,KAAK,OAAO,UAAU,WACpB,SAAS,KAAK,OAAO,UAAU;IACjC,YAAY,KAAK,OAAO,UAAU,SAAS,IACzC,KAAK,OAAO,UAAU;IACzB,CACE,OAAO,QAAQ,CACf,KAAK,IAAI,EACZ;IACE,aAAa;IACb,OAAO;IACP,OAAO;IACP,KAAK,KAAK;IACV,KACE,KAAK,OAAO,SAAS,eACjB;KACE,kBAAkB;KAClB,UAAU;KACX,GACD,EAAE;IACT,CACF;AAED,QAAK,KAAK,yBAAyB,KAAK,OAAO,UAAU,YAAY;;EAExE,CACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { isSetString } from \"@stryke/type-checks\";\nimport { MaybePromise } from \"@stryke/types/base\";\nimport defu from \"defu\";\nimport { execaCommand } from \"execa\";\nimport { Plugin, PluginContext } from \"powerlines\";\nimport { getOrganizationName, getWorkspaceName } from \"powerlines/plugin-utils\";\nimport { which } from \"shelljs\";\nimport { TerraformContext } from \"./types\";\nimport { TerraformPluginContext, TerraformPluginOptions } from \"./types/plugin\";\n\nexport type * from \"./types\";\n\ndeclare module \"powerlines\" {\n interface Config {\n terraform?: TerraformPluginOptions;\n }\n\n interface BasePlugin<TContext extends PluginContext> {\n terraform?: {\n /**\n * Run the Terraform deployment to create or update infrastructure resources defined in the Terraform program. This hook is executed after the main build process, allowing you to manage your infrastructure as code using Terraform directly from your Powerlines plugin.\n *\n * @remarks\n * This hook will execute the Terraform program defined in the `config` hook, which should be used to define the infrastructure resources. The Terraform program will be executed sequentially, allowing you to define resources in multiple hooks if needed. The resources defined in the Terraform program will be passed to the next hook invocation, allowing you to manage dependencies between resources defined in different hooks.\n *\n * @param this - The plugin context.\n */\n deploy?: (this: TContext) => MaybePromise<void>;\n };\n }\n}\n\n/**\n * A package containing a Powerlines plugin to configure infrastructure and deploy a project using Terraform IaC.\n *\n * @see https://www.terraform.io\n *\n * @param options - The Terraform plugin user configuration options.\n * @returns A Powerlines plugin to configure infrastructure and deploy a project using Terraform.\n */\nexport const plugin = <\n TContext extends TerraformPluginContext = TerraformPluginContext\n>(\n options: TerraformPluginOptions = {}\n): Plugin<TContext>[] => {\n return [\n {\n name: \"terraform\",\n async config() {\n return {\n deploy: {\n terraform: defu(options, {\n autoApproval: false,\n planFile: \"plan.out\",\n formatWrite: false,\n upgrade: false,\n destroy: false,\n migrateState: false,\n lock: true,\n reconfigure: false\n })\n }\n };\n },\n async configResolved() {\n this.terraform ??= {} as TerraformContext;\n\n const command = which(\"terragrunt\")\n ? \"terragrunt\"\n : which(\"tofu\")\n ? \"tofu\"\n : which(\"terraform\")\n ? \"terraform\"\n : null;\n if (!command) {\n throw new Error(\n \"Both OpenTofu and Terraform are not installed. Please install one of the two before running this executor.\"\n );\n }\n\n this.terraform.command = command;\n\n const organizationName = kebabCase(getOrganizationName(this));\n const workspaceName = kebabCase(await getWorkspaceName(this));\n const projectName = kebabCase(this.config.name);\n\n this.config.terraform.stackName ??= `${organizationName || workspaceName || projectName}-${\n workspaceName &&\n workspaceName !== organizationName &&\n workspaceName !== projectName\n ? `${workspaceName}-`\n : \"\"\n }${projectName}-${this.config.mode}`;\n },\n async deploy() {\n this.info(\n `Creating resources for Terraform stack: ${this.config.terraform.stackName}`\n );\n\n await this.callHook(\"terraform:deploy\", {\n sequential: true\n });\n\n this.info(\n `Deploying Terraform stack: ${this.config.terraform.stackName}`\n );\n\n if (this.config.terraform.destroy) {\n await execaCommand(\n [\n this.terraform.command,\n this.terraform.command === \"terragrunt\"\n ? this.config.terraform.stackName\n : undefined,\n \"destroy\",\n this.config.terraform.autoApproval && \"--auto-approve\",\n this.config.terraform.varFile &&\n `--var ${this.config.terraform.varFile}`,\n isSetString(this.config.terraform.planFile) &&\n this.config.terraform.planFile\n ]\n .filter(Boolean)\n .join(\" \"),\n {\n preferLocal: true,\n shell: true,\n stdio: \"inherit\",\n cwd: this.infrastructurePath,\n env:\n this.config.mode === \"production\"\n ? {\n TF_IN_AUTOMATION: \"true\",\n TF_INPUT: \"0\"\n }\n : {}\n }\n );\n }\n\n await execaCommand(\n [\n this.terraform.command,\n this.terraform.command === \"terragrunt\"\n ? this.config.terraform.stackName\n : undefined,\n \"apply\",\n this.config.terraform.autoApproval && \"--auto-approve\",\n this.config.terraform.varFile &&\n `--var ${this.config.terraform.varFile}`,\n isSetString(this.config.terraform.planFile) &&\n this.config.terraform.planFile\n ]\n .filter(Boolean)\n .join(\" \"),\n {\n preferLocal: true,\n shell: true,\n stdio: \"inherit\",\n cwd: this.infrastructurePath,\n env:\n this.config.mode === \"production\"\n ? {\n TF_IN_AUTOMATION: \"true\",\n TF_INPUT: \"0\"\n }\n : {}\n }\n );\n\n this.info(`Successfully deployed ${this.config.terraform.stackName}`);\n }\n }\n ] as Plugin<TContext>[];\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;;;AA2DA,MAAa,UAGX,UAAkC,EAAE,KACb;AACvB,QAAO,CACL;EACE,MAAM;EACN,MAAM,SAAS;AACb,UAAO,EACL,QAAQ,EACN,WAAW,KAAK,SAAS;IACvB,cAAc;IACd,UAAU;IACV,aAAa;IACb,SAAS;IACT,SAAS;IACT,cAAc;IACd,MAAM;IACN,aAAa;IACd,CAAC,EACH,EACF;;EAEH,MAAM,iBAAiB;AACrB,QAAK,cAAc,EAAE;GAErB,MAAM,UAAU,MAAM,aAAa,GAC/B,eACA,MAAM,OAAO,GACX,SACA,MAAM,YAAY,GAChB,cACA;AACR,OAAI,CAAC,QACH,OAAM,IAAI,MACR,6GACD;AAGH,QAAK,UAAU,UAAU;GAEzB,MAAM,mBAAmB,UAAU,oBAAoB,KAAK,CAAC;GAC7D,MAAM,gBAAgB,UAAU,MAAM,iBAAiB,KAAK,CAAC;GAC7D,MAAM,cAAc,UAAU,KAAK,OAAO,KAAK;AAE/C,QAAK,OAAO,UAAU,cAAc,GAAG,oBAAoB,iBAAiB,YAAY,GACtF,iBACA,kBAAkB,oBAClB,kBAAkB,cACd,GAAG,cAAc,KACjB,KACH,YAAY,GAAG,KAAK,OAAO;;EAEhC,MAAM,SAAS;AACb,QAAK,KACH,2CAA2C,KAAK,OAAO,UAAU,YAClE;AAED,SAAM,KAAK,SAAS,oBAAoB,EACtC,YAAY,MACb,CAAC;AAEF,QAAK,KACH,8BAA8B,KAAK,OAAO,UAAU,YACrD;AAED,OAAI,KAAK,OAAO,UAAU,QACxB,OAAM,aACJ;IACE,KAAK,UAAU;IACf,KAAK,UAAU,YAAY,eACvB,KAAK,OAAO,UAAU,YACtB;IACJ;IACA,KAAK,OAAO,UAAU,gBAAgB;IACtC,KAAK,OAAO,UAAU,WACpB,SAAS,KAAK,OAAO,UAAU;IACjC,YAAY,KAAK,OAAO,UAAU,SAAS,IACzC,KAAK,OAAO,UAAU;IACzB,CACE,OAAO,QAAQ,CACf,KAAK,IAAI,EACZ;IACE,aAAa;IACb,OAAO;IACP,OAAO;IACP,KAAK,KAAK;IACV,KACE,KAAK,OAAO,SAAS,eACjB;KACE,kBAAkB;KAClB,UAAU;KACX,GACD,EAAE;IACT,CACF;AAGH,SAAM,aACJ;IACE,KAAK,UAAU;IACf,KAAK,UAAU,YAAY,eACvB,KAAK,OAAO,UAAU,YACtB;IACJ;IACA,KAAK,OAAO,UAAU,gBAAgB;IACtC,KAAK,OAAO,UAAU,WACpB,SAAS,KAAK,OAAO,UAAU;IACjC,YAAY,KAAK,OAAO,UAAU,SAAS,IACzC,KAAK,OAAO,UAAU;IACzB,CACE,OAAO,QAAQ,CACf,KAAK,IAAI,EACZ;IACE,aAAa;IACb,OAAO;IACP,OAAO;IACP,KAAK,KAAK;IACV,KACE,KAAK,OAAO,SAAS,eACjB;KACE,kBAAkB;KAClB,UAAU;KACX,GACD,EAAE;IACT,CACF;AAED,QAAK,KAAK,yBAAyB,KAAK,OAAO,UAAU,YAAY;;EAExE,CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerlines/plugin-terraform",
3
- "version": "0.1.75",
3
+ "version": "0.1.76",
4
4
  "private": false,
5
5
  "description": "A Powerlines plugin to deploy infrastructure using Terraform.",
6
6
  "keywords": [
@@ -78,14 +78,14 @@
78
78
  "@stryke/types": "^0.12.3",
79
79
  "defu": "^6.1.7",
80
80
  "execa": "^9.6.1",
81
- "powerlines": "^0.47.14",
81
+ "powerlines": "^0.47.15",
82
82
  "shelljs": "^0.10.0",
83
83
  "typescript": "^6.0.3"
84
84
  },
85
85
  "devDependencies": {
86
- "@powerlines/plugin-plugin": "^0.12.426",
86
+ "@powerlines/plugin-plugin": "^0.12.427",
87
87
  "@types/node": "^25.7.0"
88
88
  },
89
89
  "publishConfig": { "access": "public" },
90
- "gitHead": "fe87fe05c5511a117c6a16cce694b1854799f515"
90
+ "gitHead": "0baea9ad9bcd4d8a4eeeed56cac8ba739ca529c1"
91
91
  }