Share CI platform detection
This commit is contained in:
@@ -21,6 +21,7 @@ from cibuildwheel.util import (
|
|||||||
BuildSelector,
|
BuildSelector,
|
||||||
DependencyConstraints,
|
DependencyConstraints,
|
||||||
Unbuffered,
|
Unbuffered,
|
||||||
|
detect_ci_provider,
|
||||||
resources_dir,
|
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)
|
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:
|
def main() -> None:
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description='Build wheels for all the platforms.',
|
description='Build wheels for all the platforms.',
|
||||||
@@ -96,13 +91,14 @@ def main() -> None:
|
|||||||
if args.platform != 'auto':
|
if args.platform != 'auto':
|
||||||
platform = args.platform
|
platform = args.platform
|
||||||
else:
|
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
|
ci_provider = detect_ci_provider()
|
||||||
if not ci:
|
if ci_provider is None:
|
||||||
print('cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server, '
|
print(textwrap.dedent('''
|
||||||
'Travis CI, AppVeyor, Azure Pipelines, GitHub Actions and CircleCI are supported. You '
|
cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server;
|
||||||
'can run on your development machine or other CI providers using the --platform argument. '
|
Travis CI, AppVeyor, Azure Pipelines, GitHub Actions, CircleCI, and Gitlab are
|
||||||
'Check --help output for more information.',
|
supported. You can run on your development machine or other CI providers using the
|
||||||
file=sys.stderr)
|
--platform argument. Check --help output for more information.
|
||||||
|
'''), file=sys.stderr)
|
||||||
exit(2)
|
exit(2)
|
||||||
if sys.platform.startswith('linux'):
|
if sys.platform.startswith('linux'):
|
||||||
platform = 'linux'
|
platform = 'linux'
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import sys
|
|||||||
import time
|
import time
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union
|
||||||
|
|
||||||
|
from cibuildwheel.util import CIProvider, detect_ci_provider
|
||||||
|
|
||||||
DEFAULT_FOLD_PATTERN = ('{name}', '')
|
DEFAULT_FOLD_PATTERN = ('{name}', '')
|
||||||
FOLD_PATTERNS = {
|
FOLD_PATTERNS = {
|
||||||
'azure': ('##[group]{name}', '##[endgroup]'),
|
'azure': ('##[group]{name}', '##[endgroup]'),
|
||||||
@@ -41,19 +43,21 @@ class Logger:
|
|||||||
|
|
||||||
self.unicode_enabled = file_supports_unicode(sys.stdout)
|
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.fold_mode = 'azure'
|
||||||
self.colors_enabled = True
|
self.colors_enabled = True
|
||||||
|
|
||||||
elif 'GITHUB_ACTIONS' in os.environ:
|
elif ci_provider == CIProvider.github_actions:
|
||||||
self.fold_mode = 'github'
|
self.fold_mode = 'github'
|
||||||
self.colors_enabled = True
|
self.colors_enabled = True
|
||||||
|
|
||||||
elif 'TRAVIS' in os.environ:
|
elif ci_provider == CIProvider.travis_ci:
|
||||||
self.fold_mode = 'travis'
|
self.fold_mode = 'travis'
|
||||||
self.colors_enabled = True
|
self.colors_enabled = True
|
||||||
|
|
||||||
elif 'APPVEYOR' in os.environ:
|
elif ci_provider == CIProvider.appveyor:
|
||||||
self.fold_mode = 'disabled'
|
self.fold_mode = 'disabled'
|
||||||
self.colors_enabled = True
|
self.colors_enabled = True
|
||||||
|
|
||||||
|
|||||||
+42
-4
@@ -1,14 +1,15 @@
|
|||||||
import os
|
import os
|
||||||
import textwrap
|
|
||||||
import certifi
|
|
||||||
import urllib.request
|
|
||||||
import ssl
|
import ssl
|
||||||
|
import textwrap
|
||||||
|
import urllib.request
|
||||||
|
from enum import Enum
|
||||||
from fnmatch import fnmatch
|
from fnmatch import fnmatch
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
from typing import Dict, List, NamedTuple, Optional, Union
|
from typing import Dict, List, NamedTuple, Optional, Union
|
||||||
|
|
||||||
|
import certifi
|
||||||
|
|
||||||
from .environment import ParsedEnvironment
|
from .environment import ParsedEnvironment
|
||||||
|
|
||||||
|
|
||||||
@@ -155,3 +156,40 @@ class NonPlatformWheelError(Exception):
|
|||||||
''')
|
''')
|
||||||
|
|
||||||
super().__init__(message)
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user