Skip to content

Commit

Permalink
Add rakefile for testing / maintainers
Browse files Browse the repository at this point in the history
  • Loading branch information
tas50 committed Sep 30, 2015
1 parent 10bf90c commit cf6f80b
Show file tree
Hide file tree
Showing 5 changed files with 207 additions and 1 deletion.
6 changes: 5 additions & 1 deletion Gemfile
@@ -1,9 +1,13 @@
source 'https://rubygems.org'

group :rake do
gem 'rake'
gem 'tomlrb'
end

group :lint do
gem 'foodcritic', '~> 5.0'
gem 'rubocop', '~> 0.34'
gem 'rake'
end

group :unit do
Expand Down
19 changes: 19 additions & 0 deletions MAINTAINERS.md
@@ -0,0 +1,19 @@
<!-- This is a generated file. Please do not edit directly -->

# Maintainers
This file lists how this cookbook project is maintained. When making changes to the system, this
file tells you who needs to review your patch - you need a simple majority of maintainers
for the relevant subsystems to provide a :+1: on your pull request. Additionally, you need
to not receive a veto from a Lieutenant or the Project Lead.

Check out [How Cookbooks are Maintained](https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/CONTRIBUTING.MD)
for details on the process and how to become a maintainer or the project lead.

# Project Maintainer
* [Tim Smith](https://github.com/tas50)

# Maintainers
* [Jennifer Davis](https://github.com/sigje)
* [Sean OMeara](https://github.com/someara)
* [Tim Smith](https://github.com/tas50)
* [Thom May](https://github.com/thommay)
46 changes: 46 additions & 0 deletions MAINTAINERS.toml
@@ -0,0 +1,46 @@
#
# This file is structured to be consumed by both humans and computers.
# It is a TOML document containing Markdown
#
[Preamble]
title = "Maintainers"
text = """
This file lists how this cookbook project is maintained. When making changes to the system, this
file tells you who needs to review your patch - you need a simple majority of maintainers
for the relevant subsystems to provide a :+1: on your pull request. Additionally, you need
to not receive a veto from a Lieutenant or the Project Lead.
Check out [How Cookbooks are Maintained](https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/CONTRIBUTING.MD)
for details on the process and how to become a maintainer or the project lead.
"""

[Org]
[Org.Components]
[Org.Components.Core]
title = "Project Maintainer"

lieutenant = 'tas50'

maintainers = [
'sigje',
'someara',
'tas50',
'thommay'
]

[people]
[people.sigje]
name = "Jennifer Davis"
github = "sigje"

[people.someara]
name = "Sean OMeara"
github = "someara"

[people.tas50]
name = "Tim Smith"
github = "tas50"

[people.thommay]
name = "Thom May"
github = "thommay"
61 changes: 61 additions & 0 deletions Rakefile
@@ -0,0 +1,61 @@
require 'rspec/core/rake_task'
require 'rubocop/rake_task'
require 'foodcritic'
require 'kitchen'

require_relative 'tasks/maintainers'

# Style tests. Rubocop and Foodcritic
namespace :style do
desc 'Run Ruby style checks'
RuboCop::RakeTask.new(:ruby)

desc 'Run Chef style checks'
FoodCritic::Rake::LintTask.new(:chef) do |t|
t.options = {
fail_tags: ['any'],
tags: ['~FC005']
}
end
end

desc 'Run all style checks'
task style: ['style:chef', 'style:ruby']

# Rspec and ChefSpec
desc 'Run ChefSpec examples'
RSpec::Core::RakeTask.new(:spec)

# Integration tests. Kitchen.ci
namespace :integration do
desc 'Run Test Kitchen with Vagrant'
task :vagrant do
Kitchen.logger = Kitchen.default_file_logger
Kitchen::Config.new.instances.each do |instance|
instance.test(:always)
end
end

desc 'Run Test Kitchen with cloud plugins'
task :cloud do
run_kitchen = true
if ENV['TRAVIS'] == 'true' && ENV['TRAVIS_PULL_REQUEST'] != 'false'
run_kitchen = false
end

if run_kitchen
Kitchen.logger = Kitchen.default_file_logger
@loader = Kitchen::Loader::YAML.new(project_config: './.kitchen.cloud.yml')
config = Kitchen::Config.new(loader: @loader)
config.instances.each do |instance|
instance.test(:always)
end
end
end
end

desc 'Run all tests on Travis'
task travis: ['style', 'spec', 'integration:cloud']

# Default
task default: ['style', 'spec', 'integration:vagrant']
76 changes: 76 additions & 0 deletions tasks/maintainers.rb
@@ -0,0 +1,76 @@
#
# Copyright:: Copyright (c) 2015 Chef Software, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

require 'rake'

SOURCE = File.join(File.dirname(__FILE__), '..', 'MAINTAINERS.toml')
TARGET = File.join(File.dirname(__FILE__), '..', 'MAINTAINERS.md')

begin
require 'tomlrb'
task default: 'maintainers:generate'

namespace :maintainers do
desc 'Generate MarkDown version of MAINTAINERS file'
task :generate do
@toml = Tomlrb.load_file SOURCE
out = "<!-- This is a generated file. Please do not edit directly -->\n\n"

out << preamble
out << project_lieutenant
out << all_maintainers

File.open(TARGET, 'w') do |fn|
fn.write out
end
end
end

rescue LoadError
STDERR.puts "\n*** TomlRb not available.\n\n"
end

private

def preamble
<<-EOL
# #{@toml['Preamble']['title']}
#{@toml['Preamble']['text']}
EOL
end

def project_lieutenant
<<-EOL
# #{@toml['Org']['Components']['Core']['title']}
#{github_link(@toml['Org']['Components']['Core']['lieutenant'])}
EOL
end

def all_maintainers
text = "# Maintainers\n"
@toml['Org']['Components']['Core']['maintainers'].each do |m|
text << "#{github_link(m)}\n"
end
text
end

def github_link(person)
name = @toml['people'][person]['name']
github = @toml['people'][person]['github']
"* [#{name}](https://github.com/#{github})"
end

0 comments on commit cf6f80b

Please sign in to comment.