Skip to content
This repository was archived by the owner on Jul 16, 2025. It is now read-only.

Commit ab55ea3

Browse files
authored
Merge pull request #67 from codecov/dana/travis-ci
implement travis ci adapter
2 parents 2bd1833 + 556bfde commit ab55ea3

File tree

4 files changed

+208
-0
lines changed

4 files changed

+208
-0
lines changed

codecov_cli/helpers/ci_adapters/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from codecov_cli.helpers.ci_adapters.jenkins import JenkinsAdapter
1515
from codecov_cli.helpers.ci_adapters.local import LocalAdapter
1616
from codecov_cli.helpers.ci_adapters.teamcity import TeamcityAdapter
17+
from codecov_cli.helpers.ci_adapters.travis_ci import TravisCIAdapter
1718
from codecov_cli.helpers.ci_adapters.woodpeckerci import WoodpeckerCIAdapter
1819

1920
logger = logging.getLogger("codecovcli")
@@ -48,6 +49,7 @@ def get_ci_providers_list():
4849
JenkinsAdapter(),
4950
CirrusCIAdapter(),
5051
TeamcityAdapter(),
52+
TravisCIAdapter(),
5153
# local adapter should always be the last one
5254
LocalAdapter(),
5355
]
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import os
2+
3+
from codecov_cli.helpers.ci_adapters.base import CIAdapterBase
4+
5+
6+
class TravisCIAdapter(CIAdapterBase):
7+
# https://docs.travis-ci.com/user/environment-variables/#default-environment-variables
8+
def detect(self) -> bool:
9+
return (
10+
bool(os.getenv("CI"))
11+
and bool(os.getenv("TRAVIS"))
12+
and not bool(os.getenv("SHIPPABLE"))
13+
)
14+
15+
def _get_commit_sha(self):
16+
return os.getenv("TRAVIS_PULL_REQUEST_SHA") or os.getenv("TRAVIS_COMMIT")
17+
18+
def _get_build_url(self):
19+
return os.getenv("TRAVIS_BUILD_WEB_URL")
20+
21+
def _get_build_code(self):
22+
return os.getenv("TRAVIS_JOB_NUMBER")
23+
24+
def _get_job_code(self):
25+
return os.getenv("TRAVIS_JOB_ID")
26+
27+
def _get_pull_request_number(self):
28+
# The pull request number if the current job is a pull request, “false” if it’s not a pull request.
29+
pr_num = os.getenv("TRAVIS_PULL_REQUEST")
30+
return pr_num if pr_num != "false" else None
31+
32+
def _get_slug(self):
33+
return os.getenv("TRAVIS_REPO_SLUG")
34+
35+
def _get_branch(self):
36+
if os.getenv("TRAVIS_BRANCH") != os.getenv("TRAVIS_TAG"):
37+
return os.getenv("TRAVIS_PULL_REQUEST_BRANCH") or os.getenv("TRAVIS_BRANCH")
38+
return None
39+
40+
def _get_service(self):
41+
return "travis"
42+
43+
def get_service_name(self):
44+
return "Travis"
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
import os
2+
from enum import Enum
3+
4+
import pytest
5+
6+
from codecov_cli.fallbacks import FallbackFieldEnum
7+
from codecov_cli.helpers.ci_adapters.travis_ci import TravisCIAdapter
8+
9+
10+
class TravisEnvEnum(str, Enum):
11+
TRAVIS_COMMIT = "TRAVIS_COMMIT"
12+
TRAVIS_BUILD_WEB_URL = "TRAVIS_BUILD_WEB_URL"
13+
TRAVIS_BUILD_NUMBER = "TRAVIS_BUILD_NUMBER"
14+
TRAVIS_JOB_NUMBER = "TRAVIS_JOB_NUMBER"
15+
TRAVIS_PULL_REQUEST = "TRAVIS_PULL_REQUEST"
16+
TRAVIS_REPO_SLUG = "TRAVIS_REPO_SLUG"
17+
TRAVIS_BRANCH = "TRAVIS_BRANCH"
18+
TRAVIS_PULL_REQUEST_SHA = "TRAVIS_PULL_REQUEST_SHA"
19+
TRAVIS_PULL_REQUEST_BRANCH = "TRAVIS_PULL_REQUEST_BRANCH"
20+
TRAVIS_JOB_ID = "TRAVIS_JOB_ID"
21+
CI = "CI"
22+
TRAVIS = "TRAVIS"
23+
SHIPPABLE = "SHIPPABLE"
24+
25+
26+
class TestTravisCIAdapter(object):
27+
@pytest.mark.parametrize(
28+
"env_dict,expected",
29+
[
30+
({}, False),
31+
(
32+
{TravisEnvEnum.CI: "true", TravisEnvEnum.TRAVIS: "true"},
33+
True,
34+
),
35+
(
36+
{
37+
TravisEnvEnum.CI: "true",
38+
TravisEnvEnum.TRAVIS: "true",
39+
TravisEnvEnum.SHIPPABLE: "true",
40+
},
41+
False,
42+
),
43+
],
44+
)
45+
def test_detect(self, env_dict, expected, mocker):
46+
mocker.patch.dict(os.environ, env_dict)
47+
actual = TravisCIAdapter().detect()
48+
assert actual == expected
49+
50+
@pytest.mark.parametrize(
51+
"env_dict,expected",
52+
[
53+
({}, None),
54+
(
55+
{
56+
TravisEnvEnum.TRAVIS_COMMIT: "commit-sha",
57+
TravisEnvEnum.TRAVIS_PULL_REQUEST_SHA: "PR-commit-sha",
58+
},
59+
"PR-commit-sha",
60+
),
61+
({TravisEnvEnum.TRAVIS_COMMIT: "commit-sha"}, "commit-sha"),
62+
],
63+
)
64+
def test_commit_sha(self, env_dict, expected, mocker):
65+
mocker.patch.dict(os.environ, env_dict)
66+
actual = TravisCIAdapter().get_fallback_value(FallbackFieldEnum.commit_sha)
67+
68+
assert actual == expected
69+
70+
@pytest.mark.parametrize(
71+
"env_dict,expected",
72+
[
73+
({}, None),
74+
],
75+
)
76+
def test_build_url(self, env_dict, expected, mocker):
77+
mocker.patch.dict(os.environ, env_dict)
78+
actual = TravisCIAdapter().get_fallback_value(FallbackFieldEnum.build_url)
79+
assert actual == expected
80+
81+
@pytest.mark.parametrize(
82+
"env_dict,expected",
83+
[
84+
({}, None),
85+
({TravisEnvEnum.TRAVIS_JOB_NUMBER: "123"}, "123"),
86+
],
87+
)
88+
def test_build_code(self, env_dict, expected, mocker):
89+
mocker.patch.dict(os.environ, env_dict)
90+
actual = TravisCIAdapter().get_fallback_value(FallbackFieldEnum.build_code)
91+
92+
assert actual == expected
93+
94+
@pytest.mark.parametrize(
95+
"env_dict,expected",
96+
[
97+
({}, None),
98+
({TravisEnvEnum.TRAVIS_JOB_ID: "123"}, "123"),
99+
],
100+
)
101+
def test_job_code(self, env_dict, expected, mocker):
102+
mocker.patch.dict(os.environ, env_dict)
103+
actual = TravisCIAdapter().get_fallback_value(FallbackFieldEnum.job_code)
104+
105+
assert actual == expected
106+
107+
@pytest.mark.parametrize(
108+
"env_dict,expected",
109+
[
110+
({}, None),
111+
({TravisEnvEnum.TRAVIS_PULL_REQUEST: "123"}, "123"),
112+
({TravisEnvEnum.TRAVIS_PULL_REQUEST: "false"}, None),
113+
],
114+
)
115+
def test_pull_request_number(self, env_dict, expected, mocker):
116+
mocker.patch.dict(os.environ, env_dict)
117+
actual = TravisCIAdapter().get_fallback_value(
118+
FallbackFieldEnum.pull_request_number
119+
)
120+
121+
assert actual == expected
122+
123+
@pytest.mark.parametrize(
124+
"env_dict,expected",
125+
[
126+
({}, None),
127+
({TravisEnvEnum.TRAVIS_REPO_SLUG: "abc"}, "abc"),
128+
],
129+
)
130+
def test_slug(self, env_dict, expected, mocker):
131+
mocker.patch.dict(os.environ, env_dict)
132+
actual = TravisCIAdapter().get_fallback_value(FallbackFieldEnum.slug)
133+
134+
assert actual == expected
135+
136+
@pytest.mark.parametrize(
137+
"env_dict,expected",
138+
[
139+
({}, None),
140+
(
141+
{
142+
TravisEnvEnum.TRAVIS_BRANCH: "abc",
143+
TravisEnvEnum.TRAVIS_PULL_REQUEST_BRANCH: "pr-branch",
144+
},
145+
"pr-branch",
146+
),
147+
],
148+
)
149+
def test_branch(self, env_dict, expected, mocker):
150+
mocker.patch.dict(os.environ, env_dict)
151+
actual = TravisCIAdapter().get_fallback_value(FallbackFieldEnum.branch)
152+
153+
assert actual == expected
154+
155+
def test_service(self):
156+
assert (
157+
TravisCIAdapter().get_fallback_value(FallbackFieldEnum.service) == "travis"
158+
)

tests/test_ci_adapter_selection.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
JenkinsAdapter,
1616
LocalAdapter,
1717
TeamcityAdapter,
18+
TravisCIAdapter,
1819
WoodpeckerCIAdapter,
1920
get_ci_adapter,
2021
)
@@ -54,6 +55,9 @@ def test_returns_teamcity(self):
5455
def test_returns_herokuci(self):
5556
assert isinstance(get_ci_adapter("heroku"), HerokuCIAdapter)
5657

58+
def test_returns_travis(self):
59+
assert isinstance(get_ci_adapter("travis"), TravisCIAdapter)
60+
5761
def test_returns_droneci(self):
5862
assert isinstance(get_ci_adapter("droneci"), DroneCIAdapter)
5963

0 commit comments

Comments
 (0)