Commit Graph
36 Commits
Author SHA1 Message Date
Matt Moore f5762bedf3 Add support for --image-refs (#555)
* Add support for `--image-refs`

This change adds a new `--image-refs=FILE` flag that can be used to
direct `ko` to write a file containing a `\n` delimited list of published
references.  In the common case, this will contain the list of digest
references, but if flags directing the use of tags are present this
will reflect the style of reference requested.

* Fix dates, interface check.
2021-12-20 09:51:43 -08:00
Matt Moore 22c9a5229b Add coverage of --platform=a,b (#547) 2021-12-14 15:24:07 -08:00
Matt Moore a56047a2a1 Filter out nil addendum before constructing index. (#546)
In the PR where we added concurrency we used a fixed length array to store
addendum to preserve the ordering from the base image when constructing the
final index.  However, with `--platform=...` this list may be filtered, which
gives us `nil` entries in our addendum.

This filters `nil` entries prior to constructing the index.

Fixes: https://github.com/google/ko/issues/544
2021-12-14 11:00:18 -08:00
Matt Moore 5787600e92 Normalize the package hash to hex. (#512)
We were emitting package checksum hashes as `h1:{base64}`.  `h1:` is a prefix that indicates "Hash 1", which is a SHA-256 based hash of the files, which is then base64 encoded as the suffix.

This change detects/strips the `h1:` prefix and re-encodes the base64 data as hex.
2021-11-23 09:34:43 -05:00
Matt Moore 3edb68b273 Connect SBOMs with SPDX support. (#511)
* Connect SBOMs with SPDX support.

This combines Jason's SPDX stuff and my SBOM stuff to support
SPDX-based SBOMs by default instead of our `go version -m`
invention.

* Make ko deps use SPDX by default
2021-11-22 17:19:43 -05:00
Matt Moore 6d0691330a Add support for writing SBOMs when the build.Result is oci.Signed*. (#506)
This adds functionality that enables the default publisher to
publish SBOMs (and later signatures and attestations) when the
`build.Result` is an `oci.SignedEntity`.

This also changes the `gobuild` logic to start producing
`oci.Signed*` as its `build.Result`s, so when executed we get an
SBOM for each architecture image.

For example, see the "Published SBOM" lines below:

```shell
2021/11/19 19:24:50 Using base gcr.io/distroless/static:nonroot for github.com/google/ko
2021/11/19 19:24:51 Building github.com/google/ko for linux/amd64
2021/11/19 19:24:52 Building github.com/google/ko for linux/arm64
2021/11/19 19:24:57 Publishing ghcr.io/mattmoor/ko:latest
2021/11/19 19:24:58 existing blob: sha256:c78c74e7bb4a511f7d31061fbf140d55d5549a62d33cdbdf0c57ffe43603bbeb
2021/11/19 19:24:58 existing blob: sha256:4aa59d0bf53d4190174fbbfa3e9b15fdab72e5a95077025abfa8435ccafa2920
2021/11/19 19:24:58 ghcr.io/mattmoor/ko:sha256-d2bc030f5ed083d5e6a30a7969c9a8e599511b8d7a6e20695bf5ea029b6e2c3f.sbom: digest: sha256:c67ec671aaa82902e619883a7ac7486e6f9af36653449e2eb030ba273fe5a022 size: 348
2021/11/19 19:24:58 Published SBOM ghcr.io/mattmoor/ko:sha256-d2bc030f5ed083d5e6a30a7969c9a8e599511b8d7a6e20695bf5ea029b6e2c3f.sbom
2021/11/19 19:24:58 existing blob: sha256:c78c74e7bb4a511f7d31061fbf140d55d5549a62d33cdbdf0c57ffe43603bbeb
2021/11/19 19:24:58 existing blob: sha256:4aa59d0bf53d4190174fbbfa3e9b15fdab72e5a95077025abfa8435ccafa2920
2021/11/19 19:24:59 ghcr.io/mattmoor/ko:sha256-b74c230f20efd94981e5fd823bacc23cbd71055a1b3b6a0893152b398c67743b.sbom: digest: sha256:c67ec671aaa82902e619883a7ac7486e6f9af36653449e2eb030ba273fe5a022 size: 348
2021/11/19 19:24:59 Published SBOM ghcr.io/mattmoor/ko:sha256-b74c230f20efd94981e5fd823bacc23cbd71055a1b3b6a0893152b398c67743b.sbom
2021/11/19 19:24:59 existing blob: sha256:3f7e3c6765a6abc682cd40ea256fbea5c1d4debbc07659efbc0dedc13eee0da6
2021/11/19 19:24:59 existing blob: sha256:250c06f7c38e52dc77e5c7586c3e40280dc7ff9bb9007c396e06d96736cf8542
2021/11/19 19:24:59 existing blob: sha256:e8614d09b7bebabd9d8a450f44e88a8807c98a438a2ddd63146865286b132d1b
2021/11/19 19:24:59 existing blob: sha256:7067b1bc6f9ce59f3a4ed2216946ebbb27a4f7a102f55d96c6af1dc90e77b510
2021/11/19 19:25:00 ghcr.io/mattmoor/ko@sha256:d2bc030f5ed083d5e6a30a7969c9a8e599511b8d7a6e20695bf5ea029b6e2c3f: digest: sha256:d2bc030f5ed083d5e6a30a7969c9a8e599511b8d7a6e20695bf5ea029b6e2c3f size: 751
2021/11/19 19:25:01 existing blob: sha256:250c06f7c38e52dc77e5c7586c3e40280dc7ff9bb9007c396e06d96736cf8542
2021/11/19 19:25:02 pushed blob: sha256:121c637d5c84562b51404a6f71c1f995ad059740293a3911a0dc33eb223e41a4
2021/11/19 19:25:02 pushed blob: sha256:859e03b7461b2a512159493ef1504d2859ed37c05ed1ef781ff98394ea4799b5
2021/11/19 19:25:02 pushed blob: sha256:d1b55c3db0f16b5056776c6d2c279efd16d28dbf1aae3eef1f3f9b7551d1f490
2021/11/19 19:25:03 ghcr.io/mattmoor/ko@sha256:b74c230f20efd94981e5fd823bacc23cbd71055a1b3b6a0893152b398c67743b: digest: sha256:b74c230f20efd94981e5fd823bacc23cbd71055a1b3b6a0893152b398c67743b size: 751
2021/11/19 19:25:03 ghcr.io/mattmoor/ko:latest: digest: sha256:e4466a7dd9be66c7c1b43a8ecc19247041ece232407a14e3d6ea3c51d2561a71 size: 529
2021/11/19 19:25:03 Published ghcr.io/mattmoor/ko@sha256:e4466a7dd9be66c7c1b43a8ecc19247041ece232407a14e3d6ea3c51d2561a71
ghcr.io/mattmoor/ko@sha256:e4466a7dd9be66c7c1b43a8ecc19247041ece232407a14e3d6ea3c51d2561a71
```

The "SBOM" being attached in this change is the raw output of `go version -m`,
which we will convert to one of the standard formats in a subsequent change.
2021-11-22 10:57:13 -08:00
Matt Moore 501111b063 Bump to Go 1.16.x (#435) 2021-09-13 10:40:29 -07:00
Matt Moore d4fb288a2a Fix .goreleaser.yml (#285) 2021-01-04 17:03:01 -08:00
Matt Moore 64b28d0239 Revert to 0.18.8 of K8s (#279) 2020-12-22 09:26:51 -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
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
Matt Moore cde258294f Run the hello test on multiple architectures (#227) 2020-10-23 16:47:34 -07:00
Matt Moore d9cc0ca9ea Move the kind and integration tests to actions (#225) 2020-10-23 10:19:48 -07:00
Matt Moore (via Sockpuppet) b99d96f099 Format markdown
Signed-off-by: Matt Moore (via Sockpuppet) <mattmoor@vmware.com>
2020-10-15 01:42:20 +00:00
Matt Moore (via Sockpuppet) 2d9942c3b0 Update common github actions
Signed-off-by: Matt Moore (via Sockpuppet) <mattmoor@vmware.com>
2020-10-15 01:41:38 +00:00
Matt Moore dc30efcfd8 Format markdown (#217)
Signed-off-by: Matt Moore (via Sockpuppet) <mattmoor@vmware.com>
2020-10-05 18:38:43 -07:00
Matt Moore (via Sockpuppet) 0bdf5ee792 Format markdown
Signed-off-by: Matt Moore (via Sockpuppet) <mattmoor@vmware.com>
2020-09-30 01:29:56 +00:00
Matt Moore 61fbde832a Have kind.local test use --platform=all (#208)
Fix --platform=all with kind.local
2020-09-29 10:11:15 -07:00
Matt Moore d48767339f Fix base image resolution (#201) 2020-09-25 10:20:33 -07:00
Matt Moore 5af0bc138f Print more complete platform information. (#200)
Fixes: https://github.com/google/ko/issues/199
2020-09-25 08:51:18 -07:00
Matt Moore b3645fa096 Add a handful of files to trigger more analyses. (#197)
`.codecov.yaml` - Enable codecov.io coverage reports
`.golangci.yaml` - Enable the enumerated checks in golangci-lint
`boilerplate.*.txt` - Enable file header boilerplate checks for these extensions
2020-09-24 20:15:21 -07:00
Matt Moore bd3f1cb17b [Automated] Update actions (#194)
* Update common github actions

Signed-off-by: Matt Moore (via Sockpuppet) <mattmoor@vmware.com>

* Run gofmt
2020-09-24 19:00:36 -07:00
Matt Moore 985c449e0b Fix goimports (#196) 2020-09-24 18:39:46 -07:00
Matt Moore 8d9a4172cc upgrade to latest dependencies (#195)
Signed-off-by: Matt Moore (via Sockpuppet) <mattmoor@vmware.com>
2020-09-24 18:34:43 -07:00
Matt Moore 33e66aca49 Remove deprecated things. (#162)
Fixes: https://github.com/google/ko/issues/158
Fixes: https://github.com/google/ko/issues/160
2020-09-24 16:14:58 -07:00
Matt Moore 718587b3af Add hack/update-deps.sh (#193) 2020-09-24 15:56:25 -07:00
Matt Moore bec089d9c8 Fix k8s.io/cli-runtime "require" (#189)
The "require" is behind the version in "replace", and since cli-runtime references the package mentioned in the errors we are seeing, rule this out as a source!
2020-09-04 10:53:50 -07:00
Matt Moore 1e05e91f92 Pin k8s.io/api for good measure (#188) 2020-09-04 10:05:05 -07:00
Matt Moore 60e32d0655 Switch to go 1.14 in go.mod, test 1.15 (#187)
* Switch to go 1.14 in go.mod, test 1.15

* Fix the integration test semantics with go 1.14+
2020-09-04 09:31:01 -07:00
Matt Moore b7b0435ef0 Format markdown using prettier. (#185) 2020-09-04 07:36:05 -07:00
Matt Moore ab4ca8ec17 Fix the other publishers (#165) 2020-05-06 13:26:22 -07:00
Matt Moore ea2beac575 Fix -P with passing ko:// through. (#163)
Turns out I broke this.  Thanks to @bobcatfish for reporting the issue.

With this change:
```
ko resolve -Pf cmd/ko/test/test.yaml > /dev/null
2020/05/04 08:44:35 Using base gcr.io/distroless/static:nonroot for github.com/google/ko/cmd/ko/test
2020/05/04 08:44:36 Building github.com/google/ko/cmd/ko/test
2020/05/04 08:44:37 Publishing gcr.io/mattmoor-knative/github.com/google/ko/cmd/ko/test:latest
2020/05/04 08:44:39 Published gcr.io/mattmoor-knative/github.com/google/ko/cmd/ko/test@sha256:ee655510172b429dbce619fc69677621d71cb824cbbf2a21746d700127257ec4
```

I can cut v0.5.1 once this lands.
2020-05-04 09:06:55 -07:00
Matt Moore d45c527750 This adds the deprecation notices for ko:// and nonroot (#161)
* Add a deprecation notice when `defaultBaseImage` is not specified.

Related: https://github.com/google/ko/issues/160

* Add a deprecation notice when `ko://` is not specified.

Related: https://github.com/google/ko/issues/158

* Add a sample import path.
2020-05-03 18:42:51 -07:00
Matt Moore ff61ea330c Refactor how/where ko:// is handled. (#153)
This change more or less completely changes how `ko://` is handled internally to `ko`, but the user-facing changes should only be net-positive.  `ko://` was previously stripped at the highest level, and the build logic was unaware, which had some undesirable diagnostic/functional implications that are collectively addressed in this change.

With this change, the `ko://` prefix is preserved and passed to the build logic, which internally parses a new `reference` type (this was useful to have Go's type checker find all of the places that needed fixing).  The main functional differences are:
1. If a reference is prefixed with `ko://` we will now fail fast in `IsSupportedReference` regardless of whether `--strict` is passed.
2. If a reference is prefixed with `ko://` it will bypass the prefix check, which allows the use of `ko://github.com/another/repo` that references a vendored binary package.

For `2.` the absence of the module prefix causes the filtering logic Jon introduced to avoid the reference.  This was critical for efficiency when `ko://` isn't around because we feed every string in the yaml through it, but when the user has explicitly decorated things it's the perfect thing to be sensitive to.

Fixes: https://github.com/google/ko/issues/146
Fixes: https://github.com/google/ko/issues/152
2020-04-29 19:32:30 -07:00
Matt Moore f45bc13ded Viper keys are case insensitive. (#150)
* Viper keys are case insensitive.

This fixes an issue where import paths with uppercase (github.com/GoogleCloudPlatform 👀) were being canonicalized by Viper to all lowercase and the baseImageOverrides in `.ko.yaml` were failing to properly identify the base image.

I hit this in: https://github.com/tektoncd/pipeline/pull/2435 trying to opt some of the GCP images out of `:nonroot`.

This also adds some logging to a place where I see a lot of folks have issues with `ko` where we swallow an error.  I hit it experimenting with variants on the `ko publish` import path, and added the logging to debug.

* Drop the new log statement
2020-04-20 09:13:33 -07:00