slackapi / slackapi/slack-github-action
Filetype is not available immediately after uploading a file
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 1.3k
- Forks
- 200
- Avg merge
- 2h 59m
- Merged PRs (30d)
- 6
Description
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?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the upload sequence and the Slack files.completeUploadExternal response shown in the issue, then compare it with the chat.postMessage error and the image block payload. No repository file or test is named, so first determine whether this behavior belongs in the action or in the Slack API integration; done means the cause and a reproducible correction path are documented.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, shell
- Domain
- api, ci-cd
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100