def test_shippable_instance(self): shippable_env = { "SHIPPABLE": "true", "COMMIT_MESSAGE": "foobar [qux]", "COMMIT": "98e984eacf4e3dfea431c8850c8c181a08e8cf3d", "BRANCH": "testing/5.6.5", "IS_GIT_TAG": "false", "IS_PULL_REQUEST": "false" } with tools.environment_append(shippable_env): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), shippable_env["BRANCH"]) self.assertEquals(manager.get_commit_msg(), shippable_env["COMMIT_MESSAGE"]) self.assertEquals(manager.get_commit_id(), shippable_env["COMMIT"]) self.assertEquals(manager.is_pull_request(), False) self.assertEquals(manager.is_tag(), False) shippable_env = { "SHIPPABLE": "true", "COMMIT_MESSAGE": "new tag", "COMMIT": "98e984eacf4e3dfea431c8850c8c181a08e8cf3d", "BRANCH": "release/5.6.5", "IS_GIT_TAG": "true", "IS_PULL_REQUEST": "true" } with tools.environment_append(shippable_env): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), shippable_env["BRANCH"]) self.assertEquals(manager.get_commit_msg(), shippable_env["COMMIT_MESSAGE"]) self.assertEquals(manager.get_commit_id(), shippable_env["COMMIT"]) self.assertEquals(manager.is_pull_request(), True) self.assertEquals(manager.is_tag(), True)
def test_github_actions_instance(self): gha_env = {"GITHUB_ACTIONS": "true", "GITHUB_SHA": "98e984eacf4e3dfea431c8850c8c181a08e8cf3d", "GITHUB_REF": "testing/5.6.5", "GITHUB_BASE_REF": "testing/5.6.5", "GITHUB_EVENT_NAME": "push"} with tools.environment_append(gha_env): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), gha_env["GITHUB_REF"]) self.assertEquals(manager.get_commit_id(), gha_env["GITHUB_SHA"]) self.assertEquals(manager.is_pull_request(), False) gha_env = {"GITHUB_ACTIONS": "true", "GITHUB_SHA": "98e984eacf4e3dfea431c8850c8c181a08e8cf3d", "GITHUB_REF": "quick_fix", "GITHUB_BASE_REF": "testing/5.6.5", "GITHUB_EVENT_NAME": "pull_request"} with tools.environment_append(gha_env): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), gha_env["GITHUB_BASE_REF"]) self.assertEquals(manager.get_commit_id(), gha_env["GITHUB_SHA"]) self.assertEquals(manager.is_pull_request(), True) gha_env = {"GITHUB_ACTIONS": "true", "GITHUB_REF": "refs/heads/testing", "GITHUB_EVENT_NAME": "push"} with tools.environment_append(gha_env): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "testing")
def test_bamboo_env_vars(self): self.assertIsNone(os.getenv('CONAN_LOGIN_USERNAME')) with tools.environment_append({ "bamboo_buildNumber": "xx", "bamboo_planRepository_branch": "mybranch", "bamboo_CONAN_LOGIN_USERNAME": "******", "bamboo_CONAN_USER_VAR": "bamboo", "CONAN_USER_VAR": "foobar" }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") # checks that manager is Bamboo self.assertEquals(os.getenv('CONAN_LOGIN_USERNAME'), "bamboo") self.assertEquals(os.getenv('CONAN_USER_VAR'), "foobar") with tools.environment_append({ "bamboo_buildNumber": "xx", "bamboo_planRepository_branch": "mybranch", "BAMBOO_CONAN_LOGIN_USERNAME": "******", "BAMBOO_CONAN_USER_VAR": "bamboo", "CONAN_USER_VAR": "foobar" }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") # checks that manager is Bamboo self.assertEquals(os.getenv('CONAN_LOGIN_USERNAME'), "bamboo") self.assertEquals(os.getenv('CONAN_USER_VAR'), "foobar")
def test_circleci_instance(self): with tools.environment_append({ "CIRCLECI": "1", "CIRCLE_BRANCH": "mybranch", "CIRCLE_SHA1": "506c89117650bb12252db26d35b8c2385411f175", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg()) self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175") self.assertEquals(manager.is_pull_request(), False) with tools.environment_append({ "CIRCLECI": "1", "CIRCLE_BRANCH": "pull/35", "CIRCLE_SHA1": "506c89117650bb12252db26d35b8c2385411f175", "CIRCLE_PULL_REQUEST": "https://github.com/org/repo/pull/35" }): manager = CIManager(self.printer) self.assertIsNone(manager.get_branch()) self.assertIsNotNone(manager.get_commit_msg()) self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175") self.assertEquals(manager.is_pull_request(), True)
def test_appveyor_instance(self): with tools.environment_append({"APPVEYOR": "1", "APPVEYOR_REPO_COMMIT_MESSAGE": "msg", "APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED": "more", "APPVEYOR_REPO_BRANCH": "mybranch", "APPVEYOR_REPO_COMMIT": "506c89117650bb12252db26d35b8c2385411f175", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertEquals(manager.get_commit_msg(), "msg more") self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175") # Appveyor PULL REQUEST with tools.environment_append({"APPVEYOR": "1", "APPVEYOR_PULL_REQUEST_NUMBER": "1", "APPVEYOR_REPO_COMMIT_MESSAGE": "msg", "APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED": "more", "APPVEYOR_REPO_BRANCH": "mybranch", "APPVEYOR_REPO_COMMIT": "506c89117650bb12252db26d35b8c2385411f175", }): manager = CIManager(self.printer) self.assertIsNone(manager.get_branch()) self.assertEquals(manager.get_commit_msg(), "msg more") self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175") # Appveyor no extended with tools.environment_append({"APPVEYOR": "1", "APPVEYOR_PULL_REQUEST_NUMBER": "1", "APPVEYOR_REPO_COMMIT_MESSAGE": "msg", "APPVEYOR_REPO_BRANCH": "mybranch", }): manager = CIManager(self.printer) self.assertIsNone(manager.get_branch()) self.assertEquals(manager.get_commit_msg(), "msg")
def login(self): if self.variables.docker_upload_only_when_stable: printer = Printer() ci_manager = CIManager(printer) if ci_manager.get_branch() != "master" or ci_manager.is_pull_request(): logging.info("Skipped login, is not stable branch") return if not self.variables.docker_upload: logging.info("Skipped login, DOCKER_UPLOAD is not activated") return if not self.variables.docker_password: logging.warning("Skipped login, DOCKER_PASSWORD is missing!") return if not self.variables.docker_login_username: logging.warning("Skipped login, DOCKER_LOGIN_USERNAME is missing!") return logging.info("Login to Docker hub account") result = subprocess.call([ "docker", "login", "-u", self.variables.docker_login_username, "-p", self.variables.docker_password ]) if result != os.EX_OK: raise RuntimeError("Could not login username %s " "to Docker hub." % self.variables.docker_login_username) logging.info("Logged in Docker hub account with success") self.loggedin = True
def test_azure_instance(self): with tools.environment_append({ "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI": "https://dev.azure.com/", "BUILD_SOURCEVERSIONMESSAGE": "msg", "BUILD_SOURCEVERSION": "506c89117650bb12252db26d35b8c2385411f175", "BUILD_SOURCEBRANCH": "mybranch", "BUILD_REASON": "manual", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertEquals(manager.get_commit_msg(), "msg") self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175") self.assertEquals(manager.is_pull_request(), False) with tools.environment_append({ "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI": "https://dev.azure.com/", "BUILD_SOURCEVERSIONMESSAGE": "msg", "BUILD_SOURCEVERSION": "506c89117650bb12252db26d35b8c2385411f175", "BUILD_SOURCEBRANCH": "refs/heads/testing/version", "BUILD_REASON": "PullRequest", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "testing/version") self.assertEquals(manager.get_commit_msg(), "msg") self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175") self.assertEquals(manager.is_pull_request(), True) with tools.environment_append({ "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI": "https://dev.azure.com/", "BUILD_SOURCEVERSIONMESSAGE": "msg", "BUILD_SOURCEVERSION": "506c89117650bb12252db26d35b8c2385411f175", "BUILD_SOURCEBRANCH": "refs/heads/stable/version", "BUILD_REASON": "IndividualCI", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "stable/version") self.assertEquals(manager.get_commit_msg(), "msg") self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175") self.assertEquals(manager.is_pull_request(), False)
def test_jenkins_instance(self): with tools.environment_append({"JENKINS_URL": "1", "BRANCH_NAME": "mybranch", "GIT_COMMIT": "506c89117650bb12252db26d35b8c2385411f175", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg()) self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175")
def test_travis_instance(self): with tools.environment_append({"TRAVIS": "1", "TRAVIS_COMMIT_MESSAGE": "msg", "TRAVIS_BRANCH": "mybranch", "TRAVIS_COMMIT": "506c89117650bb12252db26d35b8c2385411f175" }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertEquals(manager.get_commit_msg(), "msg") self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175")
def test_gitlab_instance(self): with tools.environment_append({"GITLAB_CI": "1", "CI_BUILD_REF_NAME": "mybranch", "CI_COMMIT_TITLE": "foo bar", "CI_COMMIT_SHA": "506c89117650bb12252db26d35b8c2385411f175", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg()) self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175")
def test_bamboo_instance(self): with tools.environment_append({ "bamboo_buildNumber": "xx", "bamboo_planRepository_branch": "mybranch" }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg())
def test_circleci_instance(self): with tools.environment_append({ "CIRCLECI": "1", "CIRCLE_BRANCH": "mybranch", "CIRCLE_SHA1": "506c89117650bb12252db26d35b8c2385411f175", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg()) self.assertEquals(manager.get_commit_id(), "506c89117650bb12252db26d35b8c2385411f175")
def get_version_from_ci(): printer = Printer(hidesensitive) ci_man = CIManager(printer) if ci_man.is_tag(): try: version = subprocess.check_output( "git describe --exact-match --tags", shell=True).decode().strip() except Exception: return None else: version = ci_man.get_branch() version = re.sub("^refs/tags/", "", version) version = re.sub("^.*/v?", "", version) version = re.sub("^v?", "", version) return version
def upload(self): """ Set taocpp repository to be used on upload. The upload server address could be customized by env var CONAN_UPLOAD. If not defined, the method will check the branch name. Only master or CONAN_STABLE_BRANCH_PATTERN will be accepted. The master branch will be pushed to testing channel, because it does not match the stable pattern. Otherwise it will upload to stable channel. """ if os.getenv("CONAN_UPLOAD", None) is not None: return os.getenv("CONAN_UPLOAD") printer = Printer(None) ci_manager = CIManager(printer) branch = ci_manager.get_branch() patterns = [r"v?\d+\.\d+\.\d+-.*", self.stable_branch_pattern] for pattern in patterns: prog = re.compile(pattern) if branch and prog.match(branch): return "https://api.bintray.com/conan/taocpp/public-conan"
def _is_not_VS15MDonWindows(build): return not (build.settings["compiler.version"] == '15' and build.settings["compiler.runtime"] == 'MD') if __name__ == "__main__": docker_entry_script = None if platform.system() == "Linux": docker_entry_script = "./.ci/entry.sh" printer = Printer(None) ci_manager = CIManager(printer) branch = ci_manager.get_branch() version = build_shared.get_version() recipe = build_shared.get_recipe_path(None) name = build_shared.get_name_from_recipe(recipe=recipe) username, version, kwargs = build_shared.get_conan_vars(recipe=recipe) print("Branch detected: ", branch) print("Version detected: ", build_shared.get_version()) new_reference = None # for builds other than release create a separate channel if not branch.startswith("release"): new_reference = "{}/{}@{}/{}".format(name, version, username, branch.replace('/', '_')) print("Generated reference: ", new_reference) builder = build_template_default.get_builder(
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import requests from cpt import ci_manager from cpt.ci_manager import CIManager from cpt.printer import Printer if __name__ == "__main__": manager = CIManager(Printer()) response = None if ci_manager.is_travis(): if manager.get_branch() == "stable/3.6.1" and \ not manager.is_pull_request() and \ os.getenv("CONAN_CLANG_VERSIONS") == "6.0" and \ os.getenv("CONAN_ARCHS") == "x86_64" and \ os.getenv("TRAVIS_TOKEN"): json_data = {"request": {"branch": "release/3.6.1"}} headers = { "Authorization": "token %s" % os.getenv("TRAVIS_TOKEN"), "Travis-API-Version": "3" } response = requests.post( url= "https://api.travis-ci.com/repo/bincrafters%2Fprotobuf-integration-test/requests", json=json_data, headers=headers) else: print("Travis CI job does not match:") print("BRANCH: %s" % manager.get_branch()) print("PULL REQUEST: %s" % manager.is_pull_request())
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import requests from cpt import ci_manager from cpt.ci_manager import CIManager from cpt.printer import Printer if __name__ == "__main__": manager = CIManager(Printer()) response = None if manager.get_branch() == "stable/3.6.1" and not manager.is_pull_request( ) and os.getenv("ARCH") == "x86": if ci_manager.is_travis(): json_data = {"request": {"branch": "release/3.6.1"}} headers = { "Authorization": "token %s" % os.getenv("TRAVIS_TOKEN"), "Travis-API-Version": "3" } response = requests.post( url= "https://api.travis-ci.com/repo/bincrafters%2Fprotobuf-integration-test/requests", json=json_data, headers=headers) elif ci_manager.is_appveyor(): json_data = { "accountName": "BinCrafters", "projectSlug": "protobuf-integration-test", "branch": "release/3.6.1" } headers = {
def _branch(self): """ Get branch name from CI manager """ printer = Printer(None) ci_manager = CIManager(printer) return ci_manager.get_branch()
def test_instance_correct(self): # Bamboo with tools.environment_append({ "bamboo_buildNumber": "xx", "bamboo_planRepository_branch": "mybranch" }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg()) # Travis with tools.environment_append({ "TRAVIS": "1", "TRAVIS_COMMIT_MESSAGE": "msg", "TRAVIS_BRANCH": "mybranch", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertEquals(manager.get_commit_msg(), "msg") # Appveyor with tools.environment_append({ "APPVEYOR": "1", "APPVEYOR_REPO_COMMIT_MESSAGE": "msg", "APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED": "more", "APPVEYOR_REPO_BRANCH": "mybranch", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertEquals(manager.get_commit_msg(), "msg more") # Appveyor PULL REQUEST with tools.environment_append({ "APPVEYOR": "1", "APPVEYOR_PULL_REQUEST_NUMBER": "1", "APPVEYOR_REPO_COMMIT_MESSAGE": "msg", "APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED": "more", "APPVEYOR_REPO_BRANCH": "mybranch", }): manager = CIManager(self.printer) self.assertIsNone(manager.get_branch()) self.assertEquals(manager.get_commit_msg(), "msg more") # Appveyor no extended with tools.environment_append({ "APPVEYOR": "1", "APPVEYOR_PULL_REQUEST_NUMBER": "1", "APPVEYOR_REPO_COMMIT_MESSAGE": "msg", "APPVEYOR_REPO_BRANCH": "mybranch", }): manager = CIManager(self.printer) self.assertIsNone(manager.get_branch()) self.assertEquals(manager.get_commit_msg(), "msg") # Circle CI with tools.environment_append({ "CIRCLECI": "1", "CIRCLE_BRANCH": "mybranch", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg()) # Gitlab with tools.environment_append({ "GITLAB_CI": "1", "CI_BUILD_REF_NAME": "mybranch", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg()) # Jenkins with tools.environment_append({ "JENKINS_URL": "1", "BRANCH_NAME": "mybranch", }): manager = CIManager(self.printer) self.assertEquals(manager.get_branch(), "mybranch") self.assertIsNotNone(manager.get_commit_msg())
def branch(self): """ Get branch name """ printer = Printer(None) ci_manager = CIManager(printer) return ci_manager.get_branch()