Open a maintenance window from your deploy pipeline
Silence alerts while a deploy runs, show the work on your status page, and close the window when the deploy is done. Your pipeline opens the window first and completes it at the end, even if the deploy fails.
On GitHub Actions, the InfraNest Maintenance Window action does all of this for you. The steps below work in any CI.
Runnable code: the code on this page, ready to clone and run, is in infranest-examples/examples/maintenance-window. CI runs it against the sandbox.
The token
Make a token with Monitoring → Write. Store it as a secret in your CI, for example INFRANEST_TOKEN.
Open the window
WINDOW_ID=$(curl -fsS -X POST https://api.infranest.io/api/organizations/42/maintenance-windows \
-H "Authorization: Bearer $INFRANEST_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: deploy-$CI_PIPELINE_ID" \
-d '{
"name": "Deploy of the web app",
"starts_at": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'",
"ends_at": "'"$(date -u -d '+30 minutes' +%Y-%m-%dT%H:%M:%SZ)"'",
"suppress_alerts": true,
"check_ids": [1201, 1202]
}' | jq -r .id)check_idsare the monitors to silence. Find them withGET /organizations/42/monitoring-checks. Useserver_idsfor servers.ends_atis a safety net: if the pipeline never completes the window, it still closes then.- The
Idempotency-Keyuses the pipeline's id, so a retried job step opens one window, not two. See Retries and dry runs.
On macOS, date -d is not available. Use date -u -v+30M +%Y-%m-%dT%H:%M:%SZ instead.
Close it when the deploy is done
curl -fsS -X PATCH "https://api.infranest.io/api/organizations/42/maintenance-windows/$WINDOW_ID/complete" \
-H "Authorization: Bearer $INFRANEST_TOKEN" -H "Accept: application/json"Run this step whether the deploy succeeded or failed (in GitHub Actions, if: always(); in GitLab CI, an after_script). Alerts resume as soon as the window is complete.