go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/cipd/README.md (about) 1 # CIPD (Chrome Infrastructure Package Deployment) 2 3 CIPD is package deployment infrastructure. It consists of a [package 4 registry][cipd-service] and a [CLI client][cipd-client] to 5 create, upload, download, and install packages. 6 7 A CIPD package has a package name (e.g. "infra/tools/foo") and a list of 8 content-addressed instances (e.g. "bec8e88201949be06b06174178c2f62b81e4008e"), 9 where slashes in package names form a hierarchy of packages, and an instance is 10 a ZIP file with the package file contents. 11 12 CIPD is different from apt-get, brew, nuget, pip, npm, etc. in that it is not 13 tied to a specific OS or language. 14 15 ## Versions 16 17 A package instance can be referenced by a tuple (package name, version), for 18 example when installing a package. A version is one of: 19 20 * A hash of the instance file contents, e.g. 21 `"bec8e88201949be06b06174178c2f62b81e4008e"`; this is also called the 22 instance ID. 23 * A a key-value tag, e.g. `"git_revision:deadbeef"`, if it is unique among 24 all instances of the package. Read more about tags below. 25 * A ref, e.g. `"latest"`, see below. 26 27 ### Tags 28 29 A package instance can be marked with tags, where a tag is a colon-separated 30 key-value pair, e.g. `"git_revision:deadbeef"`. If some tag points to only one 31 instance, such tag can be used as version identifier. 32 33 ### Refs 34 35 A package can have git-like refs, where a ref of a package points to one of the 36 instances of the package by id. For example, chrome-infra continuous builders 37 always update the `"latest"` ref of a package to the instance that they upload. 38 39 ## Platforms 40 41 If a package is platform-specific, the package name should have a 42 `/<os>-<arch>` suffix, for example "infra/tools/cipd/linux-amd64". The `os` 43 part can be `linux`, `mac`, or `windows`, and `arch` can be `386`, `amd64` or 44 `armv6l`. See [the ensure package docs][ensure-docs] for accepted os and arch 45 values. 46 47 Some [CIPD client][cipd-client] subcommands accept a package name "directory" 48 that ends with slash, e.g. "infra/tools/cipd/", and apply a change to all 49 packages in that directory non-recursively. 50 51 ## Access control 52 53 A package directory can have an ACL that applies to packages in that directory 54 and inherited by subdirectories. ACLs can be read/controlled by the [CIPD 55 client][cipd-client]. 56 57 ## API 58 59 The API definition with a lot of additional details is available [here][api]. 60 61 [cipd-client]: ./client 62 [cipd-service]: ./appengine 63 [ensure-docs]: ./client/cipd/ensure/doc.go 64 [api]: ./api/cipd/v1/repo.proto