Skip to content

Commit c027c1c

Browse files
Merge branch 'main' into semver-tagger
2 parents 366da88 + 5bcb16e commit c027c1c

File tree

620 files changed

+7336
-7005
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

620 files changed

+7336
-7005
lines changed

README.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Tape is for packaging applications
22

3+
## Disclaimer
4+
5+
This project is an archived experiment that was done as part of Docker Labs and is no longer worked on.
6+
It's been made available by Docker Labs team under the Apache license as it's deemed of potential interest to the community, however, it's no longer in active development.
7+
38
## What is Tape?
49

510
Tape is a tool that can package an entire application as a self-contained (taped) OCI image that can be deployed to a
@@ -37,7 +42,7 @@ provide a logical supply chain entry point and location for storing metadata.
3742

3843
The best analogy is flatpack furniture. Presently, deployment of an application is as if flatpack hasn't been invented, so
3944
when someone orders a wooden cabinet, all that arrives in a box is just the pieces of wood, they have to shop for nuts,
40-
bolts, and tools. Of course, that might be desirable for some, as they have a well stocked workshop with the best tools and
45+
bolts, and tools. Of course, that might be desirable for some, as they have a well-stocked workshop with the best tools and
4146
a decent selection of nuts and bolts. But did the box even include assembly instructions with the list of nuts and bolts
4247
one has to buy?
4348
That model doesn't scale to the consumer market. Of course, some consumers might have a toolbox, but very few will be able
@@ -53,10 +58,6 @@ source. The attestations are attached to the resulting OCI image, so it helps wi
5358

5459
## How does Tape work?
5560

56-
> NB: This describes the current implementation that is very minimal and doesn't achieve all of the ambitious goals
57-
> as described above. Namely it works only with plain YAML and JSON manifests and doesn't yet have key integrations,
58-
> e.g. with Helm or other tools.
59-
6061
Tape can parse a directory with Kubernetes configuration and find all canonical references to application images.
6162
If an image reference contains a digest, Tape will use it, otherwise it resolves it by making a registry API call.
6263
For each of the images, Tape searches of all well-known related tags, such as external signatures, attestations and
@@ -68,7 +69,7 @@ Copying of all application images and referencing by digest is performed to ensu
6869
are tightly coupled together to provide a single link in the supply chain as well as a single point of distribution
6970
and access control for the whole application.
7071

71-
Tape also checks the VCS provenance of manifests, so if any manifest files are checked in to Git, Tape will attest to what
72+
Tape also checks the VCS provenance of manifests, so if any manifest files are checked in Git, Tape will attest to what
7273
Git repository each file came from, all of the revision metadata, and whether it's been modified or not.
7374
Additionally, Tape attests to all key steps that it performs, e.g. original image references it detects and manifest
7475
checksums. It stores the attestations using in-toto format in an OCI artifact.
@@ -78,8 +79,8 @@ checksums. It stores the attestations using in-toto format in an OCI artifact.
7879
Tape has the following commands:
7980

8081
- `tape images` - examine images referenced by a given set of manifests before packaging them
81-
- `tape package` - package an artifcat and push it to a registry
82-
- `tape pull`downlowad and extract contents and attestations from an existing artifact
82+
- `tape package` - package an artifact and push it to a registry
83+
- `tape pull`download and extract contents and attestations from an existing artifact
8384
- `tape view` – inspect an existing artifact
8485

8586
### Example
@@ -430,14 +431,13 @@ $ crane blob ${podinfo_image}@${tape_attest_digest} | gunzip | jq .
430431
$
431432
```
432433

433-
## Roadmap & FAQ
434+
## FAQ
434435

435436
### What configuration formats does Tape support, does it support any kind of templating?
436437

437-
Presently, it supports plain JSON and YAML manifest. In the future, the goal is to accommodate a variety of popular
438-
templating options, e.g. CUE, Helm, and scripting languages, so that environment-specific parameters can be specified.
439-
It may also support basic runtime overrides with or without templating e.g. for namespaces and labels.
440-
It should also offer flexibility around templating at buildtime, runtime, or done partially buildtime/runtime.
438+
Tape supports plain JSON and YAML manifest, which was the scope of the original experiment.
439+
If the project was to continue, it could accommodate a variety of popular templating options,
440+
e.g. CUE, Helm, and scripting languages, paving a way for a universal artifact format.
441441

442442
### How does Tape relate to existing tools?
443443

@@ -451,20 +451,20 @@ support OCI artifacts and there could be different ways of building the artifact
451451

452452
### What kind of applications can Tape package?
453453

454-
Tape doesn't infer an opinion of how the application is structured, what it consists of or doesn't consist of. It doesn't
454+
Tape doesn't infer an opinion of how the application is structured, or what it consists of or doesn't consist of. It doesn't
455455
present any application definition format, it operates on plain Kubernetes manifests found in a directory.
456456

457457
### Does Tape provide SBOMs?
458458

459-
It doesn't create new SBOMs at the moment, but it may cater to this use case in the future.
459+
Tape doesn't explicitly generate or process SBOMs, but fundamentally it could provide functionality around that.
460460

461461
## Acknowledgments & Prior Art
462462

463463
What Tape does is very much in the spirit of Docker images, but it extends the idea by shifting the perspective to configuration
464464
as an entry point to a map of dependencies, as opposed to the forced separation of app images and configuration.
465465

466-
It's not a novelty to package configuration in OCI, there exist many examples of this practice, but there is no interoperability.
467-
Tape's ambition is to commoditise the model and abstract configuration tooling so that end-users don't need to think about whether
466+
It's not a novelty to package configuration in OCI, there are many examples of this, yet that in itself doesn't provide for interoperability.
467+
One could imagine something like Tape as a model that abstracts configuration tooling so that end-users don't need to think about whether
468468
a particular app needs to be deployed with Helm, Kustomize, or something else.
469469

470470
Tape was directly inspired by [flux push artifact](https://fluxcd.io/flux/cheatsheets/oci-artifacts/). Incidentally, it also resembles

go.mod

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ require (
88
github.com/fluxcd/pkg/oci v0.30.0
99
github.com/fluxcd/pkg/tar v0.2.0
1010
github.com/fxamacker/cbor/v2 v2.5.0
11-
github.com/go-git/go-git/v5 v5.8.1
11+
github.com/go-git/go-git/v5 v5.11.0
1212
github.com/google/go-containerregistry v0.15.2
1313
github.com/google/uuid v1.3.0
1414
github.com/in-toto/in-toto-golang v0.9.0
15-
github.com/onsi/gomega v1.27.8
15+
github.com/onsi/gomega v1.27.10
1616
github.com/otiai10/copy v1.12.0
1717
github.com/rs/zerolog v1.28.0
1818
github.com/secure-systems-lab/go-securesystemslib v0.6.0
@@ -31,9 +31,8 @@ require (
3131
github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect
3232
github.com/Masterminds/semver/v3 v3.2.1 // indirect
3333
github.com/Microsoft/go-winio v0.6.1 // indirect
34-
github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 // indirect
34+
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect
3535
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect
36-
github.com/acomagu/bufpipe v1.0.4 // indirect
3736
github.com/aws/aws-sdk-go-v2 v1.18.1 // indirect
3837
github.com/aws/aws-sdk-go-v2/config v1.18.27 // indirect
3938
github.com/aws/aws-sdk-go-v2/credentials v1.13.26 // indirect
@@ -53,13 +52,13 @@ require (
5352
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b // indirect
5453
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 // indirect
5554
github.com/cespare/xxhash/v2 v2.2.0 // indirect
56-
github.com/cloudflare/circl v1.3.3 // indirect
55+
github.com/cloudflare/circl v1.3.7 // indirect
5756
github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect
5857
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
5958
github.com/davecgh/go-spew v1.1.1 // indirect
6059
github.com/docker/cli v23.0.5+incompatible // indirect
6160
github.com/docker/distribution v2.8.2+incompatible // indirect
62-
github.com/docker/docker v23.0.5+incompatible // indirect
61+
github.com/docker/docker v24.0.7+incompatible // indirect
6362
github.com/docker/docker-credential-helpers v0.7.0 // indirect
6463
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect
6564
github.com/docker/go-metrics v0.0.1 // indirect
@@ -73,7 +72,7 @@ require (
7372
github.com/fsnotify/fsnotify v1.6.0 // indirect
7473
github.com/go-errors/errors v1.4.2 // indirect
7574
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
76-
github.com/go-git/go-billy/v5 v5.4.1 // indirect
75+
github.com/go-git/go-billy/v5 v5.5.0 // indirect
7776
github.com/go-logr/logr v1.2.4 // indirect
7877
github.com/go-openapi/jsonpointer v0.19.6 // indirect
7978
github.com/go-openapi/jsonreference v0.20.2 // indirect
@@ -84,7 +83,7 @@ require (
8483
github.com/golang/protobuf v1.5.3 // indirect
8584
github.com/gomodule/redigo v1.8.2 // indirect
8685
github.com/google/gnostic v0.6.9 // indirect
87-
github.com/google/go-cmp v0.5.9 // indirect
86+
github.com/google/go-cmp v0.6.0 // indirect
8887
github.com/google/gofuzz v1.2.0 // indirect
8988
github.com/gorilla/handlers v1.5.1 // indirect
9089
github.com/gorilla/mux v1.8.0 // indirect
@@ -120,7 +119,7 @@ require (
120119
github.com/prometheus/procfs v0.9.0 // indirect
121120
github.com/sergi/go-diff v1.1.0 // indirect
122121
github.com/shibumi/go-pathspec v1.3.0 // indirect
123-
github.com/skeema/knownhosts v1.2.0 // indirect
122+
github.com/skeema/knownhosts v1.2.1 // indirect
124123
github.com/spf13/cobra v1.7.0 // indirect
125124
github.com/spf13/pflag v1.0.5 // indirect
126125
github.com/theupdateframework/go-tuf v0.5.2 // indirect
@@ -132,20 +131,20 @@ require (
132131
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect
133132
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect
134133
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect
135-
golang.org/x/crypto v0.11.0 // indirect
136-
golang.org/x/mod v0.11.0 // indirect
137-
golang.org/x/net v0.12.0 // indirect
134+
golang.org/x/crypto v0.17.0 // indirect
135+
golang.org/x/mod v0.12.0 // indirect
136+
golang.org/x/net v0.19.0 // indirect
138137
golang.org/x/oauth2 v0.9.0 // indirect
139-
golang.org/x/sync v0.2.0 // indirect
140-
golang.org/x/sys v0.10.0 // indirect
141-
golang.org/x/term v0.10.0 // indirect
142-
golang.org/x/text v0.11.0 // indirect
138+
golang.org/x/sync v0.3.0 // indirect
139+
golang.org/x/sys v0.15.0 // indirect
140+
golang.org/x/term v0.15.0 // indirect
141+
golang.org/x/text v0.14.0 // indirect
143142
golang.org/x/time v0.3.0 // indirect
144-
golang.org/x/tools v0.9.1 // indirect
143+
golang.org/x/tools v0.13.0 // indirect
145144
gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect
146145
google.golang.org/appengine v1.6.7 // indirect
147146
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
148-
google.golang.org/grpc v1.55.0 // indirect
147+
google.golang.org/grpc v1.56.3 // indirect
149148
google.golang.org/protobuf v1.31.0 // indirect
150149
gopkg.in/inf.v0 v0.9.1 // indirect
151150
gopkg.in/square/go-jose.v2 v2.6.0 // indirect

0 commit comments

Comments
 (0)