Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions mergify_cli/ci/upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def capture_log(logger: logging.Logger) -> typing.Generator[io.StringIO, None, N
stream_handler.close()


def _upload(
def upload_spans(
api_url: str,
token: str,
repository: str,
Expand Down Expand Up @@ -93,8 +93,12 @@ async def upload( # noqa: PLR0913, PLR0917
)

if spans:
_upload(api_url, token, repository, spans)
connect_traces(spans)
console.log("[green]:tada: File(s) uploaded[/]")
try:
upload_spans(api_url, token, repository, spans)
except UploadError as e:
console.log(f"Error uploading spans: {e}", style="red")
else:
connect_traces(spans)
console.log("[green]:tada: File(s) uploaded[/]")
else:
console.log("[orange]No tests were detected in the JUnit file(s)[/]")
40 changes: 37 additions & 3 deletions mergify_cli/tests/ci/test_upload.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import pathlib
import re

from opentelemetry.sdk.trace import ReadableSpan
import opentelemetry.trace.span
import pytest
import responses

Expand Down Expand Up @@ -71,17 +73,49 @@ async def test_junit_upload(


@responses.activate(assert_all_requests_are_fired=True)
async def test_junit_upload_http_error() -> None:
def test_junit_upload_http_error() -> None:
responses.post(
"https://api.mergify.com/v1/repos/user/repo/ci/traces",
status=422,
json={"detail": "Not enabled on this repository"},
)

with pytest.raises(upload.UploadError):
await upload.upload(
upload.upload_spans(
"https://api.mergify.com",
"token",
"user/repo",
(str(REPORT_XML),),
[
ReadableSpan(
name="hello",
context=opentelemetry.trace.span.SpanContext(
trace_id=1234,
span_id=324,
is_remote=False,
),
),
],
)


@responses.activate(assert_all_requests_are_fired=True)
async def test_junit_upload_http_error_console(
capsys: pytest.CaptureFixture[str],
) -> None:
responses.post(
"https://api.mergify.com/v1/repos/user/repo/ci/traces",
status=422,
json={"detail": "Not enabled on this repository"},
)

await upload.upload(
"https://api.mergify.com",
"token",
"user/repo",
(str(REPORT_XML),),
)
captured = capsys.readouterr()
assert (
'Error uploading spans: Failed to export batch code: 422, reason: {"detail": "Not\nenabled on this repository"}'
in captured.out
)