- code
- issues
- continuous integration
-
<img src=“https://travis-ci.org/KineticCafe/cartage-rack.png” />
This release is the last version of cartage-rack. It will be replaced with a different tool in the future, but this release will allow installation in modern Ruby versions.
cartage-rack is a plug-in for cartage to provide a Rack application that reports on release metadata.
Cartage provides a repeatable means to create a package for a Rails application that can be used in deployment with a configuration tool like Ansible, Chef, Puppet, or Salt. The package is created with its dependencies bundled in vendor/bundle
, so it can be deployed in environments with strict access control rules and without requiring development tool access.
cartage-rack provides a generator method that instantiates a Rack application that reports on release metadata, which will assist in verifying application deploys.
To add the default generator to a Rails application, simply mount it in config/routes.rb
:
require 'cartage/rack' Rails.application.routes.draw do get '/release' => Cartage::Rack::Simple(Rails.root) end
To map it in a normal Rack application in config.ru
:
require 'cartage/rack' map('/release') do run Cartage::Rack::Simple(Dir.pwd) end
Once mounted, it can then be queried easily:
% rails start % curl localhost:3000/release development: (git) main % curl localhost:3000/release.json | jq . { "env" : "development", "release_hashref" : "(git) main" }
The core of cartage-rack is Cartage::Rack::Metadata, which collects data from release-metadata.json
, release_hashref
, or the runtime environment (if Cartage::Rack.require_metadata is false
). You may instantiate the class yourself if you wish to have a different sort of report for the release.
There are two Rack applications provided in cartage-rack 2.0 to report on release metadata. Metadata is pulled from release-metadata.json
, release_hashref
, or the current environment (which allows Cartage::Rack verification in development).
When reading release_hashref
, the first line is the hashref of the release; a second line, if present, is the Cartage timestamp of the release (an integer value of the form YYYYmmddHHMMSS
).
If a metadata file (release-metadata.json
or release_hashref
) exists, it will be read on application creation and cached for the lifetime of the Rack application. cartage-rack may be configured to throw an exception if a metadata file cannot be found:
Cartage::Rack.require_metadata false
All reporters support JSON and plain text formats.
A full metadata reporter. This reporter may include information that is considered private (including the source repository URL), so it is only recommended for use on protected endpoints. The default report format is JSON.
The data returned is what is recorded in release-metadata.json
, plus the name of the environment.
{ "env": { "name": "production", }, "package": { "name": "package-name", "repo": { "type": "git", "url": "git:[email protected]/KineticCafe/cartage-rack.git" }, hashref: "decafbad", timestamp: "19851027024200" } }
Mount this reporter with Cartage::Rack(Rails.root)
. The data may be filtered out by providing a block to Cartage::Rack()
which modifies the metadata
in place.
Cartage::Rack(Rails.root) do |metadata| unless Rails.env.development? # Remove the repo data before returning metadata[:package].delete(:repo) end end
A simplified metadata reporter, including only the information that was provided in cartage-rack 1.x (the environment, the hashref, and optionally a timestamp). The default report format is plain text.
Mount this reporter with Cartage::Rack::Simple(Rails.root)
. For backwards compatibility, this reporter may also be mounted with Cartage::Rack.mount(Rails.root)
. The Simple reporter does not support filtering.
Add cartage-rack to your Gemfile:
gem 'cartage-rack', '~> 2.0'
Or manually install:
% gem install cartage-rack
cartage-rack should be in the main section of your Gemfile, unlike Cartage itself.
cartage-rack uses a Semantic Versioning scheme with one change:
-
When PATCH is zero (
0
), it will be omitted from version references.
cartage-rack will generally track cartage for major versions to ensure plugin API compatibility.
cartage-rack welcomes your contributions as described in Contributing.md. This project, like all Kinetic Cafe open source projects, is under the Kinetic Cafe Open Source Code of Conduct.