Project to rewrite the Cloud Foundry CLI tool using Go. This project should currently be considered alpha quality software and should not be used in production environments. If you need something more stable, please check out the RubyGem.
- Run
./bin/build
- The binary will be built into the out directory.
NOTE: Currently only development on OSX 10.8 is supported
- Install Go
brew install go --cross-compile-common
- Fork and clone.
- Run
git submodule update --init --recursive
- Write a test.
- Run
bin/test
and watch test fail. - Make test pass.
- Submit a pull request.
- Run
bin/build-all
. This will create tgz files in the release folder.
The app (in src/cf/app/app.go
) declares the list of available commands. Help and flags are defined there.
It will instantiate a command, and run it using the runner (in src/cf/commands/runner.go
).
A command has requirements, and a run function. Requirements are use as filters before running the command.
If any of them fails, the command will not run (see src/cf/requirements
for examples of requirements).
When the command is run, it communicates with api using repositories (they are in src/cf/api
).
Repositories should be injected into the command, so that your tests can inject a fake.
Repositories communicate with the network layer, usually through a Gateway (see src/cf/net
).
Commands dependencies are managed by the commands factory. The app uses the command factory (in src/cf/commands/factory.go
)
to instantiate them, this allows not sharing the knowledge of their dependencies with the app itself.
As for repositories, we use the repository locator to handle their dependencies. You can find it in src/cf/api/repository_locator.go
.
Create Space is a good example of command. Its tests include checking arguments, having requirements, and the actual command itself.
You will find it in src/cf/commands/create_space.go
.