test(ci): add live smoke test for ci git-refs#1404
Conversation
|
This pull request is part of a Mergify stack:
|
Merge ProtectionsYour pull request matches the following merge protections and will not be merged until they are valid. 🟢 🤖 Continuous IntegrationWonderful, this rule succeeded.
🟢 👀 Review RequirementsWonderful, this rule succeeded.
🟢 Enforce conventional commitWonderful, this rule succeeded.Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/
🟢 🔎 ReviewsWonderful, this rule succeeded.
🟢 📕 PR descriptionWonderful, this rule succeeded.
|
bc6091b to
dc79f69
Compare
b010249 to
b425f9d
Compare
Revision history
|
dc79f69 to
31412b2
Compare
|
@jd this pull request is now in conflict 😩 |
31412b2 to
72f013c
Compare
There was a problem hiding this comment.
Pull request overview
Adds a new live-smoke functional test to lock in the expected stdout contract for mergify ci git-refs when no CI-provider environment is present, so the same test can validate both the current Python implementation and an upcoming Rust port.
Changes:
- Add a new functional smoke test that runs
mergify ci git-refswith CI env vars scrubbed and asserts the fallback refs are printed (Base: HEAD^,Head: HEAD).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Pins the contract for ``mergify ci git-refs`` so a future Rust port can be validated against the same test that exercised the Python implementation. The next commit ports the command; this one lands first so it runs against Python at its own CI, then against Rust on rebase — same test, both ends of the port. The test runs in the existing live-tests harness but doesn't need the live token: ``ci git-refs`` is locally evaluated (no API call). The conftest fixture scrubs every CI provider env var and runs in a tmp dir, so the detector lands on its literal ``HEAD^..HEAD`` fallback path. The assertion checks for ``Base: HEAD^`` and ``Head: HEAD`` in stdout — output format that the Python and Rust implementations share verbatim. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Change-Id: Iae0e3fe5b4cc3b653529b80ae10bae6c83f3e53d
72f013c to
47cefb4
Compare
Pull request has been modified.
Merge Queue Status
This pull request spent 26 seconds in the queue, including 4 seconds running CI. Required conditions to merge
|
The Rust binary now serves ``mergify ci git-refs`` natively. The
Python implementation (``mergify_cli/ci/cli.py:git_refs``) and
its tests are removed in the same PR — port-and-delete keeps a
single live copy.
The previous commit landed a live-smoke test pinning the
``Base: HEAD^`` / ``Head: HEAD`` fallback contract. That same
test now exercises the Rust path.
The command detects the base/head git references for the
current build:
1. Buildkite env (``BUILDKITE_PULL_REQUEST`` and friends)
2. GitHub Actions event payload at ``$GITHUB_EVENT_PATH``
3. ``refs/notes/mergify/<branch>`` git notes (for merge-queue
draft PRs created by the Mergify backend)
4. The MQ PR body's YAML metadata block (fallback for tools
that can't read git notes)
5. Literal ``HEAD^..HEAD`` when none of the above match
Three output formats:
- ``text`` (default): ``Base: <ref>`` and ``Head: <ref>`` on
two lines.
- ``shell``: ``MERGIFY_GIT_REFS_{BASE,HEAD,SOURCE}=...`` lines
for ``eval``; values are properly shell-quoted.
- ``json``: a single JSON object ``{"base":..., "head":...,
"source":...}``.
The command also writes ``base=...\nhead=...`` to
``$GITHUB_OUTPUT`` when set, and calls ``buildkite-agent
meta-data set`` when ``BUILDKITE=true``.
This commit introduces two shared helper modules in the
``mergify-ci`` crate that the next port (``ci queue-info``)
will reuse:
- ``github_event``: GitHub Actions event payload deserialization
(``GITHUB_EVENT_PATH``).
- ``queue_metadata``: MQ YAML fenced-block extraction from PR
bodies and git notes.
The notes reader is injected as a trait-object callback so unit
tests can exercise the note-driven detection path without
touching a real git repository; the production path shells out
via ``real_notes_reader``.
Adds the ``serde_yaml_ng`` dep (YAML parser) to the
``mergify-ci`` crate.
12 new git-refs + 2 format round-trip tests plus 8
event/metadata tests in the shared helpers. The Python
git-refs tests in ``mergify_cli/tests/ci/test_cli.py`` are
removed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Depends-On: #1404
Pins the contract for
mergify ci git-refsso a future Rustport can be validated against the same test that exercised the
Python implementation. The next commit ports the command; this
one lands first so it runs against Python at its own CI, then
against Rust on rebase — same test, both ends of the port.
The test runs in the existing live-tests harness but doesn't
need the live token:
ci git-refsis locally evaluated (noAPI call). The conftest fixture scrubs every CI provider env
var and runs in a tmp dir, so the detector lands on its literal
HEAD^..HEADfallback path. The assertion checks forBase: HEAD^andHead: HEADin stdout — output format that thePython and Rust implementations share verbatim.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com