name: Send notification via Google Chat description: "Sends a notification to a Google Chat room when a pull request is opened." inputs: webhook_url: description: "The URL of the Google Chat webhook." required: true title: description: "The title of the notification." required: true subtitle: description: "The subtitle of the notification." default: 'no subtitle provided' image_slug: description: "The slug of the image to be included in the notification." default: 'git' event_author: description: "The author of the event." default: 'unknown' event_title: description: "The title of the event." required: true event_body: description: "The body of the event." default: 'no body provided' event_number: description: "The number of the event." default: 'no number provided' event_url: description: "The url of the event." default: 'none' status: description: "The status of the event." default: 'UNKNOWN' runs: using: "composite" steps: - name: Install prerequisites shell: bash run: | echo "::group::apt install" set -e apt update apt install -y curl jq echo "::endgroup::" - name: Determine status color id: status shell: bash run: | case "${{ inputs.status }}" in SUCCESS) STATUS_COLOR="006400/228b22" ADD='{"decoratedText": {"startIcon": {"materialIcon": {"name": "check_circle"}},"text": "SUCCESS"}},' ;; FAILURE) STATUS_COLOR="8b0000/dc143c" ADD='{"decoratedText": {"startIcon": {"materialIcon": {"name": "stop_circle"}},"text": "FAILURE"}},' ;; *) STATUS_COLOR="483d8b/6495ed" ADD='' ;; esac echo "color=${STATUS_COLOR}" >> "$GITHUB_OUTPUT" echo "status_add=${ADD}" >> "$GITHUB_OUTPUT" - name: Notify via Google Chat Webhook shell: bash env: WEBHOOK: ${{ inputs.webhook_url }} run: | set -e PAYLOAD=$(jq -n -r \ --arg header "${{ inputs.title }}" \ --arg subtitle "${{ inputs.subtitle }}" \ --arg imgurl "https://cdn.simpleicons.org/${{ inputs.image_slug }}/${{ steps.status.outputs.color }}" \ --arg title "${{ inputs.event_title || 'no event title given' }}" \ --arg body "${{ inputs.event_body || 'no event body given' }}" \ --arg author "${{ inputs.event_author || 'no event author given' }}" \ --arg url "${{ inputs.event_url || github.repositoryUrl || github.server_url }}" \ '{ "cardsV2": [ { "cardId": "notify-${{ github.run_id }}", "card": { "header": { "title": "\($header)", "subtitle": "\($subtitle)", "imageUrl": "\($imgurl)", "imageType": "SQUARE" }, "sections": [ { "header": "\($title)", "collapsible": false, "widgets": [ ${{ steps.status.outputs.status_add }} { "decoratedText": { "startIcon": { "knownIcon": "PERSON" }, "text": "\($author)" } }, { "textParagraph": { "text": "\($body)", "maxLines": 2 } } ] }, { "widgets": [ { "buttonList": { "buttons": [ { "text": "View Source Event", "type": "FILLED", "onClick": { "openLink": { "url": "\($url)" } } } ] } } ] } ] }} ] }') curl \ --fail-with-body \ -X POST \ -H 'Content-Type: application/json' \ "${{ inputs.webhook_url }}" \ -d "${PAYLOAD}"