• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import os
5import re
6from cpt.packager import ConanMultiPackager
7from cpt.ci_manager import CIManager
8from cpt.printer import Printer
9
10
11class BuilderSettings(object):
12    @property
13    def username(self):
14        """ Set catchorg as package's owner
15        """
16        return os.getenv("CONAN_USERNAME", "catchorg")
17
18    @property
19    def login_username(self):
20        """ Set Bintray login username
21        """
22        return os.getenv("CONAN_LOGIN_USERNAME", "horenmar")
23
24    @property
25    def upload(self):
26        """ Set Catch2 repository to be used on upload.
27            The upload server address could be customized by env var
28            CONAN_UPLOAD. If not defined, the method will check the branch name.
29            Only master or CONAN_STABLE_BRANCH_PATTERN will be accepted.
30            The master branch will be pushed to testing channel, because it does
31            not match the stable pattern. Otherwise it will upload to stable
32            channel.
33        """
34        return os.getenv("CONAN_UPLOAD", "https://api.bintray.com/conan/catchorg/Catch2")
35
36    @property
37    def upload_only_when_stable(self):
38        """ Force to upload when running over tag branch
39        """
40        return os.getenv("CONAN_UPLOAD_ONLY_WHEN_STABLE", "True").lower() in ["true", "1", "yes"]
41
42    @property
43    def stable_branch_pattern(self):
44        """ Only upload the package the branch name is like a tag
45        """
46        return os.getenv("CONAN_STABLE_BRANCH_PATTERN", r"v\d+\.\d+\.\d+")
47
48    @property
49    def reference(self):
50        """ Read project version from branch create Conan reference
51        """
52        return os.getenv("CONAN_REFERENCE", "Catch2/{}".format(self._version))
53
54    @property
55    def channel(self):
56        """ Default Conan package channel when not stable
57        """
58        return os.getenv("CONAN_CHANNEL", "testing")
59
60    @property
61    def _version(self):
62        """ Get version name from cmake file
63        """
64        pattern = re.compile(r"project\(Catch2 LANGUAGES CXX VERSION (\d+\.\d+\.\d+)\)")
65        version = "latest"
66        with open("CMakeLists.txt") as file:
67            for line in file:
68                result = pattern.search(line)
69                if result:
70                    version = result.group(1)
71        return version
72
73    @property
74    def _branch(self):
75        """ Get branch name from CI manager
76        """
77        printer = Printer(None)
78        ci_manager = CIManager(printer)
79        return ci_manager.get_branch()
80
81
82if __name__ == "__main__":
83    settings = BuilderSettings()
84    builder = ConanMultiPackager(
85        reference=settings.reference,
86        channel=settings.channel,
87        upload=settings.upload,
88        upload_only_when_stable=settings.upload_only_when_stable,
89        stable_branch_pattern=settings.stable_branch_pattern,
90        login_username=settings.login_username,
91        username=settings.username,
92        test_folder=os.path.join(".conan", "test_package"))
93    builder.add()
94    builder.run()
95