Exemple #1
0
    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)
Exemple #2
0
    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_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_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_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")
Exemple #6
0
 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")
Exemple #8
0
    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")
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
Exemple #10
0
    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 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 test_build_policy(self):
        # Travis
        with tools.environment_append({
                "TRAVIS":
                "1",
                "TRAVIS_COMMIT_MESSAGE":
                "This is a great commit [build=outdated] End."
        }):
            manager = CIManager(self.printer)
            self.assertEquals(manager.get_commit_build_policy(), "outdated")
            self.assertEquals(
                manager.get_commit_msg(), "This is a great commit "
                "[build=outdated] End.")

        # Appveyor
        with tools.environment_append({
                "APPVEYOR": "1",
                "APPVEYOR_PULL_REQUEST_NUMBER": "1",
                "APPVEYOR_REPO_COMMIT_MESSAGE": "msg",
                "APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED":
                "more [build=missing] ",
                "APPVEYOR_REPO_BRANCH": "mybranch",
        }):
            manager = CIManager(self.printer)
            self.assertEquals(manager.get_commit_build_policy(), "missing")

        # Raise invalid
        with tools.environment_append({
                "APPVEYOR": "1",
                "APPVEYOR_PULL_REQUEST_NUMBER": "1",
                "APPVEYOR_REPO_COMMIT_MESSAGE": "msg",
                "APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED":
                "more [build=joujou] ",
                "APPVEYOR_REPO_BRANCH": "mybranch",
        }):
            manager = CIManager(self.printer)
            self.assertRaises(Exception, manager.get_commit_build_policy)
 def test_azure_instance(self):
     with tools.environment_append({
             "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI": "https://dev.azure.com/",
             "BUILD_SOURCEVERSIONMESSAGE": "msg",
             "BUILD_SOURCEVERSION":
             "506c89117650bb12252db26d35b8c2385411f175",
             "BUILD_SOURCEBRANCHNAME": "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)
Exemple #14
0
    def test_build_policy(self):
        # Travis
        with tools.environment_append({
                "TRAVIS":
                "1",
                "TRAVIS_COMMIT_MESSAGE":
                "This is a great commit [build=outdated] End."
        }):
            manager = CIManager(self.printer)
            self.assertEquals(manager.get_commit_build_policy(), "outdated")
            self.assertEquals(
                manager.get_commit_msg(), "This is a great commit "
                "[build=outdated] End.")

        with tools.environment_append({
                "TRAVIS":
                "1",
                "TRAVIS_COMMIT_MESSAGE":
                "This is a great commit [build=all] End."
        }):
            manager = CIManager(self.printer)
            self.assertEquals(manager.get_commit_build_policy(), "all")
            self.assertEquals(manager.get_commit_msg(),
                              "This is a great commit "
                              "[build=all] End.")
        # Appveyor
        with tools.environment_append({
                "APPVEYOR": "1",
                "APPVEYOR_PULL_REQUEST_NUMBER": "1",
                "APPVEYOR_REPO_COMMIT_MESSAGE": "msg",
                "APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED":
                "more [build=missing] ",
                "APPVEYOR_REPO_BRANCH": "mybranch",
        }):
            manager = CIManager(self.printer)
            self.assertEquals(manager.get_commit_build_policy(), "missing")

        # Raise invalid
        with tools.environment_append({
                "APPVEYOR": "1",
                "APPVEYOR_PULL_REQUEST_NUMBER": "1",
                "APPVEYOR_REPO_COMMIT_MESSAGE": "msg",
                "APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED":
                "more [build=joujou] ",
                "APPVEYOR_REPO_BRANCH": "mybranch",
        }):
            manager = CIManager(self.printer)
            self.assertRaises(Exception, manager.get_commit_build_policy)

        # Complex messages
        m = "double travis pages again due to timeout, travis taking longer " \
            "now [skip appveyor] [build=missing]"
        with tools.environment_append({
                "TRAVIS": "1",
                "TRAVIS_COMMIT_MESSAGE": m
        }):
            manager = CIManager(self.printer)
            self.assertEquals(manager.get_commit_build_policy(), "missing")
Exemple #15
0
    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)
Exemple #16
0
    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)
Exemple #17
0
 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 __init__(self,
                 username=None,
                 channel=None,
                 runner=None,
                 gcc_versions=None,
                 visual_versions=None,
                 visual_runtimes=None,
                 visual_toolsets=None,
                 apple_clang_versions=None,
                 archs=None,
                 options=None,
                 use_docker=None,
                 curpage=None,
                 total_pages=None,
                 docker_image=None,
                 reference=None,
                 password=None,
                 remotes=None,
                 upload=None,
                 stable_branch_pattern=None,
                 vs10_x86_64_enabled=False,
                 mingw_configurations=None,
                 stable_channel=None,
                 platform_info=None,
                 upload_retry=None,
                 clang_versions=None,
                 login_username=None,
                 upload_only_when_stable=None,
                 upload_only_when_tag=None,
                 upload_only_recipe=None,
                 build_types=None,
                 cppstds=None,
                 skip_check_credentials=False,
                 allow_gcc_minors=False,
                 exclude_vcvars_precommand=False,
                 docker_run_options=None,
                 docker_image_skip_update=False,
                 docker_image_skip_pull=False,
                 docker_entry_script=None,
                 docker_32_images=None,
                 docker_conan_home=None,
                 docker_shell=None,
                 pip_install=None,
                 build_policy=None,
                 always_update_conan_in_docker=False,
                 conan_api=None,
                 client_cache=None,
                 conanfile=None,
                 ci_manager=None,
                 out=None,
                 test_folder=None,
                 cwd=None,
                 config_url=None,
                 config_args=None,
                 upload_dependencies=None,
                 force_selinux=None,
                 skip_recipe_export=False,
                 update_dependencies=None,
                 lockfile=None):

        conan_version = get_client_version()

        self.printer = Printer(out)
        self.printer.print_rule()
        self.printer.print_ascci_art()

        self.cwd = cwd or os.getcwd()

        if not conan_api:
            self.conan_api, _, _ = Conan.factory()
            self.conan_api.create_app()
            self.client_cache = self.conan_api.app.cache
        else:
            self.conan_api = conan_api
            self.client_cache = client_cache

        self.ci_manager = ci_manager or CIManager(self.printer)
        self.remotes_manager = RemotesManager(self.conan_api, self.printer,
                                              remotes, upload)
        self.username = username or os.getenv("CONAN_USERNAME", None)

        self.skip_check_credentials = skip_check_credentials or get_bool_from_env(
            "CONAN_SKIP_CHECK_CREDENTIALS")

        self.auth_manager = AuthManager(
            self.conan_api,
            self.printer,
            login_username,
            password,
            default_username=self.username,
            skip_check_credentials=self.skip_check_credentials)

        # Upload related variables
        self.upload_retry = upload_retry or os.getenv("CONAN_UPLOAD_RETRY", 3)

        if upload_only_when_stable is not None:
            self.upload_only_when_stable = upload_only_when_stable
        else:
            self.upload_only_when_stable = get_bool_from_env(
                "CONAN_UPLOAD_ONLY_WHEN_STABLE")

        if upload_only_when_tag is not None:
            self.upload_only_when_tag = upload_only_when_tag
        else:
            self.upload_only_when_tag = get_bool_from_env(
                "CONAN_UPLOAD_ONLY_WHEN_TAG")

        self.upload_only_recipe = upload_only_recipe or get_bool_from_env(
            "CONAN_UPLOAD_ONLY_RECIPE")

        self.remotes_manager.add_remotes_to_conan()
        self.uploader = Uploader(self.conan_api, self.remotes_manager,
                                 self.auth_manager, self.printer,
                                 self.upload_retry)

        self._builds = []
        self._named_builds = {}
        self._packages_summary = []

        self._update_conan_in_docker = always_update_conan_in_docker or get_bool_from_env(
            "CONAN_ALWAYS_UPDATE_CONAN_DOCKER")

        self._platform_info = platform_info or PlatformInfo()

        self.stable_branch_pattern = stable_branch_pattern or \
                                     os.getenv("CONAN_STABLE_BRANCH_PATTERN", None)

        self.stable_channel = stable_channel or os.getenv(
            "CONAN_STABLE_CHANNEL", "stable")
        self.stable_channel = self.stable_channel.rstrip()
        self.partial_reference = reference or os.getenv(
            "CONAN_REFERENCE", None)
        self.channel = self._get_specified_channel(channel, reference)
        self.conanfile = conanfile or os.getenv("CONAN_CONANFILE",
                                                "conanfile.py")

        if self.partial_reference:
            if "@" in self.partial_reference:
                self.reference = ConanFileReference.loads(
                    self.partial_reference)
            else:
                name, version = self.partial_reference.split("/")
                self.reference = ConanFileReference(name, version,
                                                    self.username,
                                                    self.channel)
        else:
            if not os.path.exists(os.path.join(self.cwd, self.conanfile)):
                raise Exception("Conanfile not found, specify a 'reference' "
                                "parameter with name and version")

            conanfile = load_cf_class(os.path.join(self.cwd, self.conanfile),
                                      self.conan_api)
            name, version = conanfile.name, conanfile.version
            if name and version:
                self.reference = ConanFileReference(name, version,
                                                    self.username,
                                                    self.channel)
            else:
                self.reference = None

        self._docker_image = docker_image or os.getenv("CONAN_DOCKER_IMAGE",
                                                       None)

        # If CONAN_DOCKER_IMAGE is specified, then use docker is True
        self.use_docker = (use_docker or os.getenv("CONAN_USE_DOCKER", False)
                           or self._docker_image is not None)

        self.docker_conan_home = docker_conan_home or os.getenv(
            "CONAN_DOCKER_HOME", None)

        os_name = self._platform_info.system(
        ) if not self.use_docker else "Linux"
        self.build_generator = BuildGenerator(
            reference, os_name, gcc_versions, apple_clang_versions,
            clang_versions, visual_versions, visual_runtimes, visual_toolsets,
            vs10_x86_64_enabled, mingw_configurations, archs, allow_gcc_minors,
            build_types, options, cppstds)

        self.build_policy = (build_policy
                             or self.ci_manager.get_commit_build_policy()
                             or split_colon_env("CONAN_BUILD_POLICY"))
        if isinstance(self.build_policy, list):
            self.build_policy = ",".join(self.build_policy)

        self.sudo_docker_command = ""
        if "CONAN_DOCKER_USE_SUDO" in os.environ:
            self.sudo_docker_command = "sudo -E" if get_bool_from_env(
                "CONAN_DOCKER_USE_SUDO") else ""
        elif platform.system() != "Windows":
            self.sudo_docker_command = "sudo -E"

        self.sudo_pip_command = ""
        if "CONAN_PIP_USE_SUDO" in os.environ:
            self.sudo_pip_command = "sudo -E" if get_bool_from_env(
                "CONAN_PIP_USE_SUDO") else ""
        elif platform.system(
        ) != "Windows" and self._docker_image and 'conanio/' not in str(
                self._docker_image):
            self.sudo_pip_command = "sudo -E"
        self.pip_command = os.getenv("CONAN_PIP_COMMAND", "pip")
        pip_found = True if tools.os_info.is_windows else tools.which(
            self.pip_command)
        if not pip_found or not "pip" in self.pip_command:
            raise Exception(
                "CONAN_PIP_COMMAND: '{}' is not a valid pip command.".format(
                    self.pip_command))
        self.docker_pip_command = os.getenv("CONAN_DOCKER_PIP_COMMAND", "pip")

        self.docker_shell = docker_shell or os.getenv("CONAN_DOCKER_SHELL")

        if self.is_wcow:
            if self.docker_conan_home is None:
                self.docker_conan_home = "C:/Users/ContainerAdministrator"
                self.docker_shell = docker_shell or "cmd /C"
        else:
            if self.docker_conan_home is None:
                self.docker_conan_home = "/home/conan"
                self.docker_shell = docker_shell or "/bin/sh -c"

        self.docker_platform_param = ""
        self.lcow_user_workaround = ""

        if self.is_lcow:
            self.docker_platform_param = "--platform=linux"
            # With LCOW, Docker doesn't respect USER directive in dockerfile yet
            self.lcow_user_workaround = "sudo su conan && "

        self.exclude_vcvars_precommand = exclude_vcvars_precommand or \
                                          get_bool_from_env("CONAN_EXCLUDE_VCVARS_PRECOMMAND")
        self._docker_image_skip_update = docker_image_skip_update or \
                                          get_bool_from_env("CONAN_DOCKER_IMAGE_SKIP_UPDATE")
        self._docker_image_skip_pull = docker_image_skip_pull or \
                                        get_bool_from_env("CONAN_DOCKER_IMAGE_SKIP_PULL")

        self.runner = runner or os.system
        self.output_runner = ConanOutputRunner()

        self.docker_run_options = docker_run_options or split_colon_env(
            "CONAN_DOCKER_RUN_OPTIONS")
        if isinstance(self.docker_run_options, list):
            self.docker_run_options = " ".join(self.docker_run_options)

        self.docker_entry_script = docker_entry_script or os.getenv(
            "CONAN_DOCKER_ENTRY_SCRIPT")

        self.pip_install = pip_install or split_colon_env("CONAN_PIP_INSTALL")

        self.upload_dependencies = upload_dependencies or split_colon_env(
            "CONAN_UPLOAD_DEPENDENCIES") or ""
        if isinstance(self.upload_dependencies, list):
            self.upload_dependencies = ",".join(self.upload_dependencies)
        if "all" in self.upload_dependencies and self.upload_dependencies != "all":
            raise Exception(
                "Upload dependencies only accepts or 'all' or package references. Do not mix both!"
            )

        self.update_dependencies = update_dependencies or get_bool_from_env(
            "CONAN_UPDATE_DEPENDENCIES")

        if self.channel:
            os.environ["CONAN_CHANNEL"] = self.channel

        if docker_32_images is not None:
            self.docker_32_images = docker_32_images
        else:
            self.docker_32_images = os.getenv("CONAN_DOCKER_32_IMAGES", False)

        self.force_selinux = force_selinux or get_bool_from_env(
            "CONAN_FORCE_SELINUX")
        self.curpage = curpage or os.getenv("CONAN_CURRENT_PAGE", 1)
        self.total_pages = total_pages or os.getenv("CONAN_TOTAL_PAGES", 1)

        self.conan_pip_package = os.getenv("CONAN_PIP_PACKAGE",
                                           "conan==%s" % conan_version)
        if self.conan_pip_package in ("0", "False"):
            self.conan_pip_package = ""
        self.vs10_x86_64_enabled = vs10_x86_64_enabled

        self.builds_in_current_page = []

        self.test_folder = test_folder or os.getenv("CPT_TEST_FOLDER")

        self.config_url = config_url or os.getenv("CONAN_CONFIG_URL")

        self.skip_recipe_export = skip_recipe_export or \
                                     get_bool_from_env("CONAN_SKIP_RECIPE_EXPORT")
        self.config_args = config_args or os.getenv("CONAN_CONFIG_ARGS")

        self.lockfile = lockfile or os.getenv("CONAN_LOCKFILE")

        def valid_pair(var, value):
            return (isinstance(value, six.string_types)
                    or isinstance(value, bool) or isinstance(value, list)
                    ) and not var.startswith("_") and "password" not in var

        with self.printer.foldable_output("local_vars"):
            self.printer.print_dict({
                var: value
                for var, value in self.__dict__.items()
                if valid_pair(var, value)
            })

        self._newest_supported_conan_version = Version(
            NEWEST_CONAN_SUPPORTED).minor(fill=False)
        self._client_conan_version = conan_version
#!/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 = {
Exemple #21
0
def is_tag():
    printer = Printer()
    ci_manager = CIManager(printer)
    return ci_manager.is_tag()
Exemple #22
0
    def __init__(self,
                 args=None,
                 username=None,
                 channel=None,
                 runner=None,
                 gcc_versions=None,
                 visual_versions=None,
                 visual_runtimes=None,
                 apple_clang_versions=None,
                 archs=None,
                 use_docker=None,
                 curpage=None,
                 total_pages=None,
                 docker_image=None,
                 reference=None,
                 password=None,
                 remotes=None,
                 upload=None,
                 stable_branch_pattern=None,
                 vs10_x86_64_enabled=False,
                 mingw_configurations=None,
                 stable_channel=None,
                 platform_info=None,
                 upload_retry=None,
                 clang_versions=None,
                 login_username=None,
                 upload_only_when_stable=None,
                 build_types=None,
                 skip_check_credentials=False,
                 allow_gcc_minors=False,
                 exclude_vcvars_precommand=False,
                 docker_image_skip_update=False,
                 docker_image_skip_pull=False,
                 docker_entry_script=None,
                 docker_32_images=None,
                 build_policy=None,
                 always_update_conan_in_docker=False,
                 conan_api=None,
                 client_cache=None,
                 ci_manager=None,
                 out=None,
                 test_folder=None):

        self.printer = Printer(out)
        self.printer.print_rule()
        self.printer.print_ascci_art()

        if not conan_api:
            self.conan_api, self.client_cache, _ = Conan.factory()
        else:
            self.conan_api = conan_api
            self.client_cache = client_cache

        self.ci_manager = ci_manager or CIManager(self.printer)
        self.remotes_manager = RemotesManager(self.conan_api, self.printer,
                                              remotes, upload)
        self.username = username or os.getenv("CONAN_USERNAME", None)

        if not self.username:
            raise Exception(
                "Instance ConanMultiPackage with 'username' parameter or use "
                "CONAN_USERNAME env variable")
        self.skip_check_credentials = skip_check_credentials or \
                                      os.getenv("CONAN_SKIP_CHECK_CREDENTIALS", False)

        self.auth_manager = AuthManager(
            self.conan_api,
            self.printer,
            login_username,
            password,
            default_username=self.username,
            skip_check_credentials=self.skip_check_credentials)
        self.uploader = Uploader(self.conan_api, self.remotes_manager,
                                 self.auth_manager, self.printer)

        self._builds = []
        self._named_builds = {}

        self._update_conan_in_docker = (
            always_update_conan_in_docker
            or os.getenv("CONAN_ALWAYS_UPDATE_CONAN_DOCKER", False))

        self._platform_info = platform_info or PlatformInfo()

        self.stable_branch_pattern = stable_branch_pattern or \
                                     os.getenv("CONAN_STABLE_BRANCH_PATTERN", None)
        self.specified_channel = channel or os.getenv("CONAN_CHANNEL",
                                                      "testing")
        self.specified_channel = self.specified_channel.rstrip()
        self.stable_channel = stable_channel or os.getenv(
            "CONAN_STABLE_CHANNEL", "stable")
        self.stable_channel = self.stable_channel.rstrip()
        self.channel = self._get_channel(self.specified_channel,
                                         self.stable_channel)
        self.partial_reference = reference or os.getenv(
            "CONAN_REFERENCE", None)

        if self.partial_reference:
            if "@" in self.partial_reference:
                self.reference = ConanFileReference.loads(
                    self.partial_reference)
            else:
                name, version = self.partial_reference.split("/")
                self.reference = ConanFileReference(name, version,
                                                    self.username,
                                                    self.channel)
        else:
            if not os.path.exists("conanfile.py"):
                raise Exception(
                    "Conanfile not found, specify a 'reference' parameter with name and version"
                )
            conanfile = load_conanfile_class("./conanfile.py")
            name, version = conanfile.name, conanfile.version
            if name and version:
                self.reference = ConanFileReference(name, version,
                                                    self.username,
                                                    self.channel)
            else:
                self.reference = None

        # If CONAN_DOCKER_IMAGE is speified, then use docker is True
        self.use_docker = (use_docker or os.getenv("CONAN_USE_DOCKER", False)
                           or os.getenv("CONAN_DOCKER_IMAGE",
                                        None) is not None)

        os_name = self._platform_info.system(
        ) if not self.use_docker else "Linux"
        self.build_generator = BuildGenerator(
            reference, os_name, gcc_versions, apple_clang_versions,
            clang_versions, visual_versions, visual_runtimes,
            vs10_x86_64_enabled, mingw_configurations, archs, allow_gcc_minors,
            build_types)

        build_policy = (build_policy
                        or self.ci_manager.get_commit_build_policy()
                        or os.getenv("CONAN_BUILD_POLICY", None))

        if build_policy:
            if build_policy.lower() not in ("never", "outdated", "missing"):
                raise Exception(
                    "Invalid build policy, valid values: never, outdated, missing"
                )

        self.build_policy = build_policy

        self.sudo_docker_command = ""
        if "CONAN_DOCKER_USE_SUDO" in os.environ:
            self.sudo_docker_command = "sudo -E" if get_bool_from_env(
                "CONAN_DOCKER_USE_SUDO") else ""
        elif platform.system() != "Windows":
            self.sudo_docker_command = "sudo -E"

        self.sudo_pip_command = ""
        if "CONAN_PIP_USE_SUDO" in os.environ:
            self.sudo_pip_command = "sudo -E" if get_bool_from_env(
                "CONAN_PIP_USE_SUDO") else ""
        elif platform.system() != "Windows":
            self.sudo_pip_command = "sudo -E"

        self.docker_shell = ""
        self.docker_conan_home = ""

        if self.is_wcow:
            self.docker_conan_home = "C:/Users/ContainerAdministrator"
            self.docker_shell = "cmd /C"
        else:
            self.docker_conan_home = "/home/conan"
            self.docker_shell = "/bin/sh -c"

        self.docker_platform_param = ""
        self.lcow_user_workaround = ""

        if self.is_lcow:
            self.docker_platform_param = "--platform=linux"
            # With LCOW, Docker doesn't respect USER directive in dockerfile yet
            self.lcow_user_workaround = "sudo su conan && "

        self.exclude_vcvars_precommand = (
            exclude_vcvars_precommand
            or os.getenv("CONAN_EXCLUDE_VCVARS_PRECOMMAND", False))
        self._docker_image_skip_update = (
            docker_image_skip_update
            or os.getenv("CONAN_DOCKER_IMAGE_SKIP_UPDATE", False))
        self._docker_image_skip_pull = (docker_image_skip_pull or os.getenv(
            "CONAN_DOCKER_IMAGE_SKIP_PULL", False))

        self.runner = runner or os.system
        self.output_runner = ConanOutputRunner()
        self.args = " ".join(args) if args else " ".join(sys.argv[1:])

        # Upload related variables
        self.upload_retry = upload_retry or os.getenv("CONAN_UPLOAD_RETRY", 3)

        if upload_only_when_stable is not None:
            self.upload_only_when_stable = upload_only_when_stable
        else:
            self.upload_only_when_stable = get_bool_from_env(
                "CONAN_UPLOAD_ONLY_WHEN_STABLE")

        self.docker_entry_script = docker_entry_script or os.getenv(
            "CONAN_DOCKER_ENTRY_SCRIPT")

        os.environ["CONAN_CHANNEL"] = self.channel

        # If CONAN_DOCKER_IMAGE is speified, then use docker is True
        self.use_docker = use_docker or os.getenv("CONAN_USE_DOCKER", False) or \
                          (os.getenv("CONAN_DOCKER_IMAGE", None) is not None)

        if docker_32_images is not None:
            self.docker_32_images = docker_32_images
        else:
            self.docker_32_images = os.getenv("CONAN_DOCKER_32_IMAGES", False)

        self.curpage = curpage or os.getenv("CONAN_CURRENT_PAGE", 1)
        self.total_pages = total_pages or os.getenv("CONAN_TOTAL_PAGES", 1)
        self._docker_image = docker_image or os.getenv("CONAN_DOCKER_IMAGE",
                                                       None)

        self.conan_pip_package = os.getenv("CONAN_PIP_PACKAGE",
                                           "conan==%s" % client_version)
        if self.conan_pip_package in ("0", "False"):
            self.conan_pip_package = False
        self.vs10_x86_64_enabled = vs10_x86_64_enabled

        self.builds_in_current_page = []

        self.test_folder = test_folder or os.getenv("CPT_TEST_FOLDER", None)

        def valid_pair(var, value):
            return (isinstance(value, six.string_types)
                    or isinstance(value, bool) or isinstance(value, list)
                    ) and not var.startswith("_") and "password" not in var

        with self.printer.foldable_output("local_vars"):
            self.printer.print_dict({
                var: value
                for var, value in self.__dict__.items()
                if valid_pair(var, value)
            })
Exemple #23
0
import os
from cpt.printer import Printer
from cpt.ci_manager import CIManager
from bincrafters import build_template_default

# Debug
import glob as gb

if __name__ == "__main__":

    # CONAN_STABLE_PATTERN env variable is used to set:
    # * branch `master` to upload to `stable`
    # * All other to `testing`
    # Here we also check the branch, and if not master or develop, don't upload
    printer = Printer()
    branch = CIManager(printer).get_branch()

    if branch in ['master', 'develop']:
        upload_only_when_stable = False
    else:
        # It can't be stable since that means it'd be 'master' => never upload
        upload_only_when_stable = True

    # This will add common builds.
    # We are customizing what these are by using environment variables.
    # Because we pass:
    # * CONAN_ARCHS=x86_64, it will only produce the x64
    # * CONAN_APPLE_CLANG_VERSIONS/CONAN_GCC_VERSIONS/CONAN_VISUAL_VERSIONS,
    #   it will only use the specific one that's passed
    # * CONAN_BUILD_TYPES, it will limit itself to the ones we asked
    # cf: https://github.com/conan-io/conan-package-tools
Exemple #24
0
    return not (build.options['nptsne:shared'] == True)


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)
Exemple #25
0
#!/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())
Exemple #26
0
    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")
Exemple #27
0
 def branch(self):
     """ Get branch name
     """
     printer = Printer(None)
     ci_manager = CIManager(printer)
     return ci_manager.get_branch()