Merge branch '19092-upload-crunchstat_summary-to-pypi'
[arvados-dev.git] / jenkins / install-arvados-jobs-image
index d825f7ff7743f66673058d8ce6370e320249bfbb..fe2f63482b79e52c84271177615430e57ea51110 100755 (executable)
@@ -1,5 +1,9 @@
 #!/usr/bin/env python
 
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
 from __future__ import print_function
 
 import argparse
@@ -16,19 +20,26 @@ def findormake_project(arv, prefix, project_name):
     system_user_uuid = prefix+'-tpzed-000000000000000'
     groups = arv.groups().list(
         filters=[
-            ['group_class', '=', 'project'],
             ['name', '=', project_name],
             ['owner_uuid', '=', system_user_uuid],
         ],
-        select=['uuid']).execute()['items']
+        select=['uuid', 'group_class']).execute()['items']
     if groups:
-        uuid = groups[0]['uuid']
-        logger.debug('found project %s', uuid)
-        return uuid
+        proj = groups[0]
+        logger.debug('found project %s', proj['uuid'])
+        if proj['group_class'] != 'project':
+            logger.info('project %s has group_class %s, changing to %s',
+                        proj['uuid'], proj['group_class'], 'project')
+            arv.groups().update(
+                uuid=proj['uuid'],
+                body={
+                    'group_class': 'project',
+                }).execute()
+        return proj['uuid']
     uuid = arv.groups().create(body={
-        group_class: 'project',
-        name: project_name,
-        owner_uuid: system_user_uuid,
+        'group_class': 'project',
+        'name': project_name,
+        'owner_uuid': system_user_uuid,
     }).execute()['uuid']
     logger.info('created project %s: %s', uuid, project_name)
     return uuid
@@ -36,15 +47,16 @@ def findormake_project(arv, prefix, project_name):
 
 def findormake_project_perm(arv, prefix, project_uuid):
     all_users_group_uuid = prefix+'-j7d0g-fffffffffffffff'
-    if arv.links().list(
-            filters=[
-                ['tail_uuid', '=', all_users_group_uuid],
-                ['head_uuid', '=', project_uuid],
-                ['link_class', '=', 'permission'],
-                ['name', '=', 'can_read'],
-            ],
-            select=['uuid']).execute()['items']:
-        logger.debug('found permission link %s', uuid)
+    links = arv.links().list(
+        filters=[
+            ['tail_uuid', '=', all_users_group_uuid],
+            ['head_uuid', '=', project_uuid],
+            ['link_class', '=', 'permission'],
+            ['name', '=', 'can_read'],
+        ],
+        select=['uuid']).execute()['items']
+    if links:
+        logger.debug('found permission link %s', links[0]['uuid'])
         return
     uuid = arv.links().create(body={
         'tail_uuid': all_users_group_uuid,
@@ -58,15 +70,6 @@ def findormake_project_perm(arv, prefix, project_uuid):
 
 
 def findorpull_image(want_repo, want_tag, project_uuid):
-    for line in subprocess.check_output(['arv-keepdocker']).splitlines():
-        try:
-            repo, tag, image_id, collection, created = line.split(None, 4)
-        except ValueError:
-            continue
-        if repo == want_repo and tag == want_tag:
-            logger.debug('found image tag %s collection %s created %s',
-                        tag, collection, created)
-            return collection
     logger.info('pulling repo %s tag %s', want_repo, want_tag)
     subprocess.check_call([
         'arv-keepdocker',
@@ -76,9 +79,13 @@ def findorpull_image(want_repo, want_tag, project_uuid):
 
 def tag_latest(repo, tag, project_uuid):
     logger.debug('tagging %s:%s as %s:latest', repo, tag, repo)
-    subprocess.check_call([
-        'docker', 'tag', '-f', repo+':'+tag, repo+':latest'])
-    logger.debug('arv-keepdocker %s:latest', repo, tag, repo)
+    tag_cmd = ['docker', 'tag']
+    if subprocess.check_output(tag_cmd + ['--help']).find('--force') >= 0:
+        tag_cmd += ['--force']
+    tag_cmd += [repo+':'+tag, repo+':latest']
+    subprocess.check_call(tag_cmd)
+
+    logger.debug('arv-keepdocker %s:latest', repo)
     subprocess.check_call([
         'arv-keepdocker',
         '--project-uuid='+project_uuid,