Skip to content

Commit eb48bdd

Browse files
committed
[TE-4628] Remove CI environment variable requirement for uploads
The presence of BUILDKITE_ANALYTICS_TOKEN is sufficient to determine upload intent. Previously, both CI and token were required, which caused issues for users who carefully manage environment variables in isolated container environments. This change removes the CI check from the API.submit() method while preserving the self.ci attribute for potential future use. Now only BUILDKITE_ANALYTICS_TOKEN determines whether uploads happen. Fixes #74
1 parent 8f039ba commit eb48bdd

2 files changed

Lines changed: 35 additions & 5 deletions

File tree

  • src/buildkite_test_collector/collector
  • tests/buildkite_test_collector/collector

src/buildkite_test_collector/collector/api.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ def submit(self, payload: Payload, batch_size=100) -> Generator[Optional[Respons
2929
"""Submit a payload to the API"""
3030
response = None
3131

32-
if not self.ci:
33-
yield None
34-
3532
if not self.token:
3633
logger.warning("No %s environment variable present", self.ENV_TOKEN)
3734
yield None

tests/buildkite_test_collector/collector/test_api.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@
1212
from requests.exceptions import ReadTimeout, ConnectTimeout
1313

1414
def test_submit_local_returns_none(capfd):
15-
env = {"CI": None}
15+
"""Verify that submit returns None and logs warning when token is missing"""
16+
env = {"CI": None, "BUILDKITE_ANALYTICS_TOKEN": None}
1617
payload = Payload.init(RunEnvBuilder(env).build())
1718

1819
api = API(env)
1920
assert next(api.submit(payload)) is None
2021
captured = capfd.readouterr()
2122

22-
assert not captured.err.startswith("buildkite-test-collector - WARNING -")
23+
assert captured.err.startswith("buildkite-test-collector - WARNING -")
24+
assert "BUILDKITE_ANALYTICS_TOKEN" in captured.err
2325

2426
def test_submit_with_missing_api_key_environment_variable_returns_none(capfd):
2527
env = {"CI": "true", "BUILDKITE_ANALYTICS_TOKEN": None}
@@ -84,6 +86,37 @@ def test_submit_with_payload_timeout_captures_ReadTimeout_error(capfd, successfu
8486
assert captured.err.startswith("buildkite-test-collector - WARNING -")
8587
assert "ReadTimeout" in captured.err
8688

89+
@responses.activate
90+
def test_submit_with_token_uploads_without_ci(successful_test):
91+
"""Verify that uploads work when token is present but CI variable is not set"""
92+
responses.add(
93+
responses.POST,
94+
"https://analytics-api.buildkite.com/v1/uploads",
95+
json={'id': str(uuid4()),
96+
'run_id': str(uuid4()),
97+
'queued': 1,
98+
'skipped': 0,
99+
'errors': [],
100+
'run_url': 'https://buildkite.com/organizations/alembic/analytics/suites/test/runs/52c5d9f6-a4f2-4a2d-a1e6-993335789c92'},
101+
status=202)
102+
103+
# Note: CI is explicitly not set in environment
104+
env = {"BUILDKITE_ANALYTICS_TOKEN": str(uuid4())}
105+
payload = Payload.init(RunEnvBuilder(env).build())
106+
payload = payload.started()
107+
payload = payload.push_test_data(successful_test)
108+
109+
api = API(env)
110+
result = next(api.submit(payload))
111+
112+
assert result is not None
113+
assert result.status_code >= 200
114+
assert result.status_code < 300
115+
116+
json_response = result.json()
117+
assert len(json_response["errors"]) == 0
118+
assert json_response['queued'] == 1
119+
87120
@responses.activate
88121
def test_submit_with_payload_returns_an_api_response(successful_test):
89122
responses.add(

0 commit comments

Comments
 (0)