github-action-readme-generator 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.example.md +2 -0
  3. package/README.md +55 -47
  4. package/dist/bin/index.js +320846 -0
  5. package/dist/mjs/Action.d.ts +33 -0
  6. package/dist/mjs/Action.js +51 -0
  7. package/dist/mjs/Action.js.map +1 -0
  8. package/dist/mjs/config.d.ts +30 -0
  9. package/dist/mjs/config.js +56 -0
  10. package/dist/mjs/config.js.map +1 -0
  11. package/dist/mjs/generate-docs.d.ts +3 -0
  12. package/dist/mjs/generate-docs.js +21 -0
  13. package/dist/mjs/generate-docs.js.map +1 -0
  14. package/dist/mjs/helpers.d.ts +17 -0
  15. package/dist/mjs/helpers.js +187 -0
  16. package/dist/mjs/helpers.js.map +1 -0
  17. package/dist/mjs/index.d.ts +2 -0
  18. package/dist/mjs/index.js +4 -0
  19. package/dist/mjs/index.js.map +1 -0
  20. package/dist/mjs/inputs.d.ts +18 -0
  21. package/dist/mjs/inputs.js +252 -0
  22. package/dist/mjs/inputs.js.map +1 -0
  23. package/dist/mjs/inputs.test.d.ts +2 -0
  24. package/dist/mjs/inputs.test.js +8 -0
  25. package/dist/mjs/inputs.test.js.map +1 -0
  26. package/dist/mjs/logtask/index.d.ts +20 -0
  27. package/dist/mjs/logtask/index.js +181 -0
  28. package/dist/mjs/logtask/index.js.map +1 -0
  29. package/dist/mjs/markdowner/index.d.ts +17 -0
  30. package/dist/mjs/markdowner/index.js +104 -0
  31. package/dist/mjs/markdowner/index.js.map +1 -0
  32. package/dist/mjs/package.json +3 -0
  33. package/dist/mjs/prettier.d.ts +3 -0
  34. package/dist/mjs/prettier.js +32 -0
  35. package/dist/mjs/prettier.js.map +1 -0
  36. package/dist/mjs/readme-editor.d.ts +10 -0
  37. package/dist/mjs/readme-editor.js +42 -0
  38. package/dist/mjs/readme-editor.js.map +1 -0
  39. package/dist/mjs/save.d.ts +2 -0
  40. package/dist/mjs/save.js +10 -0
  41. package/dist/mjs/save.js.map +1 -0
  42. package/dist/mjs/sections/index.d.ts +2 -0
  43. package/dist/mjs/sections/index.js +48 -0
  44. package/dist/mjs/sections/index.js.map +1 -0
  45. package/dist/mjs/sections/update-badges.d.ts +7 -0
  46. package/dist/mjs/sections/update-badges.js +71 -0
  47. package/dist/mjs/sections/update-badges.js.map +1 -0
  48. package/dist/mjs/sections/update-branding.d.ts +7 -0
  49. package/dist/mjs/sections/update-branding.js +46 -0
  50. package/dist/mjs/sections/update-branding.js.map +1 -0
  51. package/dist/mjs/sections/update-description.d.ts +2 -0
  52. package/dist/mjs/sections/update-description.js +21 -0
  53. package/dist/mjs/sections/update-description.js.map +1 -0
  54. package/dist/mjs/sections/update-inputs.d.ts +2 -0
  55. package/dist/mjs/sections/update-inputs.js +47 -0
  56. package/dist/mjs/sections/update-inputs.js.map +1 -0
  57. package/dist/mjs/sections/update-outputs.d.ts +2 -0
  58. package/dist/mjs/sections/update-outputs.js +42 -0
  59. package/dist/mjs/sections/update-outputs.js.map +1 -0
  60. package/dist/mjs/sections/update-title.d.ts +2 -0
  61. package/dist/mjs/sections/update-title.js +19 -0
  62. package/dist/mjs/sections/update-title.js.map +1 -0
  63. package/dist/mjs/sections/update-usage.d.ts +2 -0
  64. package/dist/mjs/sections/update-usage.js +49 -0
  65. package/dist/mjs/sections/update-usage.js.map +1 -0
  66. package/dist/mjs/svg-editor.d.mts +22 -0
  67. package/dist/mjs/svg-editor.mjs +138 -0
  68. package/dist/mjs/svg-editor.mjs.map +1 -0
  69. package/dist/mjs/working-directory.d.ts +2 -0
  70. package/dist/mjs/working-directory.js +5 -0
  71. package/dist/mjs/working-directory.js.map +1 -0
  72. package/dist/{index.d.ts → types/index.d.ts} +44 -10
  73. package/package.json +115 -135
  74. package/dist/index.js +0 -16
@@ -0,0 +1,252 @@
1
+ /* eslint-disable import/no-extraneous-dependencies */
2
+ /* eslint-disable sonarjs/no-duplicate-string */
3
+ /* eslint-disable @typescript-eslint/explicit-member-accessibility */
4
+ import * as fs from 'node:fs';
5
+ import * as path from 'node:path';
6
+ import YAML from 'yaml';
7
+ import Action from './Action.js';
8
+ import { repositoryFinder } from './helpers.js';
9
+ import LogTask from './logtask/index.js';
10
+ import { Provider } from './nconf/nconf.cjs';
11
+ import ReadmeEditor from './readme-editor.js';
12
+ import { workingDirectory } from './working-directory.js';
13
+ const log = new LogTask('inputs');
14
+ process.chdir(workingDirectory());
15
+ const githubEventPath = process.env.GITHUB_EVENT_PATH ?? '';
16
+ let githubEvent = null;
17
+ try {
18
+ githubEvent = JSON.parse(fs.readFileSync(githubEventPath, 'utf8'));
19
+ }
20
+ catch {
21
+ // File not there
22
+ log.debug(`GITHUB_EVENT_PATH not found: ${githubEventPath}`);
23
+ }
24
+ export const configFileName = '.ghadocs.json';
25
+ const pathsAction = 'paths:action';
26
+ const pathsReadme = 'paths:readme';
27
+ export const configKeys = [
28
+ 'save',
29
+ pathsAction,
30
+ pathsReadme,
31
+ 'branding_svg_path',
32
+ 'versioning:enabled',
33
+ 'versioning:override',
34
+ 'versioning:prefix',
35
+ 'versioning:branch',
36
+ 'owner',
37
+ 'repo',
38
+ 'title_prefix',
39
+ 'pretty',
40
+ 'include_github_version_badge',
41
+ ];
42
+ export default class Inputs {
43
+ config;
44
+ sections;
45
+ readmePath;
46
+ configPath;
47
+ action;
48
+ readmeEditor;
49
+ constructor() {
50
+ this.configPath = path.resolve(configFileName);
51
+ this.config = new Provider();
52
+ const repositoryDetail = repositoryFinder(null, githubEvent);
53
+ if (process.env.GITHUB_ACTION) {
54
+ log.info('running in GitHub action');
55
+ }
56
+ if (fs.existsSync(this.configPath)) {
57
+ log.info(`config file found: ${this.configPath}`);
58
+ }
59
+ else {
60
+ log.error(`config file not found: ${this.configPath}`);
61
+ }
62
+ this.config
63
+ .env({
64
+ lowerCase: true,
65
+ parseValues: true,
66
+ match: /^INPUT_/,
67
+ transform: (obj) => {
68
+ if (obj.key.startsWith('input_')) {
69
+ const newObj = {
70
+ key: obj.key,
71
+ value: obj.value,
72
+ };
73
+ const keyParsed = obj.key.replace(/^(INPUT|input)_/, '');
74
+ switch (keyParsed) {
75
+ case 'readme': {
76
+ newObj.key = pathsReadme;
77
+ break;
78
+ }
79
+ case 'action': {
80
+ newObj.key = pathsAction;
81
+ break;
82
+ }
83
+ case 'versioning_enabled': {
84
+ newObj.key = 'versioning:enabled';
85
+ break;
86
+ }
87
+ case 'version_prefix': {
88
+ newObj.key = 'versioning:prefix';
89
+ break;
90
+ }
91
+ case 'versioning_default_branch': {
92
+ newObj.key = 'versioning:branch';
93
+ break;
94
+ }
95
+ case 'version_override': {
96
+ newObj.key = 'versioning:override';
97
+ break;
98
+ }
99
+ case 'include_github_version_badge': {
100
+ newObj.key = 'versioning:badge';
101
+ break;
102
+ }
103
+ default: {
104
+ newObj.key = keyParsed;
105
+ break;
106
+ }
107
+ }
108
+ if (newObj.value) {
109
+ this.config.set(newObj.key, newObj.value);
110
+ }
111
+ return newObj;
112
+ }
113
+ return undefined;
114
+ },
115
+ })
116
+ .argv({
117
+ 'save': {
118
+ alias: 'save',
119
+ describe: `Save this config to ${configFileName}`,
120
+ parseValues: true,
121
+ type: 'boolean',
122
+ },
123
+ 'paths:action': {
124
+ alias: ['pathsAction', 'action'],
125
+ type: 'string',
126
+ describe: 'Path to the action.yml',
127
+ },
128
+ 'paths:readme': {
129
+ alias: ['pathsReadme', 'readme'],
130
+ type: 'string',
131
+ describe: 'Path to the README file',
132
+ },
133
+ 'branding_svg_path': {
134
+ alias: 'svg',
135
+ type: 'string',
136
+ describe: 'Save and load the branding svg image in the README from this path',
137
+ },
138
+ 'owner': {
139
+ alias: 'owner',
140
+ describe: 'The GitHub Action repository owner. i.e: `bitflight-devops`',
141
+ },
142
+ 'repo': {
143
+ alias: 'repo',
144
+ describe: 'The GitHub Action repository name. i.e: `github-action-readme-generator`',
145
+ },
146
+ 'prettier': {
147
+ alias: 'pretty',
148
+ describe: 'Format the markdown using prettier formatter',
149
+ parseValues: true,
150
+ type: 'boolean',
151
+ },
152
+ 'versioning:enabled': {
153
+ alias: ['versioning', 'versioning_enabled'],
154
+ describe: 'Enable the update of the usage version to match the latest version in the package.json file',
155
+ parseValues: true,
156
+ type: 'boolean',
157
+ },
158
+ 'versioning:override': {
159
+ alias: ['setversion', 'versioning_override', 'version_override'],
160
+ describe: 'Set a specific version to display in the README.md',
161
+ parseValues: true,
162
+ },
163
+ 'versioning:prefix': {
164
+ alias: ['vp', 'version_prefix'],
165
+ describe: "Prefix the version with this value (if it isn't already prefixed)",
166
+ parseValues: true,
167
+ },
168
+ 'versioning:branch': {
169
+ alias: ['branch', 'versioning_default_branch'],
170
+ describe: 'If versioning is disabled show this branch instead',
171
+ parseValues: true,
172
+ },
173
+ 'versioning:badge': {
174
+ alias: ['version-badge', 'versioning_badge'],
175
+ describe: 'Display the current version as a badge',
176
+ parseValues: true,
177
+ type: 'boolean',
178
+ },
179
+ 'title_prefix': {
180
+ alias: ['prefix', 'title_prefix'],
181
+ describe: 'Add a prefix to the README title',
182
+ parseValues: true,
183
+ },
184
+ })
185
+ .file(this.configPath)
186
+ .defaults({
187
+ owner: repositoryDetail?.owner,
188
+ repo: repositoryDetail?.repo,
189
+ sections: [
190
+ 'title',
191
+ 'branding',
192
+ 'description',
193
+ 'usage',
194
+ 'inputs',
195
+ 'outputs',
196
+ 'contents',
197
+ 'badges',
198
+ ],
199
+ })
200
+ .required(['owner', 'repo']);
201
+ this.sections = this.config.get('sections');
202
+ const actionPath = path.resolve(this.config.get(pathsAction));
203
+ this.action = new Action(actionPath);
204
+ this.readmePath = path.resolve(this.config.get(pathsReadme));
205
+ try {
206
+ const thisActionPath = path.join(__dirname, '../../action.yml');
207
+ const thisAction = new Action(thisActionPath);
208
+ this.setConfigValueFromActionFileDefault(thisAction, 'readme', pathsReadme);
209
+ this.setConfigValueFromActionFileDefault(thisAction, 'title_prefix');
210
+ this.setConfigValueFromActionFileDefault(thisAction, 'save');
211
+ this.setConfigValueFromActionFileDefault(thisAction, 'pretty');
212
+ this.setConfigValueFromActionFileDefault(thisAction, 'versioning_enabled', 'versioning:enabled');
213
+ this.setConfigValueFromActionFileDefault(thisAction, 'versioning_default_branch', 'versioning:branch');
214
+ this.setConfigValueFromActionFileDefault(thisAction, 'version_override', 'versioning:override');
215
+ this.setConfigValueFromActionFileDefault(thisAction, 'version_prefix', 'versioning:prefix');
216
+ this.setConfigValueFromActionFileDefault(thisAction, 'include_github_version_badge', 'versioning:badges');
217
+ this.setConfigValueFromActionFileDefault(thisAction, 'branding_svg_path');
218
+ }
219
+ catch (error) {
220
+ log.info(`failed to load defaults from action's action.yml: ${error}`);
221
+ }
222
+ this.readmeEditor = new ReadmeEditor(this.readmePath);
223
+ if (LogTask.isDebug()) {
224
+ try {
225
+ log.debug('resolved inputs:');
226
+ log.debug(this.stringify());
227
+ log.debug('resolved action:');
228
+ log.debug(this.action.stringify());
229
+ }
230
+ catch (error) {
231
+ if (typeof error === 'string') {
232
+ log.debug(error);
233
+ }
234
+ }
235
+ }
236
+ }
237
+ setConfigValueFromActionFileDefault(actionInstance, inputName, providedConfigName) {
238
+ const configName = providedConfigName ?? inputName;
239
+ this.config.set(configName, this.config.get(configName) ?? actionInstance.inputDefault(inputName));
240
+ }
241
+ stringify() {
242
+ if (this) {
243
+ const output = [];
244
+ for (const k of configKeys) {
245
+ output.push(`${k}: ${this.config.get(k)}`);
246
+ }
247
+ return YAML.stringify(output);
248
+ }
249
+ return '';
250
+ }
251
+ }
252
+ //# sourceMappingURL=inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/inputs.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable sonarjs/no-duplicate-string */\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport type { Context } from '@actions/github/lib/context.js';\nimport YAML from 'yaml';\n\nimport Action from './Action.js';\nimport { repositoryFinder } from './helpers.js';\nimport LogTask from './logtask/index.js';\nimport { Provider } from './nconf/nconf.cjs';\nimport ReadmeEditor from './readme-editor.js';\nimport { workingDirectory } from './working-directory.js';\n\nconst log = new LogTask('inputs');\n\nprocess.chdir(workingDirectory());\nconst githubEventPath = process.env.GITHUB_EVENT_PATH ?? '';\nlet githubEvent: Context | null = null;\ntry {\n githubEvent = JSON.parse(fs.readFileSync(githubEventPath, 'utf8')) as Context;\n} catch {\n // File not there\n log.debug(`GITHUB_EVENT_PATH not found: ${githubEventPath}`);\n}\nexport const configFileName = '.ghadocs.json';\nconst pathsAction = 'paths:action';\nconst pathsReadme = 'paths:readme';\nexport const configKeys: string[] = [\n 'save',\n pathsAction,\n pathsReadme,\n 'branding_svg_path',\n 'versioning:enabled',\n 'versioning:override',\n 'versioning:prefix',\n 'versioning:branch',\n 'owner',\n 'repo',\n 'title_prefix',\n 'pretty',\n 'include_github_version_badge',\n];\ninterface KVPairType {\n key: string;\n value: string | undefined;\n}\ntype ProviderInstance = InstanceType<typeof Provider>;\nexport default class Inputs {\n public config: ProviderInstance;\n\n public sections: string[];\n\n public readmePath: string;\n\n public configPath: string;\n\n public action: Action;\n\n public readmeEditor: ReadmeEditor;\n\n constructor() {\n this.configPath = path.resolve(configFileName);\n this.config = new Provider();\n const repositoryDetail = repositoryFinder(null, githubEvent);\n if (process.env.GITHUB_ACTION) {\n log.info('running in GitHub action');\n }\n if (fs.existsSync(this.configPath)) {\n log.info(`config file found: ${this.configPath}`);\n } else {\n log.error(`config file not found: ${this.configPath}`);\n }\n this.config\n .env({\n lowerCase: true,\n parseValues: true,\n match: /^INPUT_/,\n transform: (obj: KVPairType): undefined | KVPairType => {\n if (obj.key.startsWith('input_')) {\n const newObj: KVPairType = {\n key: obj.key,\n value: obj.value,\n };\n const keyParsed = obj.key.replace(/^(INPUT|input)_/, '');\n switch (keyParsed) {\n case 'readme': {\n newObj.key = pathsReadme;\n break;\n }\n case 'action': {\n newObj.key = pathsAction;\n break;\n }\n case 'versioning_enabled': {\n newObj.key = 'versioning:enabled';\n break;\n }\n case 'version_prefix': {\n newObj.key = 'versioning:prefix';\n break;\n }\n case 'versioning_default_branch': {\n newObj.key = 'versioning:branch';\n break;\n }\n case 'version_override': {\n newObj.key = 'versioning:override';\n break;\n }\n case 'include_github_version_badge': {\n newObj.key = 'versioning:badge';\n break;\n }\n default: {\n newObj.key = keyParsed;\n break;\n }\n }\n if (newObj.value) {\n this.config.set(newObj.key, newObj.value);\n }\n return newObj;\n }\n return undefined;\n },\n })\n .argv({\n 'save': {\n alias: 'save',\n describe: `Save this config to ${configFileName}`,\n parseValues: true,\n type: 'boolean',\n },\n 'paths:action': {\n alias: ['pathsAction', 'action'],\n type: 'string',\n describe: 'Path to the action.yml',\n },\n 'paths:readme': {\n alias: ['pathsReadme', 'readme'],\n type: 'string',\n describe: 'Path to the README file',\n },\n 'branding_svg_path': {\n alias: 'svg',\n type: 'string',\n describe: 'Save and load the branding svg image in the README from this path',\n },\n 'owner': {\n alias: 'owner',\n describe: 'The GitHub Action repository owner. i.e: `bitflight-devops`',\n },\n 'repo': {\n alias: 'repo',\n describe: 'The GitHub Action repository name. i.e: `github-action-readme-generator`',\n },\n 'prettier': {\n alias: 'pretty',\n describe: 'Format the markdown using prettier formatter',\n parseValues: true,\n type: 'boolean',\n },\n 'versioning:enabled': {\n alias: ['versioning', 'versioning_enabled'],\n describe:\n 'Enable the update of the usage version to match the latest version in the package.json file',\n parseValues: true,\n type: 'boolean',\n },\n 'versioning:override': {\n alias: ['setversion', 'versioning_override', 'version_override'],\n describe: 'Set a specific version to display in the README.md',\n parseValues: true,\n },\n 'versioning:prefix': {\n alias: ['vp', 'version_prefix'],\n describe: \"Prefix the version with this value (if it isn't already prefixed)\",\n parseValues: true,\n },\n 'versioning:branch': {\n alias: ['branch', 'versioning_default_branch'],\n describe: 'If versioning is disabled show this branch instead',\n parseValues: true,\n },\n 'versioning:badge': {\n alias: ['version-badge', 'versioning_badge'],\n describe: 'Display the current version as a badge',\n parseValues: true,\n type: 'boolean',\n },\n 'title_prefix': {\n alias: ['prefix', 'title_prefix'],\n describe: 'Add a prefix to the README title',\n parseValues: true,\n },\n })\n .file(this.configPath)\n .defaults({\n owner: repositoryDetail?.owner,\n repo: repositoryDetail?.repo,\n sections: [\n 'title',\n 'branding',\n 'description',\n 'usage',\n 'inputs',\n 'outputs',\n 'contents',\n 'badges',\n ],\n })\n .required(['owner', 'repo']);\n\n this.sections = this.config.get('sections') as string[];\n\n const actionPath = path.resolve(this.config.get(pathsAction) as string);\n this.action = new Action(actionPath);\n this.readmePath = path.resolve(this.config.get(pathsReadme) as string);\n try {\n const thisActionPath = path.join(__dirname, '../../action.yml');\n const thisAction = new Action(thisActionPath);\n this.setConfigValueFromActionFileDefault(thisAction, 'readme', pathsReadme);\n this.setConfigValueFromActionFileDefault(thisAction, 'title_prefix');\n this.setConfigValueFromActionFileDefault(thisAction, 'save');\n this.setConfigValueFromActionFileDefault(thisAction, 'pretty');\n this.setConfigValueFromActionFileDefault(\n thisAction,\n 'versioning_enabled',\n 'versioning:enabled',\n );\n this.setConfigValueFromActionFileDefault(\n thisAction,\n 'versioning_default_branch',\n 'versioning:branch',\n );\n this.setConfigValueFromActionFileDefault(\n thisAction,\n 'version_override',\n 'versioning:override',\n );\n this.setConfigValueFromActionFileDefault(thisAction, 'version_prefix', 'versioning:prefix');\n this.setConfigValueFromActionFileDefault(\n thisAction,\n 'include_github_version_badge',\n 'versioning:badges',\n );\n this.setConfigValueFromActionFileDefault(thisAction, 'branding_svg_path');\n } catch (error) {\n log.info(`failed to load defaults from action's action.yml: ${error}`);\n }\n\n this.readmeEditor = new ReadmeEditor(this.readmePath);\n if (LogTask.isDebug()) {\n try {\n log.debug('resolved inputs:');\n log.debug(this.stringify());\n log.debug('resolved action:');\n log.debug(this.action.stringify());\n } catch (error) {\n if (typeof error === 'string') {\n log.debug(error);\n }\n }\n }\n }\n\n setConfigValueFromActionFileDefault(\n actionInstance: Action,\n inputName: string,\n providedConfigName?: string,\n ): void {\n const configName = providedConfigName ?? inputName;\n this.config.set(\n configName,\n this.config.get(configName) ?? actionInstance.inputDefault(inputName),\n );\n }\n\n stringify(): string {\n if (this) {\n const output: string[] = [];\n for (const k of configKeys) {\n output.push(`${k}: ${this.config.get(k)}`);\n }\n return YAML.stringify(output);\n }\n return '';\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export default function main(): void;
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import Inputs from './inputs.js';
3
+ export default function main() {
4
+ const inputs = new Inputs();
5
+ console.log('Input values:', inputs);
6
+ }
7
+ main();
8
+ //# sourceMappingURL=inputs.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.test.js","sourceRoot":"","sources":["../../src/inputs.test.ts"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,CAAC,OAAO,UAAU,IAAI;IAC1B,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,IAAI,EAAE,CAAC","sourcesContent":["#!/usr/bin/env node\nimport Inputs from './inputs.js';\n\nexport default function main(): void {\n const inputs = new Inputs();\n console.log('Input values:', inputs);\n}\n\nmain();\n"]}
@@ -0,0 +1,20 @@
1
+ export default class LogTask {
2
+ static ingroup_setting: {
3
+ [key: string]: boolean;
4
+ };
5
+ static indentWidth: number;
6
+ static isDebug(): boolean;
7
+ name: string;
8
+ constructor(name: string);
9
+ get ingroup(): boolean;
10
+ set ingroup(value: boolean);
11
+ logStep(emojiStr: string, step: string, description: string, startGroup?: number): Promise<void>;
12
+ debug(description?: string): void;
13
+ start(description?: string): void;
14
+ info(description?: string): void;
15
+ warn(description?: string): void;
16
+ success(description?: string, ingroup?: boolean): void;
17
+ fail(description?: string, ingroup?: boolean): void;
18
+ error(description?: string): void;
19
+ title(description?: string): void;
20
+ }
@@ -0,0 +1,181 @@
1
+ import * as core from '@actions/core';
2
+ import chalkPkg from 'chalk';
3
+ import * as emoji from 'node-emoji';
4
+ const { bgRedBright, cyan, green, greenBright, red, redBright, white, whiteBright, yellow, yellowBright, } = chalkPkg;
5
+ const NO_GROUP = 0;
6
+ const START_GROUP = 1;
7
+ const END_GROUP = 2;
8
+ const IS_ERROR = 3;
9
+ const IS_FAILED = 5;
10
+ const IS_TITLE = 6;
11
+ export default class LogTask {
12
+ static ingroup_setting = {};
13
+ static indentWidth = 5;
14
+ static isDebug() {
15
+ return core.isDebug() || !!process.env.DEBUG;
16
+ }
17
+ name;
18
+ constructor(name) {
19
+ this.name = name?.trim();
20
+ this.ingroup = false;
21
+ }
22
+ get ingroup() {
23
+ return LogTask.ingroup_setting[this.name] ?? false;
24
+ }
25
+ set ingroup(value) {
26
+ LogTask.ingroup_setting[this.name] = value;
27
+ }
28
+ async logStep(emojiStr, step, description, startGroup = NO_GROUP) {
29
+ if (step.length > LogTask.indentWidth) {
30
+ LogTask.indentWidth = step.length;
31
+ }
32
+ let failed = false;
33
+ let desc;
34
+ switch (step) {
35
+ case 'START': {
36
+ desc = yellowBright(`${description}`);
37
+ break;
38
+ }
39
+ case 'INFO': {
40
+ desc = green(`${description}`);
41
+ break;
42
+ }
43
+ case 'WARN': {
44
+ desc = yellow(`${description}`);
45
+ break;
46
+ }
47
+ case 'SUCCESS': {
48
+ desc = greenBright(`${description}`);
49
+ break;
50
+ }
51
+ case 'FAILURE': {
52
+ desc = redBright(`${description}`);
53
+ failed = true;
54
+ break;
55
+ }
56
+ case 'ERROR': {
57
+ desc = redBright(`${description}`);
58
+ break;
59
+ }
60
+ case '#####': {
61
+ desc = cyan(`${description}`);
62
+ break;
63
+ }
64
+ default: {
65
+ desc = white(`${description}`);
66
+ break;
67
+ }
68
+ }
69
+ let msg;
70
+ if (this.ingroup && !process.env.GITHUB_ACTIONS) {
71
+ const indentStr = [...Array.from({ length: LogTask.indentWidth }).fill(' ')].join('');
72
+ msg = `${indentStr} ${emojiStr}: ${this.name} > ${desc}`;
73
+ }
74
+ else {
75
+ const stepStr = [
76
+ step,
77
+ ...Array.from({ length: LogTask.indentWidth - step.length }).fill(' '),
78
+ ].join('');
79
+ msg = `[${stepStr}] ${emojiStr}: ${desc}`;
80
+ }
81
+ switch (step) {
82
+ case 'START': {
83
+ msg = yellowBright(`${msg}`);
84
+ break;
85
+ }
86
+ case 'SUCCESS': {
87
+ msg = whiteBright(`${msg}`);
88
+ break;
89
+ }
90
+ case 'FAILURE': {
91
+ msg = red(`${msg}`);
92
+ break;
93
+ }
94
+ case 'ERROR': {
95
+ msg = red(`${msg}`);
96
+ break;
97
+ }
98
+ default: {
99
+ break;
100
+ }
101
+ }
102
+ const isErroring = startGroup === IS_ERROR || startGroup === IS_FAILED;
103
+ if (process.env.GITHUB_ACTIONS) {
104
+ switch (startGroup) {
105
+ case START_GROUP: {
106
+ core.startGroup(msg);
107
+ break;
108
+ }
109
+ case END_GROUP: {
110
+ core.endGroup();
111
+ break;
112
+ }
113
+ case IS_ERROR: {
114
+ core.error(bgRedBright(msg));
115
+ break;
116
+ }
117
+ case IS_FAILED: {
118
+ core.setFailed(bgRedBright(msg));
119
+ break;
120
+ }
121
+ default: {
122
+ core.info(msg);
123
+ }
124
+ }
125
+ }
126
+ else if (isErroring) {
127
+ if (failed) {
128
+ core.setFailed(msg);
129
+ }
130
+ else {
131
+ core.error(msg);
132
+ }
133
+ }
134
+ else {
135
+ core.info(msg);
136
+ }
137
+ }
138
+ debug(description = '') {
139
+ if (LogTask.isDebug() && description !== '') {
140
+ this.logStep('👁️‍🗨️', 'DEBUG', description);
141
+ }
142
+ }
143
+ start(description = '') {
144
+ const desc = description === '' ? `Starting ${this.name}...` : description;
145
+ this.logStep(emoji.get('rocket') ?? '', 'START', desc, START_GROUP);
146
+ }
147
+ info(description = '') {
148
+ this.logStep(emoji.get('sparkles') ?? '', 'INFO', description);
149
+ }
150
+ warn(description = '') {
151
+ this.logStep(emoji.get('anger') ?? '', 'WARN', description);
152
+ }
153
+ success(description = '', ingroup = true) {
154
+ const desc = description === '' ? `Completed ${this.name}.` : description;
155
+ if (ingroup) {
156
+ this.ingroup = false;
157
+ if (process.env.GITHUB_ACTIONS) {
158
+ core.endGroup();
159
+ }
160
+ }
161
+ this.logStep(emoji.get('white_check_mark') ?? '', 'SUCCESS', desc);
162
+ }
163
+ fail(description = '', ingroup = true) {
164
+ const desc = description === '' ? `Failed ${this.name}.` : description;
165
+ if (ingroup) {
166
+ this.ingroup = false;
167
+ if (process.env.GITHUB_ACTIONS) {
168
+ core.endGroup();
169
+ }
170
+ }
171
+ const msgtype = process.env.GITHUB_ACTIONS ? IS_FAILED : IS_ERROR;
172
+ this.logStep(emoji.get('x') ?? '', 'FAILURE', desc, msgtype);
173
+ }
174
+ error(description = '') {
175
+ this.logStep(emoji.get('x') ?? '', 'ERROR', description, IS_ERROR);
176
+ }
177
+ title(description = '') {
178
+ this.logStep('📓', '#####', description, IS_TITLE);
179
+ }
180
+ }
181
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logtask/index.ts"],"names":[],"mappings":"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","sourcesContent":["import * as core from '@actions/core';\nimport chalkPkg from 'chalk';\nimport * as emoji from 'node-emoji';\n\nconst {\n bgRedBright,\n cyan,\n green,\n greenBright,\n red,\n redBright,\n white,\n whiteBright,\n yellow,\n yellowBright,\n} = chalkPkg;\nconst NO_GROUP = 0;\nconst START_GROUP = 1;\nconst END_GROUP = 2;\nconst IS_ERROR = 3;\nconst IS_FAILED = 5;\nconst IS_TITLE = 6;\n\nexport default class LogTask {\n static ingroup_setting: { [key: string]: boolean } = {};\n\n static indentWidth = 5;\n\n static isDebug(): boolean {\n return core.isDebug() || !!process.env.DEBUG;\n }\n\n name: string;\n\n constructor(name: string) {\n this.name = name?.trim();\n this.ingroup = false;\n }\n\n get ingroup(): boolean {\n return LogTask.ingroup_setting[this.name] ?? false;\n }\n\n set ingroup(value: boolean) {\n LogTask.ingroup_setting[this.name] = value;\n }\n\n async logStep(\n emojiStr: string,\n step: string,\n description: string,\n startGroup = NO_GROUP,\n ): Promise<void> {\n if (step.length > LogTask.indentWidth) {\n LogTask.indentWidth = step.length;\n }\n let failed = false;\n let desc: string;\n switch (step) {\n case 'START': {\n desc = yellowBright(`${description}`);\n break;\n }\n case 'INFO': {\n desc = green(`${description}`);\n break;\n }\n case 'WARN': {\n desc = yellow(`${description}`);\n break;\n }\n case 'SUCCESS': {\n desc = greenBright(`${description}`);\n break;\n }\n case 'FAILURE': {\n desc = redBright(`${description}`);\n failed = true;\n break;\n }\n case 'ERROR': {\n desc = redBright(`${description}`);\n break;\n }\n case '#####': {\n desc = cyan(`${description}`);\n break;\n }\n default: {\n desc = white(`${description}`);\n break;\n }\n }\n\n let msg: string;\n if (this.ingroup && !process.env.GITHUB_ACTIONS) {\n const indentStr = [...Array.from({ length: LogTask.indentWidth }).fill(' ')].join('');\n msg = `${indentStr} ${emojiStr}: ${this.name} > ${desc}`;\n } else {\n const stepStr = [\n step,\n ...Array.from({ length: LogTask.indentWidth - step.length }).fill(' '),\n ].join('');\n\n msg = `[${stepStr}] ${emojiStr}: ${desc}`;\n }\n switch (step) {\n case 'START': {\n msg = yellowBright(`${msg}`);\n break;\n }\n case 'SUCCESS': {\n msg = whiteBright(`${msg}`);\n break;\n }\n case 'FAILURE': {\n msg = red(`${msg}`);\n break;\n }\n case 'ERROR': {\n msg = red(`${msg}`);\n break;\n }\n default: {\n break;\n }\n }\n const isErroring = startGroup === IS_ERROR || startGroup === IS_FAILED;\n\n if (process.env.GITHUB_ACTIONS) {\n switch (startGroup) {\n case START_GROUP: {\n core.startGroup(msg);\n\n break;\n }\n case END_GROUP: {\n core.endGroup();\n\n break;\n }\n case IS_ERROR: {\n core.error(bgRedBright(msg));\n\n break;\n }\n case IS_FAILED: {\n core.setFailed(bgRedBright(msg));\n\n break;\n }\n default: {\n core.info(msg);\n }\n }\n } else if (isErroring) {\n if (failed) {\n core.setFailed(msg);\n } else {\n core.error(msg);\n }\n } else {\n core.info(msg);\n }\n }\n\n debug(description = ''): void {\n if (LogTask.isDebug() && description !== '') {\n this.logStep('👁️‍🗨️', 'DEBUG', description);\n }\n }\n\n start(description = ''): void {\n const desc = description === '' ? `Starting ${this.name}...` : description;\n\n this.logStep(emoji.get('rocket') ?? '', 'START', desc, START_GROUP);\n }\n\n info(description = ''): void {\n this.logStep(emoji.get('sparkles') ?? '', 'INFO', description);\n }\n\n warn(description = ''): void {\n this.logStep(emoji.get('anger') ?? '', 'WARN', description);\n }\n\n success(description = '', ingroup = true): void {\n const desc = description === '' ? `Completed ${this.name}.` : description;\n if (ingroup) {\n this.ingroup = false;\n if (process.env.GITHUB_ACTIONS) {\n core.endGroup();\n }\n }\n this.logStep(emoji.get('white_check_mark') ?? '', 'SUCCESS', desc);\n }\n\n fail(description = '', ingroup = true): void {\n const desc = description === '' ? `Failed ${this.name}.` : description;\n if (ingroup) {\n this.ingroup = false;\n if (process.env.GITHUB_ACTIONS) {\n core.endGroup();\n }\n }\n const msgtype = process.env.GITHUB_ACTIONS ? IS_FAILED : IS_ERROR;\n this.logStep(emoji.get('x') ?? '', 'FAILURE', desc, msgtype);\n }\n\n error(description = ''): void {\n this.logStep(emoji.get('x') ?? '', 'ERROR', description, IS_ERROR);\n }\n\n title(description = ''): void {\n this.logStep('📓', '#####', description, IS_TITLE);\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ export type MarkdownArrayRowType = string[][];
2
+ export type MarkdownArrayItemType = string;
3
+ /**
4
+ * Fills the width of the cell.
5
+ * @param text
6
+ * @param width
7
+ * @param paddingStart
8
+ */
9
+ export declare function fillWidth(text: string, width: number, paddingStart: number): string;
10
+ /**
11
+ * Escape a text so it can be used in a markdown table
12
+ * @param text
13
+ */
14
+ export declare function markdownEscapeTableCell(text: string): string;
15
+ export declare function markdownEscapeInlineCode(content: string): string;
16
+ export declare function ArrayOfArraysToMarkdownTable(providedTableContent: MarkdownArrayRowType): string;
17
+ export default ArrayOfArraysToMarkdownTable;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Fills the width of the cell.
3
+ * @param text
4
+ * @param width
5
+ * @param paddingStart
6
+ */
7
+ export function fillWidth(text, width, paddingStart) {
8
+ return (' '.repeat(paddingStart) + text + ' '.repeat(Math.max(1, width - text.length - paddingStart)));
9
+ }
10
+ /**
11
+ * Escape a text so it can be used in a markdown table
12
+ * @param text
13
+ */
14
+ export function markdownEscapeTableCell(text) {
15
+ return text.replaceAll('\n', '<br />').replaceAll('|', '\\|');
16
+ }
17
+ export function markdownEscapeInlineCode(content) {
18
+ // replace grave accents with <code> HTML element to resolve unicode character in markdown
19
+ // let isClosingTag = false;
20
+ if (content.includes('|')) {
21
+ return content.replaceAll(/([\s*_]|^)`([^`]+)`([\s*_]|$)/g, '$1<code>$2</code>$3');
22
+ }
23
+ return content;
24
+ // ?.forEach((match) => {
25
+ // if (!isClosingTag) {
26
+ // content = content.replace(match, '<code>');
27
+ // } else {
28
+ // content = content.replace(match, '</code>');
29
+ // }
30
+ // isClosingTag = !isClosingTag;
31
+ // });
32
+ // return content
33
+ }
34
+ export function ArrayOfArraysToMarkdownTable(providedTableContent) {
35
+ const tableContent = [];
36
+ const outputStrings = [];
37
+ // Clone the arrays so we don't modify the original
38
+ for (const rowA of providedTableContent) {
39
+ tableContent.push([...rowA]);
40
+ }
41
+ const maxRows = tableContent.length;
42
+ let maxCols = 0;
43
+ let minCols = 0;
44
+ // Find the max and min columns so we can pad the rows
45
+ // for (const [i, e] of tableContent.entries()) {
46
+ let tblIdx = 0;
47
+ for (const e of tableContent) {
48
+ if (tableContent[tblIdx] !== undefined) {
49
+ const numCols = e.length;
50
+ if (numCols > maxCols) {
51
+ maxCols = numCols;
52
+ }
53
+ if (numCols < minCols || minCols === 0) {
54
+ minCols = numCols;
55
+ }
56
+ }
57
+ tblIdx += 1;
58
+ }
59
+ if (maxCols !== minCols) {
60
+ let cntIdx = 0;
61
+ for (const e of tableContent) {
62
+ if (tableContent[cntIdx] === undefined) {
63
+ tableContent[cntIdx] = Array.from({ length: maxCols }).fill('');
64
+ }
65
+ else if (e.length < maxCols) {
66
+ tableContent[cntIdx] = [
67
+ ...e,
68
+ ...Array.from({ length: maxCols - e.length }).fill('undefined'),
69
+ ];
70
+ }
71
+ cntIdx += 1;
72
+ }
73
+ }
74
+ const markdownArrayRowsLength = maxRows + 1;
75
+ const markdownArrayEntriesLength = maxCols * 2 + 1;
76
+ const markdownArrays = Array.from({ length: markdownArrayRowsLength }).fill(Array.from({ length: markdownArrayEntriesLength }).fill('|'));
77
+ let i = 0;
78
+ for (const row of markdownArrays) {
79
+ let col = 0;
80
+ const idx = i > 1 ? i - 1 : 0;
81
+ const dataRow = tableContent[idx];
82
+ for (let j = 0; j < row.length; j++) {
83
+ let content = markdownEscapeTableCell(dataRow[col] ?? '');
84
+ content = markdownEscapeInlineCode(content);
85
+ if (j % 2 === 1) {
86
+ if (i === 0) {
87
+ markdownArrays[i][j] = ` **${content.trim()}** `;
88
+ }
89
+ else if (i === 1) {
90
+ markdownArrays[i][j] = '---';
91
+ }
92
+ else {
93
+ markdownArrays[i][j] = ` ${content.trim()} `;
94
+ }
95
+ col += 1;
96
+ }
97
+ }
98
+ outputStrings.push(`${markdownArrays[i].join('')}\n`);
99
+ i += 1;
100
+ }
101
+ return outputStrings.join('');
102
+ }
103
+ export default ArrayOfArraysToMarkdownTable;
104
+ //# sourceMappingURL=index.js.map