def build()

in src/image.py [0:0]


    def build(self):
        """
        The build function builds the specified docker image

        Returns:
            returns the build status
        """
        self.summary["start_time"] = datetime.now()

        if not self.to_build:
            self.log = ["Not built"]
            self.build_status = constants.NOT_BUILT
            self.summary["status"] = constants.STATUS_MESSAGE[self.build_status]
            return self.build_status

        if self.info.get("base_image_uri"):
            self.build_args["BASE_IMAGE"] = self.info["base_image_uri"]

        if self.info.get("extra_build_args"):
            self.build_args.update(self.info.get("extra_build_args"))

        if self.info.get("labels"):
            self.labels.update(self.info.get("labels"))

        with open(self.context.context_path, "rb") as context_file:
            response = []

            cache_from = None
            if self.cache_tag:
                response.append("Pulling cached image")
                self.client.pull(repository=self.repository, tag=self.cache_tag)
                cache_from = [f"{self.repository}:{self.cache_tag}"]
                response.append(f"Setting cache to: {cache_from}")

            for line in self.client.build(
                fileobj=context_file,
                path=self.dockerfile,
                custom_context=True,
                rm=True,
                decode=True,
                tag=self.ecr_url,
                buildargs=self.build_args,
                labels=self.labels,
                cache_from=cache_from
            ):
                if line.get("error") is not None:
                    self.context.remove()
                    response.append(line["error"])

                    self.log = response
                    self.build_status = constants.FAIL
                    self.summary["status"] = constants.STATUS_MESSAGE[self.build_status]
                    self.summary["end_time"] = datetime.now()

                    return self.build_status

                if line.get("stream") is not None:
                    response.append(line["stream"])
                elif line.get("status") is not None:
                    response.append(line["status"])
                else:
                    response.append(str(line))

            self.context.remove()

            self.summary["image_size"] = int(
                self.client.inspect_image(self.ecr_url)["Size"]
            ) / (1024 * 1024)
            if self.summary["image_size"] > self.info["image_size_baseline"] * 1.20:
                response.append("Image size baseline exceeded")
                response.append(f"{self.summary['image_size']} > 1.2 * {self.info['image_size_baseline']}")
                response += self.collect_installed_packages_information()
                self.build_status = constants.FAIL_IMAGE_SIZE_LIMIT
            else:
                self.build_status = constants.SUCCESS

            for line in self.client.push(
                self.repository, self.tag, stream=True, decode=True
            ):
                if line.get("error") is not None:
                    response.append(line["error"])

                    self.log = response
                    self.build_status = constants.FAIL
                    self.summary["status"] = constants.STATUS_MESSAGE[self.build_status]
                    self.summary["end_time"] = datetime.now()

                    return self.build_status
                if line.get("stream") is not None:
                    response.append(line["stream"])
                else:
                    response.append(str(line))

            self.summary["status"] = constants.STATUS_MESSAGE[self.build_status]
            self.summary["end_time"] = datetime.now()
            self.summary["ecr_url"] = self.ecr_url
            self.log = response

            return self.build_status