|
|
|
name: 'AwesomeBot Markdown Summary Report'
|
|
|
|
description: 'Composes the summary report using JSON results of any AwesomeBot execution'
|
|
|
|
|
|
|
|
inputs:
|
|
|
|
ab-root:
|
|
|
|
description: 'Path where AwesomeBot result files are written.'
|
|
|
|
required: true
|
|
|
|
files:
|
|
|
|
description: 'A delimited string containing the filenames to process.'
|
|
|
|
required: true
|
|
|
|
separator:
|
|
|
|
description: 'Token used to delimit each filename. Default: " ".'
|
|
|
|
required: false
|
|
|
|
default: ' '
|
|
|
|
append-heading:
|
|
|
|
description: 'When should append report heading.'
|
|
|
|
required: false
|
|
|
|
default: "false"
|
|
|
|
write:
|
|
|
|
description: 'When should append the report to GITHUB_STEP_SUMMARY file descriptor.'
|
|
|
|
required: false
|
|
|
|
default: "true"
|
|
|
|
|
|
|
|
outputs:
|
|
|
|
text:
|
|
|
|
description: Generated Markdown text.
|
|
|
|
value: ${{ steps.generate.outputs.text }}
|
|
|
|
|
|
|
|
runs:
|
|
|
|
using: "composite"
|
|
|
|
|
|
|
|
steps:
|
|
|
|
|
|
|
|
- name: Generate markdown
|
|
|
|
id: generate
|
|
|
|
# Using PowerShell
|
|
|
|
shell: pwsh
|
|
|
|
# sec: sanatize inputs using environment variables
|
|
|
|
env:
|
|
|
|
GITHUB_ACTION_PATH: ${{ github.action_path }}
|
|
|
|
GITHUB_WORKSPACE: ${{ github.workspace }}
|
|
|
|
# INPUT_<VARIABLE_NAME> is not available in Composite run steps
|
|
|
|
# https://github.community/t/input-variable-name-is-not-available-in-composite-run-steps/127611
|
|
|
|
INPUT_AB_ROOT: ${{ inputs.ab-root }}
|
|
|
|
INPUT_FILES: ${{ inputs.files }}
|
|
|
|
INPUT_SEPARATOR: ${{ inputs.separator }}
|
|
|
|
INPUT_APPEND_HEADING: ${{ inputs.append-heading }}
|
|
|
|
run: |
|
|
|
|
$text = ""
|
|
|
|
|
|
|
|
# Handle optional heading
|
|
|
|
if ("true" -eq $env:INPUT_APPEND_HEADING) {
|
|
|
|
$text += "### Report of Checked URLs!"
|
|
|
|
$text += "`n`n"
|
|
|
|
$text += "<div align=`"right`" markdown=`"1`">`n`n"
|
|
|
|
$text += "_Link issues :rocket: powered by [``awesome_bot``](https://github.com/dkhamsing/awesome_bot)_."
|
|
|
|
$text += "`n`n</div>"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Loop ForEach files
|
|
|
|
$env:INPUT_FILES -split $env:INPUT_SEPARATOR | ForEach {
|
|
|
|
$file = $_
|
|
|
|
if ($file -match "\s+" ) {
|
|
|
|
continue # is empty string
|
|
|
|
}
|
|
|
|
$abr_file = $env:INPUT_AB_ROOT + "/ab-results-" + ($file -replace "[/\\]","-") + "-markdown-table.json"
|
|
|
|
|
|
|
|
try {
|
|
|
|
$json = Get-Content $abr_file | ConvertFrom-Json
|
|
|
|
} catch {
|
|
|
|
$message = $_
|
|
|
|
echo "::error ::$message" # Notify as GitHub Actions annotation
|
|
|
|
continue # Don't crash!!
|
|
|
|
}
|
|
|
|
|
|
|
|
$text += "`n`n"
|
|
|
|
if ("true" -eq $json.error) {
|
|
|
|
# Highlighting issues counter
|
|
|
|
$SearchExp = '(?<Num>\d+)'
|
|
|
|
$ReplaceExp = '**${Num}**'
|
|
|
|
$text += "`:page_facing_up: File: ``" + $file + "`` (:warning: " + ($json.title -replace $SearchExp,$ReplaceExp) + ")"
|
|
|
|
# removing where ab attribution lives (moved to report heading)
|
|
|
|
$text += $json.message -replace "####.*?\n","`n"
|
|
|
|
} else {
|
|
|
|
$text += ":page_facing_up: File: ``" + $file + "`` (:ok: **No issues**)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# set multiline output (the way of prevent script injection is with random delimiters)
|
|
|
|
# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings
|
|
|
|
# https://github.com/orgs/community/discussions/26288#discussioncomment-3876281
|
|
|
|
$delimiter = (openssl rand -hex 8) | Out-String
|
|
|
|
echo "text<<$delimiter" >> $env:GITHUB_OUTPUT
|
|
|
|
echo "$text" >> $env:GITHUB_OUTPUT
|
|
|
|
echo "$delimiter" >> $env:GITHUB_OUTPUT
|
|
|
|
|
|
|
|
|
|
|
|
- name: Write output
|
|
|
|
if: ${{ fromJson(inputs.write) }}
|
|
|
|
shell: bash
|
|
|
|
env:
|
|
|
|
INPUT_TEXT: ${{ steps.generate.outputs.text }}
|
|
|
|
INPUT_WRITE: ${{ inputs.write }}
|
|
|
|
run: |
|
|
|
|
echo "$INPUT_TEXT" >> $GITHUB_STEP_SUMMARY
|