
George Karrandtest
6d68bd6487
Adding milestone release calendar sync workflow (#48593)
This is a calendar sync workflow to trigger off of milestones being
created or due dates being updated to keep the release calendar
automatically in sync
example of me running it locally
```
❯ python sync.py --oauth --client-secret ./gcal-releases-oauth.json --apply
# Fleet release calendar sync — 2026-07-01 14:50
Calendar: <redacted>@group.calendar.google.com
Repo: fleetdm/fleet
## Milestones
4.88.0 due 2026-07-01
4.89.0 due 2026-07-10
4.90.0 due 2026-07-31
4.91.0 due 2026-08-21
4.92.0 due 2026-09-11
4.93.0 due 2026-10-02
4.94.0 due 2026-10-23
4.95.0 due 2026-11-13
4.96.0 due 2026-12-04
4.97.0 due 2026-12-25
4.98.0 due 2027-01-15
4.99.0 due 2027-02-05
4.100.0 due 2027-02-26
4.101.0 due 2027-03-19
4.102.0 due 2027-04-09
## Events scanned
[develop ] 'Develop (next release - 4.87.0)' start=2026-05-18 end=2026-06-06
[develop ] 'Develop (next release - 4.89.0)' start=2026-06-08 end=2026-06-27
[rc ] 'Release candidate (next release - 4.87.0)' start=2026-06-08 end=2026-06-20
[release_day] 'Release day: minor release - 4.87.0' start=2026-06-19 end=2026-06-20
[develop ] 'Develop (next release - 4.90.0)' start=2026-06-29 end=2026-07-18
[rc ] 'Release candidate (next release - 4.89.0)' start=2026-06-29 end=2026-07-11
[release_day] 'Release day: minor release - 4.89.0' start=2026-07-10 end=2026-07-11
[develop ] 'Develop (next release - 4.91.0)' start=2026-07-20 end=2026-08-08
[rc ] 'Release candidate (next release - 4.90.0)' start=2026-07-20 end=2026-08-01
[release_day] 'Release day: minor release - 4.90.0' start=2026-07-31 end=2026-08-01
[develop ] 'Develop (next release - 4.92.0)' start=2026-08-10 end=2026-08-29
[rc ] 'Release candidate (next release - 4.91.0)' start=2026-08-10 end=2026-08-22
[release_day] 'Release day: minor release - 4.91.0' start=2026-08-21 end=2026-08-22
[develop ] 'Develop (next release - 4.93.0)' start=2026-08-31 end=2026-09-19
[rc ] 'Release candidate (next release - 4.92.0)' start=2026-08-31 end=2026-09-12
[release_day] 'Release day: minor release - 4.92.0' start=2026-09-11 end=2026-09-12
[develop ] 'Develop (next release - 4.94.0)' start=2026-09-21 end=2026-10-10
[rc ] 'Release candidate (next release - 4.93.0)' start=2026-09-21 end=2026-10-03
[release_day] 'Release day: minor release - 4.93.0' start=2026-10-02 end=2026-10-03
[develop ] 'Develop (next release - 4.95.0)' start=2026-10-12 end=2026-10-31
[rc ] 'Release candidate (next release - 4.94.0)' start=2026-10-12 end=2026-10-24
[release_day] 'Release day: minor release - 4.94.0' start=2026-10-23 end=2026-10-24
[develop ] 'Develop (next release - 4.96.0)' start=2026-11-02 end=2026-11-21
[rc ] 'Release candidate (next release - 4.95.0)' start=2026-11-02 end=2026-11-14
[release_day] 'Release day: minor release - 4.95.0' start=2026-11-13 end=2026-11-14
[develop ] 'Develop (next release - 4.97.0)' start=2026-11-23 end=2026-12-12
[rc ] 'Release candidate (next release - 4.96.0)' start=2026-11-23 end=2026-12-05
[release_day] 'Release day: minor release - 4.96.0' start=2026-12-04 end=2026-12-05
[develop ] 'Develop (next release - 4.98.0)' start=2026-12-14 end=2027-01-02
[rc ] 'Release candidate (next release - 4.97.0)' start=2026-12-14 end=2026-12-26
[release_day] 'Release day: minor release - 4.97.0' start=2026-12-25 end=2026-12-26
[rc ] 'Release candidate (next release - 4.90.0)' start=2027-01-04 end=2027-01-16
## Proposed actions
RC 4.98.0: title 'Release candidate (next release - 4.90.0)' -> 'Release candidate (next release - 4.98.0)'
+ CREATE Release day 4.88.0 on 2026-07-01
+ CREATE RC 4.88.0 2026-06-27..2026-07-02
+ CREATE Release day 4.98.0 on 2027-01-15
+ CREATE Release day 4.99.0 on 2027-02-05
+ CREATE RC 4.99.0 2027-02-01..2027-02-06
+ CREATE Develop 4.99.0 2027-01-04..2027-01-23
+ CREATE Release day 4.100.0 on 2027-02-26
+ CREATE RC 4.100.0 2027-02-22..2027-02-27
+ CREATE Develop 4.100.0 2027-01-25..2027-02-13
+ CREATE Release day 4.101.0 on 2027-03-19
+ CREATE RC 4.101.0 2027-03-15..2027-03-20
+ CREATE Develop 4.101.0 2027-02-15..2027-03-06
+ CREATE Release day 4.102.0 on 2027-04-09
+ CREATE RC 4.102.0 2027-04-05..2027-04-10
+ CREATE Develop 4.102.0 2027-03-08..2027-03-27
## Warnings / skipped
! Develop event 'Develop (next release - 4.87.0)' ending 2026-06-05 has no matching minor milestone — skipped
! RC event 'Release candidate (next release - 4.87.0)' ending 2026-06-19 has no matching milestone — skipped
! Release day event 'Release day: minor release - 4.87.0' on 2026-06-19 has no matching milestone (within 5d) — skipped
! Skipping Develop create for 4.88.0: sprint ended 2026-06-17 (past)
Total: 1 rename, 0 move, 15 create, 4 warning
Applying 16 change(s)...
ok: RC 4.98.0: title 'Release candidate (next release - 4.90.0)' -> 'Release candidate (next release - 4.98.0)'
ok: + CREATE Release day 4.88.0 on 2026-07-01
ok: + CREATE RC 4.88.0 2026-06-27..2026-07-02
ok: + CREATE Release day 4.98.0 on 2027-01-15
ok: + CREATE Release day 4.99.0 on 2027-02-05
ok: + CREATE RC 4.99.0 2027-02-01..2027-02-06
ok: + CREATE Develop 4.99.0 2027-01-04..2027-01-23
ok: + CREATE Release day 4.100.0 on 2027-02-26
ok: + CREATE RC 4.100.0 2027-02-22..2027-02-27
ok: + CREATE Develop 4.100.0 2027-01-25..2027-02-13
ok: + CREATE Release day 4.101.0 on 2027-03-19
ok: + CREATE RC 4.101.0 2027-03-15..2027-03-20
ok: + CREATE Develop 4.101.0 2027-02-15..2027-03-06
ok: + CREATE Release day 4.102.0 on 2027-04-09
ok: + CREATE RC 4.102.0 2027-04-05..2027-04-10
ok: + CREATE Develop 4.102.0 2027-03-08..2027-03-27
```
We can now get rid of the recurring unnamed events and just rely on this
once it's merged and added to milestone updates to trigger automatically
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added a release calendar synchronization tool that aligns Google
Calendar events with open release milestone dates.
* Supports dry-run previews and an optional apply mode to create,
update, and delete events.
* Categorizes and matches release-day, release-candidate, and
development entries, including duplicate and stale event cleanup.
* Added a manually triggered workflow to run the sync securely with
configurable apply behavior.
* Added support for service-account authentication and optional
interactive OAuth.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: test <test@test.com>
2026-07-22 14:57:50 -05:00
..
2026-05-13 10:20:13 -04:00
2026-07-17 15:23:16 -07:00
2026-07-15 16:07:36 -05:00
2026-07-22 14:57:50 -05:00
2026-07-09 13:29:09 -03:00
2026-04-02 11:03:14 -05:00
2026-06-08 15:35:19 +01:00