forked from Jimdo/should-i-notify-action
-
Notifications
You must be signed in to change notification settings - Fork 1
/
action.yml
70 lines (70 loc) · 3.05 KB
/
action.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
name: 'Should I notify slack?'
description: 'Decide if a notification to slack is necessary taking into account the previous build result.'
branding:
icon: 'bell'
color: 'green'
inputs:
needs_context:
description: 'json representation of the `needs` object in your context (`toJson(needs)`)'
required: true
branch:
description: 'The branch to get the status from'
required: true
default: 'main'
github_token:
description: 'A github token (secrets.GITHUB_TOKEN will suffice)'
required: true
notify_on_changed_status:
description: 'Set to a non-empty string to return yes if and only if the status changed'
required: false
default: ''
outputs:
should_send_message:
description: "`yes|no` depending on if the message should be sent"
value: ${{ steps.determine-notification.outputs.should_send_message }}
last_status:
description: "status of the previously completed workflow (or null)"
value: ${{ steps.determine-notification.outputs.last_status }}
current_status:
description: "status of the current workflow"
value: ${{ steps.determine-notification.outputs.current_status }}
runs:
using: "composite"
steps:
- name: Determine if we need to notify
id: determine-notification
shell: bash
run: |
workflow_id=$(curl --header 'authorization: Bearer ${{ inputs.github_token }}' \
--header 'content-type: application/json' \
https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }} | jq -r .workflow_id)
echo "workflow id: $workflow_id"
last_status=$(curl --silent --header 'authorization: Bearer ${{ inputs.github_token }}' \
--header 'content-type: application/json' \
"https://api.github.com/repos/${{ github.repository }}/actions/workflows/$workflow_id/runs?per_page=10&status=completed&branch=${{ inputs.branch }}" | \
jq -r '[.workflow_runs[] | select(.conclusion != "skipped")][0].conclusion')
echo "status of the previous build: $last_status"
echo "last_status=$last_status" >> $GITHUB_OUTPUT
needs_context="${{ inputs.needs_context }}"
if [[ $(echo $needs_context | grep "result: failure") ]]; then
current_status=failure
else
current_status=success
fi
echo "status of the current build: $current_status"
echo "current_status=$current_status" >> $GITHUB_OUTPUT
if [[ "${{ inputs.notify_on_changed_status }}" ]]; then
if [[ $current_status == $last_status ]]; then
echo "should_send_message=no" >> $GITHUB_OUTPUT
else
echo "should_send_message=yes" >> $GITHUB_OUTPUT
fi
else
if [[ $current_status == failure ]]; then
echo "should_send_message=yes" >> $GITHUB_OUTPUT
elif [[ $last_status == failure ]]; then
echo "should_send_message=yes" >> $GITHUB_OUTPUT
else
echo "should_send_message=no" >> $GITHUB_OUTPUT
fi
fi