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.