Skip to content

chore: update buildkit to v0.14.1 - #3

Closed
janishorsts wants to merge 62 commits into
earthly-mainfrom
chore-merge-v0.14.1
Closed

janishorsts wants to merge 62 commits into
earthly-mainfrom
chore-merge-v0.14.1

Conversation

@janishorsts

@janishorsts janishorsts commented Oct 8, 2026 •

Copy link
Copy Markdown

This merges the exact version required by moby/buildkit v0.14.1.

Warning! This is a set of interdependent PRs that must be merged sequentially due to squashed merges (fsutil -> buildkit -> earthbuild).

Related PRs:

Why not target the master branch?

The master branch contains too-fresh code that isn't compatible with earthbuild/earthbuild or earthbuild/buildkit.

In the past, I was not aware that fsutil introduced breaking changes, and I was too eager to bump earthbuild/fsutil.

Why not stack PR to make it easier to review?

I created this PR before I came up with the idea of a 2-stack merge PR.

musaprg and others added 30 commits September 26, 2023 03:38
Signed-off-by: Kotaro Inoue <inoue.kotaro@linecorp.com>
Signed-off-by: Kotaro Inoue <inoue.kotaro@linecorp.com>
Before this, copy would always refuse to replace an existing path in the
dest with something from the source of a different type. E.g. if there
was a symlink at the dest, you'd get an error if copying src meant
replacing the symlink w/ a directory.

This is the right default behavior but there are situations in which
callers may want to opt in to instead always replacing what's in dest
with what's in source.

This adds an option to enable that behavior.

Signed-off-by: Erik Sipsma <erik@sipsma.dev>
gogo/protobuf has been deprecated since 2022. This change uses Google's
code generator instead of gogo/protobuf.

Signed-off-by: Kazuyoshi Kato <kato.kazuyoshi@gmail.com>
Add support for always overwriting existing paths
Signed-off-by: Kotaro Inoue <k.musaino@gmail.com>
Downstream issue: https://github.com/macOScontainers/rund/issues/28

Signed-off-by: Marat Radchenko <marat@slonopotamus.org>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: Justin Chadwell <me@jedevc.com>
chore: fix typos in NewFilterFS docstring
This reverts commit bea810c.

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Revert "Migrate off of gogo/protobuf"
…ce-copy

Fix cross-device copy failing on macOS
…-bits

copy: fix to respect most significant octet of given permission in copyFileInfo
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
test with coverage and send to codecov
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
tonistiigi and others added 15 commits February 23, 2024 11:04
Fixes a silly data race where progressCurrent is incremented (and
later accessed) by 1 of 4 threads.

Signed-off-by: Alex Couture-Beil <alex@earthly.dev>
Previously, it was possible for errors returned by an asyncronous
callback function to not be propagated, and to instead return "context
canceled" from `Receive`.

This could happen based on this specific sequence of events:
- An asyncronous callback is called from `HandleChange`, and returns an
  error, completing the async errorgroup context with an error state.
- Another call to `HandleChange` completes, and uses the context
  syncronously, returning `context.Canceled`.
- This in turn propagates to `doubleWalkDiff`, which returns the
  canceled error, instead of calling `Wait` which would contain the
  actual error group error.

This behavior is racy, based on exactly how and when the asyncronous
callback is called.

The fix to this is relatively straightforward: we just need to make sure
that syncronous and asyncronous function calls are kept separate, and
don't reuse the same context. This means that a failure in an async
callback, doesn't cause later sync ones to fail.

Signed-off-by: Justin Chadwell <me@jedevc.com>
Then, inside all our validations, and our double walking, we don't have
to worry about translating between different path formats.

Additionally, we ensure that all received paths can be represented on
the target host system. A path like `foo/bar\baz` can only be stored on
linux (a dir with `foo`, containing a file `bar\baz`). On windows, this
would later be interpreted to be `foo\bar\baz` (a dir with `foo`,
containing a dir `bar`, containing a file `baz`).

Signed-off-by: Justin Chadwell <me@jedevc.com>
Signed-off-by: Justin Chadwell <me@jedevc.com>
…al-err

receive: ensure callback errors are propagated
Signed-off-by: Justin Chadwell <me@jedevc.com>
Signed-off-by: Justin Chadwell <me@jedevc.com>
…ire-format

recv: translate linkname to wire format
With the refactor to FilterFS the hardlink handling
was changed so that the hardlink detection is in a
separate FS instance and then FilterFS is layered on
top of it. This means that the file that was the source
for the hardlink could be filtered out, but the Stat pointing
to that link is still sent as is.

New function validates if source files are not present in FS
anymore and correct the linking. It could be better if all
the FS implementation did this automatically, but there is
quite a lot of layering going on atm. with multiple layers
of FilterFS that would all need to keep own hardlink memory,
so atm. the new function is only called before send.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
…link-filter

fix hardlink filter regression
@janishorsts janishorsts self-assigned this Oct 8, 2026
@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e5fac7a5-a7f7-4f68-b15c-37096e4c090c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@janishorsts janishorsts changed the title chore: merge v0.14.1 chore: update buildkit to v0.14.1 Oct 9, 2026
kmannislands added a commit that referenced this pull request Oct 9, 2026
The upstream merge took upstream's trigger block. That dropped the
fork's push trigger (earthly-main, gh_test_ci) and limited
pull_request to master/main. So CI no longer ran for PRs into
earthly-main, including #3 itself.

This brings back the push trigger from earthly-main (644b083). It also
removes the branch filter from pull_request, so the workflow runs for
every PR, whatever its base. A PR into earthly-main would have been
enough, but stacked PRs (like this one, based on
chore-merge-v0.14.1) need CI too. We keep upstream's
workflow_dispatch and schedule triggers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kmannislands
kmannislands added this pull request to stack #5 October 9, 2026 20:47
…nner) (#6)

* ci: run CI for pushes to earthly-main and PRs into any branch

The upstream merge took upstream's trigger block. That dropped the
fork's push trigger (earthly-main, gh_test_ci) and limited
pull_request to master/main. So CI no longer ran for PRs into
earthly-main, including #3 itself.

This brings back the push trigger from earthly-main (644b083). It also
removes the branch filter from pull_request, so the workflow runs for
every PR, whatever its base. A PR into earthly-main would have been
enough, but stacked PRs (like this one, based on
chore-merge-v0.14.1) need CI too. We keep upstream's
workflow_dispatch and schedule triggers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit f2e55f5)

* ci: pin actions to full-length commit SHAs

The EarthBuild org requires every action to be pinned to a full commit
SHA; with tag pins every job failed at "Set up job" before running.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit e66a226)

* ci: bump docker/bake-action to v5 for buildx >= 0.20

bake-action < v5 refuses to run with the buildx now shipped on
ubuntu-latest runners.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit e2fbb01)

* ci: log in to Docker Hub before bake to avoid pull rate limits

Anonymous pulls of tonistiigi/xx and mvdan/shfmt hit Docker Hub's 429
rate limit on shared runners. Use the EarthBuild org's CI account
(vars.DOCKERHUB_USERNAME / secrets.DOCKERHUB_TOKEN); skipped for fork
PRs, which don't receive secrets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: run FreeBSD tests in a vmactions VM on ubuntu-latest

test-freebsd-amd64 targeted the retired macos-13 runner, so it queued
forever and the workflow run never completed. Port upstream
tonistiigi/fsutil's approach (vmactions/freebsd-vm on Linux) for the
FreeBSD leg, keeping the fork's Go 1.21 and actions pinned by SHA.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: skip Go 1.21 on macOS where its test binaries cannot load

Go 1.21 binaries abort with "dyld: missing LC_UUID load command" on
the current macos-latest image before any test runs. Go 1.20 keeps
macOS coverage; Windows and Linux still run 1.21.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: run OS tests with bash

Force the test-os workflow step to use bash so a failing go test command
is not masked by a later coverage command on Windows PowerShell.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
(cherry picked from commit 818582b)

Without a shell, windows-latest runs this step in PowerShell, where a
failing native command does not stop the script: `go tool cover`
succeeding overwrote `go test`'s exit code. Run 37996598366 (jobs
114044153320, 114044153527) logged `--- FAIL: TestHardlinkFilter` yet
both Windows jobs concluded success.

The other multi-command run steps already stop on failure: the FreeBSD
Prepare step sets `shell: bash`, and the FreeBSD Test step runs on
ubuntu-latest (default `bash -e`) with `set -ex` inside the VM script.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: skip hardlink filter on Windows

Windows stat handling does not populate hardlink linknames, so
TestHardlinkFilter cannot assert the Unix hardlink normalization behavior
there.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
(cherry picked from commit a0b4937)

Cherry-picked rather than fixed: the failure is pre-existing upstream
behaviour, not something the merge or #4 introduced. TestHardlinkFilter
arrived with upstream 91a3fc4 (tonistiigi#198), and
setUnixOpt in stat_windows.go is a no-op, so the inode map that fills
Stat.Linkname for hardlinks never runs on Windows. Upstream's own CI
masked the failure the same way until tonistiigi#259, which
added `shell: bash` and this skip together (its bash-only run
26987953480 failed all three Windows test-os jobs).

With the bash fix alone, workflow_dispatch probes failed the same way
on Windows (Go 1.20 and 1.21) on upstream 91a3fc4 (run 38000549628)
and on #4's code e66a226 (run 38000552489), with
`foo2: The system cannot find the file specified.` and an empty
Linkname where "foo" was expected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Tonis Tiigi <tonistiigi@gmail.com>
@janishorsts

Copy link
Copy Markdown
Author

This PR is redundant. We use upstream fsutil.

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.

9 participants