diff --git a/source/app/action/index.mjs b/source/app/action/index.mjs index df506866..58cc94ce 100644 --- a/source/app/action/index.mjs +++ b/source/app/action/index.mjs @@ -198,7 +198,7 @@ info.break() info.group({metadata, name:"core", inputs:config}) info("Plugin errors", die ? "(exit with error)" : "(displayed in generated image)") - const convert = ["jpeg", "png"].includes(config["config.output"]) ? config["config.output"] : null + const convert = ["jpeg", "png", "json"].includes(config["config.output"]) ? config["config.output"] : null Object.assign(q, config) //Base content diff --git a/source/app/metrics/index.mjs b/source/app/metrics/index.mjs index cf9f06ce..a4facae8 100644 --- a/source/app/metrics/index.mjs +++ b/source/app/metrics/index.mjs @@ -53,6 +53,12 @@ console.warn(util.inspect(errors, {depth:Infinity, maxStringLength:256})) } + //JSON output + if (convert === "json") { + console.debug(`metrics/compute/${login} > json output`) + return {rendered:data, mime:"application/json"} + } + //Rendering console.debug(`metrics/compute/${login} > render`) let rendered = await ejs.render(image, {...data, s:imports.s, f:imports.format, style, fonts}, {views, async:true}) diff --git a/source/app/web/instance.mjs b/source/app/web/instance.mjs index 81d61964..00bf7859 100644 --- a/source/app/web/instance.mjs +++ b/source/app/web/instance.mjs @@ -189,7 +189,7 @@ graphql, rest, plugins, conf, die:q["plugins.errors.fatal"] ?? false, verify:q.verify ?? false, - convert:["jpeg", "png"].includes(q["config.output"]) ? q["config.output"] : null, + convert:["jpeg", "png", "json"].includes(q["config.output"]) ? q["config.output"] : null, }, {Plugins, Templates}) //Cache if ((!debug)&&(cached)) diff --git a/source/plugins/core/README.md b/source/plugins/core/README.md index a3dbe48a..c4f4a8cc 100644 --- a/source/plugins/core/README.md +++ b/source/plugins/core/README.md @@ -107,7 +107,7 @@ Specify a single value to apply it to both height and with, and two values to us It is possible to configure output behaviour using `output_action` option, which can be set to: - `none`, where output will be generated in `/rendered/${filename}` without being pushed - You can then manually post-process it -- `commit` (default), where output will directly be committed and pushed to `committer_branch` +- `commit` (default), where output will directly be committed and pushed to `committer_branch` - `pull-request`, where output will be committed to a new branch with current run id waiting for to be merged in `committer_branch` - By appending either `-merge`, `-squash` or `-rebase`, pull request will be automatically merged with given method - This method is useful to combine all editions of a single run with multiples metrics steps into a single commit on targetted branch @@ -116,7 +116,7 @@ It is possible to configure output behaviour using `output_action` option, which #### ℹ️ Examples workflows ```yaml -# The following will: +# The following will: # - open a pull request with "my-metrics-0.svg" as first commit # - append "my-metrics-1.svg" as second commit # - merge pull request (as second step is set to "pull-request-merge") @@ -149,12 +149,15 @@ It is possible to mitigate this issue using `retries` and `retries_delay` option retries_delay: 300 ``` -### 💱 Convert output to PNG/JPEG +### 💱 Convert output to PNG/JPEG or JSON -It is possible to convert output from SVG to PNG or JPEG images by using `config_output` option. +It is possible to convert output from SVG to PNG or JPEG images and even to JSON by using `config_output` option. Note that `png` does not support animations while `jpeg` does not support both animations and transparency. +Using `json` output can be useful if you want to retrieve all data computed by metrics without rendering it. +It could then be processed for other usages. + #### ℹ️ Examples workflows ```yaml diff --git a/source/plugins/core/metadata.yml b/source/plugins/core/metadata.yml index f03ac67e..53d04654 100644 --- a/source/plugins/core/metadata.yml +++ b/source/plugins/core/metadata.yml @@ -150,6 +150,7 @@ inputs: - svg - png # Does not support animations - jpeg # Does not support animations and transparency + - json # Outputs a JSON file instead of an image # Number of retries in case rendering fail retries: diff --git a/source/plugins/core/tests.yml b/source/plugins/core/tests.yml index 5162ccd6..53c47c7a 100644 --- a/source/plugins/core/tests.yml +++ b/source/plugins/core/tests.yml @@ -10,6 +10,12 @@ token: MOCKED_TOKEN config_output: png +- name: Image output (json) + uses: lowlighter/metrics@latest + with: + token: MOCKED_TOKEN + config_output: json + - name: Use twemoji uses: lowlighter/metrics@latest with: