)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9367ad8ac643c3ca26da08b6ebe49c4350218846","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"33cf8019_5a6d4e3a","updated":"2026-06-17 11:58:26.000000000","message":"small nit, +2 otherwise","commit_id":"e0fbcebdd1e00f746a363311cc48733872a51b38"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"33bff7fdafc4d26ebb194af6be1565e0ac17f956","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6fbb916b_a4a16766","updated":"2026-06-18 09:52:33.000000000","message":"Merging given previous +2s","commit_id":"4e66cc2f5982cdab26e3838411a37ea115fd7ef5"}],"kolla/image/tasks.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"715ec66573dd3ef32c000467faa5fad3f6b6e313","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        multi_platform \u003d \u0027,\u0027 in platform"},{"line_number":501,"context_line":"        if (platform and not multi_platform):"},{"line_number":502,"context_line":"            platform_arch \u003d platform.split(\u0027/\u0027)[-1]"},{"line_number":503,"context_line":"        else None"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        push_tag \u003d None"},{"line_number":506,"context_line":"        if platform_arch and self.conf.push:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7d9d2732_85229fa7","line":503,"updated":"2026-06-11 21:27:37.000000000","message":"pep8: E999 SyntaxError: expected \u0027:\u0027","commit_id":"ef861b6dbf355b74041a057a8d1fd9079d56a89f"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"2480d4cb942a3e82a82cba61d0ddd8983bd3d497","unresolved":true,"context_lines":[{"line_number":165,"context_line":"    @property"},{"line_number":166,"context_line":"    def followups(self):"},{"line_number":167,"context_line":"        followups \u003d []"},{"line_number":168,"context_line":"        if self.conf.push and self.success and not self.conf.buildkit:"},{"line_number":169,"context_line":"            followups.extend(["},{"line_number":170,"context_line":"                # If we are supposed to push the image into a"},{"line_number":171,"context_line":"                # container image repository,"}],"source_content_type":"text/x-python","patch_set":3,"id":"661353a2_28bcf273","line":168,"updated":"2026-06-18 06:45:34.000000000","message":"this will break for podman, as buildkit is true by default","commit_id":"a78c010d48704900ad161c061af3bdb9b1ec1a20"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"f89b8c114a82ea8171e72ec362e1a006c987b3bf","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    @property"},{"line_number":166,"context_line":"    def followups(self):"},{"line_number":167,"context_line":"        followups \u003d []"},{"line_number":168,"context_line":"        if self.conf.push and self.success and not self.conf.buildkit:"},{"line_number":169,"context_line":"            followups.extend(["},{"line_number":170,"context_line":"                # If we are supposed to push the image into a"},{"line_number":171,"context_line":"                # container image repository,"}],"source_content_type":"text/x-python","patch_set":3,"id":"60430161_57f56531","line":168,"in_reply_to":"661353a2_28bcf273","updated":"2026-06-18 07:14:39.000000000","message":"Good catch, done 😉","commit_id":"a78c010d48704900ad161c061af3bdb9b1ec1a20"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"361164f8dde10d36fec65ff1a2987bcf6495fea4","unresolved":true,"context_lines":[{"line_number":553,"context_line":"            self.logger.info(\u0027Built at %s (took %s)\u0027 %"},{"line_number":554,"context_line":"                             (now, now - image.start))"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    def _run_cmd(self, cmd):"},{"line_number":557,"context_line":"        with subprocess.Popen(  # nosec"},{"line_number":558,"context_line":"            cmd,"},{"line_number":559,"context_line":"            stdout\u003dsubprocess.PIPE,"},{"line_number":560,"context_line":"            stderr\u003dsubprocess.STDOUT,"},{"line_number":561,"context_line":"            universal_newlines\u003dTrue,"},{"line_number":562,"context_line":"            bufsize\u003d1"},{"line_number":563,"context_line":"        ) as proc:"},{"line_number":564,"context_line":"            for line in proc.stdout:"},{"line_number":565,"context_line":"                self.logger.info(line.rstrip())"},{"line_number":566,"context_line":"        if proc.returncode !\u003d 0:"},{"line_number":567,"context_line":"            raise subprocess.CalledProcessError(proc.returncode, cmd)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def squash(self):"},{"line_number":570,"context_line":"        image_tag \u003d self.image.canonical_name"}],"source_content_type":"text/x-python","patch_set":9,"id":"e83abef1_88006972","line":567,"range":{"start_line":556,"start_character":0,"end_line":567,"end_character":69},"updated":"2026-06-17 13:11:59.000000000","message":"```suggestion\n    def _run_cmd(self, cmd):\n        try:\n            with subprocess.Popen(  # nosec\n                cmd,\n                stdout\u003dsubprocess.PIPE,\n                stderr\u003dsubprocess.STDOUT,\n                universal_newlines\u003dTrue,\n                bufsize\u003d1\n            ) as proc:\n                for line in proc.stdout:\n                    self.logger.info(line.rstrip())\n            if proc.returncode !\u003d 0:\n                raise subprocess.CalledProcessError(proc.returncode, cmd)\n        except (KeyboardInterrupt, SystemExit):\n            # Security: Prevents zombie processes from being created when terminated (Ctrl+C)\n            proc.terminate()\n            proc.wait()\n            raise\n```","commit_id":"e0fbcebdd1e00f746a363311cc48733872a51b38"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"e2fc3d21c947b424ff1f90060106d5889a69a10d","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            self.logger.info(\u0027Built at %s (took %s)\u0027 %"},{"line_number":554,"context_line":"                             (now, now - image.start))"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    def _run_cmd(self, cmd):"},{"line_number":557,"context_line":"        with subprocess.Popen(  # nosec"},{"line_number":558,"context_line":"            cmd,"},{"line_number":559,"context_line":"            stdout\u003dsubprocess.PIPE,"},{"line_number":560,"context_line":"            stderr\u003dsubprocess.STDOUT,"},{"line_number":561,"context_line":"            universal_newlines\u003dTrue,"},{"line_number":562,"context_line":"            bufsize\u003d1"},{"line_number":563,"context_line":"        ) as proc:"},{"line_number":564,"context_line":"            for line in proc.stdout:"},{"line_number":565,"context_line":"                self.logger.info(line.rstrip())"},{"line_number":566,"context_line":"        if proc.returncode !\u003d 0:"},{"line_number":567,"context_line":"            raise subprocess.CalledProcessError(proc.returncode, cmd)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def squash(self):"},{"line_number":570,"context_line":"        image_tag \u003d self.image.canonical_name"}],"source_content_type":"text/x-python","patch_set":9,"id":"a663e4b7_c91558bc","line":567,"range":{"start_line":556,"start_character":0,"end_line":567,"end_character":69},"in_reply_to":"67868a98_7f4ccdbe","updated":"2026-06-17 14:31:16.000000000","message":"ahhh You\u0027re absolutely right I completely overlooked how subprocess.Popen","commit_id":"e0fbcebdd1e00f746a363311cc48733872a51b38"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"571675ad928bd86bb2085c3d45890b459665d66f","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            self.logger.info(\u0027Built at %s (took %s)\u0027 %"},{"line_number":554,"context_line":"                             (now, now - image.start))"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    def _run_cmd(self, cmd):"},{"line_number":557,"context_line":"        with subprocess.Popen(  # nosec"},{"line_number":558,"context_line":"            cmd,"},{"line_number":559,"context_line":"            stdout\u003dsubprocess.PIPE,"},{"line_number":560,"context_line":"            stderr\u003dsubprocess.STDOUT,"},{"line_number":561,"context_line":"            universal_newlines\u003dTrue,"},{"line_number":562,"context_line":"            bufsize\u003d1"},{"line_number":563,"context_line":"        ) as proc:"},{"line_number":564,"context_line":"            for line in proc.stdout:"},{"line_number":565,"context_line":"                self.logger.info(line.rstrip())"},{"line_number":566,"context_line":"        if proc.returncode !\u003d 0:"},{"line_number":567,"context_line":"            raise subprocess.CalledProcessError(proc.returncode, cmd)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def squash(self):"},{"line_number":570,"context_line":"        image_tag \u003d self.image.canonical_name"}],"source_content_type":"text/x-python","patch_set":9,"id":"67868a98_7f4ccdbe","line":567,"range":{"start_line":556,"start_character":0,"end_line":567,"end_character":69},"in_reply_to":"e83abef1_88006972","updated":"2026-06-17 14:25:14.000000000","message":"I don\u0027t think we have any way to get zombies created right now.\n\nThe subprocess.Popen context manager already calls proc.__exit__() on any exception, which in turn calls proc.communicate() and waits for the process to finish.\n\nWhat is this going to solve?\n\nWouldn\u0027t calling proc.terminate() and then proc.wait() without draining the stdout pipe cause to wait indefinitely in this case and make things worse?","commit_id":"e0fbcebdd1e00f746a363311cc48733872a51b38"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"be440a6d586a47fd6a2011fca117c014219c19dd","unresolved":true,"context_lines":[{"line_number":484,"context_line":"            self.logger.info(\u0027Built at %s (took %s)\u0027 %"},{"line_number":485,"context_line":"                             (now, now - image.start))"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def _build_buildkit(self, image, pull, buildargs):"},{"line_number":488,"context_line":"        platform \u003d self.conf.platform or \u0027\u0027"},{"line_number":489,"context_line":"        # A comma in --platform means a single invocation producing multiple"},{"line_number":490,"context_line":"        # platforms (remote/docker-container driver with multiple nodes, or"}],"source_content_type":"text/x-python","patch_set":10,"id":"8105b779_e66e56f4","line":487,"updated":"2026-06-17 22:34:18.000000000","message":"_build_buildkit has no --label handling. Any user using image labels gets silently dropped on buildkit","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"70d0ac9fc0c8577af77a1aa3389b54486842d3a0","unresolved":false,"context_lines":[{"line_number":484,"context_line":"            self.logger.info(\u0027Built at %s (took %s)\u0027 %"},{"line_number":485,"context_line":"                             (now, now - image.start))"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def _build_buildkit(self, image, pull, buildargs):"},{"line_number":488,"context_line":"        platform \u003d self.conf.platform or \u0027\u0027"},{"line_number":489,"context_line":"        # A comma in --platform means a single invocation producing multiple"},{"line_number":490,"context_line":"        # platforms (remote/docker-container driver with multiple nodes, or"}],"source_content_type":"text/x-python","patch_set":10,"id":"f6863fcf_23837a3c","line":487,"in_reply_to":"8105b779_e66e56f4","updated":"2026-06-18 05:16:24.000000000","message":"Done","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"be440a6d586a47fd6a2011fca117c014219c19dd","unresolved":true,"context_lines":[{"line_number":526,"context_line":"            # the local daemon; only the suffixed tag is pushed to the registry"},{"line_number":527,"context_line":"            cmd.extend([\u0027-t\u0027, push_tag])"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        if self.conf.push and not push_tag:"},{"line_number":530,"context_line":"            # Multi-platform single-shot or single-arch: buildx pushes directly"},{"line_number":531,"context_line":"            cmd.append(\u0027--push\u0027)"},{"line_number":532,"context_line":"        else:"},{"line_number":533,"context_line":"            # Per-node single-platform (with or without push): load into the"},{"line_number":534,"context_line":"            # local daemon so child image FROM lines resolve without a registry"},{"line_number":535,"context_line":"            # round-trip."},{"line_number":536,"context_line":"            cmd.append(\u0027--load\u0027)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        if buildargs:"},{"line_number":539,"context_line":"            for k, v in buildargs.items():"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fcc6375_d2ad62eb","line":536,"range":{"start_line":529,"start_character":0,"end_line":536,"end_character":32},"updated":"2026-06-17 22:34:18.000000000","message":"Multi-platform + no push silently emits --load\n\nmulti_platform\u003dTrue and conf.push\u003dFalse, push_tag is None, the condition is False, and the code falls to --load, which isn\u0027t supported ?","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"70d0ac9fc0c8577af77a1aa3389b54486842d3a0","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            # the local daemon; only the suffixed tag is pushed to the registry"},{"line_number":527,"context_line":"            cmd.extend([\u0027-t\u0027, push_tag])"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        if self.conf.push and not push_tag:"},{"line_number":530,"context_line":"            # Multi-platform single-shot or single-arch: buildx pushes directly"},{"line_number":531,"context_line":"            cmd.append(\u0027--push\u0027)"},{"line_number":532,"context_line":"        else:"},{"line_number":533,"context_line":"            # Per-node single-platform (with or without push): load into the"},{"line_number":534,"context_line":"            # local daemon so child image FROM lines resolve without a registry"},{"line_number":535,"context_line":"            # round-trip."},{"line_number":536,"context_line":"            cmd.append(\u0027--load\u0027)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        if buildargs:"},{"line_number":539,"context_line":"            for k, v in buildargs.items():"}],"source_content_type":"text/x-python","patch_set":10,"id":"b590e394_ff07c47b","line":536,"range":{"start_line":529,"start_character":0,"end_line":536,"end_character":32},"in_reply_to":"9fcc6375_d2ad62eb","updated":"2026-06-18 05:16:24.000000000","message":"Done","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"be440a6d586a47fd6a2011fca117c014219c19dd","unresolved":true,"context_lines":[{"line_number":541,"context_line":"        cmd.append(image.path)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        try:"},{"line_number":544,"context_line":"            self._run_cmd(cmd)"},{"line_number":545,"context_line":"            if push_tag:"},{"line_number":546,"context_line":"                self._run_cmd([\u0027docker\u0027, \u0027push\u0027, push_tag])"},{"line_number":547,"context_line":"        except Exception:"},{"line_number":548,"context_line":"            image.status \u003d Status.ERROR"},{"line_number":549,"context_line":"            self.logger.exception(\u0027Unknown error when building\u0027)"},{"line_number":550,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"153a0233_89599b6f","line":547,"range":{"start_line":544,"start_character":1,"end_line":547,"end_character":25},"updated":"2026-06-17 22:34:18.000000000","message":"When platform\u003d\u0027linux/amd64\u0027 and push\u003dTrue, the latest tag is never pushed, only latest-amd64. this will break for users.\n\nAt minimum I think  this needs a reno warning and/or probably an explicit docker push \u003ccanonical\u003e call as well","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"70d0ac9fc0c8577af77a1aa3389b54486842d3a0","unresolved":false,"context_lines":[{"line_number":541,"context_line":"        cmd.append(image.path)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        try:"},{"line_number":544,"context_line":"            self._run_cmd(cmd)"},{"line_number":545,"context_line":"            if push_tag:"},{"line_number":546,"context_line":"                self._run_cmd([\u0027docker\u0027, \u0027push\u0027, push_tag])"},{"line_number":547,"context_line":"        except Exception:"},{"line_number":548,"context_line":"            image.status \u003d Status.ERROR"},{"line_number":549,"context_line":"            self.logger.exception(\u0027Unknown error when building\u0027)"},{"line_number":550,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"aa38068f_3e24c91f","line":547,"range":{"start_line":544,"start_character":1,"end_line":547,"end_character":25},"in_reply_to":"153a0233_89599b6f","updated":"2026-06-18 05:16:24.000000000","message":"Done","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"}],"kolla/tests/test_build.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    @mock.patch(engine_client)"},{"line_number":488,"context_line":"    def test_followups_buildkit_skips_push(self, mock_client):"},{"line_number":489,"context_line":"        \"\"\"PushTask must not be added when buildkit is active (push is inline).\"\"\""},{"line_number":490,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":491,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":492,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.imageChild, push_queue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dde110e5_14b23386","line":489,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        builder.success \u003d True"},{"line_number":494,"context_line":"        self.conf.push \u003d True"},{"line_number":495,"context_line":"        followups \u003d builder.followups"},{"line_number":496,"context_line":"        push_tasks \u003d [f for f in followups if isinstance(f, tasks.PushIntoQueueTask)]"},{"line_number":497,"context_line":"        self.assertEqual(0, len(push_tasks))"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"820b34d9_88e6d82f","line":496,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"},{"line_number":516,"context_line":"    def test_build_buildkit_no_platform_with_push(self, mock_run_cmd):"},{"line_number":517,"context_line":"        \"\"\"No platform + push\u003dTrue: buildx pushes directly (--push, no --load).\"\"\""},{"line_number":518,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":519,"context_line":"        self.conf.set_override(\u0027push\u0027, True)"},{"line_number":520,"context_line":"        push_queue \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":6,"id":"8a8112d4_1196b588","line":517,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"},{"line_number":532,"context_line":"    def test_build_buildkit_single_platform_no_push(self, mock_run_cmd):"},{"line_number":533,"context_line":"        \"\"\"Single platform without push: --load, no push_tag, no extra push call.\"\"\""},{"line_number":534,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":535,"context_line":"        self.conf.set_override(\u0027platform\u0027, \u0027linux/amd64\u0027)"},{"line_number":536,"context_line":"        push_queue \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":6,"id":"65ee3f80_fc221b3d","line":533,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"},{"line_number":550,"context_line":"    def test_build_buildkit_single_platform_with_push(self, mock_run_cmd):"},{"line_number":551,"context_line":"        \"\"\"Single platform + push: platform-suffixed tag is pushed separately.\"\"\""},{"line_number":552,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":553,"context_line":"        self.conf.set_override(\u0027platform\u0027, \u0027linux/amd64\u0027)"},{"line_number":554,"context_line":"        self.conf.set_override(\u0027push\u0027, True)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a24895b_444657a8","line":551,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"},{"line_number":572,"context_line":"    def test_build_buildkit_multi_platform_with_push(self, mock_run_cmd):"},{"line_number":573,"context_line":"        \"\"\"Multi-platform + push: single --push invocation, no separate push.\"\"\""},{"line_number":574,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":575,"context_line":"        self.conf.set_override(\u0027platform\u0027, \u0027linux/amd64,linux/arm64\u0027)"},{"line_number":576,"context_line":"        self.conf.set_override(\u0027push\u0027, True)"}],"source_content_type":"text/x-python","patch_set":6,"id":"4378c859_531bdc7a","line":573,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":636,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":637,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.image, push_queue)"},{"line_number":638,"context_line":"        self.image.start \u003d datetime.datetime.now()"},{"line_number":639,"context_line":"        buildargs \u003d {\u0027HTTP_PROXY\u0027: \u0027http://proxy:8080\u0027, \u0027NO_PROXY\u0027: \u0027127.0.0.1\u0027}"},{"line_number":640,"context_line":"        builder._build_buildkit(self.image, pull\u003dFalse, buildargs\u003dbuildargs)"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"        cmd \u003d mock_run_cmd.call_args[0][0]"}],"source_content_type":"text/x-python","patch_set":6,"id":"e3b9a9cd_036606d9","line":639,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":"    @mock.patch(engine_client)"},{"line_number":688,"context_line":"    def test_build_image_buildkit_dispatches(self, mock_client):"},{"line_number":689,"context_line":"        \"\"\"When buildkit\u003dTrue and engine\u003ddocker, builder calls _build_buildkit.\"\"\""},{"line_number":690,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":691,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":692,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.image, push_queue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"691e6ffc_e905c598","line":689,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"127be704a2865b5aa7095de3284f4e99eb0aff44","unresolved":false,"context_lines":[{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    @mock.patch(engine_client)"},{"line_number":698,"context_line":"    def test_build_image_no_buildkit_uses_sdk(self, mock_client):"},{"line_number":699,"context_line":"        \"\"\"When buildkit\u003dFalse, builder uses the docker-py SDK (images.build).\"\"\""},{"line_number":700,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":701,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.image, push_queue)"},{"line_number":702,"context_line":"        builder.run()"}],"source_content_type":"text/x-python","patch_set":6,"id":"cd4e34e0_3bce49f1","line":699,"updated":"2026-06-17 07:04:14.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"e76e7bd3b8105f225fc3c3175b282a25f9855df9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    @mock.patch(engine_client)"},{"line_number":488,"context_line":"    def test_followups_buildkit_skips_push(self, mock_client):"},{"line_number":489,"context_line":"        \"\"\"PushTask must not be added when buildkit is active (push is inline).\"\"\""},{"line_number":490,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":491,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":492,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.imageChild, push_queue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"45458179_33d77ec4","line":489,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        builder.success \u003d True"},{"line_number":494,"context_line":"        self.conf.push \u003d True"},{"line_number":495,"context_line":"        followups \u003d builder.followups"},{"line_number":496,"context_line":"        push_tasks \u003d [f for f in followups if isinstance(f, tasks.PushIntoQueueTask)]"},{"line_number":497,"context_line":"        self.assertEqual(0, len(push_tasks))"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3cbf4ffb_4ff21ff7","line":496,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"},{"line_number":516,"context_line":"    def test_build_buildkit_no_platform_with_push(self, mock_run_cmd):"},{"line_number":517,"context_line":"        \"\"\"No platform + push\u003dTrue: buildx pushes directly (--push, no --load).\"\"\""},{"line_number":518,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":519,"context_line":"        self.conf.set_override(\u0027push\u0027, True)"},{"line_number":520,"context_line":"        push_queue \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf8c51a6_df4d5f2f","line":517,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"},{"line_number":532,"context_line":"    def test_build_buildkit_single_platform_no_push(self, mock_run_cmd):"},{"line_number":533,"context_line":"        \"\"\"Single platform without push: --load, no push_tag, no extra push call.\"\"\""},{"line_number":534,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":535,"context_line":"        self.conf.set_override(\u0027platform\u0027, \u0027linux/amd64\u0027)"},{"line_number":536,"context_line":"        push_queue \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":7,"id":"856d511d_5e66e52e","line":533,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"},{"line_number":550,"context_line":"    def test_build_buildkit_single_platform_with_push(self, mock_run_cmd):"},{"line_number":551,"context_line":"        \"\"\"Single platform + push: platform-suffixed tag is pushed separately.\"\"\""},{"line_number":552,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":553,"context_line":"        self.conf.set_override(\u0027platform\u0027, \u0027linux/amd64\u0027)"},{"line_number":554,"context_line":"        self.conf.set_override(\u0027push\u0027, True)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bdd539f4_a37c4beb","line":551,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    @mock.patch.object(tasks.BuildTask, \u0027_run_cmd\u0027)"},{"line_number":572,"context_line":"    def test_build_buildkit_multi_platform_with_push(self, mock_run_cmd):"},{"line_number":573,"context_line":"        \"\"\"Multi-platform + push: single --push invocation, no separate push.\"\"\""},{"line_number":574,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":575,"context_line":"        self.conf.set_override(\u0027platform\u0027, \u0027linux/amd64,linux/arm64\u0027)"},{"line_number":576,"context_line":"        self.conf.set_override(\u0027push\u0027, True)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ac6f4418_ce0e0347","line":573,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":636,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":637,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.image, push_queue)"},{"line_number":638,"context_line":"        self.image.start \u003d datetime.datetime.now()"},{"line_number":639,"context_line":"        buildargs \u003d {\u0027HTTP_PROXY\u0027: \u0027http://proxy:8080\u0027, \u0027NO_PROXY\u0027: \u0027127.0.0.1\u0027}"},{"line_number":640,"context_line":"        builder._build_buildkit(self.image, pull\u003dFalse, buildargs\u003dbuildargs)"},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"        cmd \u003d mock_run_cmd.call_args[0][0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"0d1a716c_af71db54","line":639,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":"    @mock.patch(engine_client)"},{"line_number":688,"context_line":"    def test_build_image_buildkit_dispatches(self, mock_client):"},{"line_number":689,"context_line":"        \"\"\"When buildkit\u003dTrue and engine\u003ddocker, builder calls _build_buildkit.\"\"\""},{"line_number":690,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":691,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":692,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.image, push_queue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"18656a2f_174b0a3b","line":689,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4dd800d4543bc00b05681a26d9e422fa0a7c5c7d","unresolved":false,"context_lines":[{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    @mock.patch(engine_client)"},{"line_number":698,"context_line":"    def test_build_image_no_buildkit_uses_sdk(self, mock_client):"},{"line_number":699,"context_line":"        \"\"\"When buildkit\u003dFalse, builder uses the docker-py SDK (images.build).\"\"\""},{"line_number":700,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":701,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.image, push_queue)"},{"line_number":702,"context_line":"        builder.run()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1fbe183f_dd585ba7","line":699,"updated":"2026-06-17 08:19:41.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"64371ce59221f11fb59e1acd5316c86027a6b34b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4c567bd0e95bc550adb4758ba6924c62a6c6d9e1","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    @mock.patch(engine_client)"},{"line_number":488,"context_line":"    def test_followups_buildkit_skips_push(self, mock_client):"},{"line_number":489,"context_line":"        \"\"\"PushTask must not be added when buildkit is active (docker engine).\"\"\""},{"line_number":490,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":491,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":492,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.imageChild, push_queue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"df8ad704_14c7f2d1","line":489,"updated":"2026-06-18 08:15:23.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"771f102e2f30ac500ff5fc21d07c7d7ba5501d3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4c567bd0e95bc550adb4758ba6924c62a6c6d9e1","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"        mock_check_output.side_effect \u003d OSError(2, \u0027No such file or directory\u0027)"},{"line_number":1143,"context_line":"        self.assertRaises(OSError, common_utils.check_docker_buildx)"},{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"class MainTest(base.TestCase):"},{"line_number":1146,"context_line":""},{"line_number":1147,"context_line":"    def setUp(self):"},{"line_number":1148,"context_line":"        super(MainTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":16,"id":"7763c92d_74a3ac2b","line":1145,"updated":"2026-06-18 08:15:23.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"771f102e2f30ac500ff5fc21d07c7d7ba5501d3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2a213a8cc50434b7ed79b7524ba74690c1f031b1","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    @mock.patch(engine_client)"},{"line_number":488,"context_line":"    def test_followups_buildkit_skips_push(self, mock_client):"},{"line_number":489,"context_line":"        \"\"\"PushTask must not be added when buildkit is active (docker engine).\"\"\""},{"line_number":490,"context_line":"        self.conf.set_override(\u0027buildkit\u0027, True)"},{"line_number":491,"context_line":"        push_queue \u003d mock.Mock()"},{"line_number":492,"context_line":"        builder \u003d tasks.BuildTask(self.conf, self.imageChild, push_queue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"20d0931e_1e7dd0d0","line":489,"updated":"2026-06-18 08:53:22.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"36472ff2ba32adce2d7e8bb8a2e8dff5cd421e1b"}],"releasenotes/notes/add-buildkit-support-via-buildx-c4fda2286c2d7d1e.yaml":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9367ad8ac643c3ca26da08b6ebe49c4350218846","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for building images using Docker BuildKit via"},{"line_number":5,"context_line":"    ``docker buildx build``. Enable it with the ``--buildkit`` flag or by"},{"line_number":6,"context_line":"    setting ``buildkit \u003d True`` in the ``[DEFAULT]`` section of"},{"line_number":7,"context_line":"    ``kolla-build.conf``. Requires the ``docker-buildx-plugin`` to be"},{"line_number":8,"context_line":"    installed and only applies when ``--engine docker`` is used."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"048c25ab_dc6bccc5","line":5,"updated":"2026-06-17 11:58:26.000000000","message":"this needs to rephrased since you are making buildkit the default","commit_id":"e0fbcebdd1e00f746a363311cc48733872a51b38"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"d64d2bee13a44761cf88c587b3fe8fbe8e99190d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for building images using Docker BuildKit via"},{"line_number":5,"context_line":"    ``docker buildx build``. Enable it with the ``--buildkit`` flag or by"},{"line_number":6,"context_line":"    setting ``buildkit \u003d True`` in the ``[DEFAULT]`` section of"},{"line_number":7,"context_line":"    ``kolla-build.conf``. Requires the ``docker-buildx-plugin`` to be"},{"line_number":8,"context_line":"    installed and only applies when ``--engine docker`` is used."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"cdf3700a_42d7b4bc","line":5,"in_reply_to":"048c25ab_dc6bccc5","updated":"2026-06-17 12:56:58.000000000","message":"Done","commit_id":"e0fbcebdd1e00f746a363311cc48733872a51b38"}],"roles/kolla-build-deps/tasks/main.yml":[{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"741d090b4df98bb1835119cf003fc70e306fa6b1","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- name: Install docker-buildx-plugin"},{"line_number":55,"context_line":"  ansible.builtin.package:"},{"line_number":56,"context_line":"    name: docker-buildx-plugin"},{"line_number":57,"context_line":"  become: true"},{"line_number":58,"context_line":"  when: container_engine \u003d\u003d \u0027docker\u0027"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ec362ba2_be102220","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":30},"updated":"2026-06-17 19:50:43.000000000","message":"in Ubuntu atleast the package name is `docker-buildx`\nhttps://packages.ubuntu.com/noble/docker-buildx\nhttps://packages.ubuntu.com/resolute/docker-buildx","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"},{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"de2344704606c97465f86f8f5a9cc4f4c0767bfc","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- name: Install docker-buildx-plugin"},{"line_number":55,"context_line":"  ansible.builtin.package:"},{"line_number":56,"context_line":"    name: docker-buildx-plugin"},{"line_number":57,"context_line":"  become: true"},{"line_number":58,"context_line":"  when: container_engine \u003d\u003d \u0027docker\u0027"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"25ec66a1_a209e9e6","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":30},"in_reply_to":"5d241f74_ef731e19","updated":"2026-06-17 20:21:19.000000000","message":"strange... okay, this package should replace standard one","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"1ad697c488f27386ebc20d0326f1afa17fecf9f8","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- name: Install docker-buildx-plugin"},{"line_number":55,"context_line":"  ansible.builtin.package:"},{"line_number":56,"context_line":"    name: docker-buildx-plugin"},{"line_number":57,"context_line":"  become: true"},{"line_number":58,"context_line":"  when: container_engine \u003d\u003d \u0027docker\u0027"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"5d241f74_ef731e19","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":30},"in_reply_to":"ec362ba2_be102220","updated":"2026-06-17 20:05:58.000000000","message":"If only we didn\u0027t use Docker repo instead of in-distro repo - see https://download.docker.com/linux/ubuntu/dists/noble/pool/stable/amd64/docker-buildx-plugin_0.13.1-1~ubuntu.24.04~noble_amd64.deb","commit_id":"c3fe3d17129deb4d892fb3647d5058f672be1a44"}]}
