Skip to content

feat: @actions/core extensions for markdown summary#1014

Merged
robherley merged 18 commits intomainfrom
robherley/md-summaries
Apr 20, 2022
Merged

feat: @actions/core extensions for markdown summary#1014
robherley merged 18 commits intomainfrom
robherley/md-summaries

Conversation

@robherley
Copy link
Copy Markdown
Contributor

@robherley robherley commented Mar 2, 2022

Closes: https://github.com/github/c2c-actions-checks/issues/280

This exposes a new class instance to @actions/core, core.markdownSummary. It's a singleton that has an internal buffer with utility methods to facilitate the creation of HTML elements in a markdown summary for a job.

The API is designed to be chainable, like the following:

await core.markdownSummary
  .addHeading('Test Results')
  .addTable([
    [{data: 'File', header: true}, {data: 'Result', header: true}],
    ['foo.js', 'Pass ✅'],
    ['bar.js', 'Fail ❌'],
    ['foo.js', 'Pass ✅']
  ])
  .addDetails('📚 View raw output', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.')
  .addQuote('With great power comes great responsibility')
  .addLink('Check out this site!', 'https://github.com')
  .addSeparator()
  .write()

Would result in:

👉 HTML 👈
<h1>Test Results</h1>
<table><tr><th>File</th><th>Result</th></tr><tr><td>foo.js</td><td>Pass ✅</td></tr><tr><td>bar.js</td><td>Fail ❌</td></tr><tr><td>foo.js</td><td>Pass ✅</td></tr></table>
<details><summary>📚 View raw output</summary>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</details>
<blockquote>With great power comes great responsibility</blockquote>
<a href="https://github.com">Check out this site!</a>
<hr>
👉 Rendered markdown 👈

Test Results

FileResult
foo.jsPass ✅
bar.jsFail ❌
foo.jsPass ✅
📚 View raw outputLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
With great power comes great responsibility
Check out this site!

Or, since a buffer is built internally it can be used like so:

const headings = ['one', 'two', 'three', 'four', 'five', 'six']
headings.forEach((text, i) => {
  core.markdownSummary.addHeading(text, i + 1)
})

await core.markdownSummary.write()

Would result in:

👉 HTML 👈
<h1>one</h1>
<h2>two</h2>
<h3>three</h3>
<h4>four</h4>
<h5>five</h5>
<h6>six</h6>
👉 Rendered markdown 👈

one

two

three

four

five
six

Any markdownSummary.add* method first adds to an internal buffer. It is not until the final .write() that it gets append to the $GITHUB_STEP_SUMMARY file or .write(true) to completely overwrite the $GITHUB_STEP_SUMMARY file.

If the users requires custom markup, the .add() method allows for raw text to be added to the buffer. Utility methods like emptyBuffer() to empty a buffer without writing and isBufferEmpty() are included as well.

Since all the actual rendering gets passed through dotcom's HTML rendering pipeline we don't need to worry about sanitizing any of the data.

@robherley robherley marked this pull request as ready for review March 3, 2022 15:45
@robherley robherley requested a review from a team as a code owner March 3, 2022 15:45
Comment thread packages/core/src/markdown-summary.ts Outdated
Copy link
Copy Markdown
Contributor

@SrRyan SrRyan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

@jtamsut jtamsut self-requested a review March 3, 2022 16:28
Comment thread packages/core/src/markdown-summary.ts
Comment thread packages/core/src/markdown-summary.ts
Comment thread packages/core/__tests__/markdown-summary.test.ts
Comment thread packages/core/src/markdown-summary.ts Outdated
Comment thread packages/core/src/markdown-summary.ts Outdated
*
* @returns {Promise<MarkdownSummary>} markdown summary instance
*/
async write(overwrite = false): Promise<MarkdownSummary> {
Copy link
Copy Markdown

@LayZeeDK LayZeeDK Mar 8, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: Is the write(overwrite: boolean) pattern used elsewhere in the toolkit? Did you consider write(options: { overwrite: boolean }) to leave room for future options?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't believe it's an existing pattern. I do like the idea of having an options object for extensibility. And I think it'll improve readability as well, ie: write(true) vs write({overwrite: true}). I'll make the changes, thanks for the suggestion!

chhe pushed a commit to chhe/act_runner that referenced this pull request May 1, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@actions/core](https://github.com/actions/toolkit/tree/main/packages/core) ([source](https://github.com/actions/toolkit/tree/HEAD/packages/core)) | [`1.10.0` → `1.11.1`](https://renovatebot.com/diffs/npm/@actions%2fcore/1.10.0/1.11.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@actions%2fcore/1.11.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@actions%2fcore/1.10.0/1.11.1?slim=true) |

---

### Release Notes

<details>
<summary>actions/toolkit (@&#8203;actions/core)</summary>

### [`v1.11.1`](https://github.com/actions/toolkit/blob/HEAD/packages/core/RELEASES.md#1111)

- Fix uses of `crypto.randomUUID` on Node 18 and earlier [#&#8203;1842](actions/toolkit#1842)

##### 1.11.0

- Add platform info utilities [#&#8203;1551](actions/toolkit#1551)
- Remove dependency on `uuid` package [#&#8203;1824](actions/toolkit#1824)

##### 1.10.1

- Fix error message reference in oidc utils [#&#8203;1511](actions/toolkit#1511)

##### 1.10.0

- `saveState` and `setOutput` now use environment files if available [#&#8203;1178](actions/toolkit#1178)
- `getMultilineInput` now correctly trims whitespace by default [#&#8203;1185](actions/toolkit#1185)

##### 1.9.1

- Randomize delimiter when calling `core.exportVariable`

##### 1.9.0

- Added `toPosixPath`, `toWin32Path` and `toPlatformPath` utilities [#&#8203;1102](actions/toolkit#1102)

##### 1.8.2

- Update to v2.0.1 of `@actions/http-client` [#&#8203;1087](actions/toolkit#1087)

##### 1.8.1

- Update to v2.0.0 of `@actions/http-client`

##### 1.8.0

- Deprecate `markdownSummary` extension export in favor of `summary`
  - [#&#8203;1072](actions/toolkit#1072)
  - [#&#8203;1073](actions/toolkit#1073)

##### 1.7.0

- [Added `markdownSummary` extension](actions/toolkit#1014)

##### 1.6.0

- [Added OIDC Client function `getIDToken`](actions/toolkit#919)
- [Added `file` parameter to `AnnotationProperties`](actions/toolkit#896)

##### 1.5.0

- [Added support for notice annotations and more annotation fields](actions/toolkit#855)

##### 1.4.0

- [Added the `getMultilineInput` function](actions/toolkit#829)

##### 1.3.0

- [Added the trimWhitespace option to getInput](actions/toolkit#802)
- [Added the getBooleanInput function](actions/toolkit#725)

##### 1.2.7

- [Prepend newline for set-output](actions/toolkit#772)

##### 1.2.6

- [Update `exportVariable` and `addPath` to use environment files](actions/toolkit#571)

##### 1.2.5

- [Correctly bundle License File with package](actions/toolkit#548)

##### 1.2.4

- [Be more lenient in accepting non-string command inputs](actions/toolkit#405)
- [Add Echo commands](actions/toolkit#411)

##### 1.2.3

- [IsDebug logging](README.md#logging)

##### 1.2.2

- [Fix escaping for runner commands](actions/toolkit#302)

##### 1.2.1

- [Remove trailing comma from commands](actions/toolkit#263)
- [Add "types" to package.json](actions/toolkit#221)

##### 1.2.0

- saveState and getState functions for wrapper tasks (on finally entry points that run post job)

##### 1.1.3

- setSecret added to register a secret with the runner to be masked from the logs
- exportSecret which was not implemented and never worked was removed after clarification from product.

##### 1.1.1

- Add support for action input variables with multiple spaces [#&#8203;127](actions/toolkit#127)
- Switched ## commands to :: commands (should have no noticeable impact) \[[#&#8203;110](https://github.com/actions/toolkit/issues/110))([#&#8203;110](https://github.com/actions/toolkit/pull/110))

##### 1.1.0

- Added helpers for `group` and `endgroup` [#&#8203;98](actions/toolkit#98)

##### 1.0.0

- Initial release

### [`v1.11.0`](https://github.com/actions/toolkit/blob/HEAD/packages/core/RELEASES.md#1110)

- Add platform info utilities [#&#8203;1551](actions/toolkit#1551)
- Remove dependency on `uuid` package [#&#8203;1824](actions/toolkit#1824)

### [`v1.10.1`](https://github.com/actions/toolkit/blob/HEAD/packages/core/RELEASES.md#1101)

- Fix error message reference in oidc utils [#&#8203;1511](actions/toolkit#1511)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTAuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE1MC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://gitea.com/gitea/runner/pulls/880
Reviewed-by: Nicolas <bircni@icloud.com>
Co-authored-by: Renovate Bot <renovate-bot@gitea.com>
Co-committed-by: Renovate Bot <renovate-bot@gitea.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants