Exemplo n.º 1
0
 def setUp(self):
     me = os.path.dirname(__file__)
     single_files = os.path.join(me, '..', 'files', 'single')
     self.conanfile = os.path.join(single_files, 'settings_all.py')
     self.conanfile_wrapper = ConanFileWrapper.parse(self.conanfile)
     self.settings = get_settings()
     self.options = ''
Exemplo n.º 2
0
 def setUp(self):
     self.registry = RunnerRegistry()
     self.settings = get_settings()
     # Dummy (but valid) conanfile
     me = os.path.dirname(__file__)
     single_files = os.path.join(me, '..', '..', 'files', 'single')
     self.conanfile = os.path.join(single_files, 'conanfile01.py')
Exemplo n.º 3
0
 def test_settings_from_filename(self):
     tf = tempfile.NamedTemporaryFile(mode='w', delete=False)
     tf.write(default_settings_yml)
     tf.close()
     try:
         settings = get_settings(filename=tf.name)
         self.assertIsInstance(settings, Settings)
     finally:
         os.remove(tf.name)
Exemplo n.º 4
0
 def setUp(self):
     settings = get_settings()
     # Dummy (but valid) conanfile
     me = os.path.dirname(__file__)
     conanfile = os.path.join(me, '..', '..', 'files', 'single',
                              'conanfile01.py')
     self.runner = TravisRunner(conanfile=conanfile,
                                settings=settings,
                                osys="Linux")
Exemplo n.º 5
0
    def setUp(self):
        import logging
        logging.basicConfig(level=logging.DEBUG)

        me = os.path.dirname(__file__)
        single_files = os.path.join(me, '..', 'files', 'single')
        self.conanfile = os.path.join(single_files, 'raise_configure.py')
        self.conanfile_wrapper = ConanFileWrapper.parse(self.conanfile)
        self.settings = get_settings()
        self.n_options = 1
        self.options_multiplier = pow(2, self.n_options)
Exemplo n.º 6
0
 def test_settings_invalid_filename(self):
     with self.assertRaises(IOError):
         get_settings(filename='invalid_filename.txt')
Exemplo n.º 7
0
 def test_default_settings(self):
     settings = get_settings()
     self.assertIsInstance(settings, Settings)
Exemplo n.º 8
0
 def setUp(self):
     me = os.path.dirname(__file__)
     single_files = os.path.join(me, '..', 'files', 'single')
     conanfile01 = os.path.join(single_files, 'conanfile01.py')
     self.wrapper = ConanFileWrapper.parse(conanfile01)
     self.settings = get_settings()
Exemplo n.º 9
0
def run(conanfile, filter_func=None, dry_run=False):
    # Do the work
    osys = platform_system()

    # Look for runner
    runner = RunnerRegistry.get_runner(conanfile=conanfile, settings=get_settings(), osys=osys, dry_run=dry_run)
    all_jobs = runner.enumerate_jobs()
    all_jobs = list(JobGeneratorBase.filter_jobs(all_jobs, filter=filter_func))
    sys.stdout.write("All combinations sum up to {} jobs\n".format(len(all_jobs)))

    # - may paginate
    total_pages = os.environ.get("CONAN_TOTAL_PAGES", None)
    current_page = os.environ.get("CONAN_CURRENT_PAGE", None)
    msg = ''
    if total_pages or current_page:
        assert total_pages and current_page, "Both environment variables must be set: CONAN_TOTAL_PAGES and CONAN_CURRENT_PAGE"
        init, end = slice(len(all_jobs), int(current_page), int(total_pages))
        all_jobs = all_jobs[init:end]
        msg = "(page {}/{})".format(current_page, total_pages)

    # Print jobs to run
    sys.stdout.write("Jobs to run... {}\n".format(msg))
    print_jobs(all_jobs)
    results = []

    # Get username and channel
    USERNAME = os.getenv("CONAN_USERNAME", 'conan')
    CHANNEL = os.getenv("CONAN_CHANNEL", 'stable' if runner.is_stable_branch() else 'testing')

    # Aggregate jobs by compiler and iterate
    grouped_jobs = groupby(all_jobs, itemgetter(0))
    i = 0
    total = len(all_jobs)

    with ExitStack() as stack:
        # Add remotes in order of precedence
        ADDITIONAL_REMOTES = get_env("CONAN_REMOTES", [])
        for remote in reversed(ADDITIONAL_REMOTES):
            _ = stack.enter_context(conan.remote(url=remote))

        REMOTE = os.getenv("CONAN_UPLOAD", None)
        if REMOTE and REMOTE not in ADDITIONAL_REMOTES:
            _ = stack.enter_context(conan.remote(url=REMOTE))

        # Run jobs
        for compiler, options in grouped_jobs:
            # Get a runner for each compiler (will modify profile)
            runner.set_compiler(compiler)
            with profile_for(compiler) as profile_file:
                runner.set_profile(profile_file)
                for _, opt in options:
                    i += 1
                    options_str = ["{}={}".format(key, value) for key, value in opt.items()]
                    sys.stdout.write("\n==> [{:>2}/{}] {}: {}\n".format(i, total, str(compiler), ', '.join(options_str)))
                    ret = runner.run(opt, username=USERNAME, channel=CHANNEL)
                    sys.stdout.write(ret + '\n\n')
                    results.append(ret)

    # Summary of jobs status
    sys.stdout.write("Summing up... {}\n".format(msg))
    print_jobs(all_jobs, job_status=results)

    succeed = len(results) == results.count(SUCCESS)
    if not succeed:
        sys.stdout.write("Only {} out of {} jobs succeeded (status={}) :/ \n\n".format(results.count(SUCCESS), len(results), SUCCESS))
        if not dry_run:
            return -1
    else:
        sys.stdout.write("All jobs succeeded!\n\n")

    # Upload (will raise if errors)
    runner.upload(USERNAME, CHANNEL)
    return 0 if succeed else -1
Exemplo n.º 10
0
 def setUp(self):
     self.settings = get_settings()
     # Dummy (but valid) conanfile
     me = os.path.dirname(__file__)
     self.conanfile = os.path.join(me, '..', '..', 'files', 'single', 'conanfile01.py')