|
Packit |
d0b620 |
#!/usr/bin/env python
|
|
Packit |
d0b620 |
# -*- coding: utf-8 -*-
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
import os
|
|
Packit |
d0b620 |
import re
|
|
Packit |
d0b620 |
from cpt.packager import ConanMultiPackager
|
|
Packit |
d0b620 |
from cpt.ci_manager import CIManager
|
|
Packit |
d0b620 |
from cpt.printer import Printer
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
class BuilderSettings(object):
|
|
Packit |
d0b620 |
@property
|
|
Packit |
d0b620 |
def username(self):
|
|
Packit |
d0b620 |
""" Set taocpp as package's owner
|
|
Packit |
d0b620 |
"""
|
|
Packit |
d0b620 |
return os.getenv("CONAN_USERNAME", "taocpp")
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
@property
|
|
Packit |
d0b620 |
def upload(self):
|
|
Packit |
d0b620 |
""" Set taocpp repository to be used on upload.
|
|
Packit |
d0b620 |
The upload server address could be customized by env var
|
|
Packit |
d0b620 |
CONAN_UPLOAD. If not defined, the method will check the branch name.
|
|
Packit |
d0b620 |
Only master or CONAN_STABLE_BRANCH_PATTERN will be accepted.
|
|
Packit |
d0b620 |
The master branch will be pushed to testing channel, because it does
|
|
Packit |
d0b620 |
not match the stable pattern. Otherwise it will upload to stable
|
|
Packit |
d0b620 |
channel.
|
|
Packit |
d0b620 |
"""
|
|
Packit |
d0b620 |
if os.getenv("CONAN_UPLOAD", None) is not None:
|
|
Packit |
d0b620 |
return os.getenv("CONAN_UPLOAD")
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
printer = Printer(None)
|
|
Packit |
d0b620 |
ci_manager = CIManager(printer)
|
|
Packit |
d0b620 |
branch = ci_manager.get_branch()
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
patterns = [r"v?\d+\.\d+\.\d+-.*", self.stable_branch_pattern]
|
|
Packit |
d0b620 |
for pattern in patterns:
|
|
Packit |
d0b620 |
prog = re.compile(pattern)
|
|
Packit |
d0b620 |
if branch and prog.match(branch):
|
|
Packit |
d0b620 |
return "https://api.bintray.com/conan/taocpp/public-conan"
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
@property
|
|
Packit |
d0b620 |
def upload_only_when_stable(self):
|
|
Packit |
d0b620 |
""" Force to upload when running over tag branch
|
|
Packit |
d0b620 |
"""
|
|
Packit |
d0b620 |
return os.getenv("CONAN_UPLOAD_ONLY_WHEN_STABLE", True)
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
@property
|
|
Packit |
d0b620 |
def stable_branch_pattern(self):
|
|
Packit |
d0b620 |
""" Only upload the package the branch name is like a tag
|
|
Packit |
d0b620 |
"""
|
|
Packit |
d0b620 |
return os.getenv("CONAN_STABLE_BRANCH_PATTERN", r"\d+\.\d+\.\d+")
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
@property
|
|
Packit |
d0b620 |
def reference(self):
|
|
Packit |
d0b620 |
""" Read project version from CMake file to create Conan referece
|
|
Packit |
d0b620 |
"""
|
|
Packit |
d0b620 |
pattern = re.compile(r"project \(pegtl VERSION (\d+\.\d+\.\d+) LANGUAGES CXX\)")
|
|
Packit |
d0b620 |
version = None
|
|
Packit |
d0b620 |
with open('CMakeLists.txt') as file:
|
|
Packit |
d0b620 |
for line in file:
|
|
Packit |
d0b620 |
result = pattern.match(line)
|
|
Packit |
d0b620 |
if result:
|
|
Packit |
d0b620 |
version = result.group(1)
|
|
Packit |
d0b620 |
if not version:
|
|
Packit |
d0b620 |
raise Exception("Could not find version in CMakeLists.txt")
|
|
Packit |
d0b620 |
return os.getenv("CONAN_REFERENCE", "pegtl/{}@taocpp/stable".format(version))
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
if __name__ == "__main__":
|
|
Packit |
d0b620 |
settings = BuilderSettings()
|
|
Packit |
d0b620 |
builder = ConanMultiPackager(
|
|
Packit |
d0b620 |
reference=settings.reference,
|
|
Packit |
d0b620 |
username=settings.username,
|
|
Packit |
d0b620 |
upload=settings.upload,
|
|
Packit |
d0b620 |
upload_only_when_stable=settings.upload_only_when_stable,
|
|
Packit |
d0b620 |
stable_branch_pattern=settings.stable_branch_pattern,
|
|
Packit |
d0b620 |
test_folder=os.path.join(".conan", "test_package"))
|
|
Packit |
d0b620 |
builder.add()
|
|
Packit |
d0b620 |
builder.run()
|