Last active
April 20, 2019 06:40
-
-
Save linjer/2ee6146d3b320cbe9225 to your computer and use it in GitHub Desktop.
Atlassian Stash 3.2 Git integration with Slack through external web hooks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# $1 => Slack hook URL | |
# $2 => Channel name | |
# $3 => URL to web repo browser for base project | |
slack_url="$1" | |
channel="$2" | |
browser_url="$3" | |
# Debugging output in /tmp/stash_slack.txt | |
# pwd > /tmp/stash_slack.txt | |
text="" | |
# Each column shown in the payload. | |
comm_desc_col="{\"title\":\"Commit\",\"short\":true,\"value\":\"" | |
author_time_col="{\"title\":\"Author\",\"short\":true,\"value\":\"" | |
first=1 | |
# For every ref updated. | |
while read from_ref to_ref ref_name; do | |
echo ${from_ref} ${to_ref} ${ref_name} >> /tmp/stash_slack.txt | |
args=("log" '--format=%H %h "%an" "%s" "%ar"' "${from_ref}..${to_ref}") | |
commits=$(git "${args[@]}") | |
# echo "${commits}" >> /tmp/stash_slack.txt | |
commit_count=`echo "${commits}" | wc -l` | |
if [ ${first} -eq 1 ]; then | |
first=0 | |
text="[<${browser_url}|${STASH_REPO_NAME}>] ${STASH_USER_NAME} <$STASH_USER_EMAIL> pushed: $commit_count commit" | |
else | |
text="${text}, ${commit_count} commit" | |
fi | |
if [ $commit_count -gt 1 ]; then text="${text}s"; fi | |
text="${text} to ${ref_name#*/}" | |
# Indexes | |
# [0] Full hash | |
# [1] Abbrev hash | |
# [2] Author name | |
# [3] Commit message | |
# [4] Author relative date | |
while read -r line; do | |
eval array=($line) | |
commit_link="<${browser_url}/commits/${array[0]}|${array[1]}>" | |
comm_desc_col="${comm_desc_col}${commit_link}: ${array[3]}\n" | |
author_time_col="${author_time_col}${array[2]}, ${array[4]}\n" | |
done <<< "$commits" | |
done | |
payload="payload={\"channel\":\"${channel}\",\"text\":\"${text}\",\"attachments\":[{\"fallback\":\"Table of commits in this push.\",\"color\":\"good\",\"fields\":[" | |
# Close off all remaining blocks | |
comm_desc_col="${comm_desc_col}\"}," | |
author_time_col="${author_time_col}\"}" | |
payload="${payload}${comm_desc_col}${author_time_col}]}]}" | |
# Deliver! | |
# echo "$payload" >> /tmp/stash_slack.txt | |
curl -X POST --data-urlencode "$payload" ${slack_url} | |
# cat /tmp/stash_slack.txt |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment