Commit f97da1f7 authored by Alex Bennée's avatar Alex Bennée
Browse files

docker: docker.py add check sub-command



This command allows you to check if we need to re-build a docker
image. If the image isn't in the repository or the checksums don't
match then we return false and some text (for processing in
makefiles).

Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
parent f9172822
Loading
Loading
Loading
Loading
+37 −1
Original line number Diff line number Diff line
@@ -184,8 +184,14 @@ class Docker(object):
                                       stderr=subprocess.STDOUT,
                                       **kwargs)

    def inspect_tag(self, tag):
        try:
            return self._output(["inspect", tag])
        except subprocess.CalledProcessError:
            return None

    def get_image_dockerfile_checksum(self, tag):
        resp = self._output(["inspect", tag])
        resp = self.inspect_tag(tag)
        labels = json.loads(resp)[0]["Config"].get("Labels", {})
        return labels.get("com.qemu.dockerfile-checksum", "")

@@ -447,6 +453,36 @@ class CcCommand(SubCommand):
        return Docker().command("run", cmd, args.quiet)


class CheckCommand(SubCommand):
    """Check if we need to re-build a docker image out of a dockerfile.
    Arguments: <tag> <dockerfile>"""
    name = "check"

    def args(self, parser):
        parser.add_argument("tag",
                            help="Image Tag")
        parser.add_argument("dockerfile",
                            help="Dockerfile name")

    def run(self, args, argv):
        dockerfile = open(args.dockerfile, "rb").read()
        tag = args.tag

        dkr = Docker()
        info = dkr.inspect_tag(tag)
        if info is None:
            print("Image does not exist")
            return 1

        if dkr.image_matches_dockerfile(tag, dockerfile):
            if not args.quiet:
                print("Image is up to date")
            return 0
        else:
            print("Image needs updating")
            return 1


def main():
    parser = argparse.ArgumentParser(description="A Docker helper",
            usage="%s <subcommand> ..." % os.path.basename(sys.argv[0]))