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

Conversation

dbertram
Copy link
Member

@dbertram dbertram commented Nov 7, 2024

  • add support for optional unfurl_links argument (defaults to true, but can be used to disable link unfurling when desired)
  • use --fail-with-body so HTTP status of >= 400 triggers an error exit code
  • use long form curl args in general for better readability/comprehensibility
  • break up curl args over multiple lines to improve readability
  • log raw response before processing it
  • tweak multi-line GITHUB_OUTPUT capture to more closely match doc examples

- use --fail-with-body so HTTP status of >= 400 triggers an error exit code
- use long form curl args in general for better readability/comprehensibility
- break up curl args over multiple lines to improve readability
- log raw response before processing it
- tweak multi-line GITHUB_OUTPUT capture to more closely match doc examples
action.yml Outdated
Comment on lines 27 to 40
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 }}

--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! 🙏

Copy link
Member

@bradymholt bradymholt left a comment

Choose a reason for hiding this comment

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

Looks great. I posted a few comments but nothing to hold this up.

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

action.yml Outdated Show resolved Hide resolved
action.yml Outdated
Comment on lines 27 to 40
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

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 }}

@dbertram dbertram force-pushed the db/better-logging branch 2 times, most recently from 85f3657 to aba3159 Compare November 14, 2024 19:39
@dbertram dbertram force-pushed the db/better-logging branch 2 times, most recently from a040ca1 to c252536 Compare November 14, 2024 20:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants