Project: Docker Swarm (Orchestration & Management / Scheduling & Orchestration)
File: BUILDING.md

To build Swarmkit, you must set up a Go development environment. contains full instructions. When setup correctly, you should have a GOROOT and GOPATH set in the environment. After you set up the Go development environment, use `go get` to check out `swarmkit`: go get -d github.com/moby/swarmkit/v2@latest This command installs the source repository into the `GOPATH`. It is not mandatory to use `go get` to checkout the SwarmKit project. However, for these instructions to work, you need to check out the project to the correct subdirectory of the `GOPATH`: `$GOPATH/src/github.com/moby/swarmkit`. For the full development experience, one should `cd` into `$GOPATH/src/github.com/moby/swarmkit`. From there, the regular `go` commands, such as `go test`, should work per package (please see if they don't work). Docker provides a `Makefile` as a convenience to support repeatable builds. `make setup` installs tools onto the `GOPATH` for use with developing `SwarmKit`: make setup Once these commands are available in the `GOPATH`, run `make` to get a full build: $ make fmt bin/swarmd bin/swarmctl bin/swarm-bench bin/protoc-gen-gogoswarm binaries vet lint build github.com/moby/swarmkit github.com/moby/swarmkit/vendor/github.com/davecgh/go-spew/spew github.com/moby/swarmkit/vendor/github.com/pmezard/go-difflib/difflib github.com/moby/swarmkit/cmd/protoc-gen-gogoswarm github.com/moby/swarmkit/cmd/swarm-bench github.com/moby/swarmkit/cmd/swarmctl github.com/moby/swarmkit/vendor/github.com/stretchr/testify/assert github.com/moby/swarmkit/ca/testutils github.com/moby/swarmkit/cmd/swarmd github.com/moby/swarmkit/vendor/code.cloudfoundry.org/clock/fakeclock github.com/moby/swarmkit/vendor/github.com/stretchr/testify/require github.com/moby/swarmkit/manager/state/raft/testutils github.com/moby/swarmkit/manager/testcluster github.com/moby/swarmkit/protobuf/plugin/deepcopy/test github.com/moby/swarmkit/protobuf/plugin/raftproxy/test test ? github.com/moby/swarmkit [no test files] ? github.com/moby/swarmkit [no test files] ok github.com/moby/swarmkit/agent 2.264s ok github.com/moby/swarmkit/agent/exec 1.055s ok github.com/moby/swarmkit/agent/exec/container 1.094s ? github.com/moby/swarmkit/api [no test files] ? github.com/moby/swarmkit/api/duration [no test files] ? github.com/moby/swarmkit/api/timestamp [no test files] ok github.com/moby/swarmkit/ca 15.634s ... ok github.com/moby/swarmkit/protobuf/plugin/raftproxy/test 1.084s ok github.com/moby/swarmkit/protobuf/ptypes 1.025s ? github.com/moby/swarmkit/version [no test files] The above provides a repeatable build using the contents of the vendored `./vendor` directory. This includes formatting, vetting, linting, building, and testing. The binaries created will be available in `./bin`. Several `make` targets are provided for common tasks. Please see the `Makefile` for details. To update dependency you need just change `go.mod` file and run: ``` make go-mod-vendor ``` This requires that you have [Protobuf 3.x or higher](https://developers.google.com/protocol-buffers/docs/downloads). Once that is installed the bindings can be regenerated with: ``` make setup make generate ``` NB: As of version 3.0.0-7 the Debian `protobuf-compiler` package lacks a dependency on `libprotobuf-dev` which contains some standard proto definitions, be sure to install both packages. This is [Debian bug You can also choose to use a container to build SwarmKit and run tests. Simply set the `DOCKERSWARMKITUSE_CONTAINER` environment variable to any value, export it, then run `make` targets as you would have done within your local environment. Additionally, if your OS is not Linux, you might want to set and export the `DOCKERSWARMKITUSEDOCKERSYNC` environment variable, which will make use of to sync the code to the container, instead of native mounted volumes.