Skip to content

Add buildctl engine#23133

Open
ndellosa95 wants to merge 41 commits intopantsbuild:mainfrom
ndellosa95:add-buildctl-engine
Open

Add buildctl engine#23133
ndellosa95 wants to merge 41 commits intopantsbuild:mainfrom
ndellosa95:add-buildctl-engine

Conversation

@ndellosa95
Copy link
Copy Markdown
Contributor

@ndellosa95 ndellosa95 commented Feb 24, 2026

Closes #23030

FYI I'm holding off on writing release notes until some of the implementation questions I've raised here are discussed.


It's worth discussing the default behavior for the output field here.

For the docker build engine, we just default to not including it if it's not provided. If it is provided, we just include it as is and leave the users responsible for whether the value makes sense.

For the buildctl build engine, we actually need the --output option, so there is a special handling function to determine we need to partially or completely generate the value OR if we should just provide it as is, same as the docker way and leave it up to the user to make it make sense.

@ndellosa95 ndellosa95 marked this pull request as ready for review April 20, 2026 16:59
Copy link
Copy Markdown
Contributor Author

@ndellosa95 ndellosa95 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some review comments of my own

# -----------------------------------------------------------------------------------------------


class DataclassOption(_OptionBase[_OptT, _DefaultT]):
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can break this out into a separate PR if desirable

if cast(DockerPackageFieldSet, request.field_set).pushes_on_package():
if (
cast(PublishDockerImageFieldSet, request.field_set).pushes_on_package()
or options.build_engine == DockerBuildEngine.BUILDCTL
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I maybe actually add buildctl as a push_engine option for this? Or in fact, maybe it doesn't make sense to have build_engine and push_engine as separate options?

mutually_exclusive_group="engines",
)

def _experimental_enable_podman_warning[
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This deprecates the experimental_enable_podman field while preserving backwards compat, at least for some period of time.

for build_arg in build_args:
args.extend(["--opt", f"build-arg:{build_arg}"])

if self._special_output_handling(output):
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the aforementioned special --output field handling I mentioned in the PR description.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enable docker image builds through buildkit directly

1 participant