Share CI platform detection

This commit is contained in:
Joe Rickerby
2020-11-23 21:00:22 +00:00
parent 95fecc2d58
commit f8a4fbe42d
3 changed files with 59 additions and 21 deletions
+9 -13
View File
@@ -21,6 +21,7 @@ from cibuildwheel.util import (
BuildSelector,
DependencyConstraints,
Unbuffered,
detect_ci_provider,
resources_dir,
)
@@ -47,12 +48,6 @@ def get_option_from_environment(option_name: str, platform: Optional[str] = None
return os.environ.get(option_name, default)
def strtobool(val: str) -> bool:
if val.lower() in ('y', 'yes', 't', 'true', 'on', '1'):
return True
return False
def main() -> None:
parser = argparse.ArgumentParser(
description='Build wheels for all the platforms.',
@@ -96,13 +91,14 @@ def main() -> None:
if args.platform != 'auto':
platform = args.platform
else:
ci = strtobool(os.environ.get('CI', 'false')) or 'BITRISE_BUILD_NUMBER' in os.environ or 'AZURE_HTTP_USER_AGENT' in os.environ or 'GITHUB_WORKFLOW' in os.environ
if not ci:
print('cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server, '
'Travis CI, AppVeyor, Azure Pipelines, GitHub Actions and CircleCI are supported. You '
'can run on your development machine or other CI providers using the --platform argument. '
'Check --help output for more information.',
file=sys.stderr)
ci_provider = detect_ci_provider()
if ci_provider is None:
print(textwrap.dedent('''
cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server;
Travis CI, AppVeyor, Azure Pipelines, GitHub Actions, CircleCI, and Gitlab are
supported. You can run on your development machine or other CI providers using the
--platform argument. Check --help output for more information.
'''), file=sys.stderr)
exit(2)
if sys.platform.startswith('linux'):
platform = 'linux'
+8 -4
View File
@@ -5,6 +5,8 @@ import sys
import time
from typing import Optional, Union
from cibuildwheel.util import CIProvider, detect_ci_provider
DEFAULT_FOLD_PATTERN = ('{name}', '')
FOLD_PATTERNS = {
'azure': ('##[group]{name}', '##[endgroup]'),
@@ -41,19 +43,21 @@ class Logger:
self.unicode_enabled = file_supports_unicode(sys.stdout)
if 'AZURE_HTTP_USER_AGENT' in os.environ:
ci_provider = detect_ci_provider()
if ci_provider == CIProvider.azure_pipelines:
self.fold_mode = 'azure'
self.colors_enabled = True
elif 'GITHUB_ACTIONS' in os.environ:
elif ci_provider == CIProvider.github_actions:
self.fold_mode = 'github'
self.colors_enabled = True
elif 'TRAVIS' in os.environ:
elif ci_provider == CIProvider.travis_ci:
self.fold_mode = 'travis'
self.colors_enabled = True
elif 'APPVEYOR' in os.environ:
elif ci_provider == CIProvider.appveyor:
self.fold_mode = 'disabled'
self.colors_enabled = True
+42 -4
View File
@@ -1,14 +1,15 @@
import os
import textwrap
import certifi
import urllib.request
import ssl
import textwrap
import urllib.request
from enum import Enum
from fnmatch import fnmatch
from pathlib import Path
from time import sleep
from typing import Dict, List, NamedTuple, Optional, Union
import certifi
from .environment import ParsedEnvironment
@@ -155,3 +156,40 @@ class NonPlatformWheelError(Exception):
''')
super().__init__(message)
def strtobool(val: str) -> bool:
if val.lower() in ('y', 'yes', 't', 'true', 'on', '1'):
return True
return False
class CIProvider(str, Enum):
travis_ci = 'travis'
appveyor = 'appveyor'
circle_ci = 'circle_ci'
azure_pipelines = 'azure_pipelines'
github_actions = 'github_actions'
gitlab = 'gitlab'
other = 'other'
def detect_ci_provider() -> Optional[CIProvider]:
if 'TRAVIS' in os.environ:
return CIProvider.travis_ci
elif 'APPVEYOR' in os.environ:
return CIProvider.appveyor
elif 'CIRCLECI' in os.environ:
return CIProvider.circle_ci
elif 'AZURE_HTTP_USER_AGENT' in os.environ:
return CIProvider.azure_pipelines
elif 'GITHUB_ACTIONS' in os.environ:
return CIProvider.github_actions
elif 'GITLAB_CI' in os.environ:
return CIProvider.gitlab
elif strtobool(os.environ.get('CI', 'false')):
return CIProvider.other
else:
return None