GoAlert v0.32.0
Welcome to the unveiling of GoAlert v0.32.0! This release is a comprehensive package, featuring a range of exciting new features, critical bug fixes, and essential developer improvements to elevate your alert management experience.
Experimental Features
API Key Support
The 'API Keys' feature is currently an experimental feature. To explore this functionality, administrators must opt in by configuring GoAlert with EXPERIMENTAL=gql-api-keys
. As an experimental feature, it may change, and your feedback is appreciated. Caution is advised in production, and expect updates as we refine and enhance its capabilities.
Explore an up-and-coming new feature of GoAlert while it's still in its experimental stage! Once activated, discover the new 'API Keys' option in the admin sidebar, allowing administrators to create and tailor access using GraphQL queries or mutations for a more secure and customizable integration.
More information on implementation details and the decisions around this new feature can be found in an ADR here.
17 PRs by @mastercactapus, @1ddo, @Forfold
- add
listGQLFields
query by @mastercactapus in #3276 - add base admin API key support by @mastercactapus in #3274
- add role to gql api key info by @mastercactapus in #3312
- api key UI by @1ddo in #3324
- Implement Duplicate Functionality for API Keys by @mastercactapus in #3395
- add warning icon, update expires grammar by @Forfold in #3401
- add adr for api key arch by @mastercactapus in #3441
- allow omitting the api key's fixed query by @mastercactapus in #3464
- allow copy as JSON and fix query formatting by @mastercactapus in #3434
- Fix timestamp displays by @mastercactapus in #3415
- Switch policy from
allowedFields
toquery
by @mastercactapus in #3411 - Add integration test for GQL API keys by @mastercactapus in #3400
- Allow entering a query directly to generate Allowed Fields by @mastercactapus in #3370
- only enforce unique name on non-deleted keys by @mastercactapus in #3369
- cache policy info lookup & last usage updates by @mastercactapus in #3291
- add list and update of graphql api keys by @mastercactapus in #3292
- apikey: Fix issue where omitting the
query
field doesn't work by @mastercactapus in #3491
New Features
Monthly Rotations
Simplify your team's schedule with monthly handoffs! The new 'Monthly' option in Rotations enhances scheduling convenience, ensuring smooth handoffs once a month in GoAlert.
2 PRs by @allending313
- add monthly rotation option by @allending313 in #3243
- add monthly rotations UI by @allending313 in #3257
Service Metrics
Elevate service monitoring with new comprehensive metrics in GoAlert. Admins can now keep an eye on service health, check for setup issues, and review notification channels—all in one place for better awareness and management.
5 PRs by @KatieMSB
Full Calendar Subscription
Users can now opt into subscribe to all shifts on a schedule in GoAlert. Get a complete view of your commitments and your teammates for more comprehensive schedule management.
1 PR by @mastercactapus
- Full Schedule Support in Calendar Subscriptions by @mastercactapus in #3289
User Profile Calendar
The user profile page now renders a calendar for all on-call schedule shifts (broken down by schedule)
2 PRs by @Forfold
Misc Improvements
We've made a number of QOL improvements including a new splash screen, fixed favicon, labels are visible on services, and improved timestamp support in markdown.
6 PRs by @Forfold, @mastercactapus
- ui: splash screen from index.html by @Forfold in #3513
- ui: Markdown timestamp support by @mastercactapus in #3558
- add label chips to service details by @mastercactapus in #3530
- ui: update favicon by @Forfold in #3580
- ui/schedules: flip timezone locale for shifts list by @Forfold in #3510
- heartbeats: Add support for specifying additional details by @mastercactapus in #3559
Admin Options
There were a few new config options and tweaks added for admins, like requiring labels on services and closing stale alerts.
4 PRs by @mastercactapus
- config: add Service.RequiredLabels by @mastercactapus in #3531
- config: Add option to auto-close acked alerts by @mastercactapus in #3604
- prometheus: add service_id to created alerts and sent notification counters by @mastercactapus in #3603
- statusmgr: expire status subscriptions after 7 days by @mastercactapus in #3610
Bug Fixes
Temporary Schedules Improvements
A number of bug fixes for the Temporary Schedules features have been addressed and some new features!. Soft limits for start and end dates provide better control, default values are now set accurately, and temporary schedules seamlessly merge as intended.
Schedules are now broken down by a default shift length, and while custom shifts remain supported, this intends to make it easier to create and manage even handoffs amongst team members.
Additionally, if you need to edit a temporary schedule, you will now be prompted to confirm the changes, so you know EXACTLY what is being changed before saving!
6 PRs by @mastercactapus, @Forfold, @KatieMSB
- Add soft limits for min and max, apply to override and temp sched by @mastercactapus in #3474
- fix default value not set for temp sched dialog by @Forfold in #3380
- fix soft limits while typing by @mastercactapus in #3478
- Fix schedule not merging bug by @KatieMSB in #3473
- ui/schedules: create confirmation component for editing a temporary schedule by @Forfold in #3561
- ui/temp-sched: Add fixed shifts for temporary schedules by @KatieMSB in #3606
Misc Bug Fixes
Lots of bugs were squashed in this update to improve the overall GoAlert experience! Enhancements include improved linter and formatting, optimized search functionalities, enhanced concurrency and performance, streamlined dependency management, meticulous timestamp handling, and robust error handling.
20 PRs by @mastercactapus, @Forfold, @KatieMSB
- increase linter timeout by @mastercactapus in #3280
- preserve line breaks in markdown by @mastercactapus in #3344
- limit HistoryBySchedule to 3 concurrent calls by @mastercactapus in #3334
- use static query for override search by @mastercactapus in #3317
- resolve circular dependency in make db-schema target by @mastercactapus in #3273
- normalize whitespace before comparing timestamps in jest by @mastercactapus in #3277
- fix wrong param by @mastercactapus in #3355
- show metrics up to current time, instead of start of bucket by @Forfold in #3345
- increase variance in delayminutes by @mastercactapus in #3359
- redirect on complete by @KatieMSB in #3461
- use a sane default for the max num of graph points by @Forfold in #3479
- use iso for storage, locale for display by @mastercactapus in #3476
- fix prettier formatting in vscode by @mastercactapus in #3458
- update linter to use version of Go used by project by @mastercactapus in #3275
- preserve field/type information when parsing ISODuration by @mastercactapus in #3272
- update search to include maintenance mode by @KatieMSB in #3341
- search: fix handling of underscores and add contains match for names by @mastercactapus in #3514
- graphql: Fix 500 errors on invalid JSON by @mastercactapus in #3499
- cli: check for scheme on public-url by @mastercactapus in #3626
- cli: normalize public url by @mastercactapus in #3627
Dev Improvements
Architectural Decision Records (ADRs)
Introducing Architectural Decision Records (ADRs) in GoAlert! We now document key decisions around new and complex features, providing transparent insights into our development process. ADRs serve as a valuable resource for understanding the rationale behind design choices and enhancing collaboratoin within the GoAlert community.
Learn more about ADRs here.
Some of our current ADRs include decisions on tech migrations and the new API key architecture, and can be found here.
1 PR by @mastercactapus
- add ADR directory and template by @mastercactapus in #3358
Migrations
We've invested significant efforts in addressing technical debt by migrating to new technologies. This includes transitions to TypeScript, SQLc, URQL, React Suspense, and React Hooks.
30 PRs by @andrewbenington, @allending313, @mastercactapus, @Forfold, @KatieMSB, @tony-tvu
- integration keys sqlc by @andrewbenington in #3293
- user contactmethod sqlc by @allending313 in #3310
- use sqlc for user favorites by @mastercactapus in #3288
- convert non-search store methods to sqlc by @mastercactapus in #3414
- update admin queries and mutations by @Forfold in #3431
- transition to urql and use suspense to load user details by @Forfold in #3430
- convert UserContactMethodSelect to typescript by @KatieMSB in #3438
- convert ScheduleRuleForm to typescript by @KatieMSB in #3439
- convert FormContainer to use hooks by @KatieMSB in #3432
- ui: convert UserContactMethodEditDialog to typescript by @KatieMSB in #3472
- ui: remove unused component by @KatieMSB in #3487
- ui/urql: rotations by @Forfold in #3489
- ui/profile: convert UserContactMethodVerificationDialog to ts by @KatieMSB in #3490
- ui/profile: convert UserContactMethodCreateDialog to urql by @KatieMSB in #3488
- ui/urql: convert user lists to urql by @KatieMSB in #3495
- ui/profile: convert UserContactMethodVerificationForm to typescript by @KatieMSB in #3494
- ui/service: convert ServiceOnCallList to typescript by @KatieMSB in #3512
- fix: add missing typenames by @KatieMSB in #3532
- ui/urql: convert user dialogs to urql by @KatieMSB in #3493
- ui: update Select gql imports to use urql by @Forfold in #3582
- ui: update ServiceCreateDialog and ServiceLabelCreateDialog to use urql by @Forfold in #3583
- ui/schedules: convert ScheduleRuleList, ScheduleRuleCreateDialog, ScheduleRuleEditDialog to typescript by @tony-tvu in #3525
- ui: update SetFavoriteButton and graphql.test.js to urql by @Forfold in #3584
- ui: update temp sched dialogs to use urql, add additionalTypenames by @Forfold in #3587
- ui: update schedule oncall hooks and util to use urql by @Forfold in #3589
- ui: update WizardRouter to use urql by @Forfold in #3585
- ui: convert CalendarSubscribe dialogs to ts and to use urql instead of apollo by @Forfold in #3590
- ui/urql: update schedule queries and mutations by @Forfold in #3625
- web: convert user contact method .js dependencies to .jsx by @tony-tvu in #3652
- dev: rename components from .js to .jsx by @mastercactapus in #3657
Misc Dev Improvements
We've fine-tuned user interactions, enriched logging, and polished alert management for an even smoother GoAlert experience. Notable updates, including refined canonical zone names, the addition of an ExpFlag component for conditional rendering, and enhanced alert noise reduction.
21 PRs by @mastercactapus, @nimjor, @Forfold, @Lakshmi2107, @leyasalazar, @tony-tvu
- Use canonical zone names by @mastercactapus in #3278
- add ExpFlag component for conditional rendering by @mastercactapus in #3331
- Smtp logger by @nimjor in #3339
- switch to up-to-date phone number library by @mastercactapus in #3342
- mark many alerts as noise from alerts list by @Forfold in #3265
- dedup key for alerts by @mastercactapus in #3428
- Suspenseful loading by @mastercactapus in #3440
- Update binary tool versions by @mastercactapus in #3279
- add partial search for description by @Lakshmi2107 in #3195
- allow email= in user search by @mastercactapus in #3413
- add local db url to dev setup guide by @mastercactapus in #3266
- Add Webhook Documentation Links to UI by @leyasalazar in #3294
- add initial draft for complex features process by @mastercactapus in #3396
- dev: Split GraphQL schema into multiple files by @mastercactapus in #3533
- dev: add playwright component tests by @mastercactapus in #3560
- dev: Use Storybook for component testing by @mastercactapus in #3571
- dev: pipe storybook warnings to null by @mastercactapus in #3579
- dev: add missing deps to makefile targets by @mastercactapus in #3547
- users: add assertion for editing contact method by @tony-tvu in #3609
- dev/admin: prod build validation by @mastercactapus in #3629
- dev: add GOALERT_VERSION to cy commands by @mastercactapus in #3640
Misc Updates
7 PRs by @mastercactapus, @Forfold, @KatieMSB
- dev: Update go deps by @mastercactapus in #3281
- chore: batch js updates by @mastercactapus in #3298
- chore: update cypress and graphiql by @mastercactapus in #3299
- dev: Update Go 1.21.3 and deps by @mastercactapus in #3356
- dev: update Go to 1.21.4 and dependencies by @mastercactapus in #3453
- ui: update calendar version - fixing invalid ref with invalid scrollHeight by @Forfold in #3526
- ci: upgrade node version by @KatieMSB in #3645
Work Towards Plugin Support
We've started making significant progress towards plugin support in GoAlert. This doesn't yet have any user impact, but some new API endpoints and internal changes have been made to support this in the future.
10 PRs by @mastercactapus, @tony-tvu
- graphql: add
destinationTypes
anddestinationFieldValidate
queries by @mastercactapus in #3548 - graphql: add destinationDisplayInfo query by @mastercactapus in #3581
- ui: DestinationInputDirect component by @mastercactapus in #3588
- util: add DestinationChip and DestinationInputChip components by @tony-tvu in #3586
- ui: DestinationSearchSelect component by @mastercactapus in #3593
- selection: add DestinationField component and tests by @tony-tvu in #3592
- graphql: destinations: add user CM destination info resolver by @tony-tvu in #3660
- graphql: destinations: add
dest
as a field on OnCallNotificationRule by @mastercactapus in #3659 - destinations: update schedule notification list to use destinations by @mastercactapus in #3656
- users: use generic destinations for user CM form by @tony-tvu in #3663
New Contributors
Full Changelog: v0.31.1...v0.32.0