semantic-release-yaml 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,6 +18,10 @@ The plugin can be configured in the [**semantic-release** configuration file](ht
|
|
|
18
18
|
|
|
19
19
|
```json
|
|
20
20
|
{
|
|
21
|
+
// We specify the branches, on which semantic-release should run.
|
|
22
|
+
// This will be used in a later step, when we use the current
|
|
23
|
+
// branch name as variables in the configuration.
|
|
24
|
+
"branches": ["main", "next"],
|
|
21
25
|
"plugins": [
|
|
22
26
|
"@semantic-release/commit-analyzer",
|
|
23
27
|
"@semantic-release/npm",
|
|
@@ -37,6 +41,14 @@ The plugin can be configured in the [**semantic-release** configuration file](ht
|
|
|
37
41
|
"selector": "version",
|
|
38
42
|
// The value to set the field to.
|
|
39
43
|
"value": "${nextRelease.version}"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"cwd": "./",
|
|
47
|
+
"phase": "prepare",
|
|
48
|
+
// A dynamic file name.
|
|
49
|
+
"file": "./${branch.name}.yaml",
|
|
50
|
+
"selector": "name",
|
|
51
|
+
"value": "${nextRelease.version}"
|
|
40
52
|
}
|
|
41
53
|
]
|
|
42
54
|
}
|
|
@@ -45,7 +57,14 @@ The plugin can be configured in the [**semantic-release** configuration file](ht
|
|
|
45
57
|
"@semantic-release/git",
|
|
46
58
|
{
|
|
47
59
|
// Make sure Chart.yaml is pushed to the remote repository
|
|
48
|
-
"assets": [
|
|
60
|
+
"assets": [
|
|
61
|
+
"package.json",
|
|
62
|
+
"Chart.yaml",
|
|
63
|
+
// Also include main.yaml and next.yaml. These are the possible
|
|
64
|
+
// outcomes of the second command: the dynamic file name.
|
|
65
|
+
"./main.yaml",
|
|
66
|
+
"./next.yaml"
|
|
67
|
+
]
|
|
49
68
|
}
|
|
50
69
|
]
|
|
51
70
|
]
|
|
@@ -65,6 +84,10 @@ Each variable (`cwd`, `phase`, `file`, `selector`, `value`) in a command is eval
|
|
|
65
84
|
}
|
|
66
85
|
```
|
|
67
86
|
|
|
87
|
+
### Available variables
|
|
88
|
+
|
|
89
|
+
You can use all variables available in the [semantic-release context](https://semantic-release.gitbook.io/semantic-release/developer-guide/plugin)
|
|
90
|
+
|
|
68
91
|
## Lodash `set`
|
|
69
92
|
|
|
70
93
|
- Lodash `set`: https://lodash.com/docs/4.17.15#set
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("path"),
|
|
1
|
+
var e=require("path"),r=require("lodash/template"),t=require("fs"),a=require("lodash/set"),l=require("yaml-diff-patch"),i=require("js-yaml"),o=require("lodash"),n=require("aggregate-error"),u=require("@semantic-release/error"),f=require("lodash/isString"),d=require("util");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=/*#__PURE__*/s(e),h=/*#__PURE__*/s(r),p=/*#__PURE__*/s(t),v=/*#__PURE__*/s(a),g=/*#__PURE__*/s(i),y=/*#__PURE__*/s(n),m=/*#__PURE__*/s(u),q=/*#__PURE__*/s(f);const w=["cwd","env","logger"],[k]="https://github.com/meesvandongen/semantic-release-yaml#readme".split("#"),b=e=>o.isString(e)&&e.trim().length>0,j=[{key:"cwd",validator:($=b,e=>o.isNil(e)||$(e))},{key:"file",validator:b},{key:"phase",validator:b},{key:"selector",validator:b},{key:"value",validator:b}];var $;exports.prepare=function(e,r){const t=e.commands.filter(e=>"prepare"===h.default(e.phase)(r));if(t.length>0)return function(e){const r=e.flatMap(e=>j.reduce((r,{key:t,validator:a})=>a(e[t])?r:r.concat(function(e,r){const t=[`for usage, see ${k}/blob/master/README.md#options`,"",`Your configuration for the \`${e}\` option is \`${a=r[e],q.default(a)?a:d.inspect(a,{breakLength:Infinity,depth:2,maxArrayLength:5})}\`.`].join("\n");var a;return new m.default(`Invalid \`${e}\` option.`,e,t)}(t,e)),[]));if(r.length>0)throw new y.default(r)}(t),t.forEach(e=>{((e,r)=>{let{cwd:t=process.cwd(),logger:a}=r,i=function(e,r){if(null==e)return{};var t,a,l={},i=Object.keys(e);for(a=0;a<i.length;a++)r.indexOf(t=i[a])>=0||(l[t]=e[t]);return l}(r,w);const o=h.default(e.cwd)(i),n=h.default(e.file)(i),u=h.default(e.selector)(i),f=h.default(e.value)(i);a.log("file: %f - selector: %s - value: %v",n,u,f);const d=o?c.default.resolve(t,o):t,s=c.default.resolve(d,n),y=p.default.readFileSync(s,"utf8"),m=g.default.load(y),q=g.default.load(y);if("object"!=typeof q||null===q)throw new Error(`The file ${s} is not a valid YAML file.`);v.default(q,u,f);const k=l.yamlDiffPatch(y,m,q);p.default.writeFileSync(s,k)})(e,r)}),"Prepared"};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/get-error.ts","../src/verify-commands.ts","../src/index.ts","../src/yaml.ts"],"sourcesContent":["import SemanticReleaseError from \"@semantic-release/error\";\nimport isString from \"lodash/isString\";\nimport { inspect } from \"util\";\nimport { Command } from \"./definitions/configuration.interface\";\nimport pkg from \"../package.json\";\n\nconst [homepage] = pkg.homepage.split(\"#\");\n\nfunction stringify(object: unknown) {\n if (isString(object)) {\n return object;\n }\n return inspect(object, {\n breakLength: Infinity,\n depth: 2,\n maxArrayLength: 5,\n });\n}\n\nfunction linkify(file: string) {\n return `${homepage}/blob/master/${file}`;\n}\n\nexport function getError(key: keyof Command, command: Command): Error {\n const message = [\n `for usage, see ${linkify(\"README.md#options\")}`,\n \"\",\n `Your configuration for the \\`${key}\\` option is \\`${stringify(\n command[key]\n )}\\`.`,\n ].join(\"\\n\");\n return new SemanticReleaseError(`Invalid \\`${key}\\` option.`, key, message);\n}\n","import { Command } from \"./definitions/configuration.interface\";\nimport { isNil } from \"lodash\";\nimport { isString } from \"lodash\";\nimport AggregateError from \"aggregate-error\";\nimport { getError } from \"./get-error\";\n\nconst isNonEmptyString = (value: unknown) =>\n isString(value) && value.trim().length > 0;\n\nconst isOptional =\n (validator: (value: unknown) => boolean) => (value: unknown) =>\n isNil(value) || validator(value);\n\ninterface Validator {\n key: keyof Command;\n validator: (value: unknown) => boolean;\n}\nconst validators: Array<Validator> = [\n { key: \"cwd\", validator: isOptional(isNonEmptyString) },\n { key: \"file\", validator: isNonEmptyString },\n { key: \"phase\", validator: isNonEmptyString },\n { key: \"selector\", validator: isNonEmptyString },\n { key: \"value\", validator: isNonEmptyString },\n];\n\nexport function verifyCommands(commands: Array<Command>) {\n const errors = commands.flatMap((command) =>\n validators.reduce((errors, { key, validator }) => {\n const value = command[key];\n\n if (!validator(value)) {\n return errors.concat(getError(key, command));\n }\n return errors;\n }, [] as Array<Error>)\n );\n\n if (errors.length > 0) {\n throw new AggregateError(errors);\n }\n}\n","import { yaml } from \"./yaml\";\nimport { verifyCommands } from \"./verify-commands\";\nimport { Configuration } from \"./definitions/configuration.interface\";\nimport { SemanticContext } from \"./definitions/semantic-context.interface\";\nimport template from \"lodash/template\";\n\nexport function prepare(pluginConfig: Configuration, context: SemanticContext) {\n const commands = pluginConfig.commands.filter((command) => {\n const phase = template(command.phase)(context);\n return phase === \"prepare\";\n });\n\n if (commands.length > 0) {\n verifyCommands(commands);\n\n commands.forEach((command) => {\n yaml(command, context);\n });\n return \"Prepared\";\n }\n}\n","import path from \"path\";\nimport template from \"lodash/template\";\nimport fs from \"fs\";\nimport { Command } from \"./definitions/configuration.interface\";\nimport { SemanticContext } from \"./definitions/semantic-context.interface\";\nimport set from \"lodash/set\";\nimport { yamlDiffPatch } from \"yaml-diff-patch\";\nimport jsYaml from \"js-yaml\";\n\nexport const yaml = (\n command: Command,\n { cwd = process.cwd(), env, logger, ...context }: SemanticContext\n) => {\n const interpretedCwd = template(command.cwd)(context);\n const interpretedFile = template(command.file)(context);\n const interpretedSelector = template(command.selector)(context);\n const interpretedValue = template(command.value)(context);\n\n logger.log(\"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/get-error.ts","../src/verify-commands.ts","../src/index.ts","../src/yaml.ts"],"sourcesContent":["import SemanticReleaseError from \"@semantic-release/error\";\nimport isString from \"lodash/isString\";\nimport { inspect } from \"util\";\nimport { Command } from \"./definitions/configuration.interface\";\nimport pkg from \"../package.json\";\n\nconst [homepage] = pkg.homepage.split(\"#\");\n\nfunction stringify(object: unknown) {\n if (isString(object)) {\n return object;\n }\n return inspect(object, {\n breakLength: Infinity,\n depth: 2,\n maxArrayLength: 5,\n });\n}\n\nfunction linkify(file: string) {\n return `${homepage}/blob/master/${file}`;\n}\n\nexport function getError(key: keyof Command, command: Command): Error {\n const message = [\n `for usage, see ${linkify(\"README.md#options\")}`,\n \"\",\n `Your configuration for the \\`${key}\\` option is \\`${stringify(\n command[key]\n )}\\`.`,\n ].join(\"\\n\");\n return new SemanticReleaseError(`Invalid \\`${key}\\` option.`, key, message);\n}\n","import { Command } from \"./definitions/configuration.interface\";\nimport { isNil } from \"lodash\";\nimport { isString } from \"lodash\";\nimport AggregateError from \"aggregate-error\";\nimport { getError } from \"./get-error\";\n\nconst isNonEmptyString = (value: unknown) =>\n isString(value) && value.trim().length > 0;\n\nconst isOptional =\n (validator: (value: unknown) => boolean) => (value: unknown) =>\n isNil(value) || validator(value);\n\ninterface Validator {\n key: keyof Command;\n validator: (value: unknown) => boolean;\n}\nconst validators: Array<Validator> = [\n { key: \"cwd\", validator: isOptional(isNonEmptyString) },\n { key: \"file\", validator: isNonEmptyString },\n { key: \"phase\", validator: isNonEmptyString },\n { key: \"selector\", validator: isNonEmptyString },\n { key: \"value\", validator: isNonEmptyString },\n];\n\nexport function verifyCommands(commands: Array<Command>) {\n const errors = commands.flatMap((command) =>\n validators.reduce((errors, { key, validator }) => {\n const value = command[key];\n\n if (!validator(value)) {\n return errors.concat(getError(key, command));\n }\n return errors;\n }, [] as Array<Error>)\n );\n\n if (errors.length > 0) {\n throw new AggregateError(errors);\n }\n}\n","import { yaml } from \"./yaml\";\nimport { verifyCommands } from \"./verify-commands\";\nimport { Configuration } from \"./definitions/configuration.interface\";\nimport { SemanticContext } from \"./definitions/semantic-context.interface\";\nimport template from \"lodash/template\";\n\nexport function prepare(pluginConfig: Configuration, context: SemanticContext) {\n const commands = pluginConfig.commands.filter((command) => {\n const phase = template(command.phase)(context);\n return phase === \"prepare\";\n });\n\n if (commands.length > 0) {\n verifyCommands(commands);\n\n commands.forEach((command) => {\n yaml(command, context);\n });\n return \"Prepared\";\n }\n}\n","import path from \"path\";\nimport template from \"lodash/template\";\nimport fs from \"fs\";\nimport { Command } from \"./definitions/configuration.interface\";\nimport { SemanticContext } from \"./definitions/semantic-context.interface\";\nimport set from \"lodash/set\";\nimport { yamlDiffPatch } from \"yaml-diff-patch\";\nimport jsYaml from \"js-yaml\";\n\nexport const yaml = (\n command: Command,\n { cwd = process.cwd(), env, logger, ...context }: SemanticContext\n) => {\n const interpretedCwd = template(command.cwd)(context);\n const interpretedFile = template(command.file)(context);\n const interpretedSelector = template(command.selector)(context);\n const interpretedValue = template(command.value)(context);\n\n logger.log(\n \"file: %f - selector: %s - value: %v\",\n interpretedFile,\n interpretedSelector,\n interpretedValue\n );\n\n const workingDirectory = interpretedCwd\n ? path.resolve(cwd, interpretedCwd)\n : cwd;\n const pathToFile = path.resolve(workingDirectory, interpretedFile);\n\n const yamlFileRaw = fs.readFileSync(pathToFile, \"utf8\");\n const originalYamlFile = jsYaml.load(yamlFileRaw);\n const changedYamlFile = jsYaml.load(yamlFileRaw);\n\n if (typeof changedYamlFile !== \"object\" || changedYamlFile === null) {\n throw new Error(`The file ${pathToFile} is not a valid YAML file.`);\n }\n\n set(changedYamlFile, interpretedSelector, interpretedValue);\n const yamlResult = yamlDiffPatch(\n yamlFileRaw,\n originalYamlFile,\n changedYamlFile\n );\n\n fs.writeFileSync(pathToFile, yamlResult);\n};\n"],"names":["homepage","split","isNonEmptyString","value","isString","trim","length","validators","key","validator","isNil","pluginConfig","context","commands","filter","command","template","phase","errors","flatMap","reduce","concat","message","object","inspect","breakLength","Infinity","depth","maxArrayLength","join","SemanticReleaseError","getError","AggregateError","verifyCommands","forEach","cwd","process","logger","interpretedCwd","interpretedFile","file","interpretedSelector","selector","interpretedValue","log","workingDirectory","path","resolve","pathToFile","yamlFileRaw","fs","readFileSync","originalYamlFile","jsYaml","load","changedYamlFile","Error","set","yamlResult","yamlDiffPatch","writeFileSync","yaml"],"mappings":"8hBAMOA,mEAAyBC,MAAM,KCAhCC,EAAoBC,GACxBC,WAASD,IAAUA,EAAME,OAAOC,OAAS,EAUrCC,EAA+B,CACnC,CAAEC,IAAK,MAAOC,WARbA,EAQmCP,EARSC,GAC3CO,QAAMP,IAAUM,EAAUN,KAQ5B,CAAEK,IAAK,OAAQC,UAAWP,GAC1B,CAAEM,IAAK,QAASC,UAAWP,GAC3B,CAAEM,IAAK,WAAYC,UAAWP,GAC9B,CAAEM,IAAK,QAASC,UAAWP,IAZ1BO,IAAAA,2BCJqBE,EAA6BC,GACnD,MAAMC,EAAWF,EAAaE,SAASC,OAAQC,GAE5B,YADHC,UAASD,EAAQE,MAAjBD,CAAwBJ,IAIxC,GAAIC,EAASP,OAAS,EAMpB,gBDO2BO,GAC7B,MAAMK,EAASL,EAASM,QAASJ,GAC/BR,EAAWa,OAAO,CAACF,GAAUV,IAAAA,EAAKC,UAAAA,KAG3BA,EAFSM,EAAQP,IAKfU,EAFEA,EAAOG,gBDRGb,EAAoBO,GAC3C,MAAMO,EAAU,mBAJNtB,kCAMR,mCACgCQ,mBAnBjBe,EAoBbR,EAAQP,GAnBRJ,UAASmB,GACJA,EAEFC,UAAQD,EAAQ,CACrBE,YAAaC,SACbC,MAAO,EACPC,eAAgB,UAehBC,KAAK,MAtBT,IAAmBN,EAuBjB,WAAWO,uBAAkCtB,cAAiBA,EAAKc,GCAxCS,CAASvB,EAAKO,IAGpC,KAGL,GAAIG,EAAOZ,OAAS,EAClB,UAAU0B,UAAed,GCzBzBe,CAAepB,GAEfA,EAASqB,QAASnB,ICNF,EAClBA,WACAoB,IAAEA,EAAMC,QAAQD,MAAhBE,OAA4BA,KAAWzB,0IAEvC,MAAM0B,EAAiBtB,UAASD,EAAQoB,IAAjBnB,CAAsBJ,GACvC2B,EAAkBvB,UAASD,EAAQyB,KAAjBxB,CAAuBJ,GACzC6B,EAAsBzB,UAASD,EAAQ2B,SAAjB1B,CAA2BJ,GACjD+B,EAAmB3B,UAASD,EAAQZ,MAAjBa,CAAwBJ,GAEjDyB,EAAOO,IACL,sCACAL,EACAE,EACAE,GAGF,MAAME,EAAmBP,EACrBQ,UAAKC,QAAQZ,EAAKG,GAClBH,EACEa,EAAaF,UAAKC,QAAQF,EAAkBN,GAE5CU,EAAcC,UAAGC,aAAaH,EAAY,QAC1CI,EAAmBC,UAAOC,KAAKL,GAC/BM,EAAkBF,UAAOC,KAAKL,GAEpC,GAA+B,iBAApBM,GAAoD,OAApBA,EACzC,UAAUC,kBAAkBR,+BAG9BS,UAAIF,EAAiBd,EAAqBE,GAC1C,MAAMe,EAAaC,gBACjBV,EACAG,EACAG,GAGFL,UAAGU,cAAcZ,EAAYU,ID7BzBG,CAAK9C,EAASH,KAET"}
|
package/package.json
CHANGED