All notable changes to Earthly will be documented in this file.
- Ability to automatically install BYOC from a Terraform deployment, or manually.
- Link-scoped devices will now properly autodetect MTU settings.
- Better error reporting when cross-target copy references a file that does not exist. #4221
- AWS credentials are propogated into
WITH DOCKER
. #4241
- Allow using
localhost
as a remote address when using satellites.
- This release has no changes to buildkit
- Autocompletion failed to expand ARG names when referencing a target containing a
~
. - Improved
--ticktock
performance of cache key computation and GC; the improvement is most noticeable with many small RUN commands.
- Renamed experimental
github
command togha
, and introduced newls
andremove
subcommands.
- Removed
PIPELINE
&TRIGGER
keywords and associated code relating to formerly deprecated Earthly CI.
- This release includes changes to buildkit
RUN --no-cache
doesn't always work. #2593- ANSI escape codes are now removed from GitHub Action specific output. #4131
- Specifying the
--ticktock
option will no longer show a buildkit version mismatch warning. - The
--ticktock
flag is now used when running the bootstrap command. - Caching issue when the experimental
--ticktock
buildkit scheduler is enabled.
- Removed deprecated non-streaming log uploading mechanism; log sharing is now only supported by the streaming-upload mechanism. The hidden
--logstream
and--logstream-upload
flags have been removed.
- This release includes changes to buildkit
- An experimental modification of the buildkit scheduler, which attempts to solve the
inconsistent graph state
error, which can be enabled locally withearthly --ticktock ...
.
- The BYOC (bring your own cloud) commands have been updated to reflect server-side API changes.
- The
--buildkit-container-name
flag was incorrectly being ignored when--no-buildkit-update
was set.
- This release includes changes to buildkit
- Support for using HTTP(S) proxies when connecting to satellites.
- Backwards compatability issue where
WITH DOCKER
would fail withEARTHLY_DOCKERD_CACHE_DATA: parameter not set
when using an older version of the earthly in combination with a satellite running v0.8.10.
- This release includes changes to buildkit
- New Github Actions Workflow commands integration
--github-annotations
flag or GITHUB_ACTIONS=true env. #2189 - Added a new
--oidc
flag toRUN
command which allows authentication to AWS via OIDC. Enable with theVERSION --run-with-aws-oidc
feature flag. #3804 - Experimental
WITH DOCKER --cache-id=<key>
feature, which will cache the contents of the docker data root, resulting in faster--load
and--pull
execution. Enabled with theVERSION --docker-cache
feature flag. #3399 - New
SAVE IMAGE --without-earthly-labels
feature, which will prevent anydev.earthly.*
labels from being saved to the image. Enable with theVERSION --allow-without-earthly-labels
feature flag. Thanks to @3manuek for the contribution!
WITH DOCKER
load time calculation. #3485- The earthly cli was not correctly setting the exit status on failures when executing a
RUN
on a satellite which reached the max execution time limit. - Self-hosted satellite connection issue.
- Earthly will now use source link format when displaying errors, e.g.
<path>:<line>:<col>
rather than<path> line <line>:<col>
. - Improved error messages for cases where a shell is required to run a command such as
IF
,FOR
, etc. - Earthly will now show a warning when earthly anonymously connects to a registry (which increases the chance of being rate-limited).
- This release includes changes to buildkit
BUILD --auto-skip
was recording failed steps as complete, which would lead to them being skipped on subsequent runs. #4054
- This release has no changes to buildkit
- New experimental wildcard-based copy, e.g.
COPY ./services/*+artifact/* .
which would invokeCOPY
for./services/foo+artifact
, and./services/bar+artifact
(assuming two services foo and bar, both having aartifact
target in their respective Earthfile). Enable with theVERSION --wildcard-copy
feature flag. #3966. - New built-in
ARG
s -EARTHLY_GIT_AUTHOR_EMAIL
andEARTHLY_GIT_AUTHOR_NAME
will contain the author email and author name respectively. Enable with theVERSION --git-author-email-name-args
feature flag. - New
--raw-output
flag available onRUN
that outputs line without target name. Enable withVERSION --raw-output
. #3713
EARTHLY_GIT_AUTHOR
built-inARG
will now contain both name and email, when enabled with theVERSION --git-author-email-name-args
feature flag. Previously it only contained the email. #3822
- Make
LET
/SET
commands block parallel commands such asBUILD
until the former are processed, similar to the behavior ofARG
. #3997 LET
/SET
commands were not properly handled with the use of Auto-skip. #3996
- This release has no changes to buildkit
- Warning log when resolving remote references using a git image that doesn't match Buildkit's architecture.
- New experimental
--exec-stats-summary=<path>
cli flag, which will display a summary of memory and cpu stats when earthly exits. - A notice is now displayed when unnecessary feature flags are set (but already enabled by default by the VERSION number). Thanks to @danqixu for the contribution! #3641
- A warning is displayed if the local buildkit image architecture does not match the host architecture. #3937
- Warning logs during HTTP retries are only displayed in
--debug
mode. - The HOST command will now expand variables. Thanks to @pbecotte for the contribution! #1743
- runc has been updated to 1.1.12 in the buildkit fork
- This release includes changes to buildkit
- Ability to set arbitrary attributes which certain registries require to support explicit remote caching (via the
earthly --remote-cache
flag). #3714 and #3868
- Fixed an issue in Auto-skip where a
+base
target's ARGs were not accounted for when calculating the cache. #3895
- This release has no changes to buildkit
- Added
--aws
flag toRUN
command which makes AWS environment variables or ~/.aws available. Enable with theVERSION --run-with-aws
feature flag. #3803 - Added
--allow-privileged
flag toFROM DOCKERFILE
command. Enable with theVERSION --allow-privileged-from-dockerfile
feature flag. Thanks to @dustyhorizon for the contribution! #3706
- Fixes an issue where wildcard
BUILD
's are invoked from a relative directory (e.g., anEarthfile
containingBUILD ./*+test
invoked withearthly ./rel-dir+target
). #3840 --pass-args
will no longer pass builtin args, which would result in `value cannot be specified for built-in build arge errors. #3775- Fixes a parsing issue with
BUILD
flag arguments and wildcard targets #3862 BUILD --auto-skip
was silently ignored when the feature flag (VERSION --build-auto-skip
) was missing #3870- Fix an issue where
COPY --if-exists
would fail if the non-existing directory includes a wildcard. #3875 - Fixes an issue with passing the correct org value to Logstream which resulted in missing logs in the web builds view (https://cloud.earthly.dev/your-org/builds).
- Rename
UDC
toFUNCTION
in hint when a secret is not found.
- This release includes changes to buildkit
- The internal
dockerd-wrapper.sh
script, which is used to implementWITH DOCKER
, will execute/usr/share/earthly/dockerd-wrapper-pre-script
, if present, prior to starting the inner dockerd process. This can be used to configure options that depend on the host's kernel at run-time. - Auto-skip can now be used directly on
BUILD
commands withBUILD --auto-skip
. #3581
- Satellite
rm
requires a--force
flag if it's running. This should help protect users from accidental deletes.
- Fixes an issue with the registry proxy (used for faster image & artifact exporting) on Docker Desktop for Windows/WSL. #3769
- Fixes a problem with cache IDs not being expanded. For example:
CACHE --id $MY_ARG
was not using the assigned value of$MY_ARG
.
- This release includes changes to buildkit
EARTHLY_GIT_REFS
was incorrectly returning all references which contained the commit rather than pointed to the current commit. This also increases performance of looking up the branches. #3752- Fixes an issue where
earthly account login --token
was leading to partially created auth config files. #3761
- This release includes changes to buildkit
- Added a
--force
flag to thesatellite update
command, which forces a satellite to sleep before starting the update process. This may forcibly kill ongoing builds currently running on the satellite.
- Changed the default buildkit cache size to be adaptively set to 20GB, which is then clamped between the range of 10%-55% of the disk size.
This logic can expressed as
min(55%, max(10%, 20GB))
. - Satellites are now put to sleep before updating via
earthly sat update <satellite-name>
.
- Fixed an intermittent issue with the registry proxy support container failing immediately on Mac. #3740
- Fixed a problem with parsing empty results when cleaning up old registry proxy support containers on Mac.
- Fixed a case where a suggested command would incorrectly contain both
--interative
and--ci
. #3746 - Disabled the registry proxy server when Earthly is run from within a container. #3736
- This release has no changes to buildkit
- Added a new
--disable-remote-registry-proxy
cli flag, which can be used to disable the remote registry proxy, which is used by earthly when performing aSAVE IMAGE
command with a satellite / remote buildkit instance. This will cause earthly to use the slower tar-based loading of docker images. #3736 - A new warning if Earthly is configured with a cache size less than 10GB; running with a small cache size may lead to unexpected cache misses.
- This release has no changes to buildkit
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of
the features in this version you need to declare VERSION 0.8
at the top of your Earthfile.
Migrating from 0.7
If you are using Earthly 0.7, follow the following steps to migrate:
- If you are still using
VERSION 0.5
, upgrade those Earthfiles toVERSION 0.6
orVERSION 0.7
. - Upgrade your Earthly binary to 0.8 in CI and across your team. The Earthly 0.8 binary can run both
VERSION 0.6
andVERSION 0.7
Earthfiles (butVERSION 0.5
support has been dropped). - Once everyone is using the Earthly 0.8 binary, upgrade your Earthfiles one by one to
VERSION 0.8
. It is ok to have a mix ofVERSION 0.6
,VERSION 0.7
andVERSION 0.8
Earthfiles in the same project. Earthly handles that gracefully. See changes below for information on backwards incompatible changes when migrating fromVERSION 0.7
toVERSION 0.8
.
This process helps manage the backward breaking changes with minimal disruption.
Summary
Declaring VERSION 0.8
is equivalent to
VERSION \
--arg-scope-and-set \
--cache-persist-option \
--git-refs \
--global-cache \
--no-network \
--pass-args \
--use-docker-ignore \
--use-function-keyword \
--use-visited-upfront-hash-collection \
0.7
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
It should be noted that some of these features break backwards compatibility. See below.
- Redeclaring an
ARG
in the same scope as a previous declaration is now an error. ARG
s inside of targets will no longer have their default value overridden by globalARG
s.- Declaring a
CACHE ...
in a target will no longer be copied to children targets when referenced via aFROM +...
; to persist the contents of the cache, it is now required to use theCACHE --persist ...
flag. - The
COMMAND
keyword has been renamed toFUNCTION
.
LET
- Allows declaring a local variable. This command works similarly toARG
except that it cannot be overridden from the CLI.LET
variables are allowed to shadowARG
variables, which allows you to promote anARG
to a local variable so that it may be used withSET
.SET
- a new command that allows changing the value of variables declared withLET
.- Outputting images from a remote runner has improved performance as it no longer transfers layers that are already present locally.
- Auto-skip has been promoted to beta status.
RUN --network=none
allows running a command without network access..dockerignore
files are now used inFROM DOCKERFILE
targets.DO --pass-args
,BUILD --pass-args
etc allow passing all build arguments to external Earthfiles.CACHE --id=...
andRUN --mount type=cache,id=...
allows setting a custom cache mount ID, thus allowing sharing cache mounts globally across different targets.- New satellite sizes: 2xlarge, 3xlarge, 4xlarge
- New experimental wildcard-based builds, e.g.
BUILD ./services/*+test
which would call./services/foo+test
, and./services/bar+test
(assuming two services foo and bar, both having atest
target in their respective Earthfile) #3582.
VERSION 0.5
is now obsolete. DeclaringVERSION 0.5
is no longer supported, and will now raise an error.
- Parallelism is improved when running the same target with different arguments in certain cases (e.g. the target uses
WITH DOCKER
). - Fixed a log sharing upload-resumption bug
- Fixed multiple issues with the lexer failing to parse certain characters in shell command substitution (
$()
) and single quoted strings. - Fixed an issue where some escaped
ARG
shell expressions were being incorrectly preprocessed. Example:$(echo "\"")
became$(echo """)
#3131 - The
--pass-args
feature was not passing active arguments which were set via a default value. SAVE ARTIFACT --if-exists
was not saving files based on a wildcard glob pattern. #1679BUILD
was not expanding--platform
argument values.
- This release includes changes to buildkit
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of
the features in this version you need to declare VERSION 0.8
at the top of your Earthfile.
Migrating from 0.7
If you are using Earthly 0.7, follow the following steps to migrate:
- If you are still using
VERSION 0.5
, upgrade those Earthfiles toVERSION 0.6
orVERSION 0.7
. - Upgrade your Earthly binary to 0.8 in CI and across your team. The Earthly 0.8 binary can run both
VERSION 0.6
andVERSION 0.7
Earthfiles (butVERSION 0.5
support has been dropped). - Once everyone is using the Earthly 0.8 binary, upgrade your Earthfiles one by one to
VERSION 0.8
. It is ok to have a mix ofVERSION 0.6
,VERSION 0.7
andVERSION 0.8
Earthfiles in the same project. Earthly handles that gracefully. See changes below for information on backwards incompatible changes when migrating fromVERSION 0.7
toVERSION 0.8
.
This process helps manage the backward breaking changes with minimal disruption.
Summary
Declaring VERSION 0.8
is equivalent to
VERSION \
--arg-scope-and-set \
--cache-persist-option \
--git-refs \
--global-cache \
--no-network \
--pass-args \
--use-docker-ignore \
--use-function-keyword \
--use-visited-upfront-hash-collection \
0.7
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
It should be noted that some of these features break backwards compatibility. See below.
- Redeclaring an
ARG
in the same scope as a previous declaration is now an error. ARG
s inside of targets will no longer have their default value overridden by globalARG
s.- It is no longer possible to override a global ARG when calling a target.
- Declaring a
CACHE ...
in a target will no longer be copied to children targets when referenced via aFROM +...
; to persist the contents of the cache, it is now required to use theCACHE --persist ...
flag. - The
COMMAND
keyword has been renamed toFUNCTION
.
LET
- Allows declaring a local variable. This command works similarly toARG
except that it cannot be overridden from the CLI.LET
variables are allowed to shadowARG
variables, which allows you to promote anARG
to a local variable so that it may be used withSET
.SET
- a new command that allows changing the value of variables declared withLET
.- Outputting images from a remote runner has improved performance as it no longer transfers layers that are already present locally.
- Auto-skip has been promoted to beta status.
RUN --network=none
allows running a command without network access..dockerignore
files are now used inFROM DOCKERFILE
targets.DO --pass-args
,BUILD --pass-args
etc allow passing all build arguments to external Earthfiles.CACHE --id=...
andRUN --mount type=cache,id=...
allows setting a custom cache mount ID, thus allowing sharing cache mounts globally across different targets.- New satellite sizes: 2xlarge, 3xlarge, 4xlarge
- New experimental wildcard-based builds, e.g.
BUILD ./services/*+test
which would call./services/foo+test
, and./services/bar+test
(assuming two services foo and bar, both having atest
target in their respective Earthfile) #3582.
VERSION 0.5
is now obsolete. DeclaringVERSION 0.5
is no longer supported, and will now raise an error.
- Parallelism is improved when running the same target with different arguments in certain cases (e.g. the target uses
WITH DOCKER
). - Fixed a log sharing upload-resumption bug
- This release includes changes to buildkit
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of
the features in this version you need to declare VERSION 0.8
at the top of your Earthfile.
Migrating from 0.7
If you are using Earthly 0.7, follow the following steps to migrate:
- If you are still using
VERSION 0.5
, upgrade those Earthfiles toVERSION 0.6
orVERSION 0.7
. - Upgrade your Earthly binary to 0.8 in CI and across your team. The Earthly 0.8 binary can run both
VERSION 0.6
andVERSION 0.7
Earthfiles (butVERSION 0.5
support has been dropped). - Once everyone is using the Earthly 0.8 binary, upgrade your Earthfiles one by one to
VERSION 0.8
. It is ok to have a mix ofVERSION 0.6
,VERSION 0.7
andVERSION 0.8
Earthfiles in the same project. Earthly handles that gracefully. See changes below for information on backwards incompatible changes when migrating fromVERSION 0.7
toVERSION 0.8
.
This process helps manage the backward breaking changes with minimal disruption.
Summary
Declaring VERSION 0.8
is equivalent to
VERSION \
--arg-scope-and-set \
--cache-persist-option \
--git-refs \
--global-cache \
--no-network \
--pass-args \
--use-docker-ignore \
--use-function-keyword \
--use-visited-upfront-hash-collection \
0.7
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
It should be noted that some of these features break backwards compatibility. See below.
- Redeclaring an
ARG
in the same scope as a previous declaration is now an error. ARG
s inside of targets will no longer have their default value overridden by globalARG
s.- It is no longer possible to override a global ARG when calling a target.
- Declaring a
CACHE ...
in a target will no longer be copied to children targets when referenced via aFROM +...
; to persist the contents of the cache, it is now required to use theCACHE --persist ...
flag. - The
COMMAND
keyword has been renamed toFUNCTION
.
LET
- Allows declaring a local variable. This command works similarly toARG
except that it cannot be overridden from the CLI.LET
variables are allowed to shadowARG
variables, which allows you to promote anARG
to a local variable so that it may be used withSET
.SET
- a new command that allows changing the value of variables declared withLET
.- Outputting images from a remote runner has improved performance as it no longer transfers layers that are already present locally.
- Auto-skip has been promoted to beta status.
RUN --network=none
allows running a command without network access..dockerignore
files are now used inFROM DOCKERFILE
targets.DO --pass-args
,BUILD --pass-args
etc allow passing all build arguments to external Earthfiles.CACHE --id=...
andRUN --mount type=cache,id=...
allows setting a custom cache mount ID, thus allowing sharing cache mounts globally across different targets.
VERSION 0.5
is now obsolete. DeclaringVERSION 0.5
is no longer supported, and will now raise an error.
- Parallelism is improved when running the same target with different arguments in certain cases (e.g. the target uses
WITH DOCKER
).
- This release includes changes to buildkit
- Auto-skip (experimental) - a feature that allows you to skip large parts of a build in certain situations, especially suited for monorepos. For more information see the auto-skip section from Caching in Earthfiles.
- A warning when a
COPY
destination includes a tilde (~). Related to #1789. - A hint message to suggest the usage of
-i
flag to debug the build when a RUN command fails. start-interval
flag toHEALTHCHECK
command for dockerfile parity #3409.- A verbose message indicating which authentication providers are used during a build.
ssh_command
config option which can be used to override the ssh command that is used bygit
when connecting to an ssh-based repository. Thanks to @weaversam8 for the contribution!
- Limit the number of deprecation warnings when using
COMMAND
instead ofFUNCTION
keyword. - Fixed an error which stated
VERSION 0.0
is a valid Earthfile version.
- Changed the color used to print metadata values (such as ARGs values) in the build log to Faint Blue.
- Updated default alpine/git image to v2.40.1.
- When creating an auth token, an existing token will no longer be overwritten by default. To overwrite, the
--overwrite
flag should be used.
- This release includes changes to buildkit
- A new experimental
earthly --exec-stats
flag, which displays per-target execution stats such as total CPU and memory usage. - A new experimental
earthly billing view
command to get information about the organization billing plan. - Messages informing used build minutes during a build.
- Help message when a build fails due to a missing referenced cloud secret.
- Remove redundant verbose error messages that were not different from messages that were already being printed.
- Fixed
failed to sign challenge
errors when attempting to login using an ed25519 key with the 1Password ssh-agent. #3366
- Final error messages for executions without a known target will be displayed without
_unknown *failed* |
prefix. and instead useError:
as prefix more consistently. - Failing
RUN
commands underLOCALLY
will display the same format of error message forRUN
withoutLOCALLY
#3356. - Log sharing link will be printed last, even in case of a build error.
- Help message after a build error will be printed in color.
- Use dedicated logstream failure category for param related error.
- An authentication attempt with an expired auth token will result in a
auth token expired
error instead ofunauthorized
. - A successful authentication with an auth token will display a warning with time left before token expires if it's 14 days or under.
- The command
earthly registry
will attempt to use the selected org if no org is specified. - Clarify error messages when failing to pass secrets to a build.
- Provide information on how to get more build minutes when a build fails due to missing minutes.
- Provide information on how to increase the max number of allowed satellites when failing to launch a satellite.
CACHE
mounts will no longer depend on the contents ofARG
s, and instead will be limited to the target name.- Child targets will no longer receive the contents of mounted
CACHE
volumes defined in the parent target; this change can be enabled withVERSION --cache-persist-option
. #3509 - Improved memory usage related to log messages by no longer pre-allocating log buffers; this is most noticeable for really large Earthfiles with lots of different targets.
- Updated buildkit with upstream changes up to 3d50b97793391d81d7bc191d7c5dd5361d5dadca.
- Improved speed of
SAVE IMAGE
exports when using a remote buildkit instance (e.g. satellite) from a MacOS host; this can be enabled with the--use-remote-registry
option.
- This release includes changes to buildkit
- The new ARG
EARTHLY_GIT_REFS
will contain the references to the current git commit, this ARG must be enabled with theVERSION --git-refs
feature flag. #2735 - A new
--force-certificate-generation
flag for bootstrapping, which will force the generation of self signed TLS certificates even when the--no-buildkit
flag is set.
- Fixed reduced parallelism regression which occurred when the target is the same but has different args -- can be enabled with
VERSION --use-visited-upfront-hash-collection
#2377 prune --age
did not supportd
(for days) suffix, even thoughtearthly --help
said it did #3401buildkit scheduler error: return leaving incoming open
which occured during deduplication of opperations within buildkit; cherry-picked 100d3cb6b6903be50f7a3e5dba193515aa9530fa from upstream buildkit repo. #2957- Changed
WITH DOCKER
to pull images in parallel #2351
- Registry proxy: Use lower-level TCP streaming #2351
- This release includes changes to buildkit
- Support for
mode
in mount cache #3278. - Support for
mode
in CACHE commands #3290. - Experimental support for shared/global caches (cache
id
is no longer scoped per Earthfile) #1129. Note that this is feature-flagged, and only changed whenVERSION --global-cache 0.7
is defined.
- A regression where URLs will not always get shorter when used as a prefix. Partially addresses #3200.
- If a build fails because of
qemu
missing, earthly will display a proper hint to install it #3200. - Removed erroneous error-message which said error: 0 errors occured #3306.
- A race condition when exiting interactive debugger mode resulting in confusing errors #3200.
- Docker auto-install script failures related to attempts to read from tty, while verifying docker's pgp key #3324.
- Issue affecting pulling images in Podman #2471.
- A
panic: send on closed channel
error would sometimes occur during shutdown of the logstream #3325.
- Some error messages at the end of an execution will only be displayed in verbose mode (
earthly -V ...
), e.g.Error: build target: build main: failed to solve:
... #3200 GIT CLONE
URLs will only be printed once as part of a prefix, e.g.+my-clone-target(https://g/e/earthly) | --> GIT CLONE (--branch ) https://github.com/earthly/earthly
- Clarify errors in interactive debugger so that they won't be confused with the build errors #3200.
- The
WITH DOCKER
auto-install script will now pass the--no-tty
option togpg
#3288.
- This release includes changes to buildkit
- Added "dev.earthly.*" LABELS to saved images, for example
dev.earthly.version
will be set tov0.7.19
(or whatever version of earthly is used) #3247. - Added option to verbose print known_hosts to make it easier to debug git related commands #3234.
- When a project based secret is not found, the name of the secret will now be displayed along with the "not found" error.
- Log sharing will now stream logs as your build is running (rather than uploading logs when build execution completes).
- Satellite reserve calls will now retry on error #3255.
- Display warning when TLS is disabled.
- This release has no changes to buildkit
Note: This release was aborted due to a regression in the log sharing functionality
- Added "dev.earthly.*" LABELS to saved images, for example
dev.earthly.version
will be set tov0.7.18
(or whatever version of earthly is used) #3247. - Added option to verbose print known_hosts to make it easier to debug git related commands #3234.
- When a project based secret is not found, the name of the secret will now be displayed along with the "not found" error.
- Refactor console output code (e.g. removed redundant output, prepared code for a future streaming log uploads... coming soon).
- Display warning when TLS is disabled.
- Added a
--pass-arg
flag that can be used withBUILD
,FROM
,COPY
,WITH DOCKER --load
, orDO
, which will pass all build arguments to external Earthfiles. #1891
- Fixed a cgroup v2 related bug that affected systemd-based images (such as kind) from being run via
WITH DOCKER
. #3159
- Removed redundant output when parts of builds are re-used; the
--verbose
flag will still display the output. - Calling
earthly secret set <path>
(when run interactively) will now prompt for a single-line secret if no other flags are given. - fixed bug in
earthly registry setup
which was waiting for an end of file (eof) rather than newline, when prompting for a password.
- Added additional error message output when buildkit scheduller errors occur (in order to help debug the ongoing 2957 issue).
- Fixed a bug in
WITH DOCKER
which prevented the use of newer versions of docker. #3164
- Update buildkit (contains upstream changes up to 687091bb6c8aaa0185cdc570c4db3db533f329d0).
- Use
HTTPS_PROXY
env when connecting to earhly cloud API.
earthly account list-tokens
now shows the last time a token was used- Experimental command
earthly init
to initialize an Earthfile in a project (currently supporting only golang projects)
- Fixed a bug, where the command to create tokens with a set expiration failed.
- Long pauses at the end of builds, which were characterized by apparent freezes or delays with the message
Waiting on Buildkit...
. earthly account create-token
no longer panics when parsing expiration dateearthly account login
could change the active user when the JWT expired and an SSH key existed for a different user; now earthly will either refresh the JWT or error
- Setting env vars like
FORCE_COLOR
, orEARTHLY_FULL_TARGET
to0
,false
,FALSE
, or `` (an empty-string) will no longer force the color, use any other value like1
, `true`, or `yesplease`. earthly org list
now shows the currently selected org
- warning if acquiring file-lock takes longer than 3 seconds.
- improved error message when a 429 too many requests rate limit error occurs.
earthly sat ls -a
shows last accessed time- improved output for listing auth tokens
- make use of org from earthly config when using satellite commands.
- warning if acquiring file-lock takes longer than 3 seconds.
- improved error message when a 429 too many requests rate limit error occurs.
earthly sat ls -a
shows last accessed time
- make use of org from earthly config when using satellite commands.
global.org
configuration value to set a default org for allearthly
commands that require it.earthly org select
andearthly org unselect
commands, as shortcuts to set a default organization in theearthly
config file.
- Removed the default size in satellite launch (the default size is now determined by the backend when not provided) #3057
- Deprecated the satellite org configuration value. It uses the new global configuration value.
- Removed the default size in satellite launch (the default size is now determined by the backend when not provided) #3057
- Earthly cloud organization auto-detection has been deprecated and should now be explicitly set with the
--org
flag or with theEARTHLY_ORG
environment variable. - Buildkit has been updated to include upstream changes up to cdf28d6fff9583a0b173c62ac9a28d1626599d3b.
- Updated the podman auth provider to better understand podman
auth.json
locations. #3038 - Fixed our aggregated authprovider ignoring the cloud authprovider when a project is set after the first creds lookup #3058
- The command
docker-build
now also supports passing multiple platforms using a comma (e.g--platform linux/amd64,linux/arm64
) - Increased temporary lease duration of buildkit's history queue to prevent unknown history in blob errors under high cpu load. #3000
- Performing an
earthly account logout
will keep you logged out -- earthly will no longer attempt an auto-login via ssh-agent (useearthly account login
to log back in).
- Fixed a bug in satellite update command which was incorrectly changing satellites to medium size.
- Fixed support for being authenticated with multiple registries when using the cloud-based
earthly registry
feature. #3010 - Fixed
WITH DOCKER
auto install script when using latest (bookworm) version.
- Buildkit logs now include version and revision.
- Satellite name autocompletion
- Add a new command
docker-build
to build a docker image using a Dockerfile without using an Earthfile, locally or on a satellite.
FROM DOCKERFILE
will use a.dockerignore
file when using a build context from the host system and both.earthlyignore
and.earthignore
do not exist. Enable withVERSION --use-docker-ignore 0.7
.
- Fixed upstream race condition bug in buildkit, which resulted in
failed to solve: unknown blob sha256:<...> in history
errors. #3000
- The new ARG
EARTHLY_CI_RUNNER
indicates whether the current build is executed in Earthly CI. Enable withVERSION --earthly-ci-runner-arg 0.7
.
- Updated buildkit up to 60d134bf7 and fsutil up to 9e7a6df48576; this includes a buildkit fix for 401 Unauthorized errors. #2973
- Enabled
GIT_LFS_SKIP_SMUDGE=1
when pulling git repos (to avoid pulling in large files initially).
- The earthly docker image incorrectly showed
dev-main
under the embedded buildkit version.
- Better error messages when git opperations fail.
- Added a
runc-ps
script under the earthly-buildkitd container to make it easier to see what processes are running.
- The builtin 'docker compose' (rather than
docker-compose
script) is now used when using theWITH DOCKER
command under alpine 3.18 or greater. - Fixed context timeout value overflow when connecting to a remote buildkit instance.
- Remote BuildKit will use TLS by default.
- Deprecation warning: Secret IDs naming scheme should follow the ARG naming scheme; i.e. a letter followed by alphanumeric characters or underscores. #2883
- Secrets take precedence over ARGs of the same name. #2931
- Experimental support for performing a
git lfs pull --include=<path>
when referencing a remote target on the cli, when used with the new--git-lfs-pull-include
flag. #2992
SAVE IMAGE <img>
was incorrectly pushed when earthly was run with the--push
cli flag (this restores the requirement that images that are pushed must be defined withSAVE IMAGE --push <img>
). #2923- Incorrect global ARG values when chaining multiple DO commands together. #2920
- Build args autocompletion under artifact mode.
- Updated the github ssh-rsa public key in the pre-populated buildkitd known_hosts entries.
- A host of changes to variables under the
--arg-scope-and-set
feature flag:- Redeclaring an
ARG
in the same scope as a previous declaration is now an error. ARG
s inside of targets will no longer have their default value overridden by globalARG
s.- A new command,
LET
, is available for declaring non-argument variables.LET
takes precedence overARG
, just likeARG
takes precedence overARG --global
.
- A new command,
SET
, is available for changing the value of variables declared withLET
.
- Redeclaring an
- Introduced
--size
and--age
flags to the prune command, to allow better control.
- Updated buildkit with changes up to 3187d2d056de7e3f976ef62cd548499dc3472a7e.
- The
VERSION --git-branch
feature flag has been removed (EARTHLY_GIT_BRANCH
was always available in the previous version). - Improved earthly API connection timeout logic.
earthly doc
now includesARG
s in both summary and detail output, andARTIFACT
s andIMAGE
s in its detail output.
- Fixed
Could not detect digest for image
warnings for when usingWITH DOCKER --load
which referenced an earthly target that included aFROM
referencing an image following thedocker.io/<user>/<img>
naming scheme (rather than thedocker.io/library/<user>/<img>
scheme). - Fixed
COPY --if-exists
to work with earthly targets. #2541 - Intentional-indentation of comments is no longer removed by the doc command. #2747
SAVE ARTIFACT ... AS LOCAL ...
could not write to non-current directories upon failure of a TRY/FINALLY block. #2800
- Support for Rosetta translation environment (emulator) in buildkit as an alternative to QEMU. To enable, go to Docker Desktop -> Settings -> Features in development -> Check
Use Rosetta for x86/amd64 emulation on Apple Silicon
. - New ARG
EARTHLY_GIT_BRANCH
will contain the branch of the current git commit, this ARG must be enabled with theVERSION --git-branch
feature flag. #2735 - Verbose logging when git configurations perform a regex substitution.
- SAVE IMAGE --push did not always work under
VERSION 0.7
, when image was refrenced by aFROM
orCOPY
, followed by aBUILD
. #2762
- Simplified error message when a RUN command fails with an exit code. #2742
- Improved warning messages when earthly cloud-based registry auth fails. #2783
- Deleting a project will prompt for confirmation, unless --force is specified.
- Updated buildkit with changes up to 4451e1be0e6889ffc56225e54f7e26bd6fdada54.
- Support for
RUN --network=none
, which prevents programs from using any network resources. #834
- The
unexpected env
warning can now be silenced by creating a.arg
or.secret
file. #2696
- Unindented comments in the middle of recipe blocks no longer cause parser errors. #2697
The documentation for this version is available at the Earthly 0.7 documentation page.
Earthly CI
Earthly 0.7 is the first version compatible with Earthly CI.
Earthly 0.7 introduces the new keywords PIPELINE
and TRIGGER
to help define Earthly CI pipelines.
my-pipeline:
PIPELINE --push
TRIGGER push main
TRIGGER pr main
BUILD +my-target
For more information on how to use PIPELINE
and TRIGGER
, please see the reference documentation.
Podman support
Podman support has now been promoted out of beta status and is generally available in 0.7. Earthly will automatically detect the container frontend, whether that's docker
or podman
and use it automatically for running Buildkit locally, or for outputting images locally resulting from the build.
Please note that rootful podman is required. Rootless podman is not supported.
VERSION is now mandatory
The VERSION
command
is now required for all Earthfiles, and an error will occur if it is missing. If you are not ready to update your
Earthfiles to use 0.7 (or 0.6), you can declare VERSION 0.5
to continue to use your Earthfiles.
.env file is no longer used for ARG
or secrets
The .env
file will only be used to automatically export environment variables, which can be used to configure earthly command line flags.
As a result, values will no longer be propagated to Earthfile ARG
s or RUN --secret=...
commands.
Instead if you want build arguments or secrets automatically passed into earthly, they must be placed in .arg
or .secret
files respectively.
Note that this is a backwards incompatible change and will apply to all Earthfiles (regardless of the defined VERSION
value).
Pushing no longer requires everything else to succeed
The behavior of the --push
mode has changed in VERSION 0.7
and is backwards incompatible with VERSION 0.6
. Previously, --push
commands would only execute if all other commands had succeeded. This precondition is no longer enforced, to allow for more flexible push ordering via the new WAIT
clause. To achieve the behavior of the previous --push
mode, you need to wrap any pre-required commands in a WAIT
clause. For example, to push an image only if tests have passed, you would do the following:
test-and-push:
WAIT
BUILD +test
END
BUILD +my-image
my-image:
...
SAVE IMAGE --push my-org/my-image:latest
This type of behavior is useful in order to have better control over the order of push operations. For example, you may want to push an image to a registry, followed by a deployment that uses the newly pushed image. Here is how this might look like:
push-and-deploy:
...
WAIT
BUILD +my-image
END
RUN --push ./deploy.sh my-org/my-image:latest
my-image:
...
SAVE IMAGE --push my-org/my-image:latest
Where ./deploy.sh
is custom deployment script instructing a production environment to start using the image that was just pushed.
Promoting experimental features
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of
the features in this version you need to declare VERSION 0.7
at the top of your Earthfile.
Declaring VERSION 0.7
is equivalent to
VERSION \
--check-duplicate-images \
--earthly-git-author-args \
--earthly-locally-arg \
--earthly-version-arg \
--explicit-global \
--new-platform \
--no-tar-build-output \
--save-artifact-keep-own \
--shell-out-anywhere \
--use-cache-command \
--use-chmod \
--use-copy-link \
--use-host-command \
--use-no-manifest-list \
--use-pipelines \
--use-project-secrets \
--wait-block \
0.6
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
- The behavior of the
--push
mode has changed in a backwards incompatible manner. Previously,--push
commands would only execute if all other commands had succeeded. This precondition is no longer enforced, allowing push commands to execute in the middle of the build now. Previously underVERSION --wait-block 0.6
. ARG
s declared in the base target do not automatically become global unless explicitly declared as such viaARG --global
. Previously underVERSION --explicit-global 0.6
.- The Cloud-based secrets model is now project-based; it is not compatible with the older global secrets model. Earthfiles which are defined as
VERSION 0.5
orVERSION 0.6
will continue to use the old global secrets namespace; however the earthly command line no longer supports accessing or modifying the global secrets. A newearthly secrets migrate
command has been added to help transition the global-based secrets to the new project-based secrets. If you need to manage secrets from Earthly 0.6 without migrating to the new 0.7 secrets, please use an older Earthly binary. - All
COPY
andSAVE ARTIFACT
operations now use union filesystem merging for performing theCOPY
. This is similar toCOPY --link
in Dockerfiles, however in Earthly it is automatically enabled for all such operations. Previously underVERSION --use-copy-link 0.6
. - The platform logic has been improved to allow overriding the platform in situations where previously it was not possible. Additionally, the default platform is now the native platform of the runner, and not of the host running Earthly. This makes platforms work better in remote runner settings. Previously under
VERSION --new-platform 0.6
. - Earthly will automatically shellout to determine the
$HOME
value when referenced #2469 - Improved error message when invalid shell variable name is configured for a secret. #2478
- The
--ci
flag no longer implies--save-inline-cache
and--use-inline-cache
since they were 100% CPU usage in some edge cases. These flags may still be explicitly enabled with--ci
, but earthly will print a warning. earthly ls
has been promoted from experimental to beta status.- Setting a
VERSION
feature flag boolean to false (or any other value) will now raise an error; previously it was syntactically valid but had no effect. SAVE ARTIFACT <path> AS LOCAL ...
when used under aTRY
/FINALLY
can fail to be fully transferred to the host when theTRY
command fails (resulting in an partially transferred file); an underflow can still occur, and is now detected and will not export the partial file. 2452- The
--keep-own
flag forSAVE ARTIFACT
is now applied by default; note thatCOPY --keep-own
must still be used in order to keep ownership - Values from the
.env
file will no longer be propagated to EarthfileARG
s orRUN --secret=...
commands; instead values must be placed in.arg
or.secret
files respectively. Note that this is a backwards incompatible change and will apply to all Earthfiles (regardless of the definedVERSION
value). #1736 - Some particularly obtuse syntax errors now have hints added to help clarify what the expected syntax might be. #2656
- The default size when launching a new satellite is now medium instead of large.
- Satellites can be launched with a weekend-only mode for receiving auto-updates.
- The commands
PIPELINE
andTRIGGER
have been introduced for defining Earthly CI pipelines. Previously underVERSION --use-pipelines 0.6
. - The clause
WAIT
is now generally available. TheWAIT
clause allows controlling of build order for operations that require it. This allows use-cases such as pushing images to a registry, followed by infrastructure changes that use the newly pushed images. Previously underVERSION --wait-block 0.6
. - The command
CACHE
is now generally available. TheCACHE
command allows declaring a cache mount that can be used by anyRUN
command in the target, and also persists in the final image of the target (contents available when used viaFROM
). Previously underVERSION --use-cache-command 0.6
. - The command
HOST
is now generally available. TheHOST
command allows declaring an/etc/hosts
entry. Previously underVERSION --use-host-command 0.6
. - New ARG
EARTHLY_GIT_COMMIT_AUTHOR_TIMESTAMP
will contain the author timestamp of the current git commit. #2462 - New ARGs
EARTHLY_VERSION
andEARTHLY_BUILD_SHA
contain the version of Earthly and the git sha of Earthly itself, respectively. - It is now possible to execute shell commands as part of any command that allows using variables. For example
VOLUME $(cat /volume-name.txt)
. Previously underVERSION --shell-out-anywhere 0.6
. - Allow custom image to be used for git operations. #2027
- Earthly now checks for duplicate image names when performing image outputs. Previously under
VERSION --check-duplicate-images 0.6
. SAVE IMAGE --no-manifest-list
allows outputting images of a different platform than the default one, but without the manifest list. This is useful for outputting images for platforms that do not support manifest lists, such as AWS Lambda. Previously underVERSION --use-no-manifest-list 0.6
.COPY --chmod <mode>
allows setting the permissions of the copied files. Previously underVERSION --use-chmod 0.6
.- The new ARG
EARTHLY_LOCALLY
indicates whether the current target is executed in aLOCALLY
context. Previously underVERSION --earthly-locally-arg 0.6
. - The new ARGs
EARTHLY_GIT_AUTHOR
andEARTHLY_GIT_CO_AUTHORS
contain the author and co-authors of the current git commit, respectively. Previously underVERSION --earthly-git-author-args 0.6
. earthly doc [projectRef[+targetRef]]
is a new subcommand in beta status. It will parse and output documentation comments on targets.- Ability to store docker registry credentials in cloud secrets and corresponding
earthly registry setup|list|remove
commands; credentials can be associated with either your user or project. - New satellite commands for enabling auto-upgrades and forcing a manual upgrade.
- Support for saving files larger than 64kB on failure within a
TRY/FINALLY
block. #2452 - Fixed race condition where
SAVE IMAGE
orSAVE ARTIFACT AS LOCAL
commands were not always performed when contained in a target that was referenced by both aFROM
(orCOPY
) and aBUILD
command within the context of aWAIT
/END
block. #2237 WORKDIR
is lost when--use-copy-link
feature is enabled withGIT CLONE
orCOPY --keep-own
commands. Note that--use-copy-link
is enabled by default inVERSION 0.7
. #2544- The
CACHE
command did not work when used inside aWITH DOCKER
block. #2549 - The
--platform
argument is no longer passed to docker or podman, which caused podman to always pull the buildkit image even when it already existed locally. #2511, #2566 - Fixed missing inline cache export; note that inline cache exports do not work when used within a
WAIT
/END
block, this is a known current limitation. #2178 - Indentation in the base Earthfile target would cause a panic (when no other targets existed); now a syntax error is returned. #2603
- Added tighter registry read timeout, to prevent 15min stuck "ongoing" image manifest fetching.
The documentation for this version is available at the Earthly 0.7 documentation page.
Earthly CI
Earthly 0.7 is the first version compatible with Earthly CI.
Earthly 0.7 introduces the new keywords PIPELINE
and TRIGGER
to help define Earthly CI pipelines.
my-pipeline:
PIPELINE --push
TRIGGER push main
TRIGGER pr main
BUILD +my-target
For more information on how to use PIPELINE
and TRIGGER
, please see the reference documentation.
Podman support
Podman support has now been promoted out of beta status and is generally available in 0.7. Earthly will automatically detect the container frontend, whether that's docker
or podman
and use it automatically for running Buildkit locally, or for outputting images locally resulting from the build.
Please note that rootful podman is required. Rootless podman is not supported.
VERSION is now mandatory
The VERSION
command
is now required for all Earthfiles, and an error will occur if it is missing. If you are not ready to update your
Earthfiles to use 0.7 (or 0.6), you can declare VERSION 0.5
to continue to use your Earthfiles.
.env file is no longer used for ARG
or secrets
The .env
file will only be used to automatically export environment variables, which can be used to configure earthly command line flags.
As a result, values will no longer be propagated to Earthfile ARG
s or RUN --secret=...
commands.
Instead if you want build arguments or secrets automatically passed into earthly, they must be placed in .arg
or .secret
files respectively.
Note that this is a backwards incompatible change and will apply to all Earthfiles (regardless of the defined VERSION
value).
Pushing no longer requires everything else to succeed
The behavior of the --push
mode has changed in VERSION 0.7
and is backwards incompatible with VERSION 0.6
. Previously, --push
commands would only execute if all other commands had succeeded. This precondition is no longer enforced, to allow for more flexible push ordering via the new WAIT
clause. To achieve the behavior of the previous --push
mode, you need to wrap any pre-required commands in a WAIT
clause. For example, to push an image only if tests have passed, you would do the following:
test-and-push:
WAIT
BUILD +test
END
BUILD +my-image
my-image:
...
SAVE IMAGE --push my-org/my-image:latest
This type of behavior is useful in order to have better control over the order of push operations. For example, you may want to push an image to a registry, followed by a deployment that uses the newly pushed image. Here is how this might look like:
push-and-deploy:
...
WAIT
BUILD +my-image
END
RUN --push ./deploy.sh my-org/my-image:latest
my-image:
...
SAVE IMAGE --push my-org/my-image:latest
Where ./deploy.sh
is custom deployment script instructing a production environment to start using the image that was just pushed.
Promoting experimental features
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of
the features in this version you need to declare VERSION 0.7
at the top of your Earthfile.
Declaring VERSION 0.7
is equivalent to
VERSION \
--check-duplicate-images \
--earthly-git-author-args \
--earthly-locally-arg \
--earthly-version-arg \
--explicit-global \
--new-platform \
--no-tar-build-output \
--save-artifact-keep-own \
--shell-out-anywhere \
--use-cache-command \
--use-chmod \
--use-copy-link \
--use-host-command \
--use-no-manifest-list \
--use-pipelines \
--use-project-secrets \
--wait-block \
0.6
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
- The behavior of the
--push
mode has changed in a backwards incompatible manner. Previously,--push
commands would only execute if all other commands had succeeded. This precondition is no longer enforced, allowing push commands to execute in the middle of the build now. Previously underVERSION --wait-block 0.6
. ARG
s declared in the base target do not automatically become global unless explicitly declared as such viaARG --global
. Previously underVERSION --explicit-global 0.6
.- The Cloud-based secrets model is now project-based; it is not compatible with the older global secrets model. Earthfiles which are defined as
VERSION 0.5
orVERSION 0.6
will continue to use the old global secrets namespace; however the earthly command line no longer supports accessing or modifying the global secrets. A newearthly secrets migrate
command has been added to help transition the global-based secrets to the new project-based secrets. If you need to manage secrets from Earthly 0.6 without migrating to the new 0.7 secrets, please use an older Earthly binary. - All
COPY
andSAVE ARTIFACT
operations now use union filesystem merging for performing theCOPY
. This is similar toCOPY --link
in Dockerfiles, however in Earthly it is automatically enabled for all such operations. Previously underVERSION --use-copy-link 0.6
. - The platform logic has been improved to allow overriding the platform in situations where previously it was not possible. Additionally, the default platform is now the native platform of the runner, and not of the host running Earthly. This makes platforms work better in remote runner settings. Previously under
VERSION --new-platform 0.6
. - Earthly will automatically shellout to determine the
$HOME
value when referenced #2469 - Improved error message when invalid shell variable name is configured for a secret. #2478
- The
--ci
flag no longer implies--save-inline-cache
and--use-inline-cache
since they were 100% CPU usage in some edge cases. These flags may still be explicitly enabled with--ci
, but earthly will print a warning. earthly ls
has been promoted from experimental to beta status.- Setting a
VERSION
feature flag boolean to false (or any other value) will now raise an error; previously it was syntactically valid but had no effect. SAVE ARTIFACT <path> AS LOCAL ...
when used under aTRY
/FINALLY
can fail to be fully transferred to the host when theTRY
command fails (resulting in an partially transferred file); an underflow can still occur, and is now detected and will not export the partial file. 2452- The
--keep-own
flag forSAVE ARTIFACT
is now applied by default; note thatCOPY --keep-own
must still be used in order to keep ownership - Values from the
.env
file will no longer be propagated to EarthfileARG
s orRUN --secret=...
commands; instead values must be placed in.arg
or.secret
files respectively. Note that this is a backwards incompatible change and will apply to all Earthfiles (regardless of the definedVERSION
value). #1736 - Some particularly obtuse syntax errors now have hints added to help clarify what the expected syntax might be. #2656
- The commands
PIPELINE
andTRIGGER
have been introduced for defining Earthly CI pipelines. Previously underVERSION --use-pipelines 0.6
. - The clause
WAIT
is now generally available. TheWAIT
clause allows controlling of build order for operations that require it. This allows use-cases such as pushing images to a registry, followed by infrastructure changes that use the newly pushed images. Previously underVERSION --wait-block 0.6
. - The command
CACHE
is now generally available. TheCACHE
command allows declaring a cache mount that can be used by anyRUN
command in the target, and also persists in the final image of the target (contents available when used viaFROM
). Previously underVERSION --use-cache-command 0.6
. - The command
HOST
is now generally available. TheHOST
command allows declaring an/etc/hosts
entry. Previously underVERSION --use-host-command 0.6
. - New ARG
EARTHLY_GIT_COMMIT_AUTHOR_TIMESTAMP
will contain the author timestamp of the current git commit. #2462 - New ARGs
EARTHLY_VERSION
andEARTHLY_BUILD_SHA
contain the version of Earthly and the git sha of Earthly itself, respectively. - It is now possible to execute shell commands as part of any command that allows using variables. For example
VOLUME $(cat /volume-name.txt)
. Previously underVERSION --shell-out-anywhere 0.6
. - Allow custom image to be used for git operations. #2027
- Earthly now checks for duplicate image names when performing image outputs. Previously under
VERSION --check-duplicate-images 0.6
. SAVE IMAGE --no-manifest-list
allows outputting images of a different platform than the default one, but without the manifest list. This is useful for outputting images for platforms that do not support manifest lists, such as AWS Lambda. Previously underVERSION --use-no-manifest-list 0.6
.COPY --chmod <mode>
allows setting the permissions of the copied files. Previously underVERSION --use-chmod 0.6
.- The new ARG
EARTHLY_LOCALLY
indicates whether the current target is executed in aLOCALLY
context. Previously underVERSION --earthly-locally-arg 0.6
. - The new ARGs
EARTHLY_GIT_AUTHOR
andEARTHLY_GIT_CO_AUTHORS
contain the author and co-authors of the current git commit, respectively. Previously underVERSION --earthly-git-author-args 0.6
. earthly doc [projectRef[+targetRef]]
is a new subcommand in beta status. It will parse and output documentation comments on targets.- Ability to store docker registry credentials in cloud secrets and corresponding
earthly registry setup|list|remove
commands; credentials can be associated with either your user or project. - New satellite commands for enabling auto-upgrades and forcing a manual upgrade.
- Support for saving files larger than 64kB on failure within a
TRY/FINALLY
block. #2452 - Fixed race condition where
SAVE IMAGE
orSAVE ARTIFACT AS LOCAL
commands were not always performed when contained in a target that was referenced by both aFROM
(orCOPY
) and aBUILD
command within the context of aWAIT
/END
block. #2237 WORKDIR
is lost when--use-copy-link
feature is enabled withGIT CLONE
orCOPY --keep-own
commands. Note that--use-copy-link
is enabled by default inVERSION 0.7
. #2544- The
CACHE
command did not work when used inside aWITH DOCKER
block. #2549 - The
--platform
argument is no longer passed to docker or podman, which caused podman to always pull the buildkit image even when it already existed locally. #2511, #2566 - Fixed missing inline cache export; note that inline cache exports do not work when used within a
WAIT
/END
block, this is a known current limitation. #2178 - Indentation in the base Earthfile target would cause a panic (when no other targets existed); now a syntax error is returned. #2603
The documentation for this version is available at the Earthly 0.7 documentation page.
Earthly CI
Earthly 0.7 is the first version compatible with Earthly CI.
Earthly 0.7 introduces the new keywords PIPELINE
and TRIGGER
to help define Earthly CI pipelines.
my-pipeline:
PIPELINE --push
TRIGGER push main
TRIGGER pr main
BUILD +my-target
For more information on how to use PIPELINE
and TRIGGER
, please see the reference documentation.
Podman support
Podman support has now been promoted out of beta status and is generally available in 0.7. Earthly will automatically detect the container frontend, whether that's docker
or podman
and use it automatically for running Buildkit locally, or for outputting images locally resulting from the build.
Please note that rootful podman is required. Rootless podman is not supported.
VERSION is now mandatory
The VERSION
command
is now required for all Earthfiles, and an error will occur if it is missing. If you are not ready to update your
Earthfiles to use 0.7 (or 0.6), you can declare VERSION 0.5
to continue to use your Earthfiles.
Pushing no longer requires everything else to succeed
The behavior of the --push
mode has changed in VERSION 0.7
and is backwards incompatible with VERSION 0.6
. Previously, --push
commands would only execute if all other commands had succeeded. This precondition is no longer enforced, to allow for more flexible push ordering via the new WAIT
clause. To achieve the behavior of the previous --push
mode, you need to wrap any pre-required commands in a WAIT
clause. For example, to push an image only if tests have passed, you would do the following:
test-and-push:
WAIT
BUILD +test
END
BUILD +my-image
my-image:
...
SAVE IMAGE --push my-org/my-image:latest
This type of behavior is useful in order to have better control over the order of push operations. For example, you may want to push an image to a registry, followed by a deployment that uses the newly pushed image. Here is how this might look like:
push-and-deploy:
...
WAIT
BUILD +my-image
END
RUN --push ./deploy.sh my-org/my-image:latest
my-image:
...
SAVE IMAGE --push my-org/my-image:latest
Where ./deploy.sh
is custom deployment script instructing a production environment to start using the image that was just pushed.
Promoting experimental features
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of
the features in this version you need to declare VERSION 0.7
at the top of your Earthfile.
Declaring VERSION 0.7
is equivalent to
VERSION \
--check-duplicate-images \
--earthly-git-author-args \
--earthly-locally-arg \
--earthly-version-arg \
--explicit-global \
--new-platform \
--no-tar-build-output \
--save-artifact-keep-own \
--shell-out-anywhere \
--use-cache-command \
--use-chmod \
--use-copy-link \
--use-host-command \
--use-no-manifest-list \
--use-pipelines \
--use-project-secrets \
--wait-block \
0.6
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
- The behavior of the
--push
mode has changed in a backwards incompatible manner. Previously,--push
commands would only execute if all other commands had succeeded. This precondition is no longer enforced, allowing push commands to execute in the middle of the build now. Previously underVERSION --wait-block 0.6
. ARG
s declared in the base target do not automatically become global unless explicitly declared as such viaARG --global
. Previously underVERSION --explicit-global 0.6
.- The Cloud-based secrets model is now project-based; it is not compatible with the older global secrets model. Earthfiles which are defined as
VERSION 0.5
orVERSION 0.6
will continue to use the old global secrets namespace; however the earthly command line no longer supports accessing or modifying the global secrets. A newearthly secrets migrate
command has been added to help transition the global-based secrets to the new project-based secrets. If you need to manage secrets from Earthly 0.6 without migrating to the new 0.7 secrets, please use an older Earthly binary. - All
COPY
andSAVE ARTIFACT
operations now use union filesystem merging for performing theCOPY
. This is similar toCOPY --link
in Dockerfiles, however in Earthly it is automatically enabled for all such operations. Previously underVERSION --use-copy-link 0.6
. - The platform logic has been improved to allow overriding the platform in situations where previously it was not possible. Additionally, the default platform is now the native platform of the runner, and not of the host running Earthly. This makes platforms work better in remote runner settings. Previously under
VERSION --new-platform 0.6
. - Earthly will automatically shellout to determine the
$HOME
value when referenced #2469 - Improved error message when invalid shell variable name is configured for a secret. #2478
- The
--ci
flag no longer implies--save-inline-cache
and--use-inline-cache
since they were 100% CPU usage in some edge cases. These flags may still be explicitly enabled with--ci
, but earthly will print a warning. earthly ls
has been promoted from experimental to beta status.- Setting a
VERSION
feature flag boolean to false (or any other value) will now raise an error; previously it was syntactically valid but had no effect. SAVE ARTIFACT <path> AS LOCAL ...
when used under aTRY
/FINALLY
can fail to be fully transferred to the host when theTRY
command fails (resulting in an partially transferred file); an underflow can still occur, and is now detected and will not export the partial file. 2452- The
--keep-own
flag forSAVE ARTIFACT
is now applied by default; note thatCOPY --keep-own
must still be used in order to keep ownership
- The commands
PIPELINE
andTRIGGER
have been introduced for defining Earthly CI pipelines. Previously underVERSION --use-pipelines 0.6
. - The clause
WAIT
is now generally available. TheWAIT
clause allows controlling of build order for operations that require it. This allows use-cases such as pushing images to a registry, followed by infrastructure changes that use the newly pushed images. Previously underVERSION --wait-block 0.6
. - The command
CACHE
is now generally available. TheCACHE
command allows declaring a cache mount that can be used by anyRUN
command in the target, and also persists in the final image of the target (contents available when used viaFROM
). Previously underVERSION --use-cache-command 0.6
. - The command
HOST
is now generally available. TheHOST
command allows declaring an/etc/hosts
entry. Previously underVERSION --use-host-command 0.6
. - New ARG
EARTHLY_GIT_COMMIT_AUTHOR_TIMESTAMP
will contain the author timestamp of the current git commit. #2462 - New ARGs
EARTHLY_VERSION
andEARTHLY_BUILD_SHA
contain the version of Earthly and the git sha of Earthly itself, respectively. - It is now possible to execute shell commands as part of any command that allows using variables. For example
VOLUME $(cat /volume-name.txt)
. Previously underVERSION --shell-out-anywhere 0.6
. - Allow custom image to be used for git operations. #2027
- Earthly now checks for duplicate image names when performing image outputs. Previously under
VERSION --check-duplicate-images 0.6
. SAVE IMAGE --no-manifest-list
allows outputting images of a different platform than the default one, but without the manifest list. This is useful for outputting images for platforms that do not support manifest lists, such as AWS Lambda. Previously underVERSION --use-no-manifest-list 0.6
.COPY --chmod <mode>
allows setting the permissions of the copied files. Previously underVERSION --use-chmod 0.6
.- The new ARG
EARTHLY_LOCALLY
indicates whether the current target is executed in aLOCALLY
context. Previously underVERSION --earthly-locally-arg 0.6
. - The new ARGs
EARTHLY_GIT_AUTHOR
andEARTHLY_GIT_CO_AUTHORS
contain the author and co-authors of the current git commit, respectively. Previously underVERSION --earthly-git-author-args 0.6
. earthly doc [projectRef[+targetRef]]
is a new subcommand in beta status. It will parse and output documentation comments on targets.- Ability to store docker registry credentials in cloud secrets and corresponding
earthly registry login|list|logout
commands; credentials can be associated with either your user or project. - New satellite commands for enabling auto-upgrades and forcing a manual upgrade.
- Support for saving files larger than 64kB on failure within a
TRY/FINALLY
block. #2452 - Fixed race condition where
SAVE IMAGE
orSAVE ARTIFACT AS LOCAL
commands were not always performed when contained in a target that was referenced by both aFROM
(orCOPY
) and aBUILD
command within the context of aWAIT
/END
block. #2237 WORKDIR
is lost when--use-copy-link
feature is enabled withGIT CLONE
orCOPY --keep-own
commands. Note that--use-copy-link
is enabled by default inVERSION 0.7
. #2544- The
CACHE
command did not work when used inside aWITH DOCKER
block. #2549 - The
--platform
argument is no longer passed to docker or podman, which caused podman to always pull the buildkit image even when it already existed locally. #2511, #2566 - Fixed missing inline cache export; note that inline cache exports do not work when used within a
WAIT
/END
block, this is a known current limitation. #2178 - Indentation in the base Earthfile target would cause a panic (when no other targets existed); now a syntax error is returned. #2603
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of
the features in this version you need to declare VERSION 0.7
at the top of your Earthfile. The VERSION
command
is now required for all Earthfiles, and an error will occur if it is missing. If you are not ready to update your
Earthfiles to use 0.7 (or 0.6), you can declare VERSION 0.5
to continue to use your Earthfiles.
Declaring VERSION 0.7
is equivalent to
VERSION \
--explicit-global \
--check-duplicate-images \
--earthly-version-arg \
--use-cache-command \
--use-host-command \
--use-copy-link \
--new-platform \
--no-tar-build-output \
--use-no-manifest-list \
--use-chmod \
--shell-out-anywhere \
--earthly-locally-arg \
--use-project-secrets \
--use-pipelines \
--earthly-git-author-args \
0.6
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
- The Cloud-based secrets model is now project-based; it is not compatible with the older global secrets model. Earthfiles which are defined as
VERSION 0.5
orVERSION 0.6
will continue to use the old global secrets namespace; however the earthly command line no longer supports accessing or modifying the global secrets. A newearthly secrets migrate
command has been added to help transition the global-based secrets to the new project-based secrets. - Earthly will automatically shellout to determine the
$HOME
value when referenced; this requires the--shell-out-anywhere
feature flag. #2469 - Improved error message when invalid shell variable name is configured for a secret. #2478
- The
--ci
flag no longer implies--save-inline-cache
and--use-inline-cache
since they were 100% CPU usage in some edge cases. These flags may still be explicitly enabled with--ci
, but earthly will print a warning.
- New ARG
EARTHLY_GIT_COMMIT_AUTHOR_TIMESTAMP
will contain the author timestamp of the current git commit, this ARG must be enabled with theVERSION --git-commit-author-timestamp
feature flag. #2462 - Allow custom image to be used for git opperations. #2027
- Support for saving files larger than 64kB on failure within a
TRY/FINALLY
block. #2452 - Fixed race condition where
SAVE IMAGE
orSAVE ARTIFACT AS LOCAL
commands were not always performed when contained in a target that was referenced by both aFROM
(orCOPY
) and aBUILD
command within the context of aWAIT
/END
block. #2237 WORKDIR
is lost when--use-copy-link
feature is enabled withGIT CLONE
orCOPY --keep-own
commands. #2544- The
CACHE
command did not work when used inside aWITH DOCKER
block. #2549 - The
--platform
argument is no longer passed to docker or podman, which caused podman to always pull the buildkit image even when it already existed locally. #2511, #2566
- Added support for a custom
.netrc
file path using the standardNETRC
environmental variable. #2426 - Ability to run multiple Earthly installations at a time via
EARTHLY_INSTALLATION_NAME
environment variable, or the--installation-name
CLI flag. The installation name defaults toearthly
if not specified. Different installations use different configurations, different buildkit Daemons, different cache volumes, and different ports. - New
EARTHLY_CI
builtin arg, which is set totrue
when earthly is run with the--ci
flag, this ARG must be enabled with theVERSION --ci-arg
feature flag. #2398
- Updated buildkit to include changes up to a5263dd0f990a3fe17b67e0002b76bfd1f5b433d, which includes a change to speed-up buildkit startup time.
- The Earthly Docker image works better for cases where a buildkit instance is not needed. The image now works without
--privileged
when usingNO_BUILDKIT=1
, and additionally, the image can also use/var/run/docker.sock
orDOCKER_HOST
for the buildkit daemon.
- Fixed Earthly on Mac would randomly hang on
1. Init
if Earthly was installed from Homebrew or the Earthly homebrew tap. #2247 - Only referenced ARGs from .env are displayed on failures, this prevents secrets contained in .env from being displayed. #1736
- Earthly now correctly detects if Podman is running but is under the disguise of the Docker CLI.
- Improved performance when copying files. Fully-cached builds are now dramatically faster as a result. #2049
- Fixed
--shell-out-anywhere
bug where inner quotes were incorrectly removed. #2340
- Cache mounts sharing mode can now be specified via
RUN --mount type=cache,sharing=shared
viaCACHE --sharing=shared
. Allowed values arelocked
(default - lock concurrent acccess to the cache),shared
(allow concurrent access) andprivate
(create a new empty cache on concurrent access).
- Increases the cache limit for local and git sources from 10% to 50% to support copying large files (e.g. binary assets).
- The default cache mount sharing mode is now
locked
instead ofshared
. This means that if you have multiple builds running concurrently, they will block on each other to gain access to the cache mount. If you want to share the cache as it was shared in previous version of Earthly, you can useRUN --mount type=cache,sharing=shared
orCACHE --sharing=shared
.
CACHE
command was not being correctly used inIF
,FOR
,ARG
and other commands. #2330- Fixed buildkit gckeepstorage config value which was was set to 1000 times larger than the cache size, now it is set to the cache size.
- Fixed Earthly not detecting the correct image digest for some images loaded in
WITH DOCKER --load
and causing cache not to be bust correctly. #2337 and #2288
- A summary of context file transfers is now displayed every 15 seconds.
- Satellite wake command, which can force a satellite to wake up (useful for calling inspect or other non-build related commands).
WITH DOCKER
merging of user specific/etc/docker/daemon.json
settings data now applies to arrays (previously only dictionaries were supported).- A final warning will be displayed if earthly is terminated due to a interrupt signal (ctrl-c).
- Updated buildkit to include changes up to c717d6aa7543d4b83395e0552ef2eb311f563aab
- Support for all ssh-based key types (e.g. ssh-ed25519), and not only ssh-rsa. #1783
- Unable to specify public key to add via the command-line, e.g. running
earthly account add-key <key>
ignored the key and fell back to an interactive prompt. GIT CLONE
command was ignoring theWORK DIR
command when--use-copy-link
feature was set.
- Build failures now show the file and line number of the failing command
- Introduced
EARTHLY_GIT_AUTHOR
andEARTHLY_GIT_CO_AUTHORS
ARGS
- Some network operations were being incorrectly executed with a timeout of 0.
- Upon
earthly ls
failure it will display the failure reason
- Loading Docker images as part of
WITH DOCKER
is now faster through the use of an embedded registry in Buildkit. This functionality was previously hidden (VERSION --use-registry-for-with-docker
) and was only auto-enabled for Earthly Satellite users. It is now enabled by default for all builds. #1268
VERSION
command is now required.
- Fixed outputting images with long names #2053
- Fixed buildkit connection timing out occasionally #2229
- Cache size was incorrectly displayed (magnitude of 1024 higher)
- The
earthly org invite
command now has the ability to invite multiple email addresses at once. - Experimental support for
TRY/FINALLY
, which allows saving artifacts upon failure. #988, #587. Not that this is only a partial implementation, and only accepts a single RUN command in theTRY
, and onlySAVE ARTIFACT
commands in theFINALLY
block. - Ability to enable specific satellite features via cli flags, e.g. the new experimental sleep feature can be enabled with
earthly satellite launch --feature-flags satellite-sleep my-satellite
.
- Bootstrapping zsh autocompletion will first attempt to install under
/usr/local/share/zsh/site-functions
, and will now fallback to/usr/share/zsh/site-functions
. - The
earthly preview org
command has been promoted to GA, and is now available underearthly org
. earthly sat select
with no arguments now prints the current satellite and the usage text.- The interactive debugger now connects over the buildkit session connection rather than an unencrypted tcp connection; this makes it possible to use the interactive debugger with remote buildkit instances.
- Fixed Earthly failing when using a remote docker host from a machine with an incompatible architecture. #1895
- Earthly will no longer race with itself when starting up buildkit. #2194
- The error reported when failing to initiate a connection to buildkit has been reworded to account for the remote buildkit/satellite case too.
- Errors related to parsing
VERSION
feature flags will no longer be displayed during auto-completion.
- Using
--remote-cache
on a target that contains onlyBUILD
instructions caused a hang. #1945 - Fixed WAIT/END related bug which prevent
WITH DOCKER --load
from building referenced target. - Images and artifacts which are output (or pushed), are now displayed in the final earthly output.
ssh: parse error in message type 27
error when using OpenSSH 8.9; fixed by upstream in golang/go#51689.
- Removed warning stating that
WAIT/END code is experimental and may be incomplete
-- it is still experimental; however, it now has a higher degree of test-coverage. It can be enabled withVERSION --wait-block 0.6
. - A warning is now displayed during exporting a multi-platform image to the local host if no platform is found that matches the host's platform type.
- Reduced verbosity of
To enable pushing use earthly --push
message.
--cache-from
earthly flag, which allows defining multiple ordered caches. #1693- WAIT/END support for saving artifacts to local host.
- WAIT/END support for
RUN --push
commands.
- Updated
EXPOSE
parsing to accept (and ignore) host IP prefix, as well as expose udp ports; this should be fully-compatible with dockerfile's format. #1986 - The earthly-buildkit container is now only initialized when required.
- The earthly-buildkit container is now only initialized when required.
EARTHLY_LOCALLY
builtin arg which is set totrue
orfalse
when executing locally or within a container, respectively. This ARG must be enabled with theVERSION --earthly-locally-arg
feature flag.
- Fixed an incompatibility with older versions of remote BuildKits and Satellites, which was resulting in Earthly crashing.
- Fixed
WITH DOCKER
not loading correctly when the image name contained a port number underVERSION --use-registry-for-with-docker
. #2071 - Race condition in WAIT / END block, which prevented waiting on some BUILD commands.
- Added a deprecation warning for secrets using a
+secrets/
prefix. Support for this prefix will be removed in a future release. - per-file stat transfers are now logged when running under
--debug
mode.
- Updated buildkit to include changes up to 12cfc87450c8d4fc31c8c0a09981e4c3fb3e4d9f
- Adding support for saving artifact from
--interactive-keep
. #1980 - New
EARTHLY_PUSH
builtin arg, which is set totrue
when earthly is run with the--push
flag, and the argument is referenced under the direct target, or a target which is indirectly referenced via aBUILD
command; otherwise it will be set tofalse
. The value mimics when aRUN --push
command is executed. This feature must be enabled withVERSION --wait-block 0.6
.
- Fixed
context.Canceled
being reported as the error in some builds instead of the root cause. #1991 - Improved cache use of
WITH DOCKER
command. - The
earthly/earthly
docker image is now also built for arm64 (in addition to amd64).
- Fixed retagging of images that are made available via the
WITH DOCKER
command when the--use-registry-for-with-docker
feature is enabled. - Fixed a bug where
earthly --version
would display unknown on some versions of Windows.
sh: write error: Resource busy
error caused by running the earthly/earthly docker image on a cgroups2-enabled host. #1934
- Additional debug information for failure during dind cleanup.
- Custom
secret_provider
is now called with user's env variables. - Additional args can be passed to
secret_provider
, e.g.secret_provider: my-password-manager --db=$HOME/path/to/secrets.db
- Local registry is enabled by default in the earthly-buildkit container.
- Switch to MPL-2.0 license. Announcement
- Experimental support for Docker registry based image creation and transfer
WITH DOCKER
loads and pulls. Enable with theVERSION --use-registry-for-with-docker
flag. - Git config options for non-standard port and path prefix; these options are incompatible with a custom git substitution regex.
- Experimental WAIT / END blocks, to allow for finer grain of control between pushing images and running commands.
- Improved ARG error messages to include the ARG name associated with the error.
- Panic when running earthly --version under some versions of Windows
- Removed duplicate git commit hash from earthly --version output string (when running dev versions of earthly)
- Garbled auto-completion when using Earthfiles without a VERSION command (or with other warnings) #1837.
- Masking of cgroups for podman support.
- Experimental support for
SAVE IMAGE --no-manifest-list
. This option disables creating a multi-platform manifest list for the image, even if the image is created with a non-default platform. This allows the user to create non-native images (e.g. amd64 image on an M1 laptop) that are still compatible with AWS lambda. To enable this feature, please useVERSION --use-no-manifest-list 0.6
. #1802 - Introduced Experimental support for
--chmod
flag inCOPY
. To enable this feature, please useVERSION --use-chmod 0.6
. #1817 - Experimental
secret_provider
config option allows users to provide a script which returns secrets. #1808 /etc/ssh/ssh_known_hosts
are now passed to buildkit. #1769
- Targets with the same
CACHE
commands incorrectly shared cached contents. #1805 - Sometimes local outputs and pushes are skipped mistakenly when a target is referenced both via
FROM
and viaBUILD
#1823 GIT CLONE
failure (makeCloneURL does not support gitMatcher substitution
) when used with a self-hosted git repo that was configured under~/.earthly/config.yml
#1757
- Earthly now warns when encountering Earthfiles with no
VERSION
specified. In the future, theVERSION
command will be mandatory. #1775
WITH DOCKER
now merges changes into/etc/docker/daemon.json
rather than overwriting the entire file; this change introducesjq
as a dependency, which will be auto-installed if missing.
- The
COPY
command, when used withLOCALLY
was incorrectly ignoring theWORKDIR
value. #1792 - The
--shell-out-anywhere
feature introduced a bug which interfered with asynchronous builds. #1785 EARTHLY_GIT_SHORT_HASH
was not set when building a remotely-referenced target. #1787
- A more obvious error is printed if
WITH DOCKER
starts non-natively. This is not supported and it wasn't obvious before. WITH DOCKER
will keep any settings pre-applied in/etc/docker/daemon.json
rather than overwriting them.
- The feature flag
--exec-after-build
has been enabled retroactively forVERSION 0.5
. This speeds up large builds by 15-20%. - The feature flag
--parallel-load
has been enabled for everyVERSION
. This speeds up by parallelizing targets built for loading viaWITH DOCKER --load
. VERSION 0.0
is now permitted, however it is only meant for Earthly internal debugging purposes.VERSION 0.0
disables all feature flags.- A new experimental mode in which
--platform
operates. To enable these features in your builds, setVERSION --new-platform 0.6
:- There is now a distinction between user platform and native platform. The user platform is the platform of the user running Earthly, while the native platform is the platform of the build worker (these can be different when using a remote buildkit)
- New platform shorthands are provided:
--platform=native
,--platform=user
. - New builtin args are available:
NATIVEPLATFORM
,NATIVEOS
,NATIVEARCH
,NATIVEVARIANT
(these are the equivalent of theUSER*
andTARGET*
platform args). - When no platform is provided, earthly will default to the native platform
- Additionally, earthly now default to native platform for internal operations too (copy operations, git clones etc)
- Earthly now allows changing the platform in the middle of a target (
FROM --platform
is not a contradiction anymore). There is a distinction between the "input" platform of a target (the platform the caller passes in) vs the "output" platform (the platform that ends up being the final platform of the image). These can be different if the caller passesBUILD --platform=something +target
, but the target starts withFROM --platform=otherthing ...
.
- Ability to shell-out in any Earthly command, (e.g.
SAVE IMAGE myimage:$(cat version)
), as well as in the middle of ARG strings. To enable this feature, useVERSION --shell-out-anywhere 0.6
.
- An experimental fix for duplicate output when building images that are loaded via
WITH DOCKER --load
. This can be enabled viaVERSION --no-tar-build-output 0.6
.
- An experimental feature whereby
WITH DOCKER
parallelizes building of the images to be loaded has been added. To enable this feature useVERSION --parallel-load 0.6
. #1725 - Added
cache_size_pct
config option to allow specifying cache size as a percentage of disk space.
- Fixed a duplicate build issue when using
IF
together withWITH DOCKER
#1724 - Fixed a bug where
BUILD --platform=$ARG
did not expand correctly - Fixed issue preventing use of
WITH DOCKER
with docker systemd-based images such askind
, when used under hosts with cgroups v2.
- reverted zeroing of mtime change that was introduced in v0.6.9; this restores the behavior of setting modification time to
2020-04-16T12:00
. #1712
- Log sharing is enabled by default for logged in users, it can be disabled with
earthly config global.disable_log_sharing true
. SAVE ARTIFACT ... AS LOCAL
now sets mtime of output artifacts to the current time.
- Earthly is now 15-30% faster when executing large builds #1589
- Experimental
HOST
command, which can be used like this:HOST <domain> <ip>
to add additional hosts during the execution of your build. To enable this feature, useVERSION --use-host-command 0.6
. #1168
- Errors when using inline caching indicating
invalid layer index
#1635 - Podman can now use credentials from the default location #1644
- Podman can now use the local registry cache without modifying
registries.conf
#1675 - Podman can now use
WITH DOCKER --load
inside a target marked asLOCALLY
#1675 - Interactive sessions should now work with rootless configurations that have no apparent external IP address #1573, #1689
- On native Windows installations, Earthly properly detects the local git path when it's available #1663
- On native Windows installations, Earthly will properly identify targets in Earthfiles outside of the current directory using the
\
file separator #1663 - On native Windows installations, Earthly will save local artifacts to directories using the
\
file separator #1663 - A parsing error, when using
WITH DOCKER --load
in conjunction with new-style build args. #1696 ENTRYPOINT
andCMD
were not properly expanding args when used in shell mode.- A race condition sometimes caused a
Canceled
error to be reported, instead of the real error that caused the build to fail
RUN --interactive
command exit codes were being ignored.RUN --ssh
command were failing to createSSH_AUTH_SOCK
when run inside aWITH DOCKER
. #1672
- expanded help text for
earthly account register --help
.
Log Sharing (experimental)
This version of Earthly includes an experimental log-sharing feature which will upload build-logs to the cloud when enabled.
To enable this experimental feature, you must first sign up for an earthly account
by using the earthly account register
command, or by visiting https://ci.earthly.dev/
Once logged in, you must explicitly enable log-sharing by running:
earthly config global.disable_log_sharing false
In a future version, log-sharing will be enabled by default for logged-in users; however, you will still be able to disable it, if needed.
When log-sharing is enabled, you will see a message such as
Share your build log with this link: https://ci.earthly.dev/logs?logId=dc622821-9fe4-4a13-a1db-12680d73c442
as the last line of earthly
output.
GIT CLONE
now works with annotated git tags. #1571CACHE
command was not working for versions of earthly installed via homebrew.- Autocompletion bug when directory has both an Earthfile and subdir containing an earthfile.
- Autocompletion bug when directory has two subdirectories where one is a prefix of the other.
earthly account logout
raises an error whenEARTHLY_TOKEN
is set.
- Ability to change mounted secret file mode. fixes #1434
- Permission errors related to reading
~/.earthly/config.yml
and.env
files are now treated as errors rather than silently ignored (and assuming the file does not exist). - Speedup from pre-emptive execution of build steps prior to them being referenced in the build graph.
- earthly panic when running with
SUDO_USER
pointing to a user the current user did not have read/write permission; notably encountered when running under circleci.
- Removed
--git-url-instead-of
flag, which has been replaced byearthly config git ...
- Ability to load a different
.env
file via the--env-file
flag. - Added experimental feature than changes the ARGs defined in the
+base
target to be local, unless defined with a--global
flag; To enable this feature useVERSION --explicit-global 0.6
.
- Updated buildkit to include changes up to 17c237d69a46d61653746c03bcbe6953014b41a5
failed to solve: image is defined multiple times for the same default platform
errors. #1594, #1582failed to solve: image rmi after pull and retag: command failed: docker image rm ...: exit status 1: Error: No such image
errors. #1590
- Duplicate execution occurring when using ARGs. #1572, #1582
- Overriding builtin ARG value now displays an error (rather than silently ignoring it).
- Updated buildkit to contain changes up to
15fb1145afa48bf81fbce41634bdd36c02454f99
frommoby/master
.
- Experimental
CACHE
command can be used in Earthfiles to optimize the cache in projects that perform better with incremental changes. For example, a Maven project whereSNAPSHOT
dependencies are added frequently, an NPM project wherenode_modules
change frequently, or programming languages using incremental compilers. #1399 - Config file entries can be deleted using a
--delete
flag (for exampleearthly config global.conversion_parallelism --delete
). #1449 - Earthly now provides the following builtin ARGs:
EARTHLY_VERSION
andEARTHLY_BUILD_SHA
. These will be generally available in Earthly version 0.7+, however, they can be enabled earlier by using the--earthly-version-arg
. feature flag #1452 - Config option to disable
known_host
checking for specific git hosts by settingstrict_host_key_checking
tofalse
under thegit
section ofearthly/config.yml
(defaults totrue
). - Error check for using both
--interactive
and--buildkit-host
(which are not currently supported together). #1492 earthly ls [<project-ref>]
to list Earthfile targets.
- Gracefully handle empty string
""
being provided as a value toearthly config
commands. #1449 known_host
entries were being ignored when custompattern
andsubstituted
git config options were used (commonly used for self-hosted git repos)- Unable to connect to ssh server when
known_hosts
doesn't contain ssh-rsa host scan, but contains a different key-scan (e.g.ecdsa-sha2-nistp256
,ssh-ed25519
, etc). - When git auth is set to ssh but no user is given, default to current user (similar to calling
ssh example.com
vsssh user@example.com
).
unexpected non-relative path within git dir
bug when using case insensitive file systems #1426- Unable to access private GitHub repos #1421
BUILD
arguments containing a subshell ($(...)
) were executed twice, and when+base
target was empty would result errors such asthe first command has to be FROM, FROM DOCKERFILE, LOCALLY, ARG, BUILD or IMPORT
#1448- TLS error (
transport: authentication handshake failed: remote error: tls: no application protocol
) when enabling buildkit mTLS #1439 - Unable to save artifacts to local directory (
.
) #1422
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of the features in this version you need to declare VERSION 0.6
at the top of your Earthfile. If a version is not declared, then Earthly's interpreter will assume VERSION 0.5
.
If you are not ready to update your scripts to take advantage of VERSION 0.6
, then you may upgrade Earthly anyway and your scripts should continue to work as before, provided that they either declare VERSION 0.5
or they don't declare a version at all.
Declaring VERSION 0.6
is equivalent to
VERSION \
--use-copy-include-patterns \
--referenced-save-only \
--for-in \
--require-force-for-unsafe-saves \
--no-implicit-ignore \
0.5
It is recommended to use VERSION 0.6
instead as individual feature flags don't guarantee proper forwards-backwards compatibility. Note, however, that Earthly 0.5.*
is not able to run a VERSION 0.6
Earthfile and will return an error.
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
-
What Earthly outputs locally has changed in a way that is not backwards compatible. For an artifact or an image to be produced locally it needs to be part of a
BUILD
chain (or be part of the target being directly built). Artifacts and images introduced throughFROM
orCOPY
are no longer output locally.To update existing scripts, you may issue a duplicate
BUILD
in addition to aFROM
(or aCOPY
), should you wish for the referenced target to perform output.For example, the following script
FROM +some-target COPY +another-target/my-artifact ./
could become
FROM +some-target BUILD +some-target COPY +another-target/my-artifact ./ BUILD +another-target
in order to produce the same outputs.
For more details see #896.
-
The syntax for passing build args has been changed.
Earthly v0.5 (old way)
FROM --build-arg NAME=john +some-target COPY --build-arg NAME=john +something/my-artifact ./ WITH DOCKER --build-arg NAME=john --load +another-target ... END
Earthly v0.6 (new way)
FROM +some-target --NAME=john COPY (+something/my-artifact --NAME=john) ./ WITH DOCKER --load (+another-target --NAME=john) ... END
Passing build args on the command-line has also changed similarly:
Earthly v0.5 (old way)
earthly --build-arg NAME=john +some-target
Earthly v0.6 (new way)
earthly +some-target --NAME=john
This change is part of the UDC proposal #581. The old way of passing args is deprecated and will be removed in a future version (however, it still works in 0.6).
- If a
SAVE ARTIFACT
is unsafe (writing to a directory outside of the Earthfile directory), it'll require the--force
flag. .earthlyignore
no longer includes any implicit entries likeEarthfile
or.earthlyignore
. These will need to be specified explicitly. #1294- Buildkit was updated to
d429b0b32606b5ea52e6be4a99b69d67b7c722b2
. This includes a number of bug fixes, including eliminating crashes due topanic failed to get edge
.
- Earthly now performs local image outputs to the local Docker daemon through a built-in registry. This speeds up the process drastically as common layers no longer need to be transferred over #500.
- Earthly now enables additional parallelism to speed up certain operations that were previously serialized #888. Note that this setting was previously controlled by
--conversion-parallelism
flag or theEARTHLY_CONVERSION_PARALLELISM
environment variable while in experimental stage. It has now been moved as part of the Earthly config and has been promoted to GA. COPY
transfers are sped up as only the necessary files are sent over to BuildKit #1062.WITH DOCKER
has been promoted to GA #576.FROM DOCKERFILE
has been promoted to GA.LOCALLY
has been promoted to GA #580.RUN --interactive
andRUN --interactive-keep
have been promoted to GA #693.IF
andFOR
have been promoted to GA #779.- Support for Apple Silicon M1 has been promoted to GA #722.
- Multi-platform builds have been promoted to GA #536.
- Mounting secrets as files have been promoted as GA #579.
VERSION
has been promoted to GA #991- User-defined commands (UDCs) have been promoted to GA #581.
- Allow running
SAVE ARTIFACT
afterRUN --push
is now GA #586. SAVE ARTIFACT --if-exists
andCOPY --if-exists
have been promoted to GA #588.- Shared cache and
--ci
mode are now GA #11. - New builtin args
USERPLATFORM
,USEROS
,USERARCH
, andUSERVARIANT
which represent the platform, OS, architecture, and processor variant of the system Earthly is being called from #1251. Thanks to @akrantz01 for the contribution! - Config option for buildkit's
max_parallelism
configuration. Use this to increase parallelism for faster builds or decrease parallelism when resources are constraint. The default is 20. #1308 - Support for required ARGs (
ARG --required foo
) #904. Thanks to @camerondurham for the contribution! - Extended auto-completion to be build-arg aware. Typing
earthly +my-target --<tab><tab>
now prints possible build-args specific to+my-target
. #1330. - The console output now has an improved structure #1226.
- Eliminated some spurious warnings (
ReadDataPacket failed
,Failed to connect to terminal
,failed to read from stdin
and others) #1241. - Minor fixes related to the experimental Podman support #1239.
- Improved some error messages related to frontend detection #1250.
- Fixed Podman's ability to load OCI images #1287.
- Fixed homebrew installation on macOS 12. #1370, homebrew/earthly#13
failed due to failed to autodetect a supported frontend
errors will now include underlying reason for failure- Cache export was not honoring
EARTHLY_MAX_REMOTE_CACHE
setting. - Buildkit logs were not being sent to
earthly-buildkitd
container's output. - kind required permissions were not available in earthly-buildkitd.
- cache export was not honoring
EARTHLY_MAX_REMOTE_CACHE
setting - buildkit logs were not being sent to
earthly-buildkitd
container's output. - kind required permissions were not available in earthly-buildkitd.
- docker and fsutils versions were set to match versions defined in earthly's buildkit fork.
failed due to failed to autodetect a supported frontend
errors will now include underlying reason for failure
- Buildkit was updated to
d47b46cf2a16ca80a958384282e8028285b1866d
.
This version promotes a number of features that have been previously in Experimental and Beta status. To make use of the features in this version you need to declare VERSION 0.6
at the top of your Earthfile. If a version is not declared, then Earthly's interpreter will assume VERSION 0.5
.
If you are not ready to update your scripts to take advantage of VERSION 0.6
, then you may upgrade Earthly anyway and your scripts should continue to work as before, provided that they either declare VERSION 0.5
or they don't declare a version at all.
Declaring VERSION 0.6
is equivalent to
VERSION \
--use-copy-include-patterns \
--referenced-save-only \
--for-in \
--require-force-for-unsafe-saves \
--no-implicit-ignore \
0.5
It is recommended to use VERSION 0.6
instead as individual feature flags don't guarantee proper forwards-backwards compatibility. Note, however, that Earthly 0.5.*
is not able to run a VERSION 0.6
Earthfile and will return an error.
For more information on the individual Earthfile feature flags see the Earthfile version-specific features page.
- Earthly now performs local image outputs to the local Docker daemon through a built-in registry. This speeds up the process drastically as common layers no longer need to be transferred over #500.
- Earthly now enables additional parallelism to speed up certain operations that were previously serialized #888. Note that this setting was previously controlled by
--conversion-parallelism
flag or theEARTHLY_CONVERSION_PARALLELISM
environment variable while in experimental stage. It has now been moved as part of the Earthly config and has been promoted to GA. COPY
transfers are sped up as only the necessary files are sent over to BuildKit #1062.WITH DOCKER
has been promoted to GA #576.FROM DOCKERFILE
has been promoted to GA.- Support for Apple Silicon M1 has been promoted to GA #722.
- Multi-platform builds have been promoted to GA #536.
- Mounting secrets as files have been promoted as GA #579.
VERSION
has been promoted to GA #991- User-defined commands (UDCs) have been promoted to GA #581.
- Allow running
SAVE ARTIFACT
afterRUN --push
is now GA #586. SAVE ARTIFACT --if-exists
andCOPY --if-exists
have been promoted to GA #588.- Shared cache and
--ci
mode are now GA #11. LOCALLY
has been promoted to GA #580.RUN --interactive
andRUN --interactive-keep
have been promoted to GA #693.IF
andFOR
have been promoted to GA #779.- If a
SAVE ARTIFACT
is unsafe (writing to a directory outside of the Earthfile directory), it'll require the--force
flag. .earthlyignore
no longer includes any implicit entries likeEarthfile
or.earthlyignore
. These will need to be specified explicitly. #1294- The console output now has an improved structure #1226.
- Fixed homebrew installation on macOS 12. #1370, homebrew/earthly#13
-
What Earthly outputs locally has changed in a way that is not backwards compatible. For an artifact or an image to be produced locally it needs to be part of a
BUILD
chain (or be part of the target being directly built). Artifacts and images introduced throughFROM
orCOPY
are no longer output locally.To update existing scripts, you may issue a duplicate
BUILD
in addition to aFROM
(or aCOPY
), should you wish for the referenced target to perform output.For example, the following script
FROM +some-target COPY +another-target/my-artifact ./
could become
FROM +some-target BUILD +some-target COPY +another-target/my-artifact ./ BUILD +another-target
in order to produce the same outputs.
For more details see #896.
-
The syntax for passing build args has been changed.
Earthly v0.5 (old way)
FROM --build-arg NAME=john +some-target COPY --build-arg NAME=john +something/my-artifact ./ WITH DOCKER --build-arg NAME=john --load +another-target ... END
Earthly v0.6 (new way)
FROM +some-target --NAME=john COPY (+something/my-artifact --NAME=john) ./ WITH DOCKER --load (+another-target --NAME=john) ... END
Passing build args on the command-line has also changed similarly:
Earthly v0.5 (old way)
earthly --build-arg NAME=john +some-target
Earthly v0.6 (new way)
earthly +some-target --NAME=john
This change is part of the UDC proposal #581. The old way of passing args is deprecated and will be removed in a future version (however, it still works in 0.6).
- Add builtin args
USERPLATFORM
,USEROS
,USERARCH
, andUSERVARIANT
which represent the platform, OS, architecture, and processor variant of the system Earthly is being called from #1251. Thanks to @akrantz01 for the contribution! - Support for required ARGs (
ARG --required foo
) #904. Thanks to @camerondurham for the contribution! - Add a config item for buildkit's
max_parallelism
configuration. Use this to increase parallelism for faster builds or decrease parallelism when resources are constraint. The default is 20. #1308 - Extend auto-completion to be build-arg aware. Typing
earthly +my-target --<tab><tab>
now prints possible build-args specific to+my-target
. #1330. - Buildkit was updated to
d429b0b32606b5ea52e6be4a99b69d67b7c722b2
. This includes a number of bug fixes, including eliminating crashes due topanic failed to get edge
.
- Eliminated some spurious warnings (
ReadDataPacket failed
,Failed to connect to terminal
,failed to read from stdin
and others) #1241. - Minor fixes related to the experimental Podman support #1239.
- Improved some error messages related to frontend detection #1250.
- Fixed Podman's ability to load OCI images #1287.
- New
--output
flag, which forces earthly to enable outputs, even when running under--ci
mode #1200. - Experimental support for Podman #760.
- Automatically adds compatibility arguments for cases where docker is running under user namespaces.
- Removed spurious
BuildKit and Local Registry URLs are pointed at different hosts (earthly-buildkitd vs. 127.0.0.1)
warning. - Scrub git credentials when running under --debug mode.
- "FROM DOCKERFILE" command was ignoring the path (when run on a remote target), which prevented including dockerfiles which were named something else.
- Removed the creation of a temporary output directory when run in
--no-output
mode, or when building targets that don't output artifacts, the temporary directory is now created just before it is needed. - Fixed race condition involving
WITH DOCKER
andIF
statements, which resulted infailed to solve: NotFound: no access allowed to dir
errors.
- introduced
COPY --if-exists
which allows users to ignore errors which would have occurred if the file did not exist. - introduced new
ip_tables
config option for controlling which iptables binary is used; fixes #1160 - introduced warning message when saving to paths above the current directory of the current Earthfile; these warnings will eventually become errors unless the
--force
flag is passed toSAVE ARTIFACT
. - fixed remote BuildKit configuration options being ignored; fixes #1177
- suppressed erroneous internal-term error messages which occurred when running under non-interactive ( e.g.
--ci
) modes; fixes #1108 - changed help text for
--artifact
mode - deb and yum packages no longer clear the earthly cache on upgrades
- when running under
--ci
mode, earthly now raises an error if a user attempts to use the interactive debugger - updated underlying BuildKit version
- print all request and responses to BuildKit when running under --debug mode
- support for specifying files to ignore under
.earthlyignore
in addition to.earthignore
; an error is raised if both exist - new ARG
EARTHLY_GIT_SHORT_HASH
will contain an 8 char representation of the current git commit hash - new ARG
EARTHLY_GIT_COMMIT_TIMESTAMP
will contain the timestamp of the current git commit - new ARG
EARTHLY_SOURCE_DATE_EPOCH
will contain the same value asEARTHLY_GIT_COMMIT_TIMESTAMP
or 0 when the timestamp is not available - only directly referenced artifacts or images will be saved when the VERSION's --referenced-save-only feature flag is defined #896
- experimental support for FOR statements, when the VERSION's --for-in feature flag is defined #1142
- fixes bug where error was not being repeated as the final output
- fixes bug where HTTPS-based git credentials were leaked to stdout
- Support for passing true/false values to boolean flags #1109
- fixes error that stated
http is insecure
when configuring a HTTPS git source. #1115
- Improved selective file-transferring via BuildKit's include patterns; this feature is currently disabled by default, but can be enabled by including the
--use-copy-include-patterns
feature-flag in theVERSION
definition (e.g. addVERSION --use-copy-include-patterns 0.5
to the top of your Earthfiles). This will become enabled by default in a later version. - Support for host systems that have
nf_tables
rather thanip_tables
. - Show hidden dev flags when
EARTHLY_AUTOCOMPLETE_HIDDEN="1"
is set (or when running a custom-built version). - Improved crash logs.
- Added a
--symlink-no-follow
flag to allow copying invalid symbolic links (#1067) - Updated BuildKit, which contains a fix for "failed to get edge" panic errors (#1016)
- Fix bug that prevented using an absolute path to reference targets which contained relative imports
- Added option to disable analytics data collection when environment variables
EARTHLY_DISABLE_ANALYTICS
orDO_NOT_TRACK
are set. - Include version and help flags in autocompletion output.
- Begin experimental official support for
earthly/earthly
andearthly/buildkitd
images; including a newentrypoint
forearthly/earthly
(#1050) - When running in
verbose
mode, log all files sent to BuildKit (#1051, #1056) - Adjust
deb
andrpm
packages to auto-install the shell completions though post-installation mechanisms (#1019, #1057)
- fixes handling of
Error getting earthly dir
lookup failures which prevents earthly from running (#1026) - implements ability to perform local exports via buildkit-hosted local registry in order to speed up exports; the feature is currently disabled by default but can be enabled with
earthly config global.local_registry_host 'tcp://127.0.0.1:8371'
(#500)
earthly config
is no longer experimental. (#979)- Running a target, will now
bootstrap
automatically, if it looks likeearthly bootstrap
has not been run yet. (#989) earthly bootstrap
ensures the permissions on the.earthly
folder are correct (belonging to the user) ( #993)- Cache mount ID now depends on a target input hash which does not include inactive variables (#1000)
- Added
EARTHLY_TARGET_PROJECT_NO_TAG
built-in argument (#1011) - When
~
is used as the path to a secret file, it now expands as expected. (#977) - Use the environment-specified
$HOME
, unless$SUDO_USER
is set. If it is, use the users home directory. (#1015)
earthly config
is no longer experimental. (#979)- Running a target, will now
bootstrap
automatically, if it looks likeearthly bootstrap
has not been run yet. (#989) earthly bootstrap
ensures the permissions on the.earthly
folder are correct (belonging to the user) ( #993)- Cache mount ID now depends on a target input hash which does not include inactive variables (#1000)
- Added
EARTHLY_TARGET_PROJECT_NO_TAG
built-in argument (#1011) - When
~
is used as the path to a secret file, it now expands as expected. (#977)
- fixes panic on invalid (or incomplete)
~/.netrc
file (#980)
- Adds a retry for remote BuildKit hosts when using the
EARTHLY_BUILDKIT_HOST
configuration option. (#952) - Re-fetch credentials when they expire (#957)
- Make use of
~/.netrc
credentials when no config is set under~/.earthly/config.yml
(#964) - Make use of auth credentials when performing a GIT CLONE command within an Earthfile. (#964)
- Improved error output when desired secret does not exist, including the name of the missing secret. (#972)
- Warn if
build-arg
appears after the target in CLI invocations.(#959)
- Support for
FROM DOCKERFILE -f
(#950) - Fixes missing access to global arguments in user defined commands (#947)
- Users's
~/.earthly
directory is now referenced when earthly is invoked with sudo
- Added ability to run
WITH DOCKER
underLOCALLY
(#840) - Fix
FROM DOCKERFILE
--build-arg
s not being passed correctly (#932) - Docs: Add uninstall instructions
- Docs: Improve onboarding tutorial based on user feedback
- [experimental] Improved parallelization when using commands such as
IF
,WITH DOCKER
,FROM DOCKERFILE
,ARG X=$(...)
and others. To enable this feature, pass--conversion-parallelism=5
or setEARTHLY_CONVERSION_PARALLELISM=5
. (#888) - Auto-detect MTU (#847)
- MTU may set via config
earthly config global.cni_mtu 12345
(#906) - Hide
--debug
flag since it is only used for development on Earthly itself - Download and start buildkitd as part of the earthly bootstrap command
- Improved buildkitd startup logic (#892)
- Check for reserved target names and disallow them (e.g.
+base
) (#898) - Fix use of self-hosted repositories when a subdirectory is used (#897)
- [experimental] Support for ARGs in user-defined commands (UDCs). UDCs are templates (much like functions in regular programming languages), which can be used to define a series of steps to be executed in sequence. In other words, it is a way to reuse common build steps in multiple contexts. This completes the implementation of UDCs and the feature is now in experimental phase (#581). For more information see the UDC guide.
- [experimental] New command:
IMPORT
(#868)IMPORT github.com/foo/bar:v1.2.3 IMPORT github.com/foo/buz:main AS zulu ... FROM bar+target BUILD zulu+something
- Fix handling of some escaped quotes (#859)
- Fix: empty targets are now valid (#872)
- Fix some line continuation issues (#873 & #874)
- Earthly now limits parallelism to
20
. This fixes some very large builds attempting to use resources all at the same time - Automatically retry TLS handshake timeout errors
- raise error when duplicate target names exists in Earthfile
- basic user defined commands (experimental)
- cleans up console output for saving artifacts (#848)
- implement support for WORKDIR under LOCALLY targets
- fix zsh autocompletion issue for mac users
If the autocompletion bug persists for anyone (e.g. seeing an error like
command not found: __earthly__
), and the issues persists after upgrading to v0.5.7; it might be necessary to delete the _earthly autocompletion file before re-running earthly bootstrap (or alternatively manually replace__earthly__
with the full path to the earthly binary).
- This release removes the
ongoing
updates "Provide intermittent updates on long-running targets (#844)" from the previous release, as it has issues in the interactive mode.
- Keep
.git
directory in build context. (#815 ) - Wait extra time for buildkitd to start if the cache is larger than 30 GB (#827)
- Experimental: Allow RUN commands to open an interactive session (
RUN --interactive
), with the option to save the manual changes into the final image (RUN --interactive-keep
) (#833) - Provide intermittent updates on long-running targets (#844)
- Fix ZSH autocompletion in some instances (#838)
- New experimental
--strict
flag, which doesn't allow the use ofLOCALLY
.--strict
is now implied when using--ci
. (#801) - Add help text when issuing
earthly config <item> --help
. Improved user experience. (#814) - Detect if the build doesn't start with a FROM-like command and return a meaningful error. Previously
FROM scratch
was assumed automatically. (#807) - Fix an issue where
.tmpXXXXX
directories were created in the current directory (#821) - Fix auto-complete in zsh (#811)
- Improved startup logic for BuildKit daemon, which speeds up some rare edge cases (#808)
- Print BuildKit logs if it crashes or times out on startup (#819)
- Create config path if it's missing (#812)
- Support for conditional logic using new
IF
,ELSE IF
, andELSE
keywords (required for #779) - Support for copying artifacts to
LOCALLY
targets (required for #580)
- segfault when no output or error is displayed (fixes #798)
- unable to run earthly in docker container with mounted host-docker socket (fixes #791)
./.tmp-earthly-outXXXXXX
temp files are now stored under./.tmp-earthly-out/tmpXXXXXX
and are correctly excluded from the build context
- New experimental command for editing the Earthly config (#675)
SAVE IMAGE --push
after aRUN --push
now includes the effects of theRUN --push
too (#754)- Improved syntax errors when parsing Earthfiles
- Improved error message when QEMU is missing
- Fix
earthly-linux-arm64
binary - was a Mac binary by mistake (#789) - Fix override of build arg not being detected properly (#790)
- Fix image export error when it doesn't contain any
RUN
commands (#782)
- Support for SAVE ARTIFACT under LOCALLY contexts; this allows one to run a command locally and save the output to a different container.
- Support for build arg matrix; supplying multiple
--build-args
for the same value will cause theBUILD
target to be built for each different build arg value. - Improvements for Apple M1 support
- Improved errors when parsing invalid Earthfiles (to enable the new experimental code, set the
EARTHLY_ENABLE_AST
variable totrue
)
- Switch to BSL license. For more information about this decision, take a look at our blog post.
--platform
setting is now automatically propagated between Earthfiles. In addition, you can now specify the empty string--platform=
to automatically detect your system's architecture.earthly/dind
images now available forlinux/arm/v7
andlinux/arm64
- Improved visibility of platform used for each build step, as well as for any build args that have been overridden.
- Allow saving an artifact after a
RUN --push
(#735) - Allow specifying
--no-cache
for a singleRUN
command (#585) - There are now separate
SUCCESS
lines for each of the two possible phases of an earthly run:main
andpush
. - Support of popular cloud registries for the experimental shared cache feature is now properly documented
- Fix
SAVE IMAGE --cache-hint
not working correctly (#744) - Fix
i/o timeout
errors being cached and requiring BuildKit restart - Experimental support for running commands on the host system via
LOCALLY
(#580) - Bug fixes for Apple Silicon.
earthly-darwin-arm64
binary is now available. Please treat this version as highly experimental for now. (#722)
- No details provided
- No details provided
- No details provided
- Improved experimental support for arm-based platforms, including Apple M1. Builds run natively on arm platforms now. (For Apple M1, you need to use darwin-amd64 download and have Rosetta 2 installed - the build steps themselves will run natively, however, via the BuildKit daemon).
- Add
SAVE ARTIFACT --if-exists
(#588) - Fix an issue where comments at the end of the Earthfile were not allowed (#681)
- Fix an issue where multiple
WITH DOCKER --load
with the same target, but different image tag were not working (#685) - Fix an issue where
SAVE ARTIFACT ./* AS LOCAL
was flattening subdirectories (#689) - Binaries for
arm5
andarm6
are no longer supported
- Fix regression for
WITH DOCKER --compose=... --load=...
(#676) - Improvements to the multiplatform experimental support. See the multiplatform example.
- fixed:
EARTHLY_GIT_PROJECT_NAME
contained the raw git URL when HTTPS-based auth was used (fixes #671) - feature: support for mounting secrets as files rather than environment variables
- feature: experimental support for multi-platform builds
- misc: sending anonymized usage metrics to earthly