class ChefCLI::Policyfile::DeliverySupermarketSource
constraints.
of continuously integrating at the cookbook level without imposing those
In the future, alternative approaches may be pursued to achieve the goal
increase over time (so that largest version number == newest)
* Version numbers for cookbooks that pass through the Ci pipeline always
approval (which can be automated or not)
to a private supermarket (or equivalent, i.e. mini-mart) after final
* Cookbook changes pass through a Ci pipeline and are ultimately uploaded
(cookbook) level. To achieve this goal, two constraints must be imposed:
force developers to integrate continuously at the component artifact
make only the newest version of a given cookbook available in order to
This is intended to be used in an environment where the team wants to
cookbook can be used.
(which it delegates to), except that only the latest versions of any
Fetches cookbooks from a supermarket, similar to CommunityCookbookSource
def ==(other)
def ==(other) other.is_a?(self.class) && other.uri == uri end
def default_source_args
def default_source_args [:delivery_supermarket, uri] end
def desc
def desc "delivery_supermarket(#{uri})" end
def initialize(uri)
def initialize(uri) @community_source = CommunityCookbookSource.new(uri) yield self if block_given? end
def universe_graph
def universe_graph @universe_graph ||= begin @community_source.universe_graph.inject({}) do |truncated, (cookbook_name, version_and_deps_list)| sorted_versions = version_and_deps_list.keys.sort_by do |version_string| Semverse::Version.new(version_string) end greatest_version = sorted_versions.last truncated[cookbook_name] = { greatest_version => version_and_deps_list[greatest_version] } truncated end end end