1
0
mirror of https://github.com/ko-build/ko.git synced 2025-02-01 19:14:40 +02:00

124 Commits

Author SHA1 Message Date
Halvard Skogsrud
29fccb0832
Speed up base image unit test with local registry (#429)
Also follow my own advice to `defer Close()` 😇
2021-08-27 09:52:01 -07:00
Halvard Skogsrud
ae594dcc74
Set build config via BuildOptions (#421)
* Set build config via BuildOptions

Enables programmatically overriding build configs when ko is
embedded in another tool.

Related: #340, #419

* Use local registry for base images in unit tests

Tests create a local registry (using ggcr) with a dummy base image. This
speeds up tests, since they don't need to hit gcr.io to fetch the
default distroless base image.

* Update function comment to refer to random image
2021-08-26 09:33:01 -07:00
Halvard Skogsrud
9a256a4b19
Enable setting environment variables in .ko.yaml (#419)
* Enable setting environment variables in .ko.yaml

Matches the GoReleaser format.

Related: #340

* Use different env example
2021-08-23 08:05:01 -07:00
Jason Hall
780c281292
Generate Markdown docs (#414)
* Generate Markdown docs

This is largely copied from similar work in go-containerregistry

This required moving the Root command definition out of main() into a
place where it could be referenced from the gendoc tooling.

* fix boilerplate

* moar fix boilerplate

* update cmd/ko/main.go

* set -j to GOMAXPROCS at runtime

* rebase on cli-runtime change

* remove trailing whitespace
2021-08-11 13:54:13 -07:00
Jason Hall
86a7b6f4b8
Don't set image.base.name if base is specified by digest (#408)
* Don't set image.base.name if base is specified by digest

* don't set empty annotation

* annotate Results, not Images and Indexes separately

* moar cleanup

* skip annotations check for images in indexes, these won't be annotated anymore
2021-08-11 16:52:01 -04:00
Jason Hall
466dbab6c4
Remove dependency on cli-runtime (#413)
* first pass: kubectl flags must be passed after '--'

* add warning when using non-separated flags

* mark flags as deprecated

* drop defaultCacheDir and homedir dependency
2021-08-10 13:57:23 -04:00
Jason Hall
4ff8308086
Use annotation strings from image-spec/specs-go (#407) 2021-08-03 20:00:24 -04:00
Jason Hall
8c7b9cbb8b
Implement ko deps (#403)
* Implement ko deps

* actually add deps.go

* specify auth, useragent, platform

* stop reading tar if the context is cancelled

* chmod to the file's perms

* remove support for --platform, modules don't care about build tags

* fix copyright boilerplate

* drop fs dependency

* udpate module integration test to newer Go versions

* use entrypoint to identify the binary

* fix gosec finding, some style comments

* revert modules integration test change
2021-07-30 13:19:40 -04:00
Jason Hall
c9efd26241
Annotate OCI image indexes with base image information (#385) 2021-07-30 09:29:58 -07:00
Jason Hall
f16d0d0412
Don't add .exe suffix to windows executables (#400) 2021-07-28 16:28:22 -04:00
Evan Anderson
f04730dc84
Make --insecure-registry work with TLS registries whose certs we can't verify. (#398)
* Make --insecure-registry work with TLS registries whose certs we can't verify.

* Don't error if we can't disable TLS checking when insecure.
2021-07-28 13:23:45 -07:00
Jason Hall
690533235a
Build working Windows container images (#374)
* Build working Windows container images

Add e2e tests that run on Windows and cover kodata behavior

* now successfully skipping symlinks on windows :-/

* fix e2e test on windows, that relied on a symlink in kodata after all

* document windows symlink issue

* review feedback

* re-add kodata symlink tests for linux
2021-07-27 16:19:21 -04:00
Jason Hall
26d03e92c2
Annotate images with base image information (#354)
* WIP: annotate base images

* remove TODO

* .

* Annotate with base index digest, if based on an index

* use correct new proposed annotation
2021-07-20 15:06:08 -05:00
Jason Hall
56282bf645
Fix layout tests on macos (#384) 2021-07-15 10:16:24 -04:00
Halvard Skogsrud
8295e25f7d
Enable overriding docker client (#378)
When embedding ko, it may be necessary to override the docker client.

This adds a PublishOption to inject a docker client created elsewhere.
Ko will use this client to interact with the docker daemon.

Context: https://github.com/GoogleContainerTools/skaffold/pull/6054#discussion_r662230195
2021-07-15 07:10:52 -07:00
Matthias Diester
ab4d264103
Add support for Go build flags (#340)
There are use cases, where multiple Go build flags need to be set. However, the
environment variable to pass flags to Go build has some limits for `ldFlags`.

Add GoReleaser inspired configuration section to `.ko.yaml` to support setting
specific Go build and ldFlags to be used by the build. Like GoReleaser the
content of the configuration can use Go templates. Currently, only a section
for environment variables is included.

In order to reduce dependency overhead, only the respective config structs from
https://github.com/goreleaser/goreleaser/blob/master/pkg/config/config.go are
used internally to load from `.ko.yaml`.
2021-07-02 08:40:56 -07:00
Simon Kirsten
ee23538378
Add KO_DATA_DATE_EPOCH env var to set the modification time for files in kodata (#372)
* Add KO_DATA_DATE_EPOCH env var

* Add documentation for KO_DATA_DATE_EPOCH env var
2021-06-15 12:50:35 -07:00
Halvard Skogsrud
2ba8bb26d1
Enable setting the working dir for the go tool (#365)
This change adds a `WorkingDirectory` field to `options.BuildOptions`,
but doesn't expose this as a CLI flag. The default zero value means the
current working directory. The value is used as the directory for
executing `go` tool commands.

When embedding ko in other tools, it is sometimes necessary to set the
working directory for executing the `go` tool, instead of assuming the
current process working directory.

An example of where this is required from Skaffold:
https://github.com/GoogleContainerTools/skaffold/tree/master/examples/microservices

In this example, the working directory doesn't contain either `go.mod`
or any Go files. The `skaffold.yaml` configuration file specifies
a `context` field for each image, which is the directory where the `go`
tool can find package information.
2021-06-10 08:29:30 -07:00
jonjohnsonjr
82e899db0c
Look for ko.local in the daemon (#371)
* Look for ko.local in the daemon

* Update README
2021-06-09 09:20:45 -07:00
jonjohnsonjr
23ecf4753b
Propagate --insecure-registry to base image (#370) 2021-06-01 09:47:30 -07:00
Halvard Skogsrud
d6b3a3cba3
Enable embedding of ko publish (#348)
- Export functions and a variable to enable embedding of ko's
  `publish` functionality to be embedded in other tools.

  See https://github.com/GoogleContainerTools/skaffold/pull/5611

- Remove DockerRepo PublishOption and flag.

  This removes the `DockerRepo` config option and `--docker-repo`
  flag from the PR.

  New PR with the extracted config option:
  https://github.com/google/ko/pull/351

- Fix copyright headers for boilerplate check.

- Use DockerRepo PublishOption instead of env var.

- Override defaultBaseImage using BuildOptions.

  Remove exported package global SetDefaultBaseImage and instead
  allow programmatic override of the default base image using
  the field `BaseImage` in `options.BuildOptions`.

  Also fix copyright header years.

- Add BuildOptions parameter to getBaseImage

  This enables access to BaseImage for programmatically overriding
  the default base image from `.ko.yaml`.

- Add UserAgent to BuildOptions and PublishOptions

  This enables programmatically overriding the `User-Agent` HTTP
  request header for both pulling the base image and pushing the
  built image.

- Rename MakeBuilder to NewBuilder and MakePublisher to NewPublisher.

  For more idiomatic constructor function names.
2021-05-25 11:44:52 -07:00
Chun-Hung Hsiao
bc92184f85
Add a tag-only flag to publisher. (#332)
Co-authored-by: chhsia0 <chhsiao@mesosphere.io>
2021-05-17 08:26:15 -07:00
Halvard Skogsrud
a68d0ab75f
Enable override of daemon publisher local domain (#362)
* Enable override of daemon publisher local domain

Add a `LocalDomain` field to `PublishOptions`, but no flag (yet?).

This allows use of a domain (base repo) other than `ko.local` for images
that are side-loaded to the local Docker daemon.

An alternative implementation would be to add a boolean field that
indicates that `ko publish` should use the value of the `KO_DOCKER_REPO`
environment variable (or the `DockerRepo` field in `PublishOptions`) as
the base name for images side-loaded to the local Docker daemon. I'd be
happy to get feedback on which option would work best.

* Restore NewDaemon tags positional arg
2021-05-17 08:25:47 -07:00
Halvard Skogsrud
516cdeec7d
Add flag and PublishOption for destination repo (#351)
* Add flag and PublishOption for destination repo

This enables programmatically setting the destination image repository
when embedding ko's `publish` functionality in other tools.

See https://github.com/google/ko/pull/348

* Set DockerRepo PublishOption from KO_DOCKER_REPO

This enables programmatically setting the destination image repository
and avoids exposing a flag.

* Update comment on DockerRepo option

* Fix readme and copyright headers
2021-04-30 13:53:00 -04:00
Jason Hall
5395f992fc
bump ggcr dep to v0.5.0 (#349) 2021-04-28 18:08:12 -04:00
Jason Hall
29cd8e09e9
Use cobra's RunE wherever possible (#343) 2021-04-22 12:37:42 -04:00
Jason Hall
75ab99123d
Plumb through context in kind.Tag and kind.Write (#341) 2021-04-20 15:46:17 -04:00
Jason Hall
5eef982548
Merge pull request #313 from zhouhaibing089/update-bare-comment
options: update --bare help message
2021-04-07 20:50:16 -04:00
Jason Hall
f7df810619
Add --image-label to add labels to built images (#324) 2021-03-03 10:03:31 -08:00
jonjohnsonjr
ee74460418
Wrap io errs for kodata layer (#320)
* Wrap io errs for kodata layer

* Don't shadow hostPath
2021-02-25 09:42:29 -08:00
zhouhaibing089
b27ed4eb69 options: update --bare help message
The current `--bare` help message is a little bit confusing: It says
that it will not work with `--tags` properly, but in fact, I would
assume it means that it may not work properly instead.

With `--bare`, the name will be `${KO_DOCKER_REPO}:<tag>`.
2021-02-18 18:17:15 -08:00
jonjohnsonjr
82cabb40ba
Fix GOROOT mismatch issues (#303)
Print a warning if GOROOT is unset and ko's default build context
differs from $(go env GOROOT) and use the result of $(go env GOROOT).
2021-01-21 10:30:14 -08:00
jonjohnsonjr
34568cac73
Use remote.WithUserAgent where possible (#294)
This was using remote.WithTransport to set it manually, and this is much
simpler (also annotates with the go-containerregistry version). This is
really nice because it will give us at least some version information
where we had none before (for non-releases).

Before:

ko
ko/(devel)
ko/v0.7.0

After:

ko go-containerregistry/v0.4.0
ko/(devel) go-containerregistry/v0.4.0
ko/v0.7.0 go-containerregistry/v0.4.0
2021-01-18 11:11:16 -08:00
Jon Johnson
6586a72f8a Always use "strict" mode
We dropped this flag, so we're always in non-strict mode by default,
so if there is a ko:// reference that fails to build, we don't error
out. This drops some guards so that we are always in strict mode and
only build ko:// things.
2020-12-22 14:00:31 -08:00
Scott Nichols
c2b862d468
Move ko binary to root of project. (#257)
* Move ko binary to root of project.

* go.mod says required golang version is 1.14

* go install uses the folder name

* lint and copyright bump

* moving the test file changed the test hash.

* more refs of cmd/test

* add deprecation message
2020-12-22 09:31:02 -08:00
jonjohnsonjr
7e3245343a
Allow comma-separated list of platforms (#259)
* Allow comma-separated list of platforms

* Parse platform spec once

* Update --platform docs in README

* Update pkg/build/gobuild_test.go

Co-authored-by: Matt Moore <mattmoor@vmware.com>

* Return err for bad defaulting for --platform

Also respect GOARM as variant if the goarch is arm.

* Refactor platform matching

* Update README.md to mention GOARM

* Fix travis test

Co-authored-by: Matt Moore <mattmoor@vmware.com>
2020-12-21 16:53:00 -08:00
jonjohnsonjr
fd5cd4bfbc
Actually print errors during resolve (#275)
We were just throwing away the error for `ko resolve`.
2020-12-21 14:51:05 -08:00
jonjohnsonjr
522c37c4e0
Add ctx everywhere (#268)
* Add ctx to publish.Interface

I noticed that hitting ctrl-C didn't work when pushing images, this
should fix that.

* Use context everywhere that makes sense
2020-12-21 11:47:05 -08:00
Matt Moore
222b0fc788
Allow ko to produce estargz layers. (#271)
* Allow ko to produce estargz layers.

This pulls in the latest google/go-containerregistry, which enables folks to set `GGCR_EXPERIMENT_ESTARGZ=1` to enable `ko` to start producing layers compatible with the estargz format, which enables the containerd estargz-snapshotter to lazy-load parts of images.

* Add README
2020-12-17 15:00:30 -08:00
Matt Moore
960e6a3f1c
Update ggcr and use the new tarball.WithCompressCaching (#263)
This simplifies the logic for creating layers and relies on the new option instead of pre-gzipping (and gunzip being faster).  The net effect of this should be the elimination of an extra gunzip, but it should not materially impact the memory pressure because we were ALREADY caching the gzipped layers in-memory, we were just doing it on the caller side, which provided less benefit!
2020-12-13 18:14:27 -08:00
jonjohnsonjr
b84301964a
Make --watch work with ko:// (#250)
The dep-notify package doesn't know anything about ko, so we need to
trim the strict prefix before sending import paths over to it.
2020-11-20 13:12:19 -08:00
jonjohnsonjr
1c704388dc
Print platform variant when building go binary (#248) 2020-11-20 09:15:04 -08:00
Jon Johnson
c183e84439 Stop using filepath.Join in publisher 2020-11-17 09:33:56 -08:00
jonjohnsonjr
1f17ce95d4
Set GOARM based on platform.variant (#239)
This relies on some hard-coded knowledge of the go compiler, which is
unfortunate, so we will have to update this if things change.
2020-11-04 12:44:08 -08:00
Matt Moore
79beb3b015
Refactor the publish.Namer, add --bare option for image naming (#234)
* Refactor the publish.Namer to produce the full repo name.

* Add --naked to have image publishing use ${KO_DOCKER_REPO}:tag

* Change flag name, add disclaimer
2020-11-03 13:47:36 -08:00
Jason Hall
d767708246
IsSupportedReference returns descriptive error (#233)
This can be useful to determine what they need to do to make a ko
publish work.
2020-10-31 09:55:28 -07:00
Matt Moore
cde258294f
Run the hello test on multiple architectures (#227) 2020-10-23 16:47:34 -07:00
Markus Thömmes
695b39f9f4 Fix things pointed out by golangci-lint 2020-10-13 15:27:59 +02:00
Jason Hall
e780390edb
Avoid panic caused by MultiPublisher (#216)
MultiPublisher now returns an error when it's configured with no
publishers, and resolver.go now appends a nop publisher when it's
configured not to publish, that simulates a publish without actually
pushing any images.

.
2020-10-06 06:45:25 -07:00
Jason Hall
d7b989a9df
Remove docs for Strict Mode and --strict flag (#210) 2020-09-30 11:00:36 -07:00