Beispiel #1
0
    def test_missing_full_reference(self):
        conanfile = """from conans import ConanFile
class Pkg(ConanFile):
    pass
"""
        self.save_conanfile(conanfile)
        mp = ConanMultiPackager(username="******")
        with self.assertRaisesRegexp(
                Exception, "Specify a CONAN_REFERENCE or name and version"):
            mp.add_common_builds()
Beispiel #2
0
 def test_skip(self):
     with tools.environment_append({
             "TRAVIS": "1",
             "TRAVIS_COMMIT_MESSAGE": "[skip ci]",
             "TRAVIS_BRANCH": "mybranch"
     }):
         packager = ConanMultiPackager(username="******", reference="lib/1.0")
         # Constructor skipped
         ret = packager.run()
         self.assertEquals(ret, 99)
 def test_no_credentials_only_url_skip_check(self):
     self.save_conanfile(self.conanfile)
     with tools.environment_append({"CONAN_PASSWORD": "******",
                                    "CONAN_UPLOAD_ONLY_WHEN_STABLE": "1"}):
         mp = ConanMultiPackager(username="******", out=self.output.write,
                                 channel="my_channel",
                                 ci_manager=self.ci_manager,
                                 upload="https://api.bintray.com/conan/conan-community/conan",)
         mp.add({}, {}, {})
         mp.run()
         self.assertIn("Skipping upload, not stable channel", self.output)
Beispiel #4
0
    def test_partial_reference(self):
        conanfile = """from conans import ConanFile
class Pkg(ConanFile):
    name = "foobar"
    version = "0.1.0"

    def configure(self):
        self.output.info("hello all")
"""
        tools.save(os.path.join(self.tmp_folder, "conanfile.py"), conanfile)
        with tools.environment_append({"CONAN_REFERENCE": "foobar/0.1.0@"}):
            self.packager = ConanMultiPackager(out=self.output.write)
            self.packager.add({}, {}, {}, {})
            self.packager.run()
        self.assertIn("partial_reference         | foobar/0.1.0@", self.output)

        self.packager = ConanMultiPackager(out=self.output.write)
        self.packager.add({}, {}, {}, {})
        self.packager.run()
        self.assertIn("partial_reference         | foobar/0.1.0@", self.output)
 def test_no_credentials_only_url(self):
     self.save_conanfile(self.conanfile)
     with tools.environment_append({"CONAN_PASSWORD": "******"}):
         mp = ConanMultiPackager(
             username="******",
             out=self.output.write,
             ci_manager=self.ci_manager,
             upload="https://api.bintray.com/conan/conan-community/conan")
         with self.assertRaisesRegexp(ConanException,
                                      "Wrong user or password"):
             mp.run()
 def test_no_credentials(self):
     self.save_conanfile(self.conanfile)
     mp = ConanMultiPackager(username="******", out=self.output.write,
                             ci_manager=self.ci_manager,
                             upload=("https://uilianr.jfrog.io/artifactory/api/conan/public-conan",
                                     True, "my_upload_remote"))
     mp.add({}, {}, {})
     mp.run()
     self.assertIn("Upload skipped, credentials for remote 'my_upload_remote' "
                   "not available", self.output)
     self.assertNotIn("Uploading packages", self.output)
    def test_deprecation_gcc(self):

        with self.assertRaisesRegexp(Exception, "DEPRECATED GCC MINOR VERSIONS!"):
            ConanMultiPackager(username="******",
                               channel="mychannel",
                               runner=self.runner,
                               conan_api=self.conan_api,
                               gcc_versions=["4.3", "5.4"],
                               use_docker=True,
                               reference="zlib/1.2.11",
                               ci_manager=self.ci_manager)
 def test_no_credentials(self):
     self.save_conanfile(self.conanfile)
     mp = ConanMultiPackager(username="******", out=self.output.write,
                             ci_manager=self.ci_manager,
                             upload=("https://api.bintray.com/conan/conan-community/conan",
                                     True, "my_upload_remote"))
     mp.add({}, {}, {})
     mp.run()
     self.assertIn("Upload skipped, credentials for remote 'my_upload_remote' "
                   "not available", self.output)
     self.assertNotIn("Uploading packages", self.output)
Beispiel #9
0
def build():
    n = get_build_number()
    conanfile = load_conanfile_class(os.path.join(__dir__, 'conanfile.py'))
    version = conanfile.version
    CONAN_STABLE_CHANNEL = None

    if n == 0:
        CONAN_CHANNEL = 'stable'
        CONAN_UPLOAD_ONLY_WHEN_STABLE = True
    else:
        version = '%s.%d' % (version, n)
        CONAN_CHANNEL = 'testing'
        CONAN_UPLOAD_ONLY_WHEN_STABLE = False
        CONAN_STABLE_CHANNEL = 'testing'
        update_version(version)

    CONAN_UPLOAD = 'https://api.bintray.com/conan/%s/%s' % (CONAN_USERNAME,
                                                            CONAN_CHANNEL)

    builder = ConanMultiPackager(
        channel=CONAN_CHANNEL,
        upload_only_when_stable=CONAN_UPLOAD_ONLY_WHEN_STABLE,
        upload=CONAN_UPLOAD,
        username=CONAN_USERNAME,
        stable_channel=CONAN_STABLE_CHANNEL)

    builder.add_common_builds()
    builds = []
    for settings, options, env_vars, build_requires, reference in builder.items:
        # dynamic only
        if not options["libwebstreamer:shared"]:
            continue
        # release only
        if settings["build_type"] == "Debug":
            continue

        # Visual Sutido 2017 only
        if platform.system() == "Windows":
            if settings["compiler"] == "Visual Studio":
                if settings["compiler.version"] == '14':
                    builds.append(
                        [settings, options, env_vars, build_requires])
        elif platform.system() == "Linux":
            if settings["compiler"] == "gcc":
                if settings["compiler.version"] == '4.9' and settings[
                        "arch"] == 'x86_64':
                    builds.append([
                        settings, options, {
                            'DEPENDENT_BINTRAY_REPO': DEPENDENT_BINTRAY_REPO
                        }, build_requires
                    ])
    builder.builds = builds
    builder.run()
Beispiel #10
0
 def test_upload_only_stable(self):
     self.save_conanfile(self.conanfile)
     with tools.environment_append({
             "CONAN_PASSWORD": "******",
             "CONAN_SKIP_CHECK_CREDENTIALS": "1"
     }):
         mp = ConanMultiPackager(
             username="******",
             out=self.output.write,
             ci_manager=self.ci_manager,
             upload="https://api.bintray.com/conan/conan-community/conan")
         mp.run()  # No builds to upload so no raises
    def test_conan_incompatible_version(self):
        cpt = ConanMultiPackager(username="******", reference="lib/1.0@conan/stable")
        cpt._newest_supported_conan_version = "2.0"
        cpt._client_conan_version = "2.1"
        with self.assertRaisesRegexp(Exception, "Conan/CPT version mismatch. "
                                                "Conan version installed: 2.1 . "
                                                "This version of CPT supports only Conan < 2.0"):
            cpt.run()

        cpt._newest_supported_conan_version = "2.1"
        cpt._client_conan_version = "2.1"
        cpt.run()
Beispiel #12
0
 def build_single_recipe(self, recipe):
     versions_by_folder = self._detect_versions(recipe)
     for folder, versions in versions_by_folder.items():
         conanfile = str(recipe / folder / 'conanfile.py')
         builder = ConanMultiPackager(conanfile=conanfile)
         for version in versions:
             reference = '{}/{}'.format(recipe.name, version)
             logging.info('Building {}'.format(reference))
             builder.add_common_builds(reference=reference, pure_c=False)
         # we only want libstdc++11 ABI
         builder.remove_build_if(
             lambda build: '11' not in build.settings["compiler.libcxx"])
         builder.run()
    def select_defaults_test(self):
        with tools.environment_append({"CONAN_REFERENCE": "zlib/1.2.8"}):
            builder = ConanMultiPackager(platform_info=platform_mock_for("Linux"),
                                         gcc_versions=["4.8", "5"],
                                         username="******",
                                         reference="lib/1.0@lasote/mychannel",
                                         ci_manager=self.ci_manager)

            self.assertEquals(builder.build_generator._clang_versions, [])

        with tools.environment_append({"CONAN_GCC_VERSIONS": "4.8, 5",
                                       "CONAN_REFERENCE": "zlib/1.2.8"}):
            builder = ConanMultiPackager(platform_info=platform_mock_for("Linux"),
                                         username="******",
                                         reference="lib/1.0@lasote/mychannel",
                                         ci_manager=self.ci_manager)

            self.assertEquals(builder.build_generator._clang_versions, [])
            self.assertEquals(builder.build_generator._gcc_versions, ["4.8", "5"])

        builder = ConanMultiPackager(platform_info=platform_mock_for("Linux"),
                                     clang_versions=["4.8", "5"],
                                     username="******",
                                     reference="lib/1.0",
                                     ci_manager=self.ci_manager)

        self.assertEquals(builder.build_generator._gcc_versions, [])

        with tools.environment_append({"CONAN_CLANG_VERSIONS": "4.8, 5",
                                       "CONAN_APPLE_CLANG_VERSIONS": " "}):
            builder = ConanMultiPackager(platform_info=platform_mock_for("Linux"),
                                         username="******",
                                         reference="lib/1.0",
                                         ci_manager=self.ci_manager)

            self.assertEquals(builder.build_generator._gcc_versions, [])
            self.assertEquals(builder.build_generator._clang_versions, ["4.8", "5"])
            self.assertEquals(builder.build_generator._clang_versions, ["4.8", "5"])
            self.assertEquals(builder.build_generator._apple_clang_versions, [])
Beispiel #14
0
    def test_test_folder(self):
        builder = ConanMultiPackager(username="******",
                                     channel="testing",
                                     reference="Hello/0.1",
                                     password="******",
                                     visual_versions=[],
                                     gcc_versions=[],
                                     apple_clang_versions=[],
                                     runner=self.runner,
                                     conan_api=self.conan_api,
                                     remotes="otherurl",
                                     platform_info=platform_mock_for("Darwin"),
                                     test_folder="foobar",
                                     ci_manager=self.ci_manager)
        builder.add_common_builds()
        builder.run()
        self.assertEquals("foobar",
                          self.conan_api.calls[-1].kwargs["test_folder"])

        with tools.environment_append({"CONAN_BUILD_POLICY": "missing"}):
            self.conan_api = MockConanAPI()
            builder = ConanMultiPackager(
                username="******",
                channel="testing",
                reference="Hello/0.1",
                password="******",
                visual_versions=[],
                gcc_versions=[],
                apple_clang_versions=[],
                runner=self.runner,
                conan_api=self.conan_api,
                remotes="otherurl",
                platform_info=platform_mock_for("Darwin"),
                build_policy=None,
                ci_manager=self.ci_manager)
            builder.add_common_builds()
            builder.run()
            self.assertEquals(None,
                              self.conan_api.calls[-1].kwargs["test_folder"])
    def test_docker_invalid(self):
        self.packager = ConanMultiPackager(username="******",
                                           channel="mychannel",
                                           runner=self.runner,
                                           conan_api=self.conan_api,
                                           use_docker=True,
                                           reference="zlib/1.2.11",
                                           ci_manager=self.ci_manager)

        self._add_build(1, "msvc", "10")

        # Only clang and gcc have docker images
        self.assertRaises(Exception, self.packager.run_builds)
Beispiel #16
0
    def test_remove_build_if(self):
        self.packager.add({
            "arch": "x86",
            "build_type": "Release",
            "compiler": "gcc",
            "compiler.version": "6"
        })
        self.packager.add({
            "arch": "x86",
            "build_type": "Debug",
            "compiler": "gcc",
            "compiler.version": "6"
        })
        self.packager.add({
            "arch": "x86",
            "build_type": "Release",
            "compiler": "gcc",
            "compiler.version": "7"
        })
        self.packager.add({
            "arch": "x86",
            "build_type": "Debug",
            "compiler": "gcc",
            "compiler.version": "7"
        })

        self.packager.remove_build_if(
            lambda build: build.settings["compiler.version"] == "6")

        packager_expected = ConanMultiPackager("lasote",
                                               "mychannel",
                                               runner=self.runner,
                                               conan_api=self.conan_api,
                                               reference="lib/1.0",
                                               ci_manager=self.ci_manager)

        packager_expected.add({
            "arch": "x86",
            "build_type": "Release",
            "compiler": "gcc",
            "compiler.version": "7"
        })
        packager_expected.add({
            "arch": "x86",
            "build_type": "Debug",
            "compiler": "gcc",
            "compiler.version": "7"
        })

        self.assertEqual([tuple(a) for a in self.packager.items],
                         packager_expected.items)
Beispiel #17
0
    def test_save_packages_summary(self):
        conanfile = """from conans import ConanFile
class Pkg(ConanFile):
    name = "foobar"
    version = "0.1.0"

    def configure(self):
        self.output.info("hello all")
"""
        json_file = 'cpt_summary_file.json'
        tools.save(os.path.join(self.tmp_folder, "conanfile.py"), conanfile)
        self.packager = ConanMultiPackager(out=self.output.write)
        self.packager.add({}, {}, {}, {})
        self.packager.run(summary_file=json_file)
        self.assertTrue(os.path.isfile(json_file))
        with open(json_file) as json_content:
            json_data = json.load(json_content)
            self.assertFalse(json_data[0]["package"]["error"])

        json_file = "_" + json_file
        self.packager = ConanMultiPackager(out=self.output.write)
        self.packager.add({}, {}, {}, {})
        self.packager.run()
        self.packager.save_packages_summary(json_file)
        self.assertTrue(os.path.isfile(json_file))
        with open(json_file) as json_content:
            json_data = json.load(json_content)
            self.assertFalse(json_data[0]["package"]["error"])

        json_file = "__" + json_file
        with tools.environment_append({"CPT_SUMMARY_FILE": json_file}):
            self.packager = ConanMultiPackager(out=self.output.write)
            self.packager.add({}, {}, {}, {})
            self.packager.run()
            self.assertTrue(os.path.isfile(json_file))
            with open(json_file) as json_content:
                json_data = json.load(json_content)
                self.assertFalse(json_data[0]["package"]["error"])
    def test_visual_defaults(self):

        with tools.environment_append({"CONAN_VISUAL_VERSIONS": "10"}):
            builder = ConanMultiPackager(username="******",
                                         platform_info=platform_mock_for("Windows"),
                                         reference="lib/1.0@lasote/mychannel",
                                         ci_manager=self.ci_manager)
            builder.add_common_builds()
            for settings, _, _, _, _ in builder.items:
                self.assertEquals(settings["compiler"], "Visual Studio")
                self.assertEquals(settings["compiler.version"], "10")

        with tools.environment_append({"CONAN_VISUAL_VERSIONS": "10",
                                       "MINGW_CONFIGURATIONS": "4.9@x86_64@seh@posix"}):

            builder = ConanMultiPackager(username="******",
                                         platform_info=platform_mock_for("Windows"),
                                         reference="lib/1.0@lasote/mychannel",
                                         ci_manager=self.ci_manager)
            builder.add_common_builds()
            for settings, _, _, _, _ in builder.items:
                self.assertEquals(settings["compiler"], "gcc")
                self.assertEquals(settings["compiler.version"], "4.9")
 def test_docker_home_opt(self):
     self.packager = ConanMultiPackager(username="******",
                                        channel="mychannel",
                                        runner=self.runner,
                                        conan_api=self.conan_api,
                                        gcc_versions=["5", "6"],
                                        clang_versions=["3.9", "4.0"],
                                        use_docker=True,
                                        docker_conan_home="/some/dir",
                                        reference="zlib/1.2.11",
                                        ci_manager=self.ci_manager)
     self._add_build(1, "gcc", "5")
     self.packager.run_builds(1, 1)
     self.assertEquals(self.packager.docker_conan_home, "/some/dir")
 def test_no_credentials_but_skip(self):
     with tools.environment_append({"CONAN_NON_INTERACTIVE": "1"}):
         self.save_conanfile(self.conanfile)
         mp = ConanMultiPackager(username="******", out=self.output.write,
                                 ci_manager=self.ci_manager,
                                 upload=("https://api.bintray.com/conan/conan-community/conan",
                                         True, "my_upload_remote"),
                                 skip_check_credentials=True)
         mp.add({}, {}, {})
         with self.assertRaisesRegexp(ConanException, "Conan interactive mode disabled"):
             mp.run()
         self.assertIn("Uploading packages for", self.output)
         self.assertIn("Credentials not specified but 'skip_check_credentials' activated",
                       self.output)
def get_builder(build_policy=None, cwd=None, **kwargs):
    recipe = get_recipe_path(cwd)
    name = get_name_from_recipe(recipe=recipe)
    username, version, kwargs = get_conan_vars(recipe=recipe, kwargs=kwargs)
    kwargs = get_reference(name, version, kwargs)
    kwargs = get_conan_upload_param(username, kwargs)
    kwargs = get_conan_remotes(username, kwargs)
    kwargs = get_upload_when_stable(kwargs)
    kwargs = get_stable_branch_pattern(kwargs)
    kwargs = get_archs(kwargs)
    build_policy = os.getenv('CONAN_BUILD_POLICY', build_policy)
    builder = ConanMultiPackager(build_policy=build_policy, cwd=cwd, **kwargs)

    return builder
 def test_no_credentials_but_skip(self):
     with tools.environment_append({"CONAN_NON_INTERACTIVE": "1"}):
         self.save_conanfile(self.conanfile)
         mp = ConanMultiPackager(username="******", out=self.output.write,
                                 ci_manager=self.ci_manager,
                                 upload=("https://uilianr.jfrog.io/artifactory/api/conan/public-conan",
                                         True, "my_upload_remote"),
                                 skip_check_credentials=True)
         mp.add({}, {}, {})
         with self.assertRaisesRegexp(ConanException, "Errors uploading some packages"):
             mp.run()
         self.assertIn("Uploading packages for", self.output)
         self.assertIn("Credentials not specified but 'skip_check_credentials' activated",
                       self.output)
 def setUp(self):
     self.runner = MockRunner()
     self.conan_api = MockConanAPI()
     self.ci_manager = MockCIManager()
     self.packager = ConanMultiPackager(["--build missing", "-r conan.io"],
                                        "lasote", "mychannel",
                                        runner=self.runner,
                                        conan_api=self.conan_api,
                                        reference="lib/1.0",
                                        ci_manager=self.ci_manager)
     if "APPVEYOR" in os.environ:
         del os.environ["APPVEYOR"]
     if "TRAVIS" in os.environ:
         del os.environ["TRAVIS"]
 def setUp(self):
     self.runner = MockRunner()
     self.conan_api = MockConanAPI()
     self.ci_manager = MockCIManager()
     self.packager = ConanMultiPackager(username="******",
                                        channel="mychannel",
                                        runner=self.runner,
                                        conan_api=self.conan_api,
                                        reference="lib/1.0",
                                        ci_manager=self.ci_manager)
     if "APPVEYOR" in os.environ:
         del os.environ["APPVEYOR"]
     if "TRAVIS" in os.environ:
         del os.environ["TRAVIS"]
Beispiel #25
0
    def test_docker_base_build_profile(self):
        conanfile = textwrap.dedent("""
                    from conans import ConanFile

                    class Pkg(ConanFile):

                        def build(self):
                            pass
                """)

        self.save_conanfile(conanfile)
        with tools.environment_append({
                "CONAN_DOCKER_RUN_OPTIONS":
                "--network=host -v{}:/tmp/cpt".format(
                    self.root_project_folder),
                "CONAN_DOCKER_ENTRY_SCRIPT":
                "pip install -U /tmp/cpt",
                "CONAN_DOCKER_IMAGE":
                "conanio/gcc8",
                "CONAN_USE_DOCKER":
                "1",
                "CONAN_REFERENCE":
                "foo/0.0.1@bar/testing",
                "CONAN_DOCKER_IMAGE_SKIP_UPDATE":
                "TRUE",
                "CONAN_FORCE_SELINUX":
                "TRUE",
                "CONAN_DOCKER_USE_SUDO":
                "FALSE",
                "CONAN_DOCKER_SHELL":
                "/bin/bash -c",
        }):
            self.packager = ConanMultiPackager(
                gcc_versions=["8"],
                archs=["x86_64"],
                build_types=["Release"],
                config_url=
                "https://github.com/bincrafters/bincrafters-config.git",
                out=self.output.write)
            self.packager.add({})
            self.packager.run(base_profile_name="orangepi",
                              base_profile_build_name="linux-gcc8-amd64")
            self.assertIn('Using specified default base profile: orangepi',
                          self.output)
            self.assertIn('Using specified build profile: linux-gcc8-amd64',
                          self.output)
            self.assertIn('-e CPT_BASE_PROFILE_NAME="orangepi"', self.output)
            self.assertNotIn('-e CPT_PROFILE_BUILD="linux-gcc8-amd64"',
                             self.output)
 def test_assign_builds_retrocompatibility(self):
     self.packager = ConanMultiPackager(username="******",
                                        channel="mychannel",
                                        runner=self.runner,
                                        conan_api=self.conan_api,
                                        gcc_versions=["4.3", "5"],
                                        use_docker=True,
                                        reference="lib/1.0",
                                        ci_manager=self.ci_manager)
     self.packager.add_common_builds()
     self.packager.builds = [({"os": "Windows"}, {"option": "value"})]
     self.assertEquals(self.packager.items, [BuildConf(settings={'os': 'Windows'},
                                                       options={'option': 'value'},
                                                       env_vars={}, build_requires={},
                                                       reference="lib/1.0@lasote/mychannel")])
 def test_docker_env_propagated(self):
     # test env
     with tools.environment_append({"CONAN_FAKE_VAR": "32"}):
         self.packager = ConanMultiPackager(username="******",
                                            channel="mychannel",
                                            runner=self.runner,
                                            conan_api=self.conan_api,
                                            gcc_versions=["5", "6"],
                                            clang_versions=["3.9", "4.0"],
                                            use_docker=True,
                                            reference="zlib/1.2.11",
                                            ci_manager=self.ci_manager)
         self._add_build(1, "gcc", "5")
         self.packager.run_builds(1, 1)
         self.assertIn('-e CONAN_FAKE_VAR="32"', self.runner.calls[-1])
Beispiel #28
0
    def test_missing_username(self):
        conanfile = """from conans import ConanFile
class Pkg(ConanFile):
    name = "lib"
    version = "1.0"
    options = {"shared": [True, False]}
    default_options = "shared=False"

"""
        self.save_conanfile(conanfile)

        with self.assertRaisesRegexp(
                Exception, "Instance ConanMultiPackage with 'username' "
                "parameter or use CONAN_USERNAME env variable"):
            ConanMultiPackager()
 def test_existing_upload_repo(self):
     self.api.remote_add("my_upload_repo", "https://api.bintray.com/conan/conan-community/conan")
     self.save_conanfile(self.conanfile)
     with tools.environment_append({"CONAN_PASSWORD": "******"}):
         mp = ConanMultiPackager(username="******", out=self.output.write,
                                 ci_manager=self.ci_manager,
                                 upload=["https://api.bintray.com/conan/conan-community/conan",
                                         False, "othername"])
         mp.add({}, {}, {})
         with self.assertRaisesRegexp(ConanException, "Wrong user or password"):
             mp.run()
         # The upload repo is kept because there is already an url
         # FIXME: Probaby we should rename if name is different (Conan 1.3)
         self.assertIn("Remote for URL 'https://api.bintray.com/conan/conan-community/conan' "
                       "already exist, keeping the current remote and its name", self.output)
 def test_existing_upload_repo_by_name(self):
     self.api.remote_add("upload_repo",
                         "https://api.bintray.com/different/conan-community/conan")
     self.save_conanfile(self.conanfile)
     with tools.environment_append({"CONAN_PASSWORD": "******",
                                    "CONAN_UPLOAD": "https://api.bintray.com/conan/"
                                                    "conan-community/conan"}):
         mp = ConanMultiPackager(username="******", out=self.output.write,
                                 ci_manager=self.ci_manager)
         mp.add({}, {}, {})
         with self.assertRaisesRegexp(ConanException, "Wrong user or password"):
             mp.run()
         self.assertNotIn("already exist, keeping the current remote and its name", self.output)
         repo = self.api.get_remote_by_name("upload_repo")
         self.assertEquals(repo.url, "https://api.bintray.com/conan/conan-community/conan")