An RFC to standarize on two workflows

This RFC proposes two workflows as "supported", and abstracts
as much of their differences as possible through the use of
additional generators and functionality in the 'chef' command.

If accepted, this RFC would also serve as a guide for tool makers,
as to what the requirements are for maximum converage in the Chef
community.

While other workflows are possible, this RFCs job is to say which
ones we support officially.
Provided the Ruby files are never preferred by the server and the raw metadata is always read by the client, there shouldn't be any issues using the Ruby versions.

I definitely prefer passing Ruby format into the client which uploads the compiled version.

It's worth noting that there are far fewer cases where we attempt to distribute these other Chef artifacts to other users. That, coupled with inconsistency when compiled metadata is present within the Chef code base, is why we've seen problems with the Ruby representation of cookbook metadata. 

Jamie Winsor
@resetexistence

> On Aug 4, 2014, at 10:09 AM, Seth Vargo <notifications@github.com> wrote:
> 
> In great-workflow.md:
> 
> > +
> > +```
> > +$ git add snazzy
> > +$ git commit -a -m "One snazzy cookbook"
> > +```
> > +
> > +### How to create your Chef policy (everything that isn't a cookbook)
> > +
> > +To create a new type of policy document, from the top of your chef-repo:
> > +
> > +```
> > +$ chef generate THING name
> > +```
> > +_Note: None of these generators exist yet. They should subsume the functionality of the attendent knife X commands, and be intelligent about which workflow we've chosen._
> > +
> > +This will result in a blank, JSON formatted policy document created in the appropriate
> The problem to consider with Ruby is that's it's interpreted. It's the same problem as metadata.rb as metadata.json. Consider:
> 
> name 'cookbook_foo'
> version File.read(File.expand_path('../VERSION', __FILE__)).chomp
> This will read a local file named VERSION to get the version. This will work, and when you upload to the server, you will get the compiled JSON version like this:
> 
> {
>   "name": "cookbook_foo",
>   "version": "1.2.3"
> }
> Ruby gives us the ability to "depend" on external systems, which is both good and bad. I could see situations where using Ruby could actually cause us problems.
> 
> I'm  on Ruby files, but this is something to consider.
> 
> —
> Reply to this email directly or view it on GitHub.