I’m eager to accept contributions to ruby_yacht to fix bugs and empower it to handle more people’s workflows. I’m preparing a plugin engine as part of the 1.0 release, and that will likely shape decisions about what gets accepted into the core and what should remain in individual’s projects. You can start by opening a pull request with a fix, or an issue with a suggestion for a new feature.

Tests

All pull requests must contain test coverage. The nature of this project requires caution when developing and running tests. The unit tests contain extensive stubs to prevent them from interacting with a real docker environment, and you should use the same techniques in your own unit tests. The integration tests, on the other hand, directly interact with docker so that we can test the behavior of real containers. The images and containers for our tests will all be prefixed with apollo, so you must not have any images or containers in your environment that start with that prefix. They will be overwritten and removed in the course of running the integration tests. The integration tests also update the contents of the hosts file on the system. Though the tests are designed not to persist any modifications, it is strongly recommended that you run the tests inside a docker container.

If you want to run your tests in a docker container, you can run bash spec/docker/run.bash, followed by the flags you want to pass to RSpec. By default, it will skip integration tests, but you can tell it to only run the integration tests by passing -t integration to rspec. This will build an image called ruby-yacht-tests and run rspec in a container based off of that image. That container will have its own docker environment, and it will start with a fresh set of containers every time you run it. This causes the tests to be very slow, which can be frustrating if you are running a few tests repeatedly as you make changes to the code. To speed this up, you can run the script with the PRESERVE_IMAGES flag, PRESERVE_IMAGES=1 bash spec/docker/run.bash. This will change the ruby-yacht-tests container to be daemonized and stay open indefinitely, and then run rspec in a separate process on the container. Once the specs are done, they will leave the built images on that container, and the specs will run faster the next time you run them.