Wraps the concourse fly CLI so that fly can be invoked from a Ruby script or Rakefile.
Add this line to your application's Gemfile:
gem 'ruby_fly'
And then execute:
$ bundle
Or install it yourself as:
$ gem install ruby_fly
RubyFly needs to know where the fly binary is located before it can do anything. By default, RubyFly looks on the path however this can be configured with:
RubyFly.configure do |config|
config.binary = 'vendor/fly/bin/fly'
end
In addition, each command takes a binary
keyword argument at initialisation
that overrides the global configuration value.
Currently the library doesn't support logging in to a Concourse instance so if the target instance requires authentication, a session must be manually established before any commands are executed. If there are recommendations for a good approach to automatic login, please raise an issue or a pull request.
Currently, there is partial support for the following commands:
RubyFly::Commands::GetPipeline
: fetches the current configuration of a pipeline from a target Concourse (fly get-pipeline
)RubyFly::Commands::SetPipeline
: submits a pipeline configuration to a target Concourse (fly set-pipeline
)RubyFly::Commands::UnpausePipeline
: unpauses a pipeline on a target Concourse (fly unpause-pipeline
)RubyFly::Commands::Version
: returns the version of the fly binary
The get-pipeline command can be called in the following ways:
RubyFly.get_pipeline(
target: 'supercorp-ci',
pipeline: 'supercorp-service')
RubyFly::Commands::GetPipeline.new.execute(
target: 'supercorp-ci',
pipeline: 'supercorp-service')
The get-pipeline command supports the following options passed as keyword arguments (as in the example above):
target
: the Concourse instance to targetpipeline
: the pipeline for which to get configuration
The set-pipeline command can be called in the following ways:
RubyFly.set_pipeline(
target: 'supercorp-ci',
pipeline: 'supercorp-service',
config: 'ci/pipeline.yml')
RubyFly::Commands::SetPipeline.new.execute(
target: 'supercorp-ci',
pipeline: 'supercorp-service',
config: 'ci/pipeline.yml')
The set-pipeline command supports the following options passed as keyword arguments (as in the example above):
target
: the Concourse instance to targetpipeline
: the pipeline for which to set configurationconfig
: the local file containing the pipeline configurationvars
: an hash of variables to be accessible as interpolationsvar_files
: an array of paths to files containing variables to be accessible as interpolationsnon_interactive
: iffalse
, any missing variables will be prompted for, iftrue
, any missing variables will cause the command to fail
The unpause-pipeline command can be called in the following ways:
RubyFly.unpause_pipeline(
target: 'supercorp-ci',
pipeline: 'supercorp-service')
RubyFly::Commands::UnpausePipeline.new.execute(
target: 'supercorp-ci',
pipeline: 'supercorp-service')
The get-pipeline command supports the following options passed as keyword arguments (as in the example above):
target
: the Concourse instance to targetpipeline
: the pipeline to unpause
The version command can be called in the following ways:
version = RubyFly.version
version = RubyFly::Commands::Version.new.execute
After checking out the repo, run bin/setup
to install dependencies. Then, run
rake spec
to run the tests. You can also run bin/console
for an interactive
prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To
release a new version, update the version number in version.rb
, and then run
bundle exec rake release
, which will create a git tag for the version, push
git commits and tags, and push the .gem
file to
rubygems.org.
To encrypt a GPG key for use by CircleCI:
openssl aes-256-cbc \
-e \
-md sha1 \
-in ./config/secrets/ci/gpg.private \
-out ./.circleci/gpg.private.enc \
-k "<passphrase>"
To check decryption is working correctly:
openssl aes-256-cbc \
-d \
-md sha1 \
-in ./.circleci/gpg.private.enc \
-k "<passphrase>"
Bug reports and pull requests are welcome on GitHub at https://github.com/infrablocks/ruby_fly. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
The gem is available as open source under the terms of the MIT License.