pontil/summary
Build job summaries for GitHub Actions.
See adding a job summary for more details.
Builder API
Summaries should be built using the builder API, which always starts with
summary.new().
Use new to start a builder, pipe through element functions, then append
or overwrite to the GITHUB_STEP_SUMMARY file:
summary.new()
|> summary.h2("Test Results")
|> summary.raw("<b>All tests passed.</b>")
|> summary.append()
Tables
Tables can be built with new_table followed by header_row, row, or
cells. Pass the result directly to the table function:
summary.new()
|> summary.table(
summary.new_table()
|> summary.header_row(["Name", "Status"])
|> summary.row(["Tests", "Passing"])
)
|> summary.append()
For cells that span multiple columns or rows, use cells with explicit
cell constructors:
summary.new_table()
|> summary.cells([
summary.th("Category"),
summary.th("Result") |> summary.colspan(2),
])
|> summary.cells([
summary.td("Unit"),
summary.td("Pass"),
summary.td("100%"),
])
Direct Construction
It is also possible to build a summary of List(SummaryElement) values and
pass it to append.
[H1("Title"), Raw("Some text")]
|> summary.to_string()
Types
An element in a job summary.
pub type SummaryElement {
Builder
Raw(text: String)
Eol
H1(text: String)
H2(text: String)
H3(text: String)
H4(text: String)
H5(text: String)
H6(text: String)
CodeBlock(code: String, lang: option.Option(String))
UnorderedList(items: List(String))
OrderedList(items: List(String))
Table(rows: List(List(TableCell)))
Details(label: String, content: String)
Image(
src: String,
alt: String,
width: option.Option(String),
height: option.Option(String),
)
Separator
Break
Quote(text: String, cite: option.Option(String))
Link(text: String, href: String)
}
Constructors
-
BuilderSentinel marking a builder-constructed list. Do not use for manual summary construction.
-
Raw(text: String)Raw text.
-
EolA newline.
-
H1(text: String)A level 1 heading.
-
H2(text: String)A level 2 heading.
-
H3(text: String)A level 3 heading.
-
H4(text: String)A level 4 heading.
-
H5(text: String)A level 5 heading.
-
H6(text: String)A level 6 heading.
-
CodeBlock(code: String, lang: option.Option(String))A code block with optional language.
-
UnorderedList(items: List(String))An unordered list.
-
OrderedList(items: List(String))An ordered list.
-
Table(rows: List(List(TableCell)))A table.
-
Details(label: String, content: String)A collapsible details element.
-
Image( src: String, alt: String, width: option.Option(String), height: option.Option(String), )An image.
-
SeparatorA thematic break.
-
BreakA line break.
-
Quote(text: String, cite: option.Option(String))A blockquote.
-
Link(text: String, href: String)A link.
A Table builder for internal use only.
pub opaque type TableBuilder
A cell in a summary table. It is recommended that cells be created with the
td and th functions and modified with the colspan or rowspan
functions.
summary.th("Name")
summary.td("Value") |> summary.colspan(2)
summary.td_span("Big", colspan: 2, rowspan: 3)
pub opaque type TableCell
Values
pub fn append(
elements: List(SummaryElement),
) -> Result(Nil, command.PontilCoreError)
Appends summary elements to the GITHUB_STEP_SUMMARY file. Works with both
builder pipelines and direct element lists.
pub fn break(
elements: List(SummaryElement),
) -> List(SummaryElement)
Adds a line break (<br>).
pub fn cells(
table builder: TableBuilder,
row row_cells: List(TableCell),
) -> TableBuilder
Adds a row of explicit cells. Use this when you need mixed header/data cells or cells with spans:
summary.new_table()
|> summary.cells([
summary.th("Category"),
summary.th("Result") |> summary.colspan(2),
])
|> summary.cells([
summary.td("Unit"),
summary.td("Pass"),
summary.td("100%"),
])
pub fn code_block(
summary elements: List(SummaryElement),
code code: String,
) -> List(SummaryElement)
Adds a code block.
pub fn code_block_with_lang(
summary elements: List(SummaryElement),
code code: String,
lang lang: String,
) -> List(SummaryElement)
Adds a code block with a language annotation.
summary.new()
|> summary.code_block_with_lang("let x = 1", "gleam")
pub fn colspan(cell cell: TableCell, span span: Int) -> TableCell
Sets the colspan on a cell.
summary.td("Wide") |> summary.colspan(3)
pub fn details(
summary elements: List(SummaryElement),
label label: String,
content content: String,
) -> List(SummaryElement)
Adds a collapsible details element.
summary.new()
|> summary.details("Click to expand", "Hidden content here")
pub fn h1(
summary elements: List(SummaryElement),
text text: String,
) -> List(SummaryElement)
Adds a level 1 heading.
pub fn h2(
summary elements: List(SummaryElement),
text text: String,
) -> List(SummaryElement)
Adds a level 2 heading.
pub fn h3(
summary elements: List(SummaryElement),
text text: String,
) -> List(SummaryElement)
Adds a level 3 heading.
pub fn h4(
summary elements: List(SummaryElement),
text text: String,
) -> List(SummaryElement)
Adds a level 4 heading.
pub fn h5(
summary elements: List(SummaryElement),
text text: String,
) -> List(SummaryElement)
Adds a level 5 heading.
pub fn h6(
summary elements: List(SummaryElement),
text text: String,
) -> List(SummaryElement)
Adds a level 6 heading.
pub fn header_row(
table builder: TableBuilder,
row headers: List(String),
) -> TableBuilder
Adds a row of header cells from strings.
summary.new_table()
|> summary.header_row(["Name", "Status", "Count"])
pub fn image(
summary elements: List(SummaryElement),
src src: String,
alt alt: String,
) -> List(SummaryElement)
Adds an image.
pub fn image_with_size(
summary elements: List(SummaryElement),
src src: String,
alt alt: String,
width width: String,
height height: String,
) -> List(SummaryElement)
Adds an image with width and height.
pub fn link(
summary elements: List(SummaryElement),
text text: String,
href href: String,
) -> List(SummaryElement)
Adds a link.
pub fn ordered_list(
summary elements: List(SummaryElement),
items items: List(String),
) -> List(SummaryElement)
Adds an ordered list.
pub fn overwrite(
elements: List(SummaryElement),
) -> Result(Nil, command.PontilCoreError)
Writes summary elements to the GITHUB_STEP_SUMMARY file, replacing
existing content.
pub fn quote(
summary elements: List(SummaryElement),
text text: String,
) -> List(SummaryElement)
Adds a blockquote.
pub fn quote_with_cite(
summary elements: List(SummaryElement),
text text: String,
cite cite: String,
) -> List(SummaryElement)
Adds a blockquote with a citation URL.
pub fn raw(
summary elements: List(SummaryElement),
body body: String,
) -> List(SummaryElement)
Adds raw text.
pub fn row(
table builder: TableBuilder,
row data: List(String),
) -> TableBuilder
Adds a row of data cells from strings.
summary.new_table()
|> summary.header_row(["Name", "Value"])
|> summary.row(["Tests", "42"])
pub fn rowspan(cell cell: TableCell, span span: Int) -> TableCell
Sets the rowspan on a cell.
summary.th("Tall") |> summary.rowspan(2)
pub fn separator(
elements: List(SummaryElement),
) -> List(SummaryElement)
Adds a thematic break (<hr>).
pub fn table(
summary elements: List(SummaryElement),
table builder: TableBuilder,
) -> List(SummaryElement)
Adds a table from a table builder.
summary.new()
|> summary.table(
summary.new_table()
|> summary.header_row(["Name", "Status"])
|> summary.row(["Tests", "Passing"])
)
pub fn td_span(
text data: String,
colspan colspan: Int,
rowspan rowspan: Int,
) -> TableCell
Creates a data cell with colspan and rowspan.
pub fn th_span(
text data: String,
colspan colspan: Int,
rowspan rowspan: Int,
) -> TableCell
Creates a header cell with colspan and rowspan.
pub fn to_string(elements: List(SummaryElement)) -> String
Renders a list of summary elements to an HTML string.
pub fn unordered_list(
summary elements: List(SummaryElement),
items items: List(String),
) -> List(SummaryElement)
Adds an unordered list.