slack-github-action
slack-github-action copied to clipboard
Filetype is not available immediately after uploading a file
Hi All,
I am trying to send slack message with image from github action, but it is failing everytime. First let me explain, what I am trying to achieve:
- Upload an image in slack
- Extract the permalink of the uploaded image
- Then add that permalink into slack message and send
All these steps are working fine, except it fails to send the message with image. Let me share the code:
Upload image and extract permalink:
` # ๐ค Upload Doughnut Chart to Slack & Get Image URL
- name: Upload Chart to Slack
if: always()
run: |
response=$(curl -s -X POST \
-H "Authorization: Bearer ${{ secrets.SLACK_BOT_TOKEN }}" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data "filename=test_results.png&length=$(stat -c%s test_results.png)" \
https://slack.com/api/files.getUploadURLExternal)
echo "Slack Upload URL Response: $response"
upload_url=$(echo "$response" | jq -r '.upload_url')
file_id=$(echo "$response" | jq -r '.file_id')
if [ "$upload_url" == "null" ] || [ "$file_id" == "null" ]; then
echo "โ ๏ธ Failed to get upload URL from Slack."
exit 1
fi
# Step 2: Upload the file to the received URL
upload_response=$(curl -X POST \
-H "Content-Type: image/png" \
-F file=@test_results.png \
"$upload_url")
echo "Slack File Upload Response: $upload_response"
# Step 3: Complete the upload and get the file permalink
complete_response=$(curl -s -X POST \
-H "Authorization: Bearer ${{ secrets.SLACK_BOT_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"files": [{"id": "'"$file_id"'", "title": "Test Results"}]
}' \
https://slack.com/api/files.completeUploadExternal)
echo "Slack Complete Upload Response: $complete_response"
image_url=$(echo "$complete_response" | jq -r '.files[0].permalink')
if [ "$image_url" == "null" ]; then
echo "โ ๏ธ Failed to upload image to Slack."
exit 1
else
echo "โ
Image uploaded: $image_url"
echo "IMAGE_URL=$image_url" >> $GITHUB_ENV
fi`
The output it displays:
Send slack message with image:
`# ๐ข Send Cypress Results to Slack (With Image & Test Summary)
- name: Send Cypress Results to Slack
if: always()
run: |
curl -X POST \
-H "Authorization: Bearer ${{ secrets.SLACK_BOT_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"channel": "XXXXXXX",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "๐งช API Test Report",
"emoji": true
}
},
{
"type": "rich_text",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "'"${{ steps.cypress-results.outputs.failed == '0' && 'โ
All Tests Passed!' || (steps.cypress-results.outputs.failed != '0' && steps.cypress-results.outputs.passed != '0') && 'โ ๏ธ Some Tests Failed' || 'โ All Tests Failed!' }}"'",
"style": {
"bold": true,
"italic": true
}
}
]
}
]
},
{
"type": "divider"
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Total:* `${{ steps.cypress-results.outputs.total }}`\nโ
Pass: `${{ steps.cypress-results.outputs.passed }}`\nโ Fail: `${{ steps.cypress-results.outputs.failed }}`\nโญ๏ธ Skip: `${{ steps.cypress-results.outputs.skipped }}`"
},
{
"type": "mrkdwn",
"text": "โฑ๏ธ Duration: `${{ steps.cypress-results.outputs.duration }} sec`\n๐ Success Rate: `${{ steps.cypress-results.outputs.success_rate }}%`"
}
],
"accessory": {
"type": "image",
"image_url": "${{ env.IMAGE_URL }}",
"alt_text": "Test Results Doughnut Chart"
}
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": "๐ *Reports:* โข ๐ <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|GitHub Actions Run> โข ๐ <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts/${{ env.ARTIFACT_ID }}|Download HTML Report>"
}
]
}
]
}' \
https://slack.com/api/chat.postMessage`
The Output is displaying:
As per the error it is saying that filetype is missing. If you see the output after uploading the image, then you will also see filetype is missing. I do not know if that is the issue. If that is issue, why image filetype is not setting when uploaded by slack api? Any idea or solution?