v0.31.0
GoAlert v0.31.0
Unveiling the latest GoAlert update with enhanced alert tracking, seamless system migration, and more. Experience greater control and efficiency in your alert management.
Container image: goalert/goalert:v0.31.0
New Features
Alert Noise Tracking
Users may now mark alerts as "noisy" and see the overall counts and escalations on the Alert Metrics page.
2 PRs by @Forfold
Message Logs Frequency Graph
There is now a graph to visualize sent messages:
3 PRs by @Forfold and @mastercactapus
Switchover UI
You can now migrate a live system from one DB server to another without downtime.
More information is available in the Switchover Guide.
3 PRs by @mastercactapus
- switchover: refactor and move SWO toolset to UI by @mastercactapus in #2523
- swo: add guide and in-app documentation by @mastercactapus in #3246
- swo: Polish the guide/documentation rendering by @mastercactapus in #3247
Email Integration Keys via Built-In SMTP
Alerts created by email are now supported by pointing an MX record directly to GoAlert documentation available here.
Set/Update User Password
Users and admins are now able to update passwords from the UI
2 PRs by @allending313
- auth/basic: add
createBasicAuth
andupdateBasicAuth
for managing Basic credentials via GraphQL by @allending313 in #3062 - ui/user: Allow setting/changing basic auth passwords in UI by @allending313 in #2991
Slack DM Contact Method
Users can now add Slack direct messages as a contact method on their profile when Slack is enabled.
9 PRs by @mastercactapus
- slack: add new contact method type for direct messages (experimental) by @mastercactapus in #2805
- slack: add UI for Slack DM contact method type (experimental) by @mastercactapus in #2815
- slack-dm: add compat module by @mastercactapus in #2821
- slack-dm: fix dm message updates by @mastercactapus in #2864
- slack: fix DM display and pending state by @mastercactapus in #2890
- slack: Add smoketest for Slack DM notificaitons by @mastercactapus in #3047
- fix slack dm status updates by @mastercactapus in #3060
- status updates: switch to per-contact-method behavior by @mastercactapus in #2824
- expflag: remove slack-dm flag by @mastercactapus in #3071
Alert Auto-Close
You can now set a global auto-close time for unacknowledged alerts under Maintenance on the Admin -> Config page.
1 PR by @Lakshmi2107
- admin: add alert auto-close feature by @Lakshmi2107 in #2660
Twilio Voice Customization
Configuring the Twilio voice name and language from the admin panel is now possible.
2 PRs by @AlaricWhitney
- feat: Adding more natural sounding voices to phone calls by @AlaricWhitney in #2575
- feat: breaking out voice calls into a testable function by @AlaricWhitney in #2768
Webhook Support
Webhooks can now be set as a destination for scheduled on-call notifications and directly on an escalation policy step! Additionally, the service name is now included for alerts.
8 PRs by @allending313, @andrewbenington, and @nataliekorzh
- feat: adding webhooks as a notification channel type by @nataliekorzh in #2809
- feat: add UI for chanWebhooks escalation policy step option by @nataliekorzh in #2871
- fix: webhook check on edit escalation policy step by @andrewbenington in #3040
- feat: webhook on call notification by @andrewbenington in #3036
- feat: add happy path integration test for on call notification webhook by @allending313 in #3155
- feat: add smoke test for on call notification webhooks by @allending313 in #3162
- feat: remove webhook exp flag by @allending313 in #3168
- feat: add service name/id field to webhook alerts by @allending313 in #3199
Escalate via Voice and SMS
You can now escalate an alert by voice and SMS.
1 PR by @Lakshmi2107
- Feature/escalate via ivr by @Lakshmi2107 in #2818
Update Slack Usergroup
Slack usergroups can now automatically be updated by setting an on-call notification on a schedule!
10 PRs by @allending313, @andrewbenington, @Forfold, and @mastercactapus
- slack: allow saving user group ID to schedule notification rules by @mastercactapus in #2882
- slack: add user group queries to graphql schema by @mastercactapus in #2907
- slack: update user-group membership for configured schedules by @mastercactapus in #2926
- ui: add slack user groups to on call notifications by @Forfold in #2932
- migrate: move user group migration to latest by @mastercactapus in #3012
- slack: use usergroup handle instead of name by @mastercactapus in #3037
- feat: on call notification channel separation by @andrewbenington in #3046
- feat: add integration test for slack usergroup feat by @allending313 in #3129
- feat: add happy path smoke test for slack user groups by @allending313 in #3137
- chore: remove slack usergroup exp flag by @allending313 in #3144
Generic Alert API
It is now possible to get the alert and service ID when creating an alert via a Generic API key by setting the Accept
header to application/json
1 PR by @sudhabindu-apm
- sending alert object as create alert response body by @sudhabindu-apm in #3124
Backend & API
We hardened security, expanded maintenance mode, and fixed some cleanup issues.
6 PRs by @cmarquis, @mastercactapus, and @theautoroboto
- user/cm: cleanup unverified contact methods by @cmarquis in #2764
- auth: set SameSite to strict on session cookie by @mastercactapus in #3111
- auth: Validate redir on return from auth by @mastercactapus in #3114
- auth: use samesite=lax for oauth cookies by @mastercactapus in #3158
- feat: extending maintenance allowance through API by @theautoroboto in #3160
- twilio: always use messaging SID if set by @mastercactapus in #3165
Improvements
We moved the add buttons on wide-screen devices from a floating-action button to a named button at the top to reduce confusion for new users.
7 PRs by @Forfold
- ui: move profile add buttons by @Forfold in #2709
- ui: add desktop service create buttons by @Forfold in #2735
- ui: move create buttons for schedule assignments and notification rules by @Forfold in #2733
- ui: move create button on main list pages by @Forfold in #2715
- ui: move button for adding user to rotation by @Forfold in #3089
- ui: update button styling on profile by @Forfold in #3091
- ui: move button creating a step on an EP by @Forfold in #3090
We also made various improvements around accessibility, typography, and inputs around the application. Notably:
- disabled notification options will now be shown (as disabled) to users rather than being hidden
- Users can now enter heartbeat intervals as hours, days, or weeks.
- Service descriptions can now be up to 6KiB
- Calendar subscriptions now include the app and schedule name with shifts
- Alert log now indicate delivery delays
- improved the draggable list UX on EP and rotation pages
15 PRs by @Forfold, @cmarquis, @mastercactapus, @KatieMSB, @allending313, and @andrewbenington
- ui: some small fixes by @Forfold in #2737
- ui/profile: use title instead of aria-label for icon buttons by @mastercactapus in #2749
- ui/services: sort on call users by escalation step by @KatieMSB in #2729
- ui: disable backdrop close for temp schedules by @Forfold in #2759
- ui: use calendar override dialog for schedule and override lists by @Forfold in #2728
- add notices to services when nearing unackd alerts system limit by @Forfold in #2891
- calsub: add app and schedule name to shifts by @mastercactapus in #2915
- feat: add markdown supported hint, increased description size to 6KiB for service form by @allending313 in #2927
- feat: clarify permissions around contact methods by @allending313 in #2933
- ui: fix slack link typography in dialog by @Forfold in #2977
- feat: show disabled notification options by @andrewbenington in #3138
- heartbeats: Increase max duration and improve UI for long-durations by @mastercactapus in #3088
- fix: aligning esc policy notices by @andrewbenington in #3198
- alert details: show sent notification delivery delays in alert log by @cmarquis in #3182
- ui: update draggable list ux by @Forfold in #3207
Time Component
We've introduced a new Time
component to normalize the display and accessibility of timestamps and durations across the application.
5 PRs by @mastercactapus
- ui: add Time component by @mastercactapus in #2830
- ui/time: use Time for services and alert details by @mastercactapus in #2833
- ui/time: update rotations to use Time component by @mastercactapus in #2831
- ui/Time: increase underline offset by @mastercactapus in #2886
- ui/Time: use Time component for calendar subs and on-call form by @mastercactapus in #2896
Bug Fixes
We squashed a whole lot of bugs! Most notably those with long public URLs will no longer get errors when sending SMS messages as multi-segment messages are now supported.
20 PRs by @NitishBalajee, @rajeshggwp, @Forfold, @cmarquis, @ram191, @mastercactapus, and @praveen-kumar85
- fixed escalation policy update description by @NitishBalajee in #2717
- add escalation policy created via service to favourites by @rajeshggwp in #2725
- fix items being filtered from options list by @Forfold in #2702
- ui: Fix default time not being set correctly for new schedule assignments by @cmarquis in #2738
- ui: update failing cypress tests by @Forfold in #2758
- Fix UI bugs on removing user from rotation by @ram191 in #2761
- admin/message-log: reflect sent time in sort order by @cmarquis in #2742
- notification/slack: sort on-call users by name by @mastercactapus in #2786
- ui/profile: display proper errors in send test dialog by @cmarquis in #2734
- alert: add escalation checks by @mastercactapus in #2840
- ui: fix snackbar not showing latest alert notification by @Forfold in #2880
- auth/basic: lower bcrypt difficulty, limit 1 compare at a time by @mastercactapus in #2923
- auth/github: prevent cryptic error on no name set by @mastercactapus in #2945
- auth/basic: separate password hashing from DB insert by @mastercactapus in #2990
- Fix smtp default port by @mastercactapus in #3025
- slack: lower slack cache time by @mastercactapus in #3028
- logs: don't log context canceled errors (e.g., closed browser tab) by @mastercactapus in #3038
- ui/profile: fix test message dialog by @mastercactapus in #3072
- sms: Allow multi-segment messages by @mastercactapus in #3073
- feat: consider dedup value from request body as well by @praveen-kumar85 in #3095
Dev Changes
We made a lot of various improvements to the development tools and processes. Lots of tech-debt resolution, testing improvements, and documentation fixes!
49 PRs by @mastercactapus, @nataliekorzh, @tony-tvu, @AlaricWhitney, and @allending313
- docs: update Postgres version in getting-started by @mastercactapus in #2703
- devtools/runproc: switch to modtime for file change detection by @mastercactapus in #2711
- notification/slack: refactor cache to use generics by @mastercactapus in #2781
- dev/runproc: remove panics for early-exit by @mastercactapus in #2791
- chore: regen yarn.lock to update deps by @mastercactapus in #2814
- add API for listing supported integration key types by @mastercactapus in #3167
- prs: add labeler workflow by @mastercactapus in #2835
- readme: add note about overcommit by @mastercactapus in #2841
- migrate: add notransaction to ALTER TYPE by @mastercactapus in #2842
- dev/make: detect which shasum command to use by @mastercactapus in #2844
- ui/ISOPickers: Remove fallback code by @mastercactapus in #2863
- mocktwilio/twiml: add initial doc.go, Say verb and NullInt types by @mastercactapus in #2897
- engine/statusmgr: initial cleanup by @mastercactapus in #2892
- engine/statusmgr: cleanup old queries by @mastercactapus in #2895
- mocktwilio/twiml: add Response, Gather, and Hangup by @mastercactapus in #2906
- mocktwilio/twiml: add remaining verbs by @mastercactapus in #2912
- mocktwilio/twiml: Add Iterator for processing TwiML documents by @mastercactapus in #2918
- testing: Move some service testing to playwright by @mastercactapus in #2913
- twilio: move version to api path instead of base by @mastercactapus in #2919
- Move label / filtering service tests to Playwright by @nataliekorzh in #2922
- ctxlock: add IDLocker and tests by @mastercactapus in #2924
- http: Replace ConcurrencyLimiter with IDLocker by @mastercactapus in #2925
- ui/schedules: remove tz filter and add local time hover on ScheduleShiftList by @tony-tvu in #2416
- dev: use ipv4-only addresses for Cypress by @mastercactapus in #2942
- Converting remaining service tests from Cypress to Playwright by @nataliekorzh in #2929
- slack: add team:read scope to Slack by @mastercactapus in #2946
- dev: add models_gen.go to labeler ignore list by @mastercactapus in #2951
- dev: fix "Command not found" noise by @mastercactapus in #2944
- codeql: Create .github/workflows/codeql.yml by @mastercactapus in #2928
- feat: update dependabot for full scanning by @AlaricWhitney in #2930
- dev: Single package.json by @mastercactapus in #2934
- dev: enable vscode sdk by @mastercactapus in #2970
- certs: move default values to Go vars by @mastercactapus in #2971
- dev: playwright tweaks by @mastercactapus in #2973
- app: remove old concurrencylimiter code by @mastercactapus in #2974
- dev: add yarnrc and stable version by @mastercactapus in #2984
- docs: add docker hub link and nightly image info by @mastercactapus in #2989
- dev: switch to wait for page vs time by @mastercactapus in #3002
- ui: convert ScheduleRuleEditDialog to hooks by @mastercactapus in #3043
- feat: add table of cli flags to getting started guide by @allending313 in #3048
- dev: add mock OIDC server and test by @mastercactapus in #3112
- dev: Remove dead code by @mastercactapus in #3113
- dev: hardening some of the dev tools and a few places in app code by @mastercactapus in #3115
- Add code coverage targets for backend code by @mastercactapus in #3041
- playwright: run playwright install before test commands by @mastercactapus in #3135
- dev: wait for goalert to start before grpc tool by @mastercactapus in #3156
- dev: run clean before building in Dockerfile by @mastercactapus in #3205
- dev: set email domain to localhost in dev by @mastercactapus in #3225
- dev: use pgdump-lite for schema generation by @mastercactapus in #3241
GORM -> SQLC
We decided to end the experiment with GORM and instead adopt sqlc.
7 PRs by @mastercactapus
- calsub: switch from gorm to sqlc by @mastercactapus in #2837
- db: switch pending notifications query to use sqlc, remove gorm by @mastercactapus in #2860
- Use temporary DB for db-schema make command by @mastercactapus in #2881
- engine/statusmgr: use sqlc for statusmgr update by @mastercactapus in #2893
- auth/authlink: use sqlc for queries by @mastercactapus in #3109
- alert/alertlog: migrate insert queries to use sqlc by @mastercactapus in #3181
- alert/alertlog: move remaining problematic queries to sqlc by @mastercactapus in #3187
Linting Fixes
We added additional linting checks and fixes to our CI pipeline.
16 PRs by @tony-tvu and @AlaricWhitney
- ci: switch to golangci-lint for Go linting by @tony-tvu in #2723
- feat: Handle errors from w.Write by @AlaricWhitney in #2753
- feat: Error check on io.WriteString by @AlaricWhitney in #2756
- feat: Error check Process.Kill() by @AlaricWhitney in #2755
- feat: Add error check on tx.Rollback by @AlaricWhitney in #2752
- feat: adding error checks to tests folder by @AlaricWhitney in #2899
- feat: adding error checks to notification methods by @AlaricWhitney in #2900
- feat: adding error handlers to devtools by @AlaricWhitney in #2898
- feat: adding error checking to the swo methods by @AlaricWhitney in #2901
- feat: adding error checking on misc packages by @AlaricWhitney in #2902
- feat: add error checks to engine methods by @AlaricWhitney in #2904
- chore: adding error checks to auth & devtools methods by @AlaricWhitney in #2955
- feat: adding error checks to app methods by @AlaricWhitney in #2903
- feat: remove golangci-lint ignores by @AlaricWhitney in #2975
- feat: adding golangci-lint as github action by @AlaricWhitney in #2976
- chore: fix spelling by @AlaricWhitney in #3228
Feature Flags for Experimental Features
There is now support for experimental feature flags to allow breaking more extensive features into smaller pieces aiding in review and testing.
The list of current flags is available with goalert --list-experimental
5 PRs by @mastercactapus
- app: add experimental feature flags by @mastercactapus in #2789
- cypress: experimental feature flags cypress support by @mastercactapus in #2790
- playwright: experimental feature flags support by @mastercactapus in #2792
- playwright: fix flaky feature flag tests by @mastercactapus in #2796
- ui: feature flag hook
useExpFlag
by @mastercactapus in #2806
Dependency Updates
Various dependency updates including a switch to Yarn pnp making installs and switching branches much faster.
22 PRs by @mastercactapus, @Forfold, @AlaricWhitney, and @cmarquis
- go: update all dependencies by @mastercactapus in #2688
- deps: upgrade cypress from 9.7.0 to 11.2.0 by @Forfold in #2718
- ui: upgrade cypress to v12.5.0 by @Forfold in #2802
- chore/go: update dependencies by @mastercactapus in #2858
- chore/go: update to Go 1.20.2 by @mastercactapus in #2859
- update node version in github actions by @Forfold in #2819
- ui/deps: update wonka version to latest, fixes yarn.lock generations by @Forfold in #2843
- deps: Update MUI packages by @mastercactapus in #2870
- dev: update sqlc to 1.17.2 by @mastercactapus in #2894
- dev: Go updates apr 2023 by @mastercactapus in #2950
- Update eslint deps by @cmarquis in #2952
- dev/ui: Update prettier & stylelint by @mastercactapus in #2953
- dev/ui: update most react deps by @mastercactapus in #2954
- chore: update golang auth dependancies by @AlaricWhitney in #2949
- yarn: use version 3.5.0 with corepack and pnp by @mastercactapus in #2931
- chore: update cypress eslint plugin by @cmarquis in #2972
- go: update Go to 1.20.5 by @mastercactapus in #3074
- js: update dependencies by @mastercactapus in #3128
- go: update dependencies by @mastercactapus in #3127
- js: update linter and cypress packages by @mastercactapus in #3131
- go: update dependencies with major-version updates by @mastercactapus in #3132
- deps: update to Go 1.21.0 by @mastercactapus in #3226
TypeScript Conversions
Lots of progress made on the TypeScript conversion in #2318
16 PRs by @nataliekorzh, @KatieMSB, @NickHackman, @andrewbenington, and @leyasalazar
- ui/rotations: convert UserForm to typescript by @nataliekorzh in #2676
- ui/escalation_policies: convert PolicyForm to typescript by @nataliekorzh in #2681
- ui/rotations: convert RotationUserList to typescript by @KatieMSB in #2675
- ui/schedules: converting ScheduleOverrideForm to typescript by @nataliekorzh in #2706
- ui/UserLink: convert to typescript by @NickHackman in #2850
- ui/RotationLink: convert to typescript by @NickHackman in #2851
- ui/ScheduleLink: convert to typescript by @NickHackman in #2852
- ui/SlackChannelLink: convert to typescript by @NickHackman in #2854
- ui/ServiceLink: convert to typescript by @NickHackman in #2853
- ui/schedules: Convert ScheduleShiftList to ts by @andrewbenington in #2855
- ui/AlertDetailPage: Convert to typescript by @KatieMSB in #2936
- ui/alerts: Convert alert step content to typescript by @KatieMSB in #2939
- ui/AlertDetailLogs: Convert to typescript by @KatieMSB in #2935
- ui/styles: Convert index file to Typescript by @leyasalazar in #3179
- ui/components: Convert Login to typescript by @leyasalazar in #3183
- ui/components: Convert toolBarAction to ts by @leyasalazar in #3233
New Contributors
- @nataliekorzh made their first contribution in #2670
- @Lakshmi2107 made their first contribution in #2660
- @NitishBalajee made their first contribution in #2717
- @rajeshggwp made their first contribution in #2725
- @cmarquis made their first contribution in #2738
- @ram191 made their first contribution in #2761
- @NickHackman made their first contribution in #2850
- @allending313 made their first contribution in #2927
- @praveen-kumar85 made their first contribution in #3095
- @leyasalazar made their first contribution in #3179
- @sudhabindu-apm made their first contribution in #3124
- @nimjor made their first contribution in #3184
Full Changelog: v0.30.1...v0.31.0