@@ -103,56 +103,62 @@ jobs:
103103 E2B_ACCESS_TOKEN : ${{ env.E2B_ACCESS_TOKEN }}
104104 E2B_DOMAIN : ${{ matrix.e2b-domain }}
105105
106- - name : Send Grafana OnCall webhook
106+ - name : Send incident.io alert
107107 if : always()
108+ continue-on-error : true
108109 env :
109110 JOB_STATUS : ${{ job.status }}
110111 DOMAIN : ${{ matrix.e2b-domain }}
111112 RUN_LINK : ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
112- WEBHOOK_URL : ${{ secrets.GRAFANA_ALERT_WEBHOOK }}
113+ WEBHOOK_URL : ${{ secrets.INCIDENT_IO_ALERT_SOURCE_URL }}
114+ ALERT_TOKEN : ${{ secrets.INCIDENT_IO_ALERT_TOKEN }}
113115 TEST_NAME : ${{ matrix.test-command.name }}
114116 run : |
115- sudo apt-get update -qq && sudo apt-get install -y -qq jq # jq for JSON assembly
117+ sudo apt-get update -qq && sudo apt-get install -y -qq jq
116118
117- # Map GH status → Grafana state
118- STATE=$([ "$JOB_STATUS" = "success" ] && echo ok || echo alerting)
119+ # Map GH status to incident.io status
119120 STATUS=$([ "$JOB_STATUS" = "success" ] && echo resolved || echo firing)
120121
121- # slug-ify the test name (lowercase, a– z/0– 9, hyphens)
122+ # slug-ify the test name (lowercase, a- z/0- 9, hyphens)
122123 TEST_SLUG=$(echo "$TEST_NAME" \
123124 | tr '[:upper:]' '[:lower:]' \
124125 | sed -E 's/[^a-z0-9]+/-/g; s/^-+|-+$//g')
125126
126- # Unique per (domain + test) – same UID for state so OnCall auto-resolves
127- ALERT_UID ="periodic-tests-${DOMAIN//./-}-${TEST_SLUG}"
127+ # Unique per (domain + test) – same key so incident.io auto-resolves
128+ DEDUP_KEY ="periodic-tests-${DOMAIN//./-}-${TEST_SLUG}"
128129
129130 TITLE="Periodic tests | ${DOMAIN} | ${TEST_NAME}"
130- MESSAGE ="${TEST_NAME} on ${DOMAIN} finished. Link : ${RUN_LINK}"
131+ DESCRIPTION ="${TEST_NAME} on ${DOMAIN} finished with status : ${JOB_STATUS}. [View run](${ RUN_LINK}) "
131132
132- # Attach a branch-status badge.
133+ # Attach a branch-status badge
133134 BADGE_COLOR=$([ "$JOB_STATUS" = "success" ] && echo brightgreen || echo CB2431)
134- BADGE_LABEL_ESCAPED=$(echo "$ALERT_UID " | sed 's/-/--/g')
135+ BADGE_LABEL_ESCAPED=$(echo "$DEDUP_KEY " | sed 's/-/--/g')
135136 IMAGE_URL="https://img.shields.io/badge/${BADGE_LABEL_ESCAPED}-${JOB_STATUS}-${BADGE_COLOR}"
136137
137138 jq -n \
138- --arg alert_uid "$ALERT_UID " \
139+ --arg deduplication_key "$DEDUP_KEY " \
139140 --arg title "$TITLE" \
140- --arg state "$STATE" \
141141 --arg status "$STATUS" \
142- --arg link_to_upstream_details "$RUN_LINK" \
143- --arg message "$MESSAGE" \
144- --arg image_url "$IMAGE_URL" \
142+ --arg source_url "$RUN_LINK" \
143+ --arg description "$DESCRIPTION" \
145144 --arg domain "$DOMAIN" \
146145 --arg dev "${{ inputs.dev }}" \
147- '{alert_uid: $alert_uid,
146+ --arg image_url "$IMAGE_URL" \
147+ '{
148+ deduplication_key: $deduplication_key,
148149 title: $title,
149- state: $state,
150- link_to_upstream_details: $link_to_upstream_details,
151- message: $message,
152- severity: "warning",
153150 status: $status,
154- domain: $domain,
155- dev: ($dev == "true"),
156- annotations: {Project: $domain},
157- image_url: $image_url}' \
158- | curl -s -X POST -H 'Content-Type: application/json' -d @- "$WEBHOOK_URL"
151+ source_url: $source_url,
152+ description: $description,
153+ metadata: {
154+ severity: "warning",
155+ domain: $domain,
156+ dev: ($dev == "true"),
157+ image_url: $image_url,
158+ project: $domain
159+ }
160+ }' \
161+ | curl -s --fail-with-body -X POST \
162+ -H 'Content-Type: application/json' \
163+ -H "Authorization: Bearer $ALERT_TOKEN" \
164+ -d @- "$WEBHOOK_URL"
0 commit comments