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