diff --git a/codecov/__init__.py b/codecov/__init__.py index cd7fc9a6..85400625 100644 --- a/codecov/__init__.py +++ b/codecov/__init__.py @@ -464,19 +464,29 @@ def main(*argv, **kwargs): # --------- # Gitlab CI # --------- - elif os.getenv('CI_SERVER_NAME', '').startswith("GitLab"): + elif os.getenv('CI') == 'true' and os.getenv('GITLAB_CI') == 'true': # http://doc.gitlab.com/ci/examples/README.html#environmental-variables # https://gitlab.com/gitlab-org/gitlab-ci-runner/blob/master/lib/build.rb#L96 - query.update(dict(service='gitlab', - branch=os.getenv('CI_BUILD_REF_NAME'), - build=os.getenv('CI_BUILD_ID'), - slug=os.getenv('CI_BUILD_REPO').split('/', 3)[-1].replace('.git', ''), - commit=os.getenv('CI_BUILD_REF'))) + + # Gitlab Runner v8.9- + if int(os.getenv('CI_SERVER_VERSION', '8.9').split('.')[0]) <= 8: + query.update(dict(service='gitlab', + branch=os.getenv('CI_BUILD_REF_NAME'), + build=os.getenv('CI_BUILD_ID'), + slug=os.getenv('CI_BUILD_REPO').split('/', 3)[-1].replace('.git', ''), + commit=os.getenv('CI_BUILD_REF'))) + # Gitlab Runner v9+ + else: + query.update(dict(service='gitlab', + branch=os.getenv('CI_COMMIT_REF_NAME'), + build=os.getenv('CI_JOB_ID'), + slug=os.getenv('CI_REPOSITORY_URL').split('/', 3)[-1].replace('.git', ''), + commit=os.getenv('CI_COMMIT_SHA'))) + if os.getenv('CI_PROJECT_DIR', '').startswith('/'): root = os.getenv('CI_PROJECT_DIR') else: root = os.getenv('HOME') + '/' + os.getenv('CI_PROJECT_DIR', '') - write(' Gitlab CI Detected') else: diff --git a/tests/test.py b/tests/test.py index 88233b0f..11628248 100644 --- a/tests/test.py +++ b/tests/test.py @@ -543,8 +543,10 @@ def test_ci_magnum(self): self.assertEqual(res['query']['build'], '1399372237') self.assertEqual(res['codecov'].token, 'token') - def test_ci_gitlab(self): - self.set_env(CI_BUILD_REF_NAME='master', + def test_ci_gitlab_8(self): + self.set_env(CI='true', + GITLAB_CI='true', + CI_BUILD_REF_NAME='master', CI_BUILD_ID='1399372237', CI_BUILD_REPO='https://gitlab.com/owner/repo.git', CI_SERVER_NAME='GitLab CI', @@ -560,6 +562,26 @@ def test_ci_gitlab(self): self.assertEqual(res['query']['slug'], 'owner/repo') self.assertEqual(res['codecov'].token, 'token') + def test_ci_gitlab_9(self): + self.set_env(CI='true', + GITLAB_CI='true', + CI_SERVER_VERSION='9.0', + CI_COMMIT_REF_NAME='master', + CI_JOB_ID='1399372237', + CI_REPOSITORY_URL='https://gitlab.com/owner/repo.git', + CI_SERVER_NAME='GitLab CI', + CI_COMMIT_SHA='d653b934ed59c1a785cc1cc79d08c9aaa4eba73b', + HOME='/', + CI_PROJECT_DIR=os.getcwd().strip('/'), + CODECOV_TOKEN='token') + self.fake_report() + res = self.run_cli() + self.assertEqual(res['query']['service'], 'gitlab') + self.assertEqual(res['query']['commit'], 'd653b934ed59c1a785cc1cc79d08c9aaa4eba73b') + self.assertEqual(res['query']['build'], '1399372237') + self.assertEqual(res['query']['slug'], 'owner/repo') + self.assertEqual(res['codecov'].token, 'token') + def test_ci_none(self): self.set_env(CODECOV_TOKEN='token') self.fake_report()