Skip to content

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

airflow/utils/usage_data_collection.py

+25
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
from __future__ import annotations
2727

28+
import os
2829
import platform
2930
from urllib.parse import urlencode
3031

@@ -43,6 +44,10 @@ def usage_data_collection():
4344
if _version_is_prerelease(airflow_version):
4445
return
4546

47+
# Exclude CI environments
48+
if _is_ci_environ():
49+
return
50+
4651
scarf_domain = "https://apacheairflow.gateway.scarf.sh/scheduler"
4752

4853
try:
@@ -70,6 +75,26 @@ def _version_is_prerelease(version: str) -> bool:
7075
return parse(version).is_prerelease
7176

7277

78+
def _is_ci_environ() -> bool:
79+
"""Return True if running in any known CI environment."""
80+
if os.getenv("CI") == "true":
81+
# Generic CI variable set by many CI systems (GH Actions, Travis, GitLab, CircleCI, Jenkins, Heroku)
82+
return True
83+
84+
# Other CI variables set by specific CI systems
85+
ci_env_vars = {
86+
"CIRCLECI", # CircleCI
87+
"CODEBUILD_BUILD_ID", # AWS CodeBuild
88+
"GITHUB_ACTIONS", # GitHub Actions
89+
"GITLAB_CI", # GitLab CI
90+
"JENKINS_URL", # Jenkins
91+
"TF_BUILD", # Azure Pipelines
92+
"TRAVIS", # Travis CI
93+
}
94+
95+
return any(var in os.environ for var in ci_env_vars)
96+
97+
7398
def get_platform_info() -> tuple[str, str]:
7499
return platform.system(), platform.machine()
75100

tests/utils/test_usage_data_collection.py

+2
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,14 @@ def test_scarf_analytics_disabled(mock_get, is_enabled, is_prerelease):
4343

4444
@mock.patch("airflow.settings.is_usage_data_collection_enabled", return_value=True)
4545
@mock.patch("airflow.utils.usage_data_collection._version_is_prerelease", return_value=False)
46+
@mock.patch("airflow.utils.usage_data_collection._is_ci_environ", return_value=False)
4647
@mock.patch("airflow.utils.usage_data_collection.get_database_version", return_value="12.3")
4748
@mock.patch("airflow.utils.usage_data_collection.get_database_name", return_value="postgres")
4849
@mock.patch("httpx.get")
4950
def test_scarf_analytics(
5051
mock_get,
5152
mock_is_usage_data_collection_enabled,
53+
mock_version_is_ci,
5254
mock_version_is_prerelease,
5355
get_database_version,
5456
get_database_name,

0 commit comments

Comments
 (0)