diff options
Diffstat (limited to 'project/ci/dirs.py')
-rw-r--r-- | project/ci/dirs.py | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/project/ci/dirs.py b/project/ci/dirs.py deleted file mode 100644 index 6de9509..0000000 --- a/project/ci/dirs.py +++ /dev/null @@ -1,176 +0,0 @@ -# Copyright (c) 2020 Egor Tensin <Egor.Tensin@gmail.com> -# This file is part of the "cmake-common" project. -# For details, see https://github.com/egor-tensin/cmake-common. -# Distributed under the MIT License. - -import abc -import os -import os.path - -from project.boost.version import Version -from project.ci.appveyor.generator import Generator, Image -from project.configuration import Configuration -from project.platform import Platform -from project.toolset import ToolsetVersion -from project.utils import env - - -class Dirs(abc.ABC): - @staticmethod - def detect(hint=None): - matching = [ci for ci in _ALL_CI_LIST if ci.this_one()] - if len(matching) == 0: - raise RuntimeError('no CI system was detected') - if len(matching) == 1: - return matching[0] - # The hint parameter is basically a workaround for when this is run - # on a CI, _but_ testing another CI is desired. - if hint is not None: - for ci in matching: - if ci.get_name() == hint: - return ci - names = ', '.join(ci.get_name() for ci in matching) - raise RuntimeError(f"can't select a single CI system out of these: {names}") - - def __init__(self): - pass - - @staticmethod - @abc.abstractmethod - def get_name(): - pass - - @abc.abstractmethod - def this_one(self): - pass - - @staticmethod - def get_toolset(): - if 'TOOLSET' in os.environ: - return ToolsetVersion.parse(os.environ['TOOLSET']) - return None - - @staticmethod - def get_platform(): - return Platform.parse(env('PLATFORM')) - - @staticmethod - def get_configuration(): - return Configuration.parse(env('CONFIGURATION')) - - @abc.abstractmethod - def get_src_dir(self): - pass - - def get_build_dir(self): - return os.path.join(os.path.dirname(self.get_src_dir()), 'build') - - @abc.abstractmethod - def get_prebuilt_boost_dir(self): - pass - - @staticmethod - def get_boost_version(): - return Version.from_string(env('BOOST_VERSION')) - - def get_boost_dir(self): - return os.path.join(self.get_build_dir(), 'boost') - - def get_cmake_dir(self): - return os.path.join(self.get_build_dir(), 'cmake') - - def get_install_dir(self): - return os.path.join(self.get_build_dir(), 'install') - - @abc.abstractmethod - def get_cmake_args(self): - pass - - @staticmethod - def all_ci_names(): - return [ci.get_name() for ci in _ALL_CI_LIST] - - @staticmethod - def join_ci_names(): - return ', '.join(Dirs.all_ci_names()) - - @staticmethod - def get_boost_help(): - return f'''Download & build Boost during a CI run. - -This is similar to running both project.boost.download & project.boost.build, -but auto-fills some parameters from environment variables. - -The supported CI systems are: {Dirs.join_ci_names()}. -''' - - @staticmethod - def get_cmake_help(): - return f'''Build a CMake project during a CI run. - -This is similar to running project.build, but auto-fills some parameters -from environment variables. - -The supported CI systems are: {Dirs.join_ci_names()}. -''' - - -class Travis(Dirs): - @staticmethod - def get_name(): - return 'Travis' - - def this_one(self): - return 'TRAVIS' in os.environ - - def get_src_dir(self): - return env('TRAVIS_BUILD_DIR') - - def get_prebuilt_boost_dir(self): - # Travis doesn't have pre-built Boost (available for installation from - # the official Ubuntu repositories though). - return None - - def get_cmake_args(self): - return [] - - -class AppVeyor(Dirs): - @staticmethod - def get_name(): - return 'AppVeyor' - - def this_one(self): - return 'APPVEYOR' in os.environ - - def get_src_dir(self): - return env('APPVEYOR_BUILD_FOLDER') - - def get_prebuilt_boost_dir(self): - return Image.get().get_prebuilt_boost_dir() - - def get_cmake_args(self): - return ['-G', str(Generator.from_image(Image.get()))] - - -class GitHub(Dirs): - @staticmethod - def get_name(): - return 'GitHub Actions' - - def this_one(self): - return 'GITHUB_ACTIONS' in os.environ - - def get_src_dir(self): - return env('GITHUB_WORKSPACE') - - def get_prebuilt_boost_dir(self): - # Used to have 1.72.0 pre-built binaries, but not anymore: - # https://github.com/actions/virtual-environments/issues/2667 - return None - - def get_cmake_args(self): - return [] - - -_ALL_CI_LIST = (Travis(), AppVeyor(), GitHub()) |