Allow the testing of any of the example configs in /examples
This commit is contained in:
@@ -8,6 +8,7 @@ import sys
|
|||||||
import textwrap
|
import textwrap
|
||||||
import time
|
import time
|
||||||
import click
|
import click
|
||||||
|
from glob import glob
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
|
|
||||||
@@ -30,49 +31,67 @@ def generate_basic_project(path):
|
|||||||
project.generate(path)
|
project.generate(path)
|
||||||
|
|
||||||
|
|
||||||
CIService = namedtuple('CIService', 'name src_config_path dst_config_path badge_md')
|
CIService = namedtuple('CIService', 'name dst_config_path badge_md')
|
||||||
services = [
|
services = [
|
||||||
CIService(
|
CIService(
|
||||||
name='appveyor',
|
name='appveyor',
|
||||||
src_config_path='examples/appveyor-minimal.yml',
|
|
||||||
dst_config_path='appveyor.yml',
|
dst_config_path='appveyor.yml',
|
||||||
badge_md='[](https://ci.appveyor.com/project/joerick/cibuildwheel/branch/{branch})',
|
badge_md='[](https://ci.appveyor.com/project/joerick/cibuildwheel/branch/{branch})',
|
||||||
),
|
),
|
||||||
CIService(
|
CIService(
|
||||||
name='azure-pipelines',
|
name='azure-pipelines',
|
||||||
src_config_path='examples/azure-pipelines-minimal.yml',
|
|
||||||
dst_config_path='azure-pipelines.yml',
|
dst_config_path='azure-pipelines.yml',
|
||||||
badge_md='[](https://dev.azure.com/joerick0429/cibuildwheel/_build/latest?definitionId=2&branchName={branch})',
|
badge_md='[](https://dev.azure.com/joerick0429/cibuildwheel/_build/latest?definitionId=2&branchName={branch})',
|
||||||
),
|
),
|
||||||
CIService(
|
CIService(
|
||||||
name='circle-ci',
|
name='circleci',
|
||||||
src_config_path='examples/circleci-minimal.yml',
|
|
||||||
dst_config_path='.circleci/config.yml',
|
dst_config_path='.circleci/config.yml',
|
||||||
badge_md='[](https://circleci.com/gh/joerick/cibuildwheel/tree/{branch})',
|
badge_md='[](https://circleci.com/gh/joerick/cibuildwheel/tree/{branch})',
|
||||||
),
|
),
|
||||||
CIService(
|
CIService(
|
||||||
name='github',
|
name='github',
|
||||||
src_config_path='examples/github-minimal.yml',
|
|
||||||
dst_config_path='.github/workflows/example.yml',
|
dst_config_path='.github/workflows/example.yml',
|
||||||
badge_md='[](https://github.com/joerick/cibuildwheel/actions)',
|
badge_md='[](https://github.com/joerick/cibuildwheel/actions)',
|
||||||
),
|
),
|
||||||
CIService(
|
CIService(
|
||||||
name='travis-ci',
|
name='travis-ci',
|
||||||
src_config_path='examples/travis-ci-minimal.yml',
|
|
||||||
dst_config_path='.travis.yml',
|
dst_config_path='.travis.yml',
|
||||||
badge_md='[](https://travis-ci.org/joerick/cibuildwheel)',
|
badge_md='[](https://travis-ci.org/joerick/cibuildwheel)',
|
||||||
),
|
),
|
||||||
CIService(
|
CIService(
|
||||||
name='gitlab',
|
name='gitlab',
|
||||||
src_config_path='examples/gitlab-minimal.yml',
|
|
||||||
dst_config_path='.gitlab-ci.yml',
|
dst_config_path='.gitlab-ci.yml',
|
||||||
badge_md='[](https://gitlab.com/joerick/cibuildwheel/-/commits/{branch})'
|
badge_md='[](https://gitlab.com/joerick/cibuildwheel/-/commits/{branch})'
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def ci_service_for_config_file(config_file):
|
||||||
|
for service in services:
|
||||||
|
if Path(config_file).name.startswith(service.name+'-'):
|
||||||
|
return service
|
||||||
|
raise ValueError(f'unknown ci service for config file {config_file}')
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
def run_example_ci_configs():
|
@click.argument('config_files', nargs=-1, type=click.Path())
|
||||||
|
def run_example_ci_configs(config_files=None):
|
||||||
|
'''
|
||||||
|
Test the example configs. If no files are specified, will test
|
||||||
|
examples/*-minimal.yml
|
||||||
|
'''
|
||||||
|
|
||||||
|
if len(config_files) == 0:
|
||||||
|
config_files = glob('examples/*-minimal.yml')
|
||||||
|
|
||||||
|
# check each CI service has at most 1 config file
|
||||||
|
configs_by_service = {}
|
||||||
|
for config_file in config_files:
|
||||||
|
service = ci_service_for_config_file(config_file)
|
||||||
|
if service.name in configs_by_service:
|
||||||
|
raise Exception('You cannot specify more than one config per CI service')
|
||||||
|
configs_by_service[service.name] = config_file
|
||||||
|
|
||||||
if git_repo_has_changes():
|
if git_repo_has_changes():
|
||||||
print('Your git repo has uncommitted changes. Commit or stash before continuing.')
|
print('Your git repo has uncommitted changes. Commit or stash before continuing.')
|
||||||
exit(1)
|
exit(1)
|
||||||
@@ -91,18 +110,19 @@ def run_example_ci_configs():
|
|||||||
example_project = Path('example_root')
|
example_project = Path('example_root')
|
||||||
generate_basic_project(example_project)
|
generate_basic_project(example_project)
|
||||||
|
|
||||||
for service in services:
|
for config_file in config_files:
|
||||||
src_config_file = Path(service.src_config_path)
|
service = ci_service_for_config_file(config_file)
|
||||||
|
src_config_file = Path(config_file)
|
||||||
dst_config_file = example_project / service.dst_config_path
|
dst_config_file = example_project / service.dst_config_path
|
||||||
|
|
||||||
dst_config_file.parent.mkdir(parents=True, exist_ok=True)
|
dst_config_file.parent.mkdir(parents=True, exist_ok=True)
|
||||||
shutil.copyfile(src_config_file, dst_config_file)
|
shutil.copyfile(src_config_file, dst_config_file)
|
||||||
|
|
||||||
run(['git', 'add', example_project], check=True)
|
run(['git', 'add', example_project], check=True)
|
||||||
run(['git', 'commit', '-m', textwrap.dedent(f'''
|
run(['git', 'commit', '--no-verify', '-m', textwrap.dedent(f'''
|
||||||
Test example minimal configs
|
Test example minimal configs
|
||||||
|
|
||||||
Testing files: {[s.src_config_path for s in services]}
|
Testing files: {config_files}
|
||||||
Generated from branch: {previous_branch}
|
Generated from branch: {previous_branch}
|
||||||
Time: {timestamp}
|
Time: {timestamp}
|
||||||
''')], check=True)
|
''')], check=True)
|
||||||
@@ -116,9 +136,10 @@ def run_example_ci_configs():
|
|||||||
print('> ')
|
print('> ')
|
||||||
print('> | Service | Config | Status |')
|
print('> | Service | Config | Status |')
|
||||||
print('> |---|---|---|')
|
print('> |---|---|---|')
|
||||||
for service in services:
|
for config_file in config_files:
|
||||||
|
service = ci_service_for_config_file(config_file)
|
||||||
badge = service.badge_md.format(branch=branch_name, branch_escaped=quote(branch_name, safe=''))
|
badge = service.badge_md.format(branch=branch_name, branch_escaped=quote(branch_name, safe=''))
|
||||||
print(f'> | {service.name} | `{service.src_config_path}` | {badge} |')
|
print(f'> | {service.name} | `{config_file}` | {badge} |')
|
||||||
print('> ')
|
print('> ')
|
||||||
print('> Generated by `bin/run_example_ci_config.py`')
|
print('> Generated by `bin/run_example_ci_config.py`')
|
||||||
print()
|
print()
|
||||||
|
|||||||
Reference in New Issue
Block a user