name: notify teams
description: "Post a message to Teams"
inputs:
teamsWebhookURI:
description: "URI to send a message to the Teams channel"
required: true
title:
description: "Title of the Teams notification"
required: true
assignee:
description: "Assignee of the message"
required: true
additionalFields:
description: "Additional fields to add to the Teams message (JSON formatted)"
default: "[]"
additionalButtons:
description: "Additional Buttons to add to the Teams message (JSON formatted)"
default: "[]"
runs:
using: "composite"
steps:
- name: Notify Teams channel
continue-on-error: true
shell: bash
run: |
cp .github/teams_payload_template.json teams_payload.json
# Add workflow name to the notification
yq -oj -iP '.attachments[0].content.body[0].columns[1].items[0].text = "${{ inputs.title }}"' teams_payload.json
yq -oj -iP '.attachments[0].content.body[0].columns[1].items[1].text = "${{ github.workflow }}"' teams_payload.json
# Add additional fields
yq -oj -iP '.attachments[0].content.body[0].columns[1].items[2].facts += ${{ inputs.additionalFields }} ' teams_payload.json
# Remove everyone but the assignee from the JSON payload so the final message only contains the assignee
filtered_entity=$(yq -oj '.attachments[0].content.msteams.entities[] | select(.text == "${{ inputs.assignee }}")' teams_payload.json)
yq -oj -iP '.attachments[0].content.msteams.entities = [ '"$filtered_entity"' ]' teams_payload.json
yq -oj -iP '.attachments[0].content.body[0].columns[1].items[2].facts += [ { "title": "Assignee", "value": "${{ inputs.assignee }}" } ]' teams_payload.json
# Add clickable button which links to the workflow triggering this notification
yq -oj -iP '.attachments[0].content.actions[0].url = "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"' teams_payload.json
# Add additional buttons
yq -oj -iP '.attachments[0].content.actions += ${{ inputs.additionalButtons }}' teams_payload.json
cat teams_payload.json
curl \
-H "Content-Type: application/json" \
-d @teams_payload.json \
"${{ inputs.teamsWebhookURI }}"