Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add support for unfurl_links + better logging #3

Open
wants to merge 16 commits into
base: main
Choose a base branch
from
Open
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ inputs:
text:
description: "The message text to post"
required: true
unfurl_links:
description: "Whether links in the message should be unfurled"
type: boolean
default: true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this default to true in Slack API if not provided?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Their docs don't actually say what it defaults to, but my anecdotal testing seems to indicate yes

outputs:
ts:
description: "The timestamp ID of the message that was just posted"
Expand All @@ -23,11 +27,17 @@ runs:
using: 'composite'
steps:
- run: |
response=$(curl --fail-with-body --silent --show-error \
--request POST \
--header "Authorization: Bearer ${{ env.SLACK_BOT_TOKEN || inputs.token }}" \
--header "Content-Type: application/json; charset=utf-8" \
--url https://slack.com/api/chat.postMessage \
--data "{\"channel\": \"${{ inputs.channel }}\", \"thread_ts\": \"${{ inputs.thread_ts }}\", \"unfurl_links\": ${{ inputs.unfurl_links }}, \"text\": \"${{ inputs.text }}\"}" \
)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My goals with these changes are:

  • make this step fail if we get a response with HTTP status >= 400 (i.e., didn't work)
  • capture the response and log it (to make debugging easier if anything does go wrong)
  • set the ts output for this action by processing the curl response

But I'm a total bash/curl newb, so please feel free to make suggestions! 🙏

echo "Slack API response:\n$response"
{
echo "ts=<<EOF"
curl --silent --show-error -X POST -H "Authorization: Bearer ${{ env.SLACK_BOT_TOKEN || inputs.token }}" -H "Content-Type: application/json; charset=utf-8" --url https://slack.com/api/chat.postMessage \
-d "{\"channel\": \"${{ inputs.channel }}\", \"thread_ts\":\"${{ inputs.thread_ts }}\", \"text\":\"${{ inputs.text }}\"}" \
| jq --raw-output '.ts'
echo "ts<<EOF"
echo "$response" | jq --raw-output '.ts'
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something about how I was trying to output the ts output variable wasn't playing nicely with what GH was expecting:

image

I was looking more closely at their examples for how to do multi-line output and noticed I had added the equal sign in ts=<<EOF that wasn't in their example: https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#multiline-strings

...but I'm not sure how test test this assumption before merging this PR. 😟

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could create a workflow in a throw-away repo that references this branch like this:

- name: "Post Slack message"
  id: slack-post
  uses: ynab/slack-post-message-action@db/better-logging
  with:
    channel: "#my-channel"
    text: "Test 123"
- run: echo ${{ steps.slack-post.outputs.ts }}

echo "EOF"
} >> "$GITHUB_OUTPUT"
shell: bash
dbertram marked this conversation as resolved.
Show resolved Hide resolved