merge queue: embarking main (7cbb190) and #1359 together#1433
Closed
mergify[bot] wants to merge 2 commits into
Closed
merge queue: embarking main (7cbb190) and #1359 together#1433mergify[bot] wants to merge 2 commits into
mergify[bot] wants to merge 2 commits into
Conversation
The Rust binary now serves ``mergify queue status`` natively. The Python implementation (``mergify_cli/queue/cli.py:status`` plus the batch/scope/topology helpers it depended on) is removed in the same PR — the port-and-delete rule we adopted in #1322 keeps a single live copy of every command. This change also introduces the ``mergify-tui`` crate. The colored-tree rendering primitives are written there from the start (``Theme`` + relative-time formatter + box-drawing characters) rather than inlined in ``status.rs`` and extracted later — they're general-purpose and will be needed by every command with structured human output (``queue show``, ``freeze list``, future ports). ``mergify queue status [-r REPO] [-t TOKEN] [-u URL] [-b BRANCH] [--json]``: 1. Resolves repository / token / API URL via the shared ``mergify_queue::auth`` resolver introduced in #1352. 2. Fetches ``GET /v1/repos/<repo>/merge-queue/status``, optionally with ``?branch=<branch>`` (URL-encoded via ``url::form_urlencoded::byte_serialize``). 3. With ``--json``: pretty-prints the raw response. The schema is Mergify's API contract, not this CLI's, so we deserialize into ``serde_json::Value`` and emit verbatim — unknown fields and future schema additions survive the round trip. 4. Without ``--json``: deserializes into a typed ``StatusView`` that uses ``#[serde(default)] Option<…>`` for every field the Mergify API has historically treated as optional/nullable (matches the port checklist from #1357), then renders a header, an optional pause indicator, the batch tree (grouped by scope when there is more than one), and the waiting-PR list. Status icons (``● ◑ ◌ ✓ ✗ ◎ ⏳ ↻ ⏰ ❄``), tree characters (``├── └── │ ``), and relative times (``5m ago`` / ``~1h``) match the Python implementation. The ``mergify-tui`` crate has three modules: - ``theme``: ``Theme`` struct with TTY/``NO_COLOR``-aware enable/disable. Pre-built named styles (``bold``, ``dim``, ``cyan``/``green``/``red``/``yellow``/``magenta``, ``warn``) plus a ``fg(AnsiColor)`` helper for domain-specific palettes. ``Theme::detect`` is the production constructor; ``Theme::new(enabled)`` is for tests. - ``time``: ``relative_time(iso, now, future)`` — coarse ``Ns``/``Nm``/``Nh``/``Nd`` formatter mirroring the Python CLI's ``_relative_time``. Empty string on parse failure so a malformed timestamp doesn't abort the surrounding render. - ``tree``: Unicode box-drawing constants (``BRANCH``, ``LAST_BRANCH``, ``CONTINUATION``, ``LAST_CONTINUATION``) plus ``branch_chars(is_last)`` to pick both prefixes for a row in one call. Tests: - ``mergify-tui``: 11 tests (theme on/off, relative-time units + parse failure + future prefix, tree-character pairing). - ``build_path`` covers no-branch, branch, and URL-encoding of a branch name with slashes + spaces. - ``topological_sort`` covers parents-before-children ordering and tolerance of ``parent_ids`` that reference missing batches. - ``group_by_scope`` covers the ``[]`` → ``"default"`` fallback and multi-scope batches appearing under each scope they claim. - ``status_icon`` covers known + unknown codes. - End-to-end wiremock tests: empty queue, paused queue, batches + waiting PRs, multi-scope grouping, ``?branch=…`` query threading, JSON-passthrough preserving an ``extra_field``, and tolerance of a response that omits all optional fields. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Change-Id: I8cebcd325f05173dfa41083da2ec6516a6ec3a3f
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.
🎉 This pull request has been checked successfully and will be merged soon. 🎉
Branch main (7cbb190) and #1359 are embarked together for merge.
This pull request has been created by Mergify to speculatively check the mergeability of #1359.
You don't need to do anything. Mergify will close this pull request automatically when it is complete.
Required conditions of queue rule
defaultfor merge:title ~= ^(fix|feat|docs|style|refactor|perf|test|build|ci|chore|revert|ui)(?:\(.+\))?:#approved-reviews-by>=2author = dependabot[bot]author = mergify-ci-botauthor = renovate[bot]body ~= (?ms:.{48,})#changes-requested-reviews-by = 0#review-requested = 0#review-threads-unresolved = 0check-success=ci-gateRequired conditions to stay in the queue:
base=mainlabel!=manual mergetitle ~= ^(fix|feat|docs|style|refactor|perf|test|build|ci|chore|revert|ui)(?:\(.+\))?:#approved-reviews-by>=2author = dependabot[bot]author = mergify-ci-botauthor = renovate[bot]body ~= (?ms:.{48,})#changes-requested-reviews-by = 0#review-requested = 0#review-threads-unresolved = 0check-success=ci-gate