You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.3 KiB

9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
  1. #!/bin/bash
  2. # Send message to a matrix room. API call looks like this:
  3. # curl -XPOST -d '{"msgtype":"m.text", "body":"hello"}' "http://matrix.org/_matrix/client/api/v1/rooms/%21CvcvRuDYDzTOzfKKgh%3Alocalhost/send/m.room.message?access_token=YOUR_ACCESS_TOKEN"
  4. set -e
  5. cd "${1}"
  6. exec 3>&1
  7. exec 1>&2
  8. # for jq
  9. PATH=/usr/local/bin:$PATH
  10. payload=$(mktemp /tmp/resource-in.XXXXXX)
  11. cat > "${payload}" <&0
  12. matrix_server_url="$(jq -r '.source.matrix_server_url' < "${payload}")"
  13. token="$(jq -r '.source.token' < "${payload}")"
  14. room_id="$(jq -r '.source.room_id' < "${payload}")"
  15. msgtype="$(jq -r '.source.msgtype // "m.notice"' < "${payload}")"
  16. data_file="$(jq -r '.source.data_file // ""' < "${payload}")"
  17. ts="$(date +%s)"
  18. matrix_endpoint="$matrix_server_url/_matrix/client/r0/rooms/$room_id/send/m.room.message/$ts?access_token=$token"
  19. text_file="$(jq -r '.params.text_file // ""' < "${payload}")"
  20. thisdata_file="$(jq -r '.params.data_file // ""' < "${payload}")"
  21. [[ -n $thisdata_file && $thisthisdata_file != $data_file ]] && data_file="${thisdata_file}"
  22. from="$(jq -r '.params.from // ""' < "${payload}")"
  23. trigger="$(jq -r '.params.trigger // ""' < "${payload}")"
  24. text="$(jq '(.params.text // "${TEXT_FILE_CONTENT}")' < "${payload}")"
  25. thismsgtype="$(jq -r '.params.msgtype // ""' < "${payload}")"
  26. [[ -n $thismsgtype && $thismsgtype != $msgtype ]] && msgtype="${thismsgtype}"
  27. always_notify="$(jq -r '.params.always_notify // "false"' < "${payload}")"
  28. debug="$(jq -r '.params.debug // "false"' < "${payload}")"
  29. silent="$(jq -r '.params.silent // "true"' < "${payload}")"
  30. TEXT_FILE_CONTENT=""
  31. [[ -n "${text_file}" && -f "${text_file}" ]] && TEXT_FILE_CONTENT="$(cat "${text_file}")"
  32. DATA_FILE_CONTENT=""
  33. [[ -n "${data_file}" && -f "${data_file}" ]] && DATA_FILE_CONTENT="$(cat "${data_file}")"
  34. if [[ "$always_notify" == "true" || -n "$TEXT_FILE_CONTENT" || -z "$text_file" || -n "$DATA_FILE_CONTENT" ]]
  35. then
  36. TEXT_FILE_CONTENT="${TEXT_FILE_CONTENT:-_(no notification provided)_}"
  37. text="$(eval printf ${text} )"
  38. [[ -z "${text}" ]] && text="_(missing notification text)_"
  39. text="$(echo -n "${text}" | jq -R -s .)"
  40. [[ "${token}" != "null" ]] && username="$(eval "printf ${token}" | jq -R -s .)"
  41. [[ "${room_id}" != "null" ]] && room_id="$(eval "printf ${room_id}" | jq -R -s .)"
  42. body="$(cat <<EOF
  43. {
  44. "msgtype": "${msgtype}",
  45. "body": ${text}
  46. }
  47. EOF
  48. )"
  49. if [ "${msgtype}" != "m.notice" ]; then
  50. # we can attach custom data...
  51. builddata="$(cat <<EOF
  52. {
  53. "build_job_name": "${BUILD_JOB_NAME}",
  54. "build_name": "${BUILD_NAME}",
  55. "build_pipeline_name": "${BUILD_PIPELINE_NAME}",
  56. "build_id": "${BUILD_ID}",
  57. "atc_external_url": "${ATC_EXTERNAL_URL}"
  58. }
  59. EOF
  60. )"
  61. body=$(echo -n $body | jq -c ".build=$builddata")
  62. if [ -n "$DATA_FILE_CONTENT" ]; then
  63. body=$(echo -n $body | jq -c ".data=$DATA_FILE_CONTENT")
  64. fi
  65. if [ -n "${trigger}" ]; then
  66. body=$(echo -n $body | jq -c ".trigger=${trigger}")
  67. fi
  68. fi
  69. compact_body="$(echo -n "${body}" | jq -c '.')"
  70. if [[ "$silent" == "true" ]]
  71. then
  72. echo "Using silent output"
  73. curl -s -X PUT --header 'Content-Type: application/json' --header 'Accept: application/json' -d "${compact_body}" "${matrix_endpoint}"
  74. else
  75. curl -v -X PUT --header 'Content-Type: application/json' --header 'Accept: application/json' -d "${compact_body}" "${matrix_endpoint}"
  76. fi
  77. fi
  78. jq -n "{version:{timestamp:\"$(date +%s)\"}}" >&3