-
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
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 }}
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.
The bigger issue here was that I needed to define how the ts
output gets its value. The Invalid format
aspect did need to be fixed, but didn't actually correct the problem I was debugging: the ts
output not being available in later steps for actions using this shared action.
--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 }}
c252536
to
a432e4c
Compare
7458cdb
to
7d6219c
Compare
- test sending a Slack message with all optional inputs using their default values - test sending a Slack message with all optional inputs provided (reply message + link unfurling disabled)
7d6219c
to
bd7f445
Compare
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.
The bigger issue here was that I needed to define how the ts
output gets its value. The Invalid format
aspect did need to be fixed, but didn't actually correct the problem I was debugging: the ts
output not being available in later steps for actions using this shared action.
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 codets
output so that it actually works!