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_ 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 += "
`n`n" $text += "_Link issues :rocket: powered by [``awesome_bot``](https://github.com/dkhamsing/awesome_bot)_." $text += "`n`n
" } # 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 = '(?\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