Skip to content

Commit d1f0ef6

Browse files
authored
chore(ci): switch periodic test alerts from Grafana OnCall to incident.io (#2278)
1 parent a27abc6 commit d1f0ef6

File tree

1 file changed

+32
-26
lines changed

1 file changed

+32
-26
lines changed

.github/workflows/periodic-test.yml

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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, az/09, 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

Comments
 (0)