top

Package cipd implements client side of Chrome Infra Package Deployer.

Binary package file format (in free form representation):

<binary package> := <zipped data>
<zipped data> := DeterministicZip(<all input files> + <manifest json>)
<manifest json> := File{
  name: ".cipdpkg/manifest.json",
  data: JSON({
    "FormatVersion": "1",
    "PackageName": <name of the package>
  }),
}
DeterministicZip = zip archive with deterministic ordering of files and stripped timestamps

Main package data (<zipped data> above) is deterministic, meaning its content depends only on inputs used to built it (byte to byte): contents and names of all files added to the package (plus 'executable' file mode bit) and a package name (and all other data in the manifest).

Binary package data MUST NOT depend on a timestamp, hostname of machine that built it, revision of the source code it was built from, etc. All that information will be distributed as a separate metadata packet associated with the package when it gets uploaded to the server.

TODO: expand more when there's server-side package data model (labels and stuff).

Imports 8 package(s)

  1. github.com/luci/luci-go/client/cipd/internal
  2. github.com/luci/luci-go/common/logging
  3. github.com/luci/luci-go/common/clock
  4. github.com/luci/luci-go/common/errors
  5. golang.org/x/net/context
  6. golang.org/x/net/context/ctxhttp
  7. github.com/luci/luci-go/client/cipd/common
  8. github.com/luci/luci-go/client/cipd/local

Test imports 3 package(s)

  1. github.com/luci/luci-go/common/clock/testclock
  2. github.com/smartystreets/goconvey/convey
  3. github.com/luci/luci-go/common/logging/gologger