ops_preflight 0.0.1.pre

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
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
18
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ops_preflight.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2013 Ryan Schlesinger
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # OpsPreflight
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'ops_preflight'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install ops_preflight
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/preflight ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ops_preflight'
4
+ $thor_runner = true
5
+ OpsPreflight::Client.start(ARGV)
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ops_preflight'
4
+ $thor_runner = true
5
+ OpsPreflight::Server.start(ARGV)
data/data/deploy.rb ADDED
@@ -0,0 +1,141 @@
1
+ require 'mina/bundler'
2
+ require 'mina/rails'
3
+ require 'mina/git'
4
+ # require 'mina/rbenv' # for rbenv support. (http://rbenv.org)
5
+ # require 'mina/rvm' # for rvm support. (http://rvm.io)
6
+ require 'ops_preflight/tasks'
7
+
8
+ # Basic settings:
9
+ # domain - The hostname to SSH to.
10
+ # deploy_to - Path to deploy into.
11
+ # repository - Git repo to clone from. (needed by mina/git)
12
+ # branch - Branch name to deploy. (needed by mina/git)
13
+
14
+ set :user, ENV['USER'] # Username in the server to SSH to.
15
+ set :domain, ENV['DOMAIN']
16
+ set :app_name, ENV['APP_NAME']
17
+ set :deploy_to, lambda { "/home/#{settings.user!}/preflight-#{settings.app_name!}-#{settings.rails_env!}" }
18
+ set :repository, ENV['REPOSITORY']
19
+ set :branch, ENV['BRANCH']
20
+
21
+ # set :rbenv_path, '/usr/local/rbenv'
22
+ set :preflight_bucket, ENV['PREFLIGHT_BUCKET']
23
+ settings.delete(:rails_env)
24
+
25
+ set :run_db_migrate, ENV['RUN_DB_MIGRATE']
26
+ set :use_turbo_sprockets, ENV['USE_TURBO_SPROCKETS']
27
+ set :use_env_file, ENV['USE_ENV_FILE']
28
+
29
+ # Manually create these paths in shared/ (eg: shared/config/database.yml) in your server.
30
+ # They will be linked in the 'deploy:link_shared_paths' step.
31
+ set :shared_paths, lambda { generate_shared_paths }
32
+
33
+ # Optional settings:
34
+ # set :port, '30000' # SSH port number.
35
+
36
+ # This task is the environment that is loaded for most commands, such as
37
+ # `mina deploy` or `mina rake`.
38
+ task :environment do
39
+ # If you're using rbenv, use this to load the rbenv environment.
40
+ # Be sure to commit your .rbenv-version to your repository.
41
+ # queue %{export RBENV_ROOT=#{rbenv_path}}
42
+ # invoke :'rbenv:load'
43
+
44
+ # For those using RVM, use this to load an RVM version@gemset.
45
+ # invoke :'rvm:use[ruby-1.9.3-p125@default]'
46
+
47
+ unless settings.rails_env?
48
+ if ENV['RAILS_ENV']
49
+ set :rails_env, ENV['RAILS_ENV']
50
+ elsif ENV['RACK_ENV']
51
+ set :rails_env, ENV['RACK_ENV']
52
+ else
53
+ print_error(unindent(%[
54
+ Application environment must be specified.
55
+ Use deploy RAILS_ENV=<environment> or deploy RACK_ENV=<environment>
56
+ Preflight supports this with `preflight deploy <environment>`
57
+ ]))
58
+ die(2)
59
+ end
60
+ end
61
+
62
+ [:user, :domain, :app_name, :repository, :branch, :preflight_bucket, :use_turbo_sprockets, :use_env_file].each do |var|
63
+ if settings[var].nil?
64
+ print_error(unindent(%[
65
+ Setting #{var.to_s} must be specified.
66
+ ]))
67
+ die(2)
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ # Put any custom mkdir's in here for when `mina setup` is ran.
74
+ # For Rails apps, we'll make some of the shared paths that are shared between
75
+ # all releases.
76
+ task :setup => :environment do
77
+ queue! %[mkdir -p "#{deploy_to}/shared/log"]
78
+ queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/log"]
79
+
80
+ queue! %[mkdir -p "#{deploy_to}/shared/config"]
81
+ queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/config"]
82
+
83
+ if settings.use_turbo_sprockets! == 'true'
84
+ queue! %[mkdir -p "#{deploy_to}/shared/public/assets"]
85
+ queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/public/assets"]
86
+ end
87
+
88
+ queue! %[touch "#{deploy_to}/shared/config/database.yml"]
89
+
90
+ queue %[echo "-----> Please add ForwardAgent yes to your ssh config for #{settings.domain!}"]
91
+ end
92
+
93
+ desc "Deploys the current version to the server."
94
+ task :deploy => :environment do
95
+ deploy do
96
+ # Put things that will set up an empty directory into a fully set-up
97
+ # instance of your project.
98
+ invoke :'git:clone'
99
+ invoke :'deploy:link_shared_paths'
100
+ invoke :'bundle:install'
101
+
102
+ if settings.use_env_file! == 'true'
103
+ invoke :'preflight:fetch_environment'
104
+ end
105
+
106
+ if settings.run_db_migrate! == 'true'
107
+ invoke :'rails:db_migrate'
108
+ end
109
+
110
+ if settings.use_turbo_sprockets! == 'true'
111
+ invoke :'rails:assets_precompile:force' # Defer to turbo sprockets
112
+ invoke :'preflight:assets_clean_expired'
113
+ else
114
+ invoke :'rails:assets_precompile'
115
+ end
116
+
117
+ to :launch do
118
+ invoke :'preflight:bundle'
119
+ invoke :'preflight:assets'
120
+ invoke :'preflight:deploy'
121
+ end
122
+ end
123
+ end
124
+
125
+ def generate_shared_paths
126
+ path = ['config/database.yml', 'log']
127
+
128
+ if settings.use_turbo_sprockets! == 'true'
129
+ path << 'public/assets'
130
+ end
131
+
132
+ path
133
+ end
134
+
135
+ # For help in making your deploy script, see the Mina documentation:
136
+ #
137
+ # - http://nadarei.co/mina
138
+ # - http://nadarei.co/mina/tasks
139
+ # - http://nadarei.co/mina/settings
140
+ # - http://nadarei.co/mina/helpers
141
+
@@ -0,0 +1,22 @@
1
+ ---
2
+ user: ec2-user
3
+ domain: preflight.example.com
4
+ app_name: example
5
+
6
+ repository: git@github.com:user/repo.git
7
+
8
+ preflight_bucket: org-preflight
9
+
10
+ run_db_migrate: false
11
+ use_turbo_sprockets: true
12
+ use_env_file: true
13
+
14
+ opsworks_app_name: appname
15
+
16
+ environments:
17
+ production:
18
+ branch: master
19
+ opsworks_stack_name: Production Example
20
+ staging:
21
+ branch: staging
22
+ opsworks_stack_name: Staging Example
@@ -0,0 +1,50 @@
1
+ module OpsPreflight
2
+ class Client < Thor
3
+ include Thor::Actions
4
+ include ExitCode
5
+
6
+ namespace :default
7
+
8
+ source_root OpsPreflight.root_path
9
+
10
+ class_option :verbose, :aliases => '-v', :type => :boolean
11
+ class_option :simulate, :aliases => '-S', :type => :boolean
12
+ class_option :trace, :aliases => '-t', :type => :boolean
13
+
14
+ desc "init", "Initialize application to work with preflight"
15
+ def init
16
+ copy_file 'data/preflight.yml', 'config/preflight.yml'
17
+ say 'Please edit config/preflight.yml to finish setting up preflight.'
18
+ end
19
+
20
+ desc "setup <rails_env>", "Set up the server's preflight environment"
21
+ def setup(rails_env)
22
+ run "bundle exec mina setup RAILS_ENV=#{rails_env} #{Config.new.client_args(rails_env)} #{mina_args}", :verbose => false
23
+ end
24
+
25
+ desc "deploy <rails_env>", "Deploys to the configured app"
26
+ def deploy(rails_env)
27
+ run "bundle exec mina deploy RAILS_ENV=#{rails_env} #{Config.new.client_args(rails_env)} #{mina_args}", :verbose => false
28
+ end
29
+
30
+ # Fixes thor's banners when used with :default namespace
31
+ def self.banner(command, namespace = nil, subcommand = false)
32
+ "#{basename} #{command.formatted_usage(self, false, subcommand)}"
33
+ end
34
+
35
+ no_tasks do
36
+ def mina_args(*args)
37
+ args = "-f #{OpsPreflight.root_path('data', 'deploy.rb')}"
38
+
39
+ # mina's --verbose doesn't work
40
+ args << ' -v' if options[:verbose]
41
+
42
+ [:simulate, :trace].each do |opt|
43
+ args << " --#{opt.to_s}" if options[opt]
44
+ end
45
+
46
+ args
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,49 @@
1
+ module OpsPreflight
2
+ class Config
3
+ CONFIG_FILE = 'config/preflight.yml'
4
+
5
+ def initialize
6
+ config
7
+ end
8
+
9
+ def client_args(rails_env)
10
+ str = ''
11
+ config.each do |var, value|
12
+ next if var == :environments
13
+
14
+ str << " #{var.to_s.upcase}='#{value}'"
15
+ end
16
+
17
+ if config[:environments] && config[:environments][rails_env.to_sym]
18
+ config[:environments][rails_env.to_sym].each do |var, value|
19
+ str << " #{var.to_s.upcase}='#{value}'"
20
+ end
21
+ end
22
+
23
+ str
24
+ end
25
+
26
+ protected
27
+ def config
28
+ @config ||= begin
29
+ new_config = YAML::load(ERB.new(File.read(CONFIG_FILE)).result)
30
+
31
+ symbolize_keys!(new_config)
32
+ symbolize_keys!(new_config[:environments])
33
+
34
+ new_config[:environments].each do |env, hash|
35
+ symbolize_keys!(hash)
36
+ end
37
+
38
+ new_config.freeze
39
+ end
40
+ end
41
+
42
+ def symbolize_keys!(hash)
43
+ hash.keys.each do |key|
44
+ hash[(key.to_sym rescue key) || key] = hash.delete(key)
45
+ end
46
+ hash
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,8 @@
1
+ module OpsPreflight
2
+ module ExitCode
3
+ private
4
+ def self.exit_on_failure?
5
+ true
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ module OpsPreflight
2
+ module OpsWorks
3
+ class Base
4
+ attr_accessor :stack_name
5
+
6
+ def initialize(stack_name)
7
+ require 'aws-sdk'
8
+
9
+ @stack_name = stack_name
10
+ end
11
+
12
+ protected
13
+ def opsworks
14
+ @opsworks ||= AWS::OpsWorks.new
15
+ end
16
+
17
+ def stack_id
18
+ @stack_id ||= begin
19
+ resp = opsworks.client.describe_stacks
20
+ stack = resp[:stacks].find {|stack| stack[:name] == stack_name }
21
+
22
+ raise "OpsWorks stack not found!" if stack.nil?
23
+
24
+ stack[:stack_id]
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,51 @@
1
+ module OpsPreflight
2
+ module OpsWorks
3
+ require 'ops_preflight/ops_works/base'
4
+
5
+ class Deploy < Base
6
+ attr_accessor :app_name
7
+
8
+ def initialize(stack_name, app_name)
9
+ super stack_name
10
+
11
+ @app_name = app_name
12
+ end
13
+
14
+ def call(release_num = nil)
15
+ instances = instance_ids
16
+ puts "Triggering deploy of v#{release_num} to #{instances.size} instance#{'s' if instances.size != 1}"
17
+
18
+ resp = opsworks.client.create_deployment({
19
+ :stack_id => stack_id,
20
+ :app_id => app_id,
21
+ :instance_ids => instances,
22
+ :command => {
23
+ :name => 'deploy'
24
+ },
25
+ :comment => release_num.nil? ? 'Preflight Deployment' : "Preflight Release v#{release_num}"
26
+ })
27
+ end
28
+
29
+ protected
30
+ def app_id
31
+ @app_id ||= begin
32
+ resp = opsworks.client.describe_apps(:stack_id => stack_id)
33
+ app = resp[:apps].find {|app| app[:name] == app_name}
34
+
35
+ raise "OpsWorks app not found!" if app.nil?
36
+
37
+ app[:app_id]
38
+ end
39
+ end
40
+
41
+ def instance_ids
42
+ resp = opsworks.client.describe_instances(:stack_id => stack_id)
43
+ ids = []
44
+ resp[:instances].each {|instance| ids << instance[:instance_id] if instance[:status] == 'online' }
45
+
46
+ ids
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,34 @@
1
+ module OpsPreflight
2
+ module OpsWorks
3
+ require 'ops_preflight/ops_works/base'
4
+
5
+ class FetchEnvironment < Base
6
+ attr_accessor :app_name
7
+ attr_accessor :environment
8
+
9
+ def initialize(environment, stack_name, app_name)
10
+ super stack_name
11
+
12
+ @environment = environment
13
+ @app_name = app_name
14
+ end
15
+
16
+ def call
17
+ resp = opsworks.client.describe_stacks(:stack_ids => [stack_id])
18
+
19
+ require 'multi_json'
20
+
21
+ json = MultiJson.load(resp[:stacks].first[:custom_json])
22
+
23
+ str = ''
24
+ json['env_vars'][app_name][environment].each do |var, value|
25
+ str << "#{var.upcase}=#{value}\n"
26
+ end
27
+
28
+ File.open(".env.#{environment}", 'wb') do |f|
29
+ f.write str
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ module OpsPreflight
2
+ class S3Transfer
3
+ attr_accessor :bucket
4
+ attr_accessor :file
5
+
6
+ def initialize(bucket, file)
7
+ @bucket = bucket
8
+ @file = file
9
+ end
10
+
11
+ def upload
12
+ basename = File.basename(file)
13
+
14
+ remote_file = directory.files.head(basename)
15
+ remote_file.destroy if remote_file
16
+
17
+ directory.files.create(
18
+ :key => basename,
19
+ :body => File.open(file),
20
+ :public => false
21
+ )
22
+ end
23
+
24
+ def download
25
+ basename = File.basename(file)
26
+
27
+ remote_file = directory.files.get(basename)
28
+ File.open(file, 'w') do |local_file|
29
+ local_file.write(remote_file.body)
30
+ end
31
+ end
32
+
33
+ protected
34
+ def connection
35
+ require 'fog'
36
+ Fog::Storage::AWS.new :use_iam_profile => true
37
+ end
38
+
39
+ def directory
40
+ connection.directories.get(bucket)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,45 @@
1
+ module OpsPreflight
2
+ class Server < Thor
3
+ include ExitCode
4
+
5
+ namespace :default
6
+
7
+ desc "upload", "Upload preflight files to S3"
8
+ option :bucket, :aliases => '-b', :required => true, :type => :string, :banner => "<s3_bucket>"
9
+ option :file, :aliases => '-f', :required => true, :type => :string, :banner => "<file>"
10
+ def upload
11
+ raise Thor::Error, "Specified file not found: #{options[:file]}" unless File.exists?(options[:file])
12
+
13
+ require 'ops_preflight/s3_transfer.rb'
14
+ S3Transfer.new(options[:bucket], options[:file]).upload
15
+ end
16
+
17
+ desc "download", "Downloads preflight files from S3"
18
+ option :bucket, :aliases => '-b', :required => true, :type => :string, :banner => "<s3_bucket>"
19
+ option :file, :aliases => '-f', :required => true, :type => :string, :banner => "<file>"
20
+ def download
21
+ require 'ops_preflight/s3_transfer.rb'
22
+ S3Transfer.new(options[:bucket], options[:file]).download
23
+ end
24
+
25
+ desc "deploy <stack_name> <app_name>", "Deploys the application to opsworks"
26
+ option :release, :type => :string, :banner => '<release number>'
27
+ def deploy(stack_name, app_name)
28
+ require 'ops_preflight/ops_works/deploy.rb'
29
+
30
+ OpsWorks::Deploy.new(stack_name, app_name).call(options[:release])
31
+ end
32
+
33
+ desc "fetch_environment <environment> <stack_name> <app_name>", 'Fetches environment variables from opsworks'
34
+ def fetch_environment(environment, stack_name, app_name)
35
+ require 'ops_preflight/ops_works/fetch_environment.rb'
36
+
37
+ OpsWorks::FetchEnvironment.new(environment, stack_name, app_name).call
38
+ end
39
+
40
+ # Fixes thor's banners when used with :default namespace
41
+ def self.banner(command, namespace = nil, subcommand = false)
42
+ "#{basename} #{command.formatted_usage(self, false, subcommand)}"
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,58 @@
1
+ set :opsworks_stack_name, ENV['OPSWORKS_STACK_NAME']
2
+ set :opsworks_app_name, ENV['OPSWORKS_APP_NAME']
3
+ set :rake_assets_clean_expired, lambda { "#{rake} assets:clean_expired RAILS_GROUPS=assets" }
4
+
5
+ namespace :preflight do
6
+ task :check_env_vars do
7
+ [:opsworks_stack_name, :opsworks_app_name].each do |var|
8
+ if settings[var].nil?
9
+ print_error(unindent(%[
10
+ Setting #{var.to_s} must be specified.
11
+ ]))
12
+ die(2)
13
+ end
14
+ end
15
+ end
16
+
17
+ desc 'Fetches the application environment vars'
18
+ task :fetch_environment => :check_env_vars do
19
+ queue %[
20
+ echo "-----> Preflight: Fetch Environment"
21
+ #{echo_cmd %[bundle exec preflight-server fetch_environment #{settings.rails_env!} '#{settings.opsworks_stack_name!}' '#{settings.opsworks_app_name!}']}
22
+ ]
23
+ end
24
+
25
+ desc 'Cleans up expired assets'
26
+ task :assets_clean_expired do
27
+ queue %{
28
+ echo "-----> Preflight: Clean expired assets"
29
+ #{echo_cmd %[#{rake_assets_clean_expired}]}
30
+ }
31
+ end
32
+
33
+ desc 'Prepares the bundle for deploy'
34
+ task :bundle => :environment do
35
+ queue %[
36
+ echo "-----> Preflight: Uploading Bundle"
37
+ #{echo_cmd %[tar -zcvf tmp/preflight-#{settings.app_name!}-bundle-#{settings.rails_env!}.tgz -C #{deploy_to}/#{shared_path} bundle > /dev/null]} &&
38
+ #{echo_cmd %[bundle exec preflight-server upload -b #{settings.preflight_bucket!} -f ./tmp/preflight-#{settings.app_name!}-bundle-#{settings.rails_env!}.tgz]}
39
+ ]
40
+ end
41
+
42
+ desc 'Precompiles assets for deploy'
43
+ task :assets => :environment do
44
+ queue %[
45
+ echo "-----> Preflight: Uploading Assets"
46
+ #{echo_cmd %[tar -zcvf tmp/preflight-#{settings.app_name!}-assets-#{settings.rails_env!}.tgz -C #{deploy_to}/#{shared_path}/public assets > /dev/null]} &&
47
+ #{echo_cmd %[bundle exec preflight-server upload -b #{settings.preflight_bucket!} -f ./tmp/preflight-#{settings.app_name!}-assets-#{settings.rails_env!}.tgz]}
48
+ ]
49
+ end
50
+
51
+ desc 'Triggers a deploy'
52
+ task :deploy => [:environment, :check_env_vars] do
53
+ queue %[
54
+ echo "-----> Preflight: Deploy"
55
+ #{echo_cmd %[bundle exec preflight-server deploy '#{settings.opsworks_stack_name!}' '#{settings.opsworks_app_name!}' --release="$version"]}
56
+ ]
57
+ end
58
+ end
@@ -0,0 +1,3 @@
1
+ module OpsPreflight
2
+ VERSION = "0.0.1.pre"
3
+ end
@@ -0,0 +1,17 @@
1
+ require 'bundler/setup'
2
+ require 'thor'
3
+
4
+ module OpsPreflight
5
+ ROOT = File.expand_path('../../', __FILE__)
6
+
7
+ require "ops_preflight/version"
8
+
9
+ autoload :ExitCode, 'ops_preflight/exit_code.rb'
10
+ autoload :Server, 'ops_preflight/server.rb'
11
+ autoload :Client, 'ops_preflight/client.rb'
12
+ autoload :Config, 'ops_preflight/config.rb'
13
+
14
+ def self.root_path(*a)
15
+ File.join ROOT, *a
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ops_preflight/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "ops_preflight"
8
+ gem.version = OpsPreflight::VERSION
9
+ gem.authors = ["Ryan Schlesinger"]
10
+ gem.email = ["ryan@instanceinc.com"]
11
+ gem.description = %q{Preflight and deploy applications}
12
+ gem.summary = %q{Preflight by packaging the bundle, precompiled assets, or anything else needed to deploy an application.}
13
+ gem.homepage = "https://github.com/aceofsales/ops_preflight"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_runtime_dependency('thor', '~> 0.17.0')
21
+ gem.add_runtime_dependency('fog', '~> 1.10.0')
22
+ gem.add_runtime_dependency('mina', '~> 0.2.1')
23
+ gem.add_runtime_dependency('aws-sdk', '~> 1.8.5')
24
+ gem.add_runtime_dependency('multi_json', '~> 1.0')
25
+ end
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ops_preflight
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.pre
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Ryan Schlesinger
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.17.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.17.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: fog
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.10.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.10.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: mina
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.2.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.1
62
+ - !ruby/object:Gem::Dependency
63
+ name: aws-sdk
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.5
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.5
78
+ - !ruby/object:Gem::Dependency
79
+ name: multi_json
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '1.0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '1.0'
94
+ description: Preflight and deploy applications
95
+ email:
96
+ - ryan@instanceinc.com
97
+ executables:
98
+ - preflight
99
+ - preflight-server
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - .gitignore
104
+ - Gemfile
105
+ - LICENSE.txt
106
+ - README.md
107
+ - Rakefile
108
+ - bin/preflight
109
+ - bin/preflight-server
110
+ - data/deploy.rb
111
+ - data/preflight.yml
112
+ - lib/ops_preflight.rb
113
+ - lib/ops_preflight/client.rb
114
+ - lib/ops_preflight/config.rb
115
+ - lib/ops_preflight/exit_code.rb
116
+ - lib/ops_preflight/ops_works/base.rb
117
+ - lib/ops_preflight/ops_works/deploy.rb
118
+ - lib/ops_preflight/ops_works/fetch_environment.rb
119
+ - lib/ops_preflight/s3_transfer.rb
120
+ - lib/ops_preflight/server.rb
121
+ - lib/ops_preflight/tasks.rb
122
+ - lib/ops_preflight/version.rb
123
+ - ops_preflight.gemspec
124
+ homepage: https://github.com/aceofsales/ops_preflight
125
+ licenses: []
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ segments:
137
+ - 0
138
+ hash: -1041487492741843345
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ! '>'
143
+ - !ruby/object:Gem::Version
144
+ version: 1.3.1
145
+ requirements: []
146
+ rubyforge_project:
147
+ rubygems_version: 1.8.25
148
+ signing_key:
149
+ specification_version: 3
150
+ summary: Preflight by packaging the bundle, precompiled assets, or anything else needed
151
+ to deploy an application.
152
+ test_files: []