diff --git a/codecov/__init__.py b/codecov/__init__.py index 377447b3..f7f5126e 100644 --- a/codecov/__init__.py +++ b/codecov/__init__.py @@ -790,6 +790,33 @@ def main(*argv, **kwargs): write(" Gitlab CI Detected") + # -------------- + # GitHub Actions + # -------------- + elif os.getenv("GITHUB_ACTION"): + # https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables + query.update( + dict( + service="github", + build=os.getenv("GITHUB_RUN_ID"), + commit=os.getenv("GITHUB_SHA"), + slug=os.getenv("GITHUB_REPOSITORY"), + build_url="http://github.com/" + + os.getenv("GITHUB_REPOSITORY") + + "/actions/runs/" + + os.getenv("GITHUB_RUN_ID"), + ) + ) + + if os.getenv("GITHUB_REF"): + query["branch"] = os.getenv("GITHUB_REF").split("/", 3)[-1] + if os.getenv("GITHUB_HEAD_REF"): + # PR refs are in the format: refs/pull/7/merge + query["pr"] = os.getenv("GITHUB_REF").split("/")[-2] + query["branch"] = os.getenv("GITHUB_HEAD_REF") + + write(" GitHub Actions CI Detected") + else: query.update( dict( diff --git a/tests/test.py b/tests/test.py index 59130d55..2188dac3 100644 --- a/tests/test.py +++ b/tests/test.py @@ -859,6 +859,7 @@ def test_ci_gitlab(self): HOME="/", CI_PROJECT_DIR=os.getcwd().strip("/"), CODECOV_TOKEN="token", + CODECOV_NAME="name", ) self.fake_report() res = self.run_cli() @@ -869,6 +870,33 @@ def test_ci_gitlab(self): self.assertEqual(res["query"]["build"], "1399372237") self.assertEqual(res["query"]["slug"], "owner/repo") self.assertEqual(res["codecov"].token, "token") + self.assertEqual(res["codecov"].name, "name") + + @unittest.skipUnless( + os.getenv("CI") == "true" and os.getenv("GITHUB_ACTION"), + "Skip GitHub Actions CI test", + ) + def test_ci_github(self): + self.set_env( + GITHUB_REF="master", + GITHUB_RUN_ID="1399372237", + GITHUB_REPOSITORY="owner/repo", + GITHUB_ACTION="6de813bb999760c81f96f3cf5dbdcd51cead172f", + GITHUB_SHA="d653b934ed59c1a785cc1cc79d08c9aaa4eba73b", + HOME="/", + CODECOV_TOKEN="token", + CODECOV_NAME="name", + ) + self.fake_report() + res = self.run_cli() + self.assertEqual(res["query"]["service"], "github") + 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") + self.assertEqual(res["codecov"].name, "name") @unittest.skip("Skip CI None") def test_ci_none(self):