Share CI platform detection
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user