ship-it 0.0.2

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.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in shipit.gemspec
4
+ gemspec
5
+
6
+ group :development, :test do
7
+ gem 'guard-rspec'
8
+ end
@@ -0,0 +1,10 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2 do
5
+ watch(%r{^spec/.+_spec\.rb$}) { "spec" }
6
+ watch(%r{^lib/(.+)\.rb$}) { "spec" }
7
+ watch(%r{^lib/shipit/(.+)\.rb$}) { "spec" }
8
+ watch('spec/spec_helper.rb') { "spec" }
9
+ end
10
+
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Eric J. Holmes
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,42 @@
1
+ # Shipit
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'shipit'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install shipit
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Hubot
24
+ How I want to deploy:
25
+
26
+ ```
27
+ hubot setup github/repo for deployment
28
+ hubot deploy repo/master to production #=> Deploying repo/master to the production environment
29
+ hubot deploy repo/feature to staging #=> Deploying repo/feature to the staging environment
30
+ hubot what's on staging? #=> repo/feature is currently on the staging environment
31
+ hubot lock staging because I'm collecting stats #=> Ok, I've locked the staging environment
32
+ hubot why is staging locked? #=> The staging environment is locked because User is collecting stats
33
+ hubot unlock staging #=> Ok, I've unlocked the staging environment
34
+ ```
35
+
36
+ ## Contributing
37
+
38
+ 1. Fork it
39
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
40
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
41
+ 4. Push to the branch (`git push origin my-new-feature`)
42
+ 5. Create new Pull Request
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env rake
2
+ $LOAD_PATH.unshift(File.expand_path("../lib", __FILE__))
3
+ ENV["RACK_ENV"] ||= "development"
4
+ require "bundler/gem_tasks"
5
+
6
+ require "shipit"
7
+ Shipit.setup(ENV)
8
+ require "shipit/tasks"
9
+
10
+ require 'rspec/core/rake_task'
11
+
12
+ RSpec::Core::RakeTask.new(:spec)
13
+
14
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ require "shipit"
2
+ Shipit.setup(ENV)
3
+ run Shipit.app
@@ -0,0 +1 @@
1
+ require "shipit"
@@ -0,0 +1,48 @@
1
+ require "active_record"
2
+ require "sinatra/base"
3
+ require "open3"
4
+
5
+ require "shipit/version"
6
+ require "shipit/app"
7
+
8
+ require "shipit/repository"
9
+ require "shipit/environment"
10
+ require "shipit/job"
11
+
12
+ module Shipit
13
+ class << self
14
+ def setup(settings)
15
+ env = settings["RACK_ENV"]
16
+ if env.nil? || env.empty?
17
+ raise Error, "RACK_ENV is required"
18
+ end
19
+
20
+ if env != "production"
21
+ settings["DATABASE_URL"] ||= "mysql2://root@localhost/shipit_#{env}"
22
+ end
23
+
24
+ database = URI(settings["DATABASE_URL"])
25
+ adapter = database.scheme == "postgres" ? "postgresql" : database.scheme
26
+
27
+ connection = {
28
+ :adapter => adapter,
29
+ :host => database.host,
30
+ :database => database.path[1..-1],
31
+ :username => database.user,
32
+ :password => database.password,
33
+ :reconnect => true,
34
+ }
35
+ ActiveRecord::Base.establish_connection(connection)
36
+ end
37
+
38
+ def app
39
+ @app ||= Rack::Builder.new {
40
+ run Shipit::App
41
+ }
42
+ end
43
+
44
+ def enable_mock!
45
+ Job.enable_mock!
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,15 @@
1
+ module Shipit
2
+ class App < Sinatra::Base
3
+ get '/' do
4
+ "ok"
5
+ end
6
+
7
+ post '/setup' do
8
+ Repository.setup(params)
9
+ end
10
+
11
+ post '/ship' do
12
+ Job.start(params)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ class CreateRepositories < ActiveRecord::Migration
2
+ def change
3
+ create_table :repositories do |t|
4
+ t.string :name
5
+ t.string :uri
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class CreateJobs < ActiveRecord::Migration
2
+ def change
3
+ create_table :jobs do |t|
4
+ t.string :env
5
+ t.string :output
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ class AddRepositoryIdToJob < ActiveRecord::Migration
2
+ def change
3
+ add_column :jobs, :repository_id, :integer
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ class CreateEnvironments < ActiveRecord::Migration
2
+ def change
3
+ create_table :environments do |t|
4
+ t.string :repository_id
5
+ t.string :name
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ class RemoveEnvFromJob < ActiveRecord::Migration
2
+ def up
3
+ remove_column :jobs, :env
4
+ remove_column :jobs, :repository_id
5
+ end
6
+
7
+ def down
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class AddEnvironmentIdToJob < ActiveRecord::Migration
2
+ def change
3
+ add_column :jobs, :environment_id, :integer
4
+ end
5
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 20120701090245) do
15
+
16
+ create_table "environments", :force => true do |t|
17
+ t.string "repository_id"
18
+ t.string "name"
19
+ t.datetime "created_at", :null => false
20
+ t.datetime "updated_at", :null => false
21
+ end
22
+
23
+ create_table "jobs", :force => true do |t|
24
+ t.string "output"
25
+ t.datetime "created_at", :null => false
26
+ t.datetime "updated_at", :null => false
27
+ t.integer "environment_id"
28
+ end
29
+
30
+ create_table "repositories", :force => true do |t|
31
+ t.string "name"
32
+ t.string "uri"
33
+ t.datetime "created_at", :null => false
34
+ t.datetime "updated_at", :null => false
35
+ end
36
+
37
+ end
@@ -0,0 +1,15 @@
1
+ module Shipit
2
+ class Environment < ActiveRecord::Base
3
+ belongs_to :repository
4
+
5
+ def self.find_or_create(repo, name)
6
+ env = self.find_by_name(name) || begin
7
+ self.new(:repository => repo, :name => name).tap { |r| r.save }
8
+ end
9
+ end
10
+
11
+ def command
12
+ self.repository.command.gsub /{{env}}/, self.name
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,76 @@
1
+ module Shipit
2
+ class Job < ActiveRecord::Base
3
+ belongs_to :environment
4
+ belongs_to :repository
5
+
6
+ delegate :repository, :to => :environment
7
+
8
+ def self.start(params)
9
+ repo = Repository.find_by_name(params[:name])
10
+ env = Environment.find_or_create(repo, (params[:env] || "production"))
11
+ new(:environment => env).tap { |job| job.save }.run
12
+ end
13
+
14
+ # Runs the deploy
15
+ def run
16
+ self.clone
17
+ self.deploy
18
+ end
19
+
20
+ def clone
21
+ Kernel.system <<-SHELL
22
+ mkdir -p #{dir}
23
+ cd #{dir}
24
+ if [ ! -d './.git' ]; then
25
+ git init
26
+ git remote add origin #{repository.uri}
27
+ fi
28
+ git fetch -q origin
29
+ git reset -q --hard origin/#{branch}
30
+ SHELL
31
+ end
32
+
33
+ def deploy
34
+ self.output = ""
35
+ Bundler.with_clean_env do
36
+ IO.popen(command, :err => [:child, :out]) do |io|
37
+ io.each { |line| self.output << line }
38
+ end
39
+ end
40
+ self.save
41
+ end
42
+
43
+ # TODO: Make configurable
44
+ def branch
45
+ "master"
46
+ end
47
+
48
+ def command
49
+ "cd #{dir}; #{environment.command}"
50
+ end
51
+
52
+ # Mocks cloning and deploying
53
+ def self.enable_mock!
54
+ self.class_eval do
55
+ def clone
56
+ Kernel.system <<-SHELL
57
+ rm -rf #{dir}
58
+ mkdir -p #{File.dirname(dir)}
59
+ cp -r #{File.expand_path('../../../spec/fixtures/repo', __FILE__)} #{dir}
60
+ SHELL
61
+ end
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ def dir
68
+ File.join(File.expand_path(tmpdir), repository.name)
69
+ end
70
+
71
+ def tmpdir
72
+ "tmp/repos"
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,16 @@
1
+ module Shipit
2
+ class Repository < ActiveRecord::Base
3
+ has_many :jobs
4
+
5
+ def self.setup(params)
6
+ uri = "git@github.com:#{params[:repo]}"
7
+ name = params[:name]
8
+ new(:uri => uri, :name => name).tap { |r| r.save }
9
+ end
10
+
11
+ # TODO: Make configurable
12
+ def command
13
+ "bundle install --path vendor/gems --binstubs; bundle exec rake {{env}} deploy"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,44 @@
1
+ require "rake"
2
+ require "rake/tasklib"
3
+
4
+ module Shipit
5
+ module Tasks
6
+ extend Rake::DSL
7
+
8
+ namespace :db do
9
+ desc "Run the migration(s)"
10
+ task :migrate do
11
+ path = db_dir.join("migrate").to_s
12
+ ActiveRecord::Migration.verbose = true
13
+ ActiveRecord::Migrator.migrate(path)
14
+
15
+ Rake::Task["db:schema:dump"].invoke
16
+ end
17
+
18
+ namespace :schema do
19
+ desc "Dump the database schema into a standard Rails schema.rb file"
20
+ task :dump do
21
+ require "active_record/schema_dumper"
22
+
23
+ path = db_dir.join("schema.rb").to_s
24
+
25
+ File.open(path, "w:utf-8") do |fd|
26
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, fd)
27
+ end
28
+ end
29
+ end
30
+
31
+ namespace :create do
32
+ desc "Create the databases"
33
+ task :all do
34
+ system "mysqladmin -uroot create shipit_development"
35
+ system "mysqladmin -uroot create shipit_test"
36
+ end
37
+ end
38
+ end
39
+
40
+ def self.db_dir
41
+ @db_dir ||= Pathname(__FILE__).expand_path.join("../database")
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module Shipit
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/shipit/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Eric J. Holmes"]
6
+ gem.email = ["eric@ejholmes.net"]
7
+ gem.description = %q{Shipit is a sinatra app for continous deployment}
8
+ gem.summary = %q{Shipit is a sinatra app for continous deployment}
9
+ gem.homepage = "https://github.com/ejholmes/shipit"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "ship-it"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Shipit::VERSION
17
+
18
+ gem.add_dependency "rake", "~> 0.9.2"
19
+ gem.add_dependency "sinatra", "~> 1.3.2"
20
+ gem.add_dependency "thin", "~> 1.3.1"
21
+ gem.add_dependency "activerecord", "~> 3.2.6"
22
+ gem.add_dependency "delayed_job_active_record", "~> 0.3.2"
23
+
24
+ gem.add_development_dependency "shotgun", "~> 0.9"
25
+ gem.add_development_dependency "rspec", "~> 2.10.0"
26
+ gem.add_development_dependency "mysql2", "~>0.3.0"
27
+ gem.add_development_dependency "rack-test"
28
+ gem.add_development_dependency "mocha"
29
+ end
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gem 'rake'
@@ -0,0 +1,7 @@
1
+ task :deploy do
2
+ puts "deployed ok"
3
+ end
4
+
5
+ task :production do
6
+ puts "deployed ok"
7
+ end
@@ -0,0 +1,78 @@
1
+ require "spec_helper"
2
+
3
+ describe Shipit do
4
+ include Rack::Test::Methods
5
+
6
+ describe "GET '/'" do
7
+ before do
8
+ get '/'
9
+ end
10
+
11
+ specify { last_response.should be_ok }
12
+ specify { last_response.body.should eq "ok" }
13
+ end
14
+
15
+ describe "POST '/setup'" do
16
+ before do
17
+ post '/setup', post_data
18
+ end
19
+
20
+ context "with valid data" do
21
+ let(:post_data) do
22
+ { :repo => "ejholmes/shipit", :name => "shipit" }
23
+ end
24
+
25
+ specify { last_response.should be_ok }
26
+
27
+ describe "the created repository" do
28
+ subject { Shipit::Repository.last }
29
+
30
+ it { should be_valid }
31
+ its(:name) { should eq 'shipit' }
32
+ its(:uri) { should eq 'git@github.com:ejholmes/shipit' }
33
+ end
34
+ end
35
+ end
36
+
37
+ describe "POST '/ship'" do
38
+ before do
39
+ post '/ship', post_data
40
+ end
41
+
42
+ context "with valid data" do
43
+ let!(:repo) { Shipit::Repository.setup(:repo => "ejholmes/shipit", :name => "shipit") }
44
+ let(:post_data) do
45
+ { :name => "shipit", :env => "production" }
46
+ end
47
+
48
+ specify { last_response.should be_ok }
49
+
50
+ describe "the created job" do
51
+ subject { Shipit::Job.last }
52
+
53
+ it { should be_valid }
54
+ its(:output) { should =~ /.*deployed ok.*/}
55
+ specify { subject.environment.name.should eq "production" }
56
+ end
57
+ end
58
+ end
59
+
60
+ pending "POST '/lock'" do
61
+ before do
62
+ post '/lock', post_data
63
+ end
64
+
65
+ context "with valid data" do
66
+ let!(:repo) { Shipit::Repository.setup(:repo => "ejholmes/shipit", :name => "shipit") }
67
+ let(:post_data) do
68
+ { :name => "shipit", :env => "production", :message => "This environment is locked" }
69
+ end
70
+
71
+ describe "the repository" do
72
+ subject { repo }
73
+
74
+ it { should be_locked }
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,14 @@
1
+ ENV["RACK_ENV"] = "test"
2
+
3
+ require "rspec"
4
+ require "mocha"
5
+ require "rack/test"
6
+
7
+ require "shipit"
8
+ Shipit.setup(ENV)
9
+
10
+ def app
11
+ Shipit.app
12
+ end
13
+
14
+ Shipit.enable_mock!
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ship-it
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Eric J. Holmes
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70117317397040 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.9.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70117317397040
25
+ - !ruby/object:Gem::Dependency
26
+ name: sinatra
27
+ requirement: &70117317395700 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.2
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70117317395700
36
+ - !ruby/object:Gem::Dependency
37
+ name: thin
38
+ requirement: &70117317394560 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.3.1
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70117317394560
47
+ - !ruby/object:Gem::Dependency
48
+ name: activerecord
49
+ requirement: &70117317393540 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 3.2.6
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70117317393540
58
+ - !ruby/object:Gem::Dependency
59
+ name: delayed_job_active_record
60
+ requirement: &70117317392300 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 0.3.2
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70117317392300
69
+ - !ruby/object:Gem::Dependency
70
+ name: shotgun
71
+ requirement: &70117317390660 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '0.9'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70117317390660
80
+ - !ruby/object:Gem::Dependency
81
+ name: rspec
82
+ requirement: &70117317389220 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 2.10.0
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70117317389220
91
+ - !ruby/object:Gem::Dependency
92
+ name: mysql2
93
+ requirement: &70117317378600 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: 0.3.0
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70117317378600
102
+ - !ruby/object:Gem::Dependency
103
+ name: rack-test
104
+ requirement: &70117317378160 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *70117317378160
113
+ - !ruby/object:Gem::Dependency
114
+ name: mocha
115
+ requirement: &70117317376280 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70117317376280
124
+ description: Shipit is a sinatra app for continous deployment
125
+ email:
126
+ - eric@ejholmes.net
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files: []
130
+ files:
131
+ - .gitignore
132
+ - Gemfile
133
+ - Guardfile
134
+ - LICENSE
135
+ - README.md
136
+ - Rakefile
137
+ - config.ru
138
+ - lib/ship-it.rb
139
+ - lib/shipit.rb
140
+ - lib/shipit/app.rb
141
+ - lib/shipit/database/migrate/20120630164223_create_repositories.rb
142
+ - lib/shipit/database/migrate/20120701075737_create_jobs.rb
143
+ - lib/shipit/database/migrate/20120701080236_add_repository_id_to_job.rb
144
+ - lib/shipit/database/migrate/20120701084955_create_environments.rb
145
+ - lib/shipit/database/migrate/20120701085528_remove_env_from_job.rb
146
+ - lib/shipit/database/migrate/20120701090245_add_environment_id_to_job.rb
147
+ - lib/shipit/database/schema.rb
148
+ - lib/shipit/environment.rb
149
+ - lib/shipit/job.rb
150
+ - lib/shipit/repository.rb
151
+ - lib/shipit/tasks.rb
152
+ - lib/shipit/version.rb
153
+ - shipit.gemspec
154
+ - spec/fixtures/repo/Gemfile
155
+ - spec/fixtures/repo/Rakefile
156
+ - spec/lib/shipit_spec.rb
157
+ - spec/spec_helper.rb
158
+ homepage: https://github.com/ejholmes/shipit
159
+ licenses: []
160
+ post_install_message:
161
+ rdoc_options: []
162
+ require_paths:
163
+ - lib
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 1.8.11
179
+ signing_key:
180
+ specification_version: 3
181
+ summary: Shipit is a sinatra app for continous deployment
182
+ test_files:
183
+ - spec/fixtures/repo/Gemfile
184
+ - spec/fixtures/repo/Rakefile
185
+ - spec/lib/shipit_spec.rb
186
+ - spec/spec_helper.rb
187
+ has_rdoc: