A job summary is markdown you write to a file

A pipeline that reports its result by making somebody open the log is a pipeline whose result nobody reads.

{
  echo '### Coverage'
  echo ''
  echo '| Package | Lines | Change |'
  echo '|---|---|---|'
  ./bin/coverage-table
} >> "$GITHUB_STEP_SUMMARY"

# rendered on the run page, above the logs.
# and the useful trick: append from a failing step too,
# with the actual assertion that failed.

Writing the failure explanation into the summary rather than only to stdout is what makes a red build actionable without expanding four collapsed sections. It is a file append with no API and no action, which means it works from any language and cannot break.