summaryrefslogtreecommitdiffstats
path: root/third_party/python/taskcluster_taskgraph/taskgraph/docker.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/taskcluster_taskgraph/taskgraph/docker.py')
-rw-r--r--third_party/python/taskcluster_taskgraph/taskgraph/docker.py48
1 files changed, 33 insertions, 15 deletions
diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/docker.py b/third_party/python/taskcluster_taskgraph/taskgraph/docker.py
index 23897cbbee..9f849525fc 100644
--- a/third_party/python/taskcluster_taskgraph/taskgraph/docker.py
+++ b/third_party/python/taskcluster_taskgraph/taskgraph/docker.py
@@ -18,6 +18,22 @@ except ImportError as e:
from taskgraph.util import docker
from taskgraph.util.taskcluster import get_artifact_url, get_session
+DEPLOY_WARNING = """
+*****************************************************************
+WARNING: Image is not suitable for deploying/pushing.
+
+To automatically tag the image the following files are required:
+- {image_dir}/REGISTRY
+- {image_dir}/VERSION
+
+The REGISTRY file contains the Docker registry hosting the image.
+A default REGISTRY file may also be defined in the parent docker
+directory.
+
+The VERSION file contains the version of the image.
+*****************************************************************
+"""
+
def get_image_digest(image_name):
from taskgraph.generator import load_tasks_for_kind
@@ -34,7 +50,7 @@ def get_image_digest(image_name):
def load_image_by_name(image_name, tag=None):
from taskgraph.generator import load_tasks_for_kind
- from taskgraph.optimize import IndexSearch
+ from taskgraph.optimize.strategies import IndexSearch
from taskgraph.parameters import Parameters
params = Parameters(
@@ -43,8 +59,9 @@ def load_image_by_name(image_name, tag=None):
)
tasks = load_tasks_for_kind(params, "docker-image")
task = tasks[f"build-docker-image-{image_name}"]
+ deadline = None
task_id = IndexSearch().should_replace_task(
- task, {}, task.optimization.get("index-search", [])
+ task, {}, deadline, task.optimization.get("index-search", [])
)
if task_id in (True, False):
@@ -52,8 +69,10 @@ def load_image_by_name(image_name, tag=None):
"Could not find artifacts for a docker image "
"named `{image_name}`. Local commits and other changes "
"in your checkout may cause this error. Try "
- "updating to a fresh checkout of mozilla-central "
- "to download image.".format(image_name=image_name)
+ "updating to a fresh checkout of {project} "
+ "to download image.".format(
+ image_name=image_name, project=params["project"]
+ )
)
return False
@@ -102,19 +121,18 @@ def build_image(name, tag, args=None):
buf = BytesIO()
docker.stream_context_tar(".", image_dir, buf, "", args)
- subprocess.run(
- ["docker", "image", "build", "--no-cache", "-t", tag, "-"], input=buf.getvalue()
- )
+ cmdargs = ["docker", "image", "build", "--no-cache", "-"]
+ if tag:
+ cmdargs.insert(-1, f"-t={tag}")
+ subprocess.run(cmdargs, input=buf.getvalue())
- print(f"Successfully built {name} and tagged with {tag}")
+ msg = f"Successfully built {name}"
+ if tag:
+ msg += f" and tagged with {tag}"
+ print(msg)
- if tag.endswith(":latest"):
- print("*" * 50)
- print("WARNING: no VERSION file found in image directory.")
- print("Image is not suitable for deploying/pushing.")
- print("Create an image suitable for deploying/pushing by creating")
- print("a VERSION file in the image directory.")
- print("*" * 50)
+ if not tag or tag.endswith(":latest"):
+ print(DEPLOY_WARNING.format(image_dir=os.path.relpath(image_dir), image=name))
def load_image(url, imageName=None, imageTag=None):