stove 1.1.2 → 2.0.0.beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +16 -0
- data/README.md +41 -29
- data/Rakefile +15 -0
- data/bin/bake +1 -2
- data/features/actions/bump.feature +22 -0
- data/features/actions/changelog.feature +45 -0
- data/features/actions/dev.feature +18 -0
- data/features/actions/upload.feature +48 -0
- data/features/plugins/git.feature +24 -0
- data/features/rake.feature +1 -2
- data/features/step_definitions/cli_steps.rb +1 -27
- data/features/step_definitions/{community_site_steps.rb → community_steps.rb} +9 -5
- data/features/step_definitions/config_steps.rb +24 -0
- data/features/step_definitions/cookbook_steps.rb +28 -6
- data/features/step_definitions/cucumber_steps.rb +12 -0
- data/features/step_definitions/git_steps.rb +10 -7
- data/features/support/env.rb +12 -28
- data/features/support/stove/git.rb +48 -0
- data/lib/stove.rb +102 -19
- data/lib/stove/actions/base.rb +21 -0
- data/lib/stove/actions/bump.rb +25 -0
- data/lib/stove/actions/changelog.rb +71 -0
- data/lib/stove/actions/dev.rb +22 -0
- data/lib/stove/actions/finish.rb +8 -0
- data/lib/stove/actions/start.rb +7 -0
- data/lib/stove/actions/upload.rb +27 -0
- data/lib/stove/cli.rb +107 -79
- data/lib/stove/community.rb +124 -0
- data/lib/stove/config.rb +62 -13
- data/lib/stove/cookbook.rb +76 -238
- data/lib/stove/cookbook/metadata.rb +16 -11
- data/lib/stove/error.rb +13 -107
- data/lib/stove/filter.rb +59 -0
- data/lib/stove/jira.rb +74 -30
- data/lib/stove/middlewares/chef_authentication.rb +60 -0
- data/lib/stove/middlewares/exceptions.rb +17 -0
- data/lib/stove/mixins/filterable.rb +11 -0
- data/lib/stove/mixins/insideable.rb +13 -0
- data/lib/stove/mixins/instanceable.rb +23 -0
- data/lib/stove/mixins/loggable.rb +32 -0
- data/lib/stove/mixins/optionable.rb +41 -0
- data/lib/stove/mixins/validatable.rb +7 -0
- data/lib/stove/packager.rb +23 -22
- data/lib/stove/plugins/base.rb +35 -0
- data/lib/stove/plugins/git.rb +71 -0
- data/lib/stove/plugins/github.rb +108 -0
- data/lib/stove/plugins/jira.rb +72 -0
- data/lib/stove/rake_task.rb +56 -37
- data/lib/stove/runner.rb +84 -0
- data/lib/stove/util.rb +56 -0
- data/lib/stove/validator.rb +67 -0
- data/lib/stove/version.rb +1 -1
- data/locales/en.yml +231 -0
- data/stove.gemspec +11 -11
- metadata +85 -67
- data/features/changelog.feature +0 -22
- data/features/cli.feature +0 -11
- data/features/devodd.feature +0 -19
- data/features/git.feature +0 -34
- data/features/upload.feature +0 -40
- data/lib/stove/community_site.rb +0 -85
- data/lib/stove/formatter.rb +0 -7
- data/lib/stove/formatter/base.rb +0 -32
- data/lib/stove/formatter/human.rb +0 -9
- data/lib/stove/formatter/silent.rb +0 -10
- data/lib/stove/git.rb +0 -82
- data/lib/stove/github.rb +0 -43
- data/lib/stove/logger.rb +0 -56
- data/lib/stove/uploader.rb +0 -64
- data/spec/support/community_site.rb +0 -33
- data/spec/support/git.rb +0 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e3e8effc89249cc85ef1bbb409edc1b17ae623b
|
4
|
+
data.tar.gz: a01bd5570bc5651d738a5e31c36ed032e3ce1c75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cae616ad8cd9526e80365f4590640152afa2c411eac9a5c3b0c6028afcb7a710e3cf6549947b0e19ffd18eb16872cec997a3cdafbab172c2d79ff69ba0f0a6c
|
7
|
+
data.tar.gz: ef5adf673f387952bba98a73d5ea8875fb1bb9610feb9841c15d02b431934fff20124b82cbcd845995aa940589de110c6f1de3b9f8aaad23a3838842b6792c69
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,22 @@ Stove CHANGELOG
|
|
2
2
|
===============
|
3
3
|
This is the Changelog for the Stove gem.
|
4
4
|
|
5
|
+
v2.0.0 (unreleased)
|
6
|
+
-------------------
|
7
|
+
- Completely refactor the runner for speed optimizations
|
8
|
+
- Introduce a new configuration file format
|
9
|
+
- Add i18n support
|
10
|
+
- Add Filters and validations that execute before any commands are run
|
11
|
+
- Autoload plugins and actions
|
12
|
+
- Improve help output by grouping options
|
13
|
+
- Trap Signal interrupts cleanly
|
14
|
+
- Remove formatters
|
15
|
+
- Switch to log4r
|
16
|
+
- Introduce significantly more logging and log levels
|
17
|
+
- Remove HTTParty & Jiralicious in favor or Faraday
|
18
|
+
- Improve rake task to automatically perfom a minor bump when no version if given
|
19
|
+
- Persist data across the cookbook object
|
20
|
+
- Use singleton classes to save memory and loadtime
|
5
21
|
|
6
22
|
v1.1.0
|
7
23
|
------
|
data/README.md
CHANGED
@@ -33,36 +33,38 @@ Alternatively, you may install it as a gem:
|
|
33
33
|
|
34
34
|
$ gem install stove
|
35
35
|
|
36
|
-
|
36
|
+
The use of some plugins (such as GitHub and JIRA) require a Stove configuration file. The Stove config is a JSON file stored at `~/.stove` on your local hard drive. The schema looks like this:
|
37
37
|
|
38
38
|
```javascript
|
39
39
|
{
|
40
|
-
"
|
41
|
-
|
42
|
-
|
43
|
-
"opscode_pem_file": "OPSCODE_PEM_FILE",
|
44
|
-
"github_access_token": "PERSONAL_API_TOKEN"
|
40
|
+
"field": {
|
41
|
+
"option": "value"
|
42
|
+
}
|
45
43
|
}
|
46
44
|
```
|
47
45
|
|
48
|
-
|
49
|
-
- `jira_password` - The password used to login to Opscode's JIRA
|
50
|
-
- `opscode_username` - The username used to login to Opscode's Community Site
|
51
|
-
- `opscode_password` - The password used to login to Opscode's Community Site
|
52
|
-
- `github_access_token` - Your personal access token for the GitHub API
|
53
|
-
|
54
|
-
For example:
|
46
|
+
For example, my local Stove configuration looks like this:
|
55
47
|
|
56
48
|
```javascript
|
57
49
|
{
|
58
|
-
"
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
"
|
50
|
+
"community": {
|
51
|
+
"username": "sethvargo",
|
52
|
+
"key": "~/.chef/sethvargo.pem"
|
53
|
+
},
|
54
|
+
"github": {
|
55
|
+
"access_token": "..."
|
56
|
+
},
|
57
|
+
"jira": {
|
58
|
+
"username": "sethvargo",
|
59
|
+
"password": "..."
|
60
|
+
}
|
63
61
|
}
|
64
62
|
```
|
65
63
|
|
64
|
+
If you are using Stove 1.0, you need to update your configuration file syntax.
|
65
|
+
|
66
|
+
**It is recommended that the permissions on this file be 0600 to prevent unauthorized reading!**
|
67
|
+
|
66
68
|
|
67
69
|
Usage
|
68
70
|
-----
|
@@ -70,19 +72,29 @@ The gem is packaged as a binary. It should be run from _inside the cookbook to r
|
|
70
72
|
|
71
73
|
(~/cookbooks/bacon) $ bake 1.2.3
|
72
74
|
|
75
|
+
You can always use the `--help` flag to get information:
|
76
|
+
|
73
77
|
```text
|
74
78
|
Usage: bake x.y.z
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
--
|
79
|
-
--
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
--
|
84
|
-
--
|
85
|
-
--
|
79
|
+
|
80
|
+
Actions:
|
81
|
+
--no-bump Perform a version bump the local version automatically
|
82
|
+
--no-changelog Generate and prompt for a CHANGELOG
|
83
|
+
--no-dev Bump a minor version release for development purposes
|
84
|
+
--no-upload Upload the cookbook to the community site
|
85
|
+
|
86
|
+
Plugins:
|
87
|
+
--no-git Tag and push to a git remote
|
88
|
+
--no-github Publish the release to GitHub
|
89
|
+
--no-jira Resolve JIRA issues
|
90
|
+
|
91
|
+
Global Options:
|
92
|
+
--locale [LANGUAGE] Change the language to output messages
|
93
|
+
--log-level [LEVEL] Set the log verbosity
|
94
|
+
--category [CATEGORY] Set category for the cookbook
|
95
|
+
--path [PATH] Change the path to a cookbook
|
96
|
+
--remote [REMOTE] The name of the git remote to push to
|
97
|
+
--branch [BRANCH] The name of the git branch to push to
|
86
98
|
-h, --help Show this message
|
87
99
|
-v, --version Show version
|
88
100
|
```
|
data/Rakefile
CHANGED
@@ -1 +1,16 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
|
+
|
3
|
+
require 'cucumber/rake/task'
|
4
|
+
Cucumber::Rake::Task.new(:acceptance) do |t|
|
5
|
+
t.cucumber_opts = [].tap do |a|
|
6
|
+
a.push('--color')
|
7
|
+
a.push('--format progress')
|
8
|
+
a.push('--strict')
|
9
|
+
a.push('--tags ~@wip')
|
10
|
+
end.join(' ')
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'Run all tests'
|
14
|
+
task :test => [:acceptance]
|
15
|
+
|
16
|
+
task :default => [:test]
|
data/bin/bake
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
Feature: Bump
|
2
|
+
Background:
|
3
|
+
* the Stove config is empty
|
4
|
+
* the CLI options are all off
|
5
|
+
* I have a cookbook named "bacon" at version "1.0.0"
|
6
|
+
|
7
|
+
Scenario: When the version has not changed
|
8
|
+
* I run `bake 1.0.0 --bump`
|
9
|
+
* it should fail with "version you are trying to bump already exists"
|
10
|
+
|
11
|
+
Scenario: When the version is not greater than the current
|
12
|
+
* I run `bake 0.1.0 --bump`
|
13
|
+
* it should fail with "bump to is less than the existing version"
|
14
|
+
|
15
|
+
Scenario: In isolation
|
16
|
+
* I successfully run `bake 2.0.0 --bump`
|
17
|
+
* the file "metadata.rb" should contain "2.0.0"
|
18
|
+
|
19
|
+
Scenario: With the git plugin
|
20
|
+
* I have a cookbook named "bacon" with git support
|
21
|
+
* I successfully run `bake 1.0.0 --bump --git`
|
22
|
+
* the git remote should have the commit "Version bump to 1.0.0"
|
@@ -0,0 +1,45 @@
|
|
1
|
+
Feature: Changelog
|
2
|
+
Background:
|
3
|
+
* the Stove config is empty
|
4
|
+
* the CLI options are all off
|
5
|
+
* I have a cookbook named "bacon"
|
6
|
+
|
7
|
+
Scenario: When the Changelog does not exist
|
8
|
+
* I remove the file "CHANGELOG.md"
|
9
|
+
* I run `bake --changelog`
|
10
|
+
* it should fail with "There is no `CHANGELOG.md' found"
|
11
|
+
|
12
|
+
Scenario: When the Changelog is not a proper format
|
13
|
+
* I write to "CHANGELOG.md" with:
|
14
|
+
"""
|
15
|
+
This can't possibly be a valid Changelog
|
16
|
+
"""
|
17
|
+
* I run `bake --changelog`
|
18
|
+
* it should fail with "does not appear to be a valid format"
|
19
|
+
|
20
|
+
Scenario: When the $EDITOR is not set
|
21
|
+
* the environment variable "EDITOR" is unset
|
22
|
+
* I run `bake --changelog`
|
23
|
+
* it should fail with "The `$EDITOR' environment variable is not set"
|
24
|
+
|
25
|
+
Scenario: In isolation
|
26
|
+
* the environment variable "EDITOR" is "cat"
|
27
|
+
* I successfully run `bake --changelog`
|
28
|
+
* the file "CHANGELOG.md" should contain "v0.0.0"
|
29
|
+
|
30
|
+
Scenario: With bump
|
31
|
+
* the environment variable "EDITOR" is "cat"
|
32
|
+
* I successfully run `bake 1.0.0 --changelog --bump`
|
33
|
+
* the file "CHANGELOG.md" should contain "v1.0.0"
|
34
|
+
|
35
|
+
Scenario: With the git plugin
|
36
|
+
* I have a cookbook named "bacon" with git support
|
37
|
+
* the environment variable "EDITOR" is "cat"
|
38
|
+
* I successfully run `bake --changelog --git`
|
39
|
+
* the git remote should have the commit "Publish 0.0.0 Changelog"
|
40
|
+
|
41
|
+
@wip
|
42
|
+
Scenario: With the GitHub plugin
|
43
|
+
|
44
|
+
@wip
|
45
|
+
Scenario: With the JIRA plugin
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Feature: Dev
|
2
|
+
Background:
|
3
|
+
* the Stove config is empty
|
4
|
+
* the CLI options are all off
|
5
|
+
* I have a cookbook named "bacon" at version "1.0.0"
|
6
|
+
|
7
|
+
Scenario: In isolation
|
8
|
+
* I successfully run `bake --dev`
|
9
|
+
* the file "metadata.rb" should contain "1.0.1"
|
10
|
+
|
11
|
+
Scenario: With bump
|
12
|
+
* I successfully run `bake 2.0.0 --bump --dev`
|
13
|
+
* the file "metadata.rb" should contain "2.0.1"
|
14
|
+
|
15
|
+
Scenario: With the git plugin
|
16
|
+
* I have a cookbook named "bacon" with git support
|
17
|
+
* I successfully run `bake --dev --git`
|
18
|
+
* the git remote should have the commit "Version bump to 0.0.1 (for development)"
|
@@ -0,0 +1,48 @@
|
|
1
|
+
Feature: Upload
|
2
|
+
Background:
|
3
|
+
* the Stove config is empty
|
4
|
+
* the CLI options are all off
|
5
|
+
* I have a cookbook named "bacon"
|
6
|
+
* I am using the community server
|
7
|
+
|
8
|
+
Scenario: When the configuration does not exist
|
9
|
+
* I run `bake --upload`
|
10
|
+
* it should fail with "configuration for the Chef community site does not exist"
|
11
|
+
|
12
|
+
Scenario: When the username does not exist
|
13
|
+
* the Stove config at "community._" is ""
|
14
|
+
* I run `bake --upload`
|
15
|
+
* it should fail with "does not contain a username"
|
16
|
+
|
17
|
+
Scenario: When the key does not exist
|
18
|
+
* the Stove config at "community.username" is "bobo"
|
19
|
+
* I run `bake --upload`
|
20
|
+
* it should fail with "does not contain a key"
|
21
|
+
|
22
|
+
Scenario: When the category does not exist
|
23
|
+
* the Stove config at "community.username" is "bobo"
|
24
|
+
* the Stove config at "community.key" is "../../features/support/stove.pem"
|
25
|
+
* I run `bake --upload`
|
26
|
+
* it should fail with "You did not specify a category"
|
27
|
+
|
28
|
+
Scenario: In isolation
|
29
|
+
* the Stove config at "community.username" is "bobo"
|
30
|
+
* the Stove config at "community.key" is "../../features/support/stove.pem"
|
31
|
+
* the community server has the cookbook:
|
32
|
+
| bacon | 1.2.3 | Application |
|
33
|
+
* I successfully run `bake --upload`
|
34
|
+
|
35
|
+
Scenario: With the git plugin
|
36
|
+
* I have a cookbook named "bacon" with git support
|
37
|
+
* the Stove config at "community.username" is "bobo"
|
38
|
+
* the Stove config at "community.key" is "../../features/support/stove.pem"
|
39
|
+
* the community server has the cookbook:
|
40
|
+
| bacon | 1.2.3 | Application |
|
41
|
+
* I successfully run `bake --git --upload`
|
42
|
+
* the git remote should have the tag "v0.0.0"
|
43
|
+
|
44
|
+
@wip
|
45
|
+
Scenario: With the GitHub plugin
|
46
|
+
|
47
|
+
@wip
|
48
|
+
Scenario: With the JIRA plugin
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Feature: git Plugin
|
2
|
+
Background:
|
3
|
+
* the Stove config is empty
|
4
|
+
* the CLI options are all off
|
5
|
+
* I have a cookbook named "bacon"
|
6
|
+
|
7
|
+
Scenario: When the directory is not a git repository
|
8
|
+
* I run `bake --git`
|
9
|
+
* it should fail with "does not appear to be a valid git repository"
|
10
|
+
|
11
|
+
Scenario: When the directory is dirty
|
12
|
+
* I have a cookbook named "bacon" with git support
|
13
|
+
* I write to "new" with:
|
14
|
+
"""
|
15
|
+
This is new content
|
16
|
+
"""
|
17
|
+
* I run `bake --git`
|
18
|
+
* it should fail with "has untracked files"
|
19
|
+
|
20
|
+
Scenario: When the local is out of date with the remote
|
21
|
+
* I have a cookbook named "bacon" with git support
|
22
|
+
* the remote repository has additional commits
|
23
|
+
* I run `bake --git`
|
24
|
+
* it should fail with "out of sync with the remote repository"
|
data/features/rake.feature
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
@spawn
|
2
1
|
Feature: Rake Task
|
3
2
|
Background:
|
4
3
|
* I have a cookbook named "bacon"
|
@@ -12,5 +11,5 @@ Feature: Rake Task
|
|
12
11
|
* I successfully run `rake -T`
|
13
12
|
* the output should contain:
|
14
13
|
"""
|
15
|
-
rake publish # Publish this cookbook
|
14
|
+
rake publish[version] # Publish this cookbook
|
16
15
|
"""
|
@@ -1,29 +1,3 @@
|
|
1
|
-
Given /^the environment variable (.+) is "(.+)"$/ do |variable, value|
|
2
|
-
set_env(variable, value)
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^the exit status will be "(.+)"$/ do |error|
|
6
|
-
# Ruby 1.9.3 sucks
|
7
|
-
klass = error.split('::').inject(Stove) { |c, n| c.const_get(n) }
|
8
|
-
assert_exit_status(klass.exit_code)
|
9
|
-
end
|
10
|
-
|
11
1
|
When /^the CLI options are all off$/ do
|
12
|
-
|
13
|
-
private
|
14
|
-
def options
|
15
|
-
@options ||= {
|
16
|
-
path: Dir.pwd,
|
17
|
-
git: false,
|
18
|
-
github: false,
|
19
|
-
devodd: false,
|
20
|
-
remote: 'origin',
|
21
|
-
branch: 'master',
|
22
|
-
jira: false,
|
23
|
-
upload: false,
|
24
|
-
changelog: false,
|
25
|
-
log_level: :fatal,
|
26
|
-
}
|
27
|
-
end
|
28
|
-
end
|
2
|
+
set_env('CLI_DEFAULT', 'false')
|
29
3
|
end
|
@@ -1,19 +1,23 @@
|
|
1
|
-
Given /^
|
1
|
+
Given /^I am using the community server$/ do
|
2
|
+
set_env('COMMUNITY_URL', CommunityZero::RSpec.url)
|
3
|
+
end
|
4
|
+
|
5
|
+
Given /^the community server has the cookbooks?:$/ do |table|
|
2
6
|
table.raw.each do |name, version, category|
|
3
7
|
version ||= '0.0.0'
|
4
8
|
category ||= 'Other'
|
5
9
|
|
6
|
-
CommunityZero::Cookbook.
|
10
|
+
CommunityZero::RSpec.store.add(CommunityZero::Cookbook.new(
|
7
11
|
name: name,
|
8
12
|
version: version,
|
9
13
|
category: category,
|
10
|
-
|
14
|
+
))
|
11
15
|
end
|
12
16
|
end
|
13
17
|
|
14
|
-
Then /^the
|
18
|
+
Then /^the community server will( not)? have the cookbooks?:$/ do |negate, table|
|
15
19
|
table.raw.each do |name, version, category|
|
16
|
-
cookbook = CommunityZero::
|
20
|
+
cookbook = CommunityZero::RSpec.store.find(name, version)
|
17
21
|
|
18
22
|
if negate
|
19
23
|
expect(cookbook).to be_nil
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Given /^the Stove config is empty$/ do
|
2
|
+
path = File.join(tmp_path, '_config.rb')
|
3
|
+
|
4
|
+
write_file(path, '{}')
|
5
|
+
set_env('STOVE_CONFIG', path)
|
6
|
+
end
|
7
|
+
|
8
|
+
Given /^the Stove config at "(.+)" is "(.*)"$/ do |path, value|
|
9
|
+
parts = path.split('.').map(&:to_sym)
|
10
|
+
parents = parts[0...-1]
|
11
|
+
|
12
|
+
path = ENV['STOVE_CONFIG']
|
13
|
+
config = JSON.parse(File.read(path), symbolize_names: true)
|
14
|
+
|
15
|
+
# Vivify the hash
|
16
|
+
parent = parents.inject(config) do |config, parent|
|
17
|
+
config[parent] ||= {}
|
18
|
+
config[parent]
|
19
|
+
end
|
20
|
+
|
21
|
+
parent[parts.last] = value
|
22
|
+
|
23
|
+
File.open(path, 'w') { |f| f.write(JSON.generate(config)) }
|
24
|
+
end
|
@@ -1,23 +1,45 @@
|
|
1
|
-
Given /^I have a cookbook named "(
|
1
|
+
Given /^I have a cookbook named "(\w+)" at version "([\d\.]+)"$/ do |name, version|
|
2
2
|
create_cookbook(name, version)
|
3
3
|
end
|
4
4
|
|
5
|
-
Given /^I have a cookbook named "(
|
6
|
-
create_cookbook(name,
|
5
|
+
Given /^I have a cookbook named "(\w+)"$/ do |name|
|
6
|
+
create_cookbook(name, '0.0.0')
|
7
|
+
end
|
8
|
+
|
9
|
+
Given /^I have a cookbook named "(\w+)" with git support$/ do |name|
|
10
|
+
create_cookbook(name, '0.0.0', git: true)
|
7
11
|
end
|
8
12
|
|
9
13
|
|
14
|
+
#
|
10
15
|
# Create a new cookbook with the given name and version.
|
11
16
|
#
|
12
17
|
# @param [String] name
|
13
18
|
# @param [String] version (default: 0.0.0.0)
|
14
19
|
# @param [Hash] options
|
20
|
+
#
|
15
21
|
def create_cookbook(name, version, options = {})
|
16
22
|
create_dir(name)
|
17
23
|
cd(name)
|
18
|
-
|
19
|
-
write_file('
|
20
|
-
|
24
|
+
|
25
|
+
write_file('CHANGELOG.md', <<-EOH.gsub(/^ {4}/, ''))
|
26
|
+
Changelog
|
27
|
+
=========
|
28
|
+
|
29
|
+
v#{version} (#{Time.now.to_date})
|
30
|
+
----------------------------
|
31
|
+
- This is an entry
|
32
|
+
- This is another entry
|
33
|
+
EOH
|
34
|
+
|
35
|
+
write_file('README.md', <<-EOH.gsub(/^ {4}/, ''))
|
36
|
+
This is the README for #{name}
|
37
|
+
EOH
|
38
|
+
|
39
|
+
write_file('metadata.rb', <<-EOH.gsub(/^ {4}/, ''))
|
40
|
+
name '#{name}'
|
41
|
+
version '#{version}'
|
42
|
+
EOH
|
21
43
|
|
22
44
|
if options[:git]
|
23
45
|
git_init(current_dir)
|