Commit Graph

319 Commits

Author SHA1 Message Date
Martin Zihlmann 49f24a7395
workdir is cacheable now 2025-05-29 23:23:07 +01:00
Martin Zihlmann 0561cc5664
support empty images in cache to handle WORKDIR w/o implicit folders created 2025-05-29 23:23:06 +01:00
Martin Zihlmann bded1ff3bb
drop warning again as empty layers are now handled properly 2025-05-27 23:49:55 +01:00
Martin Zihlmann fe3d53b617
dont append layer if known empty 2025-05-27 22:42:36 +01:00
Martin Zihlmann 2d14b6a277
Merge pull request #18 from mzihlmann/warn-about-cache-misses
RUN commands dont specify which files were added
2025-05-27 21:56:57 +01:00
Martin Zihlmann b058214391
RUN commands dont specify which files were added 2025-05-27 21:55:47 +01:00
Martin Zihlmann 8b37861b78
Merge pull request #17 from mzihlmann/ignore-labels
no need for deepcopy
2025-05-27 21:54:44 +01:00
Martin Zihlmann 8e8ad9d19c
no need for deepcopy 2025-05-27 21:20:12 +01:00
mzihlmann 176f8f6e0b
Merge pull request #12 from mzihlmann/warn-about-cache-misses
warn about potential cache-misses explicitly
2025-05-26 14:53:25 +01:00
Martin Zihlmann febeb075a1
warn about potential cache-misses explicitly 2025-05-26 14:41:17 +01:00
mzihlmann 1185dfab2c
Merge pull request #8 from mzihlmann/add-labels-on-last-image
drop whitespace diff
2025-05-25 12:44:21 +01:00
Martin Zihlmann 7a6d0f67db
drop whitespace diff 2025-05-25 11:12:36 +01:00
mzihlmann 6f15090e58
Merge pull request #6 from mzihlmann/add-labels-on-last-image
fix: preserve labels from base images
2025-05-25 10:50:48 +01:00
Martin Zihlmann 8b49940016
fix: preserve labels from base images 2025-05-25 10:48:16 +01:00
mzihlmann b34d005c0e
Merge pull request #4 from mzihlmann/add-labels-on-last-image
fix: intermediate images should not be labelled
2025-05-24 21:05:23 +01:00
Martin Zihlmann 79ce1d458b
fix: intermediate images should not be labelled 2025-02-16 14:08:40 +00:00
Martin Zihlmann e507b78ae6
fix: ignore labels on base image for cache 2024-10-13 04:54:48 +01:00
Martin Zihlmann 8106b5594f
fix: sourceImage's CreatedAt timestamp should not be included in cache key 2024-10-10 12:46:44 +01:00
Leo Palmer Sunmo 6a340c6a1f
Enable pushing cache with --no-push (#3181)
Make sure we check --no-cache-push instead of --no-push when deciding whether to
push cache or not.
2024-06-04 11:21:16 -07:00
Samarth08 d65b9b5418
"fix: resolve issue where cache layers would be pushed if --no-push was specified" (#3132) 2024-05-13 17:13:55 -07:00
Jérémie Augustin 8148159c30
Add AWS ECR error message for tag Immutability (#3045) 2024-03-18 23:01:34 -07:00
Matheus Pimenta 8bbd69d8a1
Add --push-ignore-immutable-tag-errors boolean CLI option (#2774) 2024-02-29 10:05:58 -08:00
Kraev Sergei da3878e16b
Fix missing or partial support for pattern substition in variable references with cache enabled (#2968) 2024-02-13 18:57:19 -08:00
Asher 398ebfb6da
Prevent extra snapshot with --use-new-run (#2943)
* Prevent extra snapshot when using new run

* Add unit tests for initializing snapshotter

There should be no snapshot for RunV2.  Added a test for SingleSnapshot
as well to prove that the test actually works (rather than `initialized`
just not being read or set properly).
2024-01-16 21:14:03 -08:00
Aaron Prindle 9e992703e4
fix: resolve issue with copy_multistage_test.go and broken ioutil import (#2879) 2023-11-29 10:51:39 -08:00
JeromeJu 9e595494b6
Skip the /kaniko directory when copying root (#2863)
This commit adds the skip option for otiai10.Copy to skip the /kaniko
directory when the root is being copied. The files under /kaniko dir
should be ignored and thus this shall not cause any loss of information.

fixes: GoogleContainerTools#2033
2023-11-28 19:49:35 -08:00
Manish Giri 7bfc73c3ad
fix: Remove references to deprecated io/ioutil pkg (#2867)
* Update benchmark_test

* Updae tar.go

* Update further refs

* Commit next set of replacements

* Reverting changes in vendor folder

* Update integreation_with_context_test.go

* Update k8s_test.go

* Update remaining usages

* Replace conflicting usage of fs local variable
2023-11-28 13:02:53 -08:00
tal66 401616bb38
refactor: rm bool param detectFilesystem in `InitIgnoreList` (#2843) 2023-11-14 20:10:44 -05:00
Lio李歐 e5395c7a21
feat: support https URLs for digest-file (#2811)
This feature allows one to specify an https URL for any of the
digest-file options, resulting in an HTTP PUT to the provided
URL. This could for example be a (pre-signed) URL to S3 or GCS.

Currently the final digest is only written to the local filesystem,
which disappears and is not accessible when Kaniko is run in a
managed container service like AWS ECS.

By supporting https a single implementation supports all storage
services, without the need for special code for S3, GCS, etc..
2023-11-10 11:05:36 -08:00
Logan Price 14b2ea5528
feat: ensure images layers correspond with the image media type (#2719)
Ensure zstd compression only gets applied to oci images.
When adding a layer to an image ensure that they are compatable if not convert them.
Create function to convert mediatypes between oci and docker types.
2023-09-13 10:49:56 -07:00
guangwu 382cf3a9c2
chore: unnecessary use of fmt.Sprintf (#2717)
Signed-off-by: guoguangwu <guoguangwu@magic-shield.com>
2023-09-01 09:44:31 -07:00
geekvest 5df0343d5b
fix function name on comment (#2707)
Signed-off-by: geekvest <cuimoman@sohu.com>
2023-09-01 09:31:52 -07:00
Logan Price e9787f85d4
fix: ensure layer media type matches image media type if oci image (#2700)
test: add to ensure media type being saved
2023-08-29 10:33:13 -07:00
JeromeJu 6ee84f128d
Change condition for the behavior when --no-push=true without --destinations (#2676)
This commit changes the condition check for the behavior when no-push is
set to true while destinations are needed. Prior this change, users would
have to set destinations even when noPush option is set to true. More
specifically, a workaround for tar files to be generated when --no-push is
true and destinations is empty is provided where a dummy destination would be
set.
2023-08-17 09:53:59 -07:00
Julian cefe99b92a
Added skip-push-permission flag (#2657)
Added skip-push-permission flag to conditionally disable push permission check on build start to accommodate for slow network policies
2023-08-15 11:23:16 -07:00
Andreas Fleig 01763bce5b
Fix fs_util tests failing on systems with /tmp mountpoint (#2583)
* Rename IgnoreListPath to MountInfoPath in config & constants

The string points to /proc/self/mountinfo

* fs_util_test.go: fix tests failing when /tmp mountpoint present

The tests

* Test_GetFSFromLayers_ignorelist
* Test_GetFSFromLayers_with_whiteouts_include_whiteout_disabled
* Test_GetFSFromLayers_with_whiteouts_include_whiteout_enabled

were failing on systems with a /tmp mountpoint:

fs_util.InitIgnoreList() adds all mountpoints to the ignore list,
but the tests were expecting file operations in a /tmp subdirectory.

This change provides an empty mountinfo list for the affected tests.

Fixes #1779
2023-06-19 12:01:20 -07:00
Kraev Sergei eea12bd025
Fix multistage caching with COPY --from (#2559)
* Removed block on use --cache-copy-layers with multistage builds
* Removed using digest in composite key with command COPY --from
* COPY --from command uses src as file context (only changed files will be reason for change hash)
* ARG and ENV changed before COPY dont change composite key
* Add and fix some tests
* Caching work same as caching in docker buildx

Co-authored-by: Sergei Kraev <skraev@tradingview.com>
2023-06-16 10:56:05 -07:00
Fedor V 90fe22bc2e
fix: paths deduplication while resolving symlinks (#2504)
Closes #2381
2023-05-29 01:37:20 -07:00
Eric 7525828ef9
Add mTLS (client cert) registry authentication (#2180)
* Add mTLS (client cert) support

Add support for Mutual TLS (mTLS) client certificate authentication.
The expected format of the new --registry-client-cert flag is the same
as the existing --registry-certificate flag, which will allow
different client certificates for different registries:

--registry-client-cert my.registry.url=/path/to/cert.crt,/path/to/key.key

* tidy: Rename mTLS (Client Cert) flag to be in line with others

This flag didn't describe that it was for the client certs uses with
the registry. Although this should be reasonably obvious, I like the
consistency with the other registry flag.

* test: Added unit tests for mTLS (Client Cert) loading

* test: Add 2 more tests for comma split formatting

since the comma splitting is a new portion of code let's make sure
that that format works well too in other cases

* tidy: Fix formatting of flag help text

* tidy: Made invalid cert format error consistent

I was running the tests and saw the message:

Failed to load client certificate/key '/path/to/client/certificate.cert' for my.registry.name, format is my.registry.name=/path/to/cert,/path/to/key

I then realized that it'd be a lot nicer if this showed the user what
they input, and how they should change it (rather than decomposing it:

Failed to load client certificate/key 'my.registry.name=/path/to/client/certificate.cert', expected format: my.registry.name=/path/to/cert,/path/to/key

* test: Fixed incorrect test argument

This didn't fail the test before because it's only attempting to show
that certs only get loaded and used for their associated registry but
it's important to keep this correct.

This case is covered by the test below, "RegistriesClientCertificates
incorrect cert format"

* doc: Add new flag to README.md

* mod: Fail to push if there was a problem loading client certs

Rather than warning that there was an issue, we should fail if the
requested client certificates were not found or failed to load.

This feels a lot better than waiting for the build to finish then
failing later.

* mod: Return an error if the certificate authority fails to load, just like client certs

The MakeTransport function was changed in the previous commit to
allow returning errors if there was a problem loading certificates,
rather than just print warnings.

This feels a lot better as you get the error immediately that there's
a problem to fix, rather than getting a warning, then later an error
that the server's certificate could not be verified.

* tidy: fix golint issues
2023-05-18 14:20:51 -07:00
Lavrenti Frobeen 24846d22b1
Use correct media type for zstd layers (#2459)
In my previous commits I forgot to override the media type for layers that are using zstd compression.
2023-04-03 11:34:26 -04:00
Lavrenti Frobeen 76afb70790
Add support for zstd compression (#2313)
* Add support for configurable compression algorithm (gzip, zstd) and compression level

We want to make the layer compression in kaniko configurable, so we have added two optional command line arguments “--compression” and “--compression-level”. The former allows the user to specify a compression algorithm (zstd, gzip) and the latter can be used to specify the compression level.

Depending on the selected compression algorithm and level we modify the set of layerOptions that are used to create tarball layers in `push.go` and `build.go`.

The actual implementation of the zstd support can be found in our fork of the go-containerregistry package for which we have filed this PR: google/go-containerregistry#1487

The changes should be fully backwards compatible.

* Restrict inputs for compression flag to gzip and zstd

This change will ensure that users can only specify supported compression algorithms (`zstd`, `gzip`) to the `--compression` flag.

* Fix incorrect type for switch statements on config.Compression
2023-04-01 22:25:25 -04:00
Joe Kimmel 906cc96b59
Upgrade docker (#2440)
* somehow now the only thing that doesnt work is devices.Device

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

* this gets rid of all the compiler errors in the vendored code

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

* fixed some things but a bunch of tests and maybe some compiler steps are still failing

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

* all the things i figured out how to fix so far

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

* guess i had to redo go mods after rebasing again

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

* update docker constants to be SHOUTY CASE now

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

* include DestPath in resolveEnv

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

* fix one mistake in Docker lib upgrade and some typos/deprecations in the file

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

* last changes (hopefully) to update to new docker libs

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>

---------

Signed-off-by: Joe Kimmel <jkimmel@vmware.com>
2023-03-23 20:34:25 -04:00
Joël Pepper 14ea7c4071
Fix Integration tests (#2425)
* fix(ci): Bump golangci-lint to 1.51.1

* chore(lint): fix gofmt and goimport issues

* chore(lint): fix linter issues

- Adapted error comparison according to linter recommendation
- Disabled noctx linting for http request where canceling makes no sense
- Disabled nilerror linting where nil error is returned on purpose
- Disabled makezero linter where slice is explicitly deepcopied

* chore(ci): Update go version in tests workflows

* fix(ci): Allow boilerplate years from 2000-2099

Previously the regex only allowed the copyright notice to contain the
years 2018,2019,2020,2021, or 2022. This commit widens to regex to
20\d\d allowing any year in the range [2000-2099]

* feat(ci): Replace minikube with k3s for intregration tests

The existing setup for minikube is very complicated, replicating most of
the setup steps for a full kubernetes cluster in an only partially
supported minikube configuration (driver=none). Furthermore the existing
setup has been broken for sometime, likely, at least in part due to the
changes to CNI and CRI in recent kubernetes versions.

Since what we actually need is only a running Kubernetes cluster on the
node and access to a registry on localhost:5000, we can switch the
extremely complicated minikube setup for a lightweight cluster using
k3s. Minikube came with a default addon for running a registry on every
node, but the same is not the case for k3s, instead we make use of the
package helm controller and its HelmChart CR to deploy twuni/docker-registry.helm
and expose it on localhost using the integrated LoadBalancer controller.

* fix(test-684): pin base container version

The dockerfile for the regression test connected to issue 684 used a
rolling tag as base image, making it flaky and fail since it was
introduced.

This commit pins the base image to the digest of bionic-20200219, which,
based on the date of the commit that introduced to the dockerfile would
be the most newest ubuntu build and likely what the "rolling" tag
resolved to back then. Since this also an image from the pre-oci days of
ubuntu, this circumvents a bug in container-diff as well
(https://github.com/GoogleContainerTools/container-diff/issues/389)
2023-03-21 12:30:54 -04:00
Natalie Arellano 4d077e2a40
Provide `--cache-repo` as OCI image layout path (#2250)
* Adds the ability to provide `--cache-repo` as an OCI image layout path

- Adds cache.LayoutCache to implement cache.LayerCache interface
- When opts.CacheRepo has "oci:" prefix, instantiates a LayoutCache

Signed-off-by: Natalie Arellano <narellano@vmware.com>

* Add integration test for layout cache

Signed-off-by: Natalie Arellano <narellano@vmware.com>

* Updates from PR review

Signed-off-by: Natalie Arellano <narellano@vmware.com>

Signed-off-by: Natalie Arellano <narellano@vmware.com>
2022-09-28 10:19:02 -04:00
Natalie Arellano 76c0a8c1ec
Add the ability to skip unpacking the initial file system (#2234)
- Adds a new option, InitialFSUnpacked
- When opts.InitialFSUnpacked is true, the first stage builder will
  skip unpacking the file system; later stages are unaffected

Signed-off-by: Natalie Arellano <narellano@vmware.com>

Signed-off-by: Natalie Arellano <narellano@vmware.com>
2022-09-06 10:21:12 -04:00
Ramy f9dcb92c38
add cache run command option (#2032)
Co-authored-by: Rami CHAABANE <rchaabane@scaleway.com>
2022-08-09 08:35:00 -04:00
Hingbong Lo 9f57952214
fix: use refrence should after err handles (#2128)
* fix: use refrence should after err handles

* Update pkg/executor/build.go

Co-authored-by: Jason Hall <jason@chainguard.dev>
2022-06-09 11:00:30 -04:00
Gabriel Nützi 323e616a67
fix: Refactor `LayersMap` to correct old strange code behavior (#2066)
* fix: Correct flatten function in layers

- Added a test.
- Cache current image, track deletes in `whiteouts` as well as normal adds in `layers`.
- Fix ugly delete behavior of `layerHashCache`.
  Delete it when crerating a new snapshot.
- Slight cleanup in `snapshot.go`.
- Format ugly `WalkFS` function.

* fix: Add symbolic link changes  to Hasher and CacheHasher

* fix: Better log messages

* fix(ci): Integration tests

* fix(ci): Add `--no-cache` to docker builds

* fix(ci): Pass credentials for error integration test

* np: Missing .gitignore in `hack`

* np: Capitalize every log message

- Correct some linting.

* fix: Key function

- Merge only last layer onto `currentImage`.

* fix: Remove old obsolete `cacheHasher`
2022-05-17 20:30:58 -04:00
Gabriel Nützi 28432d3c84
fix(ci): Docker build for issue 1837 (#2095)
* fix: Docker build for issue 1837

* fix: Linting
2022-05-17 14:21:57 -04:00
Gabriel Nützi 7b50fc8a57
fix: Main (#2094) 2022-05-17 13:27:24 -04:00