feat(rust): port freeze create/update/delete to native Rust#1437
Conversation
Member
Author
|
This pull request is part of a Mergify stack:
|
This was referenced May 19, 2026
This was referenced May 19, 2026
Contributor
Merge ProtectionsYour pull request matches the following merge protections and will not be merged until they are valid. 🔴 ⛓️ Depends-On RequirementsWaiting for
This rule is failing.Requirement based on the presence of
🔴 👀 Review RequirementsWaiting for
This rule is failing.
🔴 🔎 ReviewsWaiting for
This rule is failing.
🟢 🤖 Continuous IntegrationWonderful, this rule succeeded.
🟢 Enforce conventional commitWonderful, this rule succeeded.Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/
🟢 📕 PR descriptionWonderful, this rule succeeded.
|
be2b24a to
f0eb260
Compare
Member
Author
Revision history
|
f0eb260 to
56f3cf1
Compare
414a70b to
8106d1c
Compare
56f3cf1 to
50fcb0d
Compare
Round-trip the three remaining freeze mutations: - `freeze create` — `POST /v1/repos/<r>/scheduled_freeze` with the Python `CreateScheduledFreezePayload` shape: `start`/`end` always present (null for open-ended emergency freezes), `matching_conditions`/`exclude_conditions` keys omitted when the user passed no `-c`/`-e` flags. When `--timezone` is left off, falls back to `iana-time-zone::get_timezone()` — same role as Python's `tzlocal.get_localzone_name()`. - `freeze update` — `PATCH /v1/repos/<r>/scheduled_freeze/<id>` with skip-if-none on every field so PATCH semantics work correctly: a flag the user didn't pass doesn't touch the stored field. - `freeze delete` — `POST /v1/repos/<r>/scheduled_freeze/<id>/delete` with `delete_reason` in the body only when supplied (the API requires it for active freezes; the CLI lets the server reject a missing reason rather than pre-validating). Adds `Client::patch` on the core HTTP client, a shared `mergify-freeze::common` module (wire-format struct, naive-DT parser, system-timezone detection, per-freeze human printer used by `create` and `update`), and `iana-time-zone` as a new dependency. The Python implementation of each command is left in place but no longer reachable via the binary, since clap now dispatches the whole freeze group natively. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Change-Id: I653dbf47080f439f8c3500a7a526e46d707fc639
8106d1c to
fa07747
Compare
50fcb0d to
f322a06
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Round-trip the three remaining freeze mutations:
freeze create—POST /v1/repos/<r>/scheduled_freezewiththe Python
CreateScheduledFreezePayloadshape:start/endalways present (null for open-ended emergency freezes),
matching_conditions/exclude_conditionskeys omitted whenthe user passed no
-c/-eflags. When--timezoneis leftoff, falls back to
iana-time-zone::get_timezone()— samerole as Python's
tzlocal.get_localzone_name().freeze update—PATCH /v1/repos/<r>/scheduled_freeze/<id>with skip-if-none on every field so PATCH semantics work
correctly: a flag the user didn't pass doesn't touch the
stored field.
freeze delete—POST /v1/repos/<r>/scheduled_freeze/<id>/deletewith
delete_reasonin the body only when supplied (the APIrequires it for active freezes; the CLI lets the server
reject a missing reason rather than pre-validating).
Adds
Client::patchon the core HTTP client, a sharedmergify-freeze::commonmodule (wire-format struct, naive-DTparser, system-timezone detection, per-freeze human printer
used by
createandupdate), andiana-time-zoneas a newdependency. The Python implementation of each command is left
in place but no longer reachable via the binary, since clap now
dispatches the whole freeze group natively.
Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com
Depends-On: #1436