command to look at wheel build settings

Report on which repos need to have the flag to build universal wheels.

Change-Id: Ied933596d8f23d60f5456fa9d74302eadf9146ed
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Doug Hellmann 2018-10-02 17:29:27 -04:00
parent f83cb4d58b
commit de3e85e271
2 changed files with 104 additions and 0 deletions

View File

@ -0,0 +1,103 @@
#!/usr/bin/env python3
import configparser
import logging
import os.path
from cliff import lister
from goal_tools import governance
LOG = logging.getLogger(__name__)
def get_setup_config(repo_dir):
LOG.debug('getting settings in %s', repo_dir)
input_name = os.path.join(repo_dir, 'setup.cfg')
parser = configparser.ConfigParser()
parser.read([input_name])
return parser
def check_one(repo_base_dir, repo):
# Specs repositories aren't packaged
if repo.endswith('-specs'):
return 'not needed'
# Charm repositories don't need to build wheels
repo_base = repo.partition('/')[-1]
if repo_base.startswith('charm-'):
return 'not needed'
# Puppet repos don't build wheels
if repo_base.startswith('puppet-'):
return 'not needed'
# xstatic repos don't need wheels
if repo_base.startswith('xstatic-'):
return 'not needed'
repo_dir = os.path.join(os.path.expanduser(repo_base_dir), repo)
if not os.path.exists(os.path.join(repo_dir, 'setup.cfg')):
LOG.info('skipping %s', repo)
return 'not needed'
LOG.info('scanning %s', repo)
config = get_setup_config(repo_dir)
if not config.has_option('wheel', 'universal'):
return 'not set'
if config['wheel']['universal']:
return 'OK'
return 'Disabled'
class WheelMissingUniversal(lister.Lister):
"list the repos missing the wheel universal setting"
def get_parser(self, prog_name):
parser = super().get_parser(prog_name)
parser.add_argument(
'--repo-base-dir',
default='~/repos',
help='base directory where repositories are cloned (%(default)s)',
)
parser.add_argument(
'--project-list',
default=governance.PROJECTS_LIST,
help='URL for governance projects.yaml',
)
parser.add_argument(
'--team',
help='limit search to one team',
)
parser.add_argument(
'--errors-only', '-e',
default=False,
action='store_true',
help='only show mistakes',
)
return parser
def take_action(self, parsed_args):
columns = ('Team', 'Repo', 'Status')
gov_dat = governance.Governance(url=parsed_args.project_list)
if parsed_args.team:
repos = gov_dat.get_repos_for_team(parsed_args.team)
else:
repos = gov_dat.get_repos()
teams_and_repos = sorted(
(gov_dat.get_repo_owner(r), r)
for r in repos
)
data = [
(team, r, check_one(parsed_args.repo_base_dir, r))
for team, r in teams_and_repos
if team != 'Infrastructure'
]
if parsed_args.errors_only:
data = [
r
for r in data
if r[-1] not in ('OK', 'not needed')
]
return (columns, data)

View File

@ -63,6 +63,7 @@ python3_first =
migration announce = goal_tools.python3_first.repos:MigrationAnnounce
tox missing = goal_tools.python3_first.toxsettings:ToxMissingPy3
tox fix = goal_tools.python3_first.toxsettings:ToxFixMissingPy3
wheel missing = goal_tools.python3_first.wheelsettings:WheelMissingUniversal
[wheel]
universal = 1