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

Reply via email to