瀏覽代碼

#712 Build on Travis

Signed-off-by: Uilian Ries <uilianries@gmail.com>
Uilian Ries 6 年之前
父節點
當前提交
036bc718e1
共有 4 個文件被更改,包括 178 次插入2 次删除
  1. 65 2
      .travis.yml
  2. 78 0
      conan/build.py
  3. 14 0
      conan/travis/build.sh
  4. 21 0
      conan/travis/install.sh

+ 65 - 2
.travis.yml

@@ -42,7 +42,7 @@ install:
 before_script:
   # Add an IPv6 config - see the corresponding Travis issue
   # https://github.com/travis-ci/travis-ci/issues/8361
-  - if [ "${ENABLE_IPV6}" == "YES" -a "${TRAVIS_OS_NAME}" == "linux" ]; then 
+  - if [ "${ENABLE_IPV6}" == "YES" -a "${TRAVIS_OS_NAME}" == "linux" ]; then
       echo "Activating IPv6 on Travis";
       sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6';
     fi
@@ -119,6 +119,38 @@ after_success:
       bash <(curl -s https://codecov.io/bash);
     fi
 
+conan-linux: &conan-linux
+    os: linux
+    dist: xenial
+    language: python
+    python: "3.7"
+    services:
+      - docker
+    before_install:
+      - true
+    install:
+      - ./conan/travis/install.sh
+    before_script:
+      - true
+    script:
+      - ./conan/travis/build.sh
+    after_success:
+      - true
+
+conan-osx: &conan-osx
+    os: osx
+    language: generic
+    before_install:
+      - true
+    install:
+      - ./conan/travis/install.sh
+    before_script:
+      - true
+    script:
+      - ./conan/travis/build.sh
+    after_success:
+      - true
+
 
 ##############################################################################
 # build matrix
@@ -129,6 +161,37 @@ matrix:
   fast_finish: false
   include:
 
+  - <<: *conan-linux
+    env: CONAN_GCC_VERSIONS=4.9 CONAN_DOCKER_IMAGE=conanio/gcc49
+  - <<: *conan-linux
+    env: CONAN_GCC_VERSIONS=5 CONAN_DOCKER_IMAGE=conanio/gcc5
+  - <<: *conan-linux
+    env: CONAN_GCC_VERSIONS=6 CONAN_DOCKER_IMAGE=conanio/gcc6
+  - <<: *conan-linux
+    env: CONAN_GCC_VERSIONS=7 CONAN_DOCKER_IMAGE=conanio/gcc7
+  - <<: *conan-linux
+    env: CONAN_GCC_VERSIONS=8 CONAN_DOCKER_IMAGE=conanio/gcc8
+  - <<: *conan-linux
+    env: CONAN_CLANG_VERSIONS=3.9 CONAN_DOCKER_IMAGE=conanio/clang39
+  - <<: *conan-linux
+    env: CONAN_CLANG_VERSIONS=4.0 CONAN_DOCKER_IMAGE=conanio/clang40
+  - <<: *conan-linux
+    env: CONAN_CLANG_VERSIONS=5.0 CONAN_DOCKER_IMAGE=conanio/clang50
+  - <<: *conan-linux
+    env: CONAN_CLANG_VERSIONS=6.0 CONAN_DOCKER_IMAGE=conanio/clang60
+  - <<: *conan-osx
+    osx_image: xcode8.3
+    env: CONAN_APPLE_CLANG_VERSIONS=8.1
+  - <<: *conan-osx
+    osx_image: xcode9
+    env: CONAN_APPLE_CLANG_VERSIONS=9.0
+  - <<: *conan-osx
+    osx_image: xcode9.4
+    env: CONAN_APPLE_CLANG_VERSIONS=9.1
+  - <<: *conan-osx
+    osx_image: xcode10.1
+    env: CONAN_APPLE_CLANG_VERSIONS=10.0
+
   - dist: trusty
     sudo: false
     os: linux
@@ -304,7 +367,7 @@ matrix:
       ENABLE_DUKTAPE=NO
       NO_CACHING=YES
       ALLOW_WARNINGS=YES
-  
+
   - os: linux
     sudo: required
     compiler: gcc

+ 78 - 0
conan/build.py

@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os
+import re
+from cpt.packager import ConanMultiPackager
+from cpt.ci_manager import CIManager
+from cpt.printer import Printer
+
+
+class BuilderSettings(object):
+
+    @property
+    def branch(self):
+        """ Get branch name
+        """
+        printer = Printer(None)
+        ci_manager = CIManager(printer)
+        return ci_manager.get_branch()
+
+    @property
+    def username(self):
+        """ Set civetweb as package's owner
+        """
+        return os.getenv("CONAN_USERNAME", "civetweb")
+
+    @property
+    def upload(self):
+        """ Set civetweb 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")
+
+        prog = re.compile(self.stable_branch_pattern)
+        if self.branch and prog.match(self.branch):
+            return "https://api.bintray.com/conan/civetweb/conan"
+
+        return None
+
+    @property
+    def upload_only_when_stable(self):
+        """ Force to upload when match stable pattern branch
+        """
+        return os.getenv("CONAN_UPLOAD_ONLY_WHEN_STABLE", True)
+
+    @property
+    def stable_branch_pattern(self):
+        """ Only upload the package the branch name is like a tag
+        """
+        return os.getenv("CONAN_STABLE_BRANCH_PATTERN", r"\d+\.\d+\.\d+")
+
+    @property
+    def version(self):
+        return self.branch if re.match(self.stable_branch_pattern, self.branch) else "latest"
+
+    @property
+    def reference(self):
+        """ Read project version from branch name to create Conan referece
+        """
+        return os.getenv("CONAN_REFERENCE", "civetweb/{}".format(self.version))
+
+if __name__ == "__main__":
+    settings = BuilderSettings()
+    builder = ConanMultiPackager(
+        reference=settings.reference,
+        username=settings.username,
+        upload=settings.upload,
+        upload_only_when_stable=settings.upload_only_when_stable,
+        stable_branch_pattern=settings.stable_branch_pattern,
+        test_folder=os.path.join("conan", "test_package"))
+    builder.add_common_builds(pure_c=False)
+    builder.run()

+ 14 - 0
conan/travis/build.sh

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+set -e
+set -x
+
+if [[ "$(uname -s)" == 'Darwin' ]]; then
+    if which pyenv > /dev/null; then
+        eval "$(pyenv init -)"
+    fi
+    pyenv activate conan
+fi
+
+conan user
+python conan/build.py

+ 21 - 0
conan/travis/install.sh

@@ -0,0 +1,21 @@
+#!/bin/bash
+
+set -ex
+
+if [[ "$(uname -s)" == 'Darwin' ]]; then
+    brew update || brew update
+    brew outdated pyenv || brew upgrade pyenv
+    brew install pyenv-virtualenv
+    brew install cmake || true
+
+    if which pyenv > /dev/null; then
+        eval "$(pyenv init -)"
+    fi
+
+    pyenv install 3.7.1
+    pyenv virtualenv 3.7.1 conan
+    pyenv rehash
+    pyenv activate conan
+fi
+
+pip install -U conan_package_tools conan