-
Notifications
You must be signed in to change notification settings - Fork 0
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
base: main
Are you sure you want to change the base?
Conversation
- 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
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' |
There was a problem hiding this comment.
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:
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. 😟
There was a problem hiding this comment.
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 }}\"}" \ | ||
) |
There was a problem hiding this comment.
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! 🙏
There was a problem hiding this 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 |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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
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' |
There was a problem hiding this comment.
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 }}
83fa37d
to
9cbadd2
Compare
...other than single quotes
85f3657
to
aba3159
Compare
aba3159
to
a6ca8d4
Compare
a040ca1
to
c252536
Compare
...b/c the GH runner doesn't: actions/runner#1070
c252536
to
a432e4c
Compare
unfurl_links
argument (defaults totrue
, but can be used to disable link unfurling when desired)--fail-with-body
so HTTP status of >= 400 triggers an error exit codeGITHUB_OUTPUT
capture to more closely match doc examples