jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/375061 )
Change subject: Split docker functions into separate file ...................................................................... Split docker functions into separate file Change-Id: I3481e17f9c59ad7ac38d30bf0bae15092dcc8c07 --- A docker.py M run.py 2 files changed, 71 insertions(+), 31 deletions(-) Approvals: Legoktm: Looks good to me, approved jenkins-bot: Verified diff --git a/docker.py b/docker.py new file mode 100644 index 0000000..a76f299 --- /dev/null +++ b/docker.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +""" +Wrapper around the docker command +Copyright (C) 2017 Kunal Mehta <lego...@member.fsf.org> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +""" + +import subprocess +import time + + +DOCKER_IMAGE = 'libraryupgrader' + + +def run(name: str, env: dict): + """ + :param name: Name of container + :param env: Environment values + """ + args = ['docker', 'run', '--name=' + name] + for key, value in env.items(): + args.extend(['--env', '%s=%s' % (key, value)]) + args.extend(['-d', DOCKER_IMAGE]) + subprocess.check_call(args) + + +def get_running_containers(): + out = subprocess.check_output(['docker', 'ps', '-q']).decode().strip() + if not out: + return [] + return out.split('\n') + + +def wait_for_containers(count: int): + while len(get_running_containers()) > count: + print('Waiting...') + time.sleep(2) + + +def logs(name: str): + return subprocess.check_output(['docker', 'logs', name]).decode() + + +def remove_container(name: str): + subprocess.check_call(['docker', 'rm', name]) diff --git a/run.py b/run.py index e65b3d1..90ec2f4 100755 --- a/run.py +++ b/run.py @@ -21,11 +21,10 @@ import json import os import requests -import subprocess import sys -import time import app +import docker CONCURRENT = 10 DOCKER_IMAGE = 'libraryupgrader' @@ -64,24 +63,21 @@ def run(ext_name, version, mode): - args = [ - 'docker', 'run', - '--name=' + ext_name + version, - '--env', 'MODE=' + mode, - '--env', 'EXT=' + ext_name, - '--env', 'PACKAGE=mediawiki/mediawiki-codesniffer', - ] + env = { + 'MODE': mode, + 'EXT': ext_name, + 'PACKAGE': 'mediawiki/mediawiki-codesniffer' + } if version != 'same': - args.extend(['--env', 'VERSION=' + version]) + env['VERSION'] = version if mode == 'upgrade': for var in ('GERRIT_USER', 'GERRIT_PW'): - args.extend(['--env', '%s=%s' % (var, CONFIG.get(var))]) - args.extend(['-d', DOCKER_IMAGE]) - subprocess.check_call(args) + env[var] = CONFIG.get(var) + docker.run(ext_name + version, env) def check_logs(ext_name, version): - out = subprocess.check_output(['docker', 'logs', ext_name + version]).decode() + out = docker.logs(ext_name + version) try: data = out.split('------------')[1] j = json.loads(data) @@ -90,21 +86,8 @@ print(out) print('Couldnt get JSON data...') j = None - subprocess.check_call(['docker', 'rm', ext_name + version]) + docker.remove_container(ext_name + version) return j - - -def get_running_containers(): - out = subprocess.check_output(['docker', 'ps', '-q']).decode().strip() - if not out: - return [] - return out.split('\n') - - -def wait_for_containers(count): - while len(get_running_containers()) > count: - print('Waiting...') - time.sleep(2) def main(): @@ -121,9 +104,9 @@ else: print('Skipping ' + ext) # If more than max containers running, pause - wait_for_containers(count=CONCURRENT) + docker.wait_for_containers(count=CONCURRENT) # Wait for all containers to finish... - wait_for_containers(count=0) + docker.wait_for_containers(count=0) for ext in cleanup: data[ext][version] = check_logs(ext, version) with open('output.json', 'w') as f: @@ -158,7 +141,7 @@ print('Doesnt have codesniffer.') sys.exit(1) run(sys.argv[1], version=version, mode=mode) - wait_for_containers(0) + docker.wait_for_containers(0) check_logs(sys.argv[1], version=version) else: main() -- To view, visit https://gerrit.wikimedia.org/r/375061 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I3481e17f9c59ad7ac38d30bf0bae15092dcc8c07 Gerrit-PatchSet: 1 Gerrit-Project: labs/libraryupgrader Gerrit-Branch: master Gerrit-Owner: Legoktm <lego...@member.fsf.org> Gerrit-Reviewer: Legoktm <lego...@member.fsf.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits