README

CIPD (Chrome Infrastructure Package Deployment)

CIPD is package deployment infrastructure. It consists of a package registry and a CLI client to create, upload, download, and install packages.

A CIPD package has a package name (e.g. "infra/tools/foo") and a list of content-addressed instances (e.g. "bec8e88201949be06b06174178c2f62b81e4008e"), where slashes in package names form a hierarchy of packages, and an instance is a ZIP file with the package file contents.

CIPD is different from apt-get, brew, nuget, pip, npm, etc. in that it is not tied to a specific OS or language.

Versions

A package instance can be referenced by a tuple (package name, version), for example when installing a package. A version is one of:

  • A hash of the instance file contents, e.g. "bec8e88201949be06b06174178c2f62b81e4008e"; this is also called the instance ID.
  • A a key-value tag, e.g. "git_revision:deadbeef", if it is unique among all instances of the package. Read more about tags below.
  • A ref, e.g. "latest", see below.
Tags

A package instance can be marked with tags, where a tag is a colon-separated key-value pair, e.g. "git_revision:deadbeef". If some tag points to only one instance, such tag can be used as version identifier.

Refs

A package can have git-like refs, where a ref of a package points to one of the instances of the package by id. For example, chrome-infra continuous builders always update the "latest" ref of a package to the instance that they upload.

Platforms

If a package is platform-specific, the package name should have a /<os>-<arch> suffix, for example "infra/tools/cipd/linux-amd64". The os part can be linux, mac, or windows, and arch can be 386, amd64 or armv6l. See the ensure package docs for accepted os and arch values.

Some CIPD client subcommands accept a package name "directory" that ends with slash, e.g. "infra/tools/cipd/", and apply a change to all packages in that directory non-recursively.

Access control

A package directory can have an ACL that applies to packages in that directory and inherited by subdirectories. ACLs can be read/controlled by the CIPD client.

API

The API definition with a lot of additional details is available here.

Expand ▾ Collapse ▴

Directories

Path Synopsis
api
admin/v1
Package api contains CIPD backend API definitions.
Package api contains CIPD backend API definitions.
cipd/v1
Package api contains CIPD backend API definitions.
Package api contains CIPD backend API definitions.
config/v1
Package api contains CIPD backend API definitions.
Package api contains CIPD backend API definitions.
appengine
backend
Binary backend implements HTTP server that handles task queues and crons.
Binary backend implements HTTP server that handles task queues and crons.
frontend
Binary frontend implements HTTP server that handles requests to 'default' module.
Binary frontend implements HTTP server that handles requests to 'default' module.
impl
Package impl instantiates the full implementation of the CIPD backend services.
Package impl instantiates the full implementation of the CIPD backend services.
impl/admin
Package admin contains implementation of cipd.Admin RPC service.
Package admin contains implementation of cipd.Admin RPC service.
impl/cas
Package cas contains implementation of cipd.Storage service RPC service.
Package cas contains implementation of cipd.Storage service RPC service.
impl/cas/tasks
Package tasks contains task queue tasks definitions.
Package tasks contains task queue tasks definitions.
impl/gs
Package gs implement Google Storage API wrapper used by CIPD backend.
Package gs implement Google Storage API wrapper used by CIPD backend.
impl/metadata
Package metadata implements handling of prefix metadata.
Package metadata implements handling of prefix metadata.
impl/model
Package model contains core CIPD datastore entities.
Package model contains core CIPD datastore entities.
impl/monitoring
Package monitoring implements monitoring used by CIPD backend.
Package monitoring implements monitoring used by CIPD backend.
impl/repo
Package repo contains implementation of cipd.Repository service RPC service.
Package repo contains implementation of cipd.Repository service RPC service.
impl/repo/processing
Package processing contains code related to post-registration instance processing.
Package processing contains code related to post-registration instance processing.
impl/repo/tasks
Package tasks contains task queue tasks definitions.
Package tasks contains task queue tasks definitions.
impl/rpcacl
Package rpcacl contains helpers for checking ACLs of individual RPCs.
Package rpcacl contains helpers for checking ACLs of individual RPCs.
impl/settings
Package settings contains definition of global CIPD backend settings.
Package settings contains definition of global CIPD backend settings.
impl/testutil
Package testutil contains helpers used from CIPD backend unit tests.
Package testutil contains helpers used from CIPD backend unit tests.
ui
Package ui implements request handlers that serve user facing HTML pages.
Package ui implements request handlers that serve user facing HTML pages.
client
cipd
Package cipd implements client side of Chrome Infra Package Deployer.
Package cipd implements client side of Chrome Infra Package Deployer.
cipd/builder
Package builder holds functionality for building CIPD packages.
Package builder holds functionality for building CIPD packages.
cipd/deployer
Package deployer holds functionality for deploying CIPD packages.
Package deployer holds functionality for deploying CIPD packages.
cipd/digests
Package digests holds types used by selfupdate mechanism to pin client hashes.
Package digests holds types used by selfupdate mechanism to pin client hashes.
cipd/ensure
Package ensure contains methods and types for interacting with the 'ensure file format'.
Package ensure contains methods and types for interacting with the 'ensure file format'.
cipd/fs
Package fs is file-system related utilities used internally by CIPD.
Package fs is file-system related utilities used internally by CIPD.
cipd/pkg
Package pkg contains interfaces and struct related to CIPD package files.
Package pkg contains interfaces and struct related to CIPD package files.
cipd/platform
Package platform contains definition of what ${os} and ${arch} mean for the current platform.
Package platform contains definition of what ${os} and ${arch} mean for the current platform.
cipd/plugin
Package plugin contains public API of the plugin system.
Package plugin contains public API of the plugin system.
cipd/plugin/host
Package host implements the plugin hosting functionality.
Package host implements the plugin hosting functionality.
cipd/plugin/plugins
Package plugins contains shared plugin-side functionality.
Package plugins contains shared plugin-side functionality.
cipd/plugin/plugins/admission
Package admission contains API for writing admission plugins.
Package admission contains API for writing admission plugins.
cipd/plugin/protocol
Package protocol hosts protobuf messages for the CIPD plugin system.
Package protocol hosts protobuf messages for the CIPD plugin system.
cipd/reader
Package reader implements reading contents of a CIPD package.
Package reader implements reading contents of a CIPD package.
cipd/template
Package template implements handling of package name templates.
Package template implements handling of package name templates.
cli
Package cli implements command line interface for CIPD client.
Package cli implements command line interface for CIPD client.
cmd/cipd
Package main contains CIPD CLI implementation that uses Chrome Infrastructure defaults.
Package main contains CIPD CLI implementation that uses Chrome Infrastructure defaults.
Package version provides a way for CIPD packaged Go binaries to discover their current package instance ID.
Package version provides a way for CIPD packaged Go binaries to discover their current package instance ID.