rake-common_tasks 0.1.0
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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +2 -0
- data/README.md +68 -0
- data/Rakefile +9 -0
- data/lib/rake/common_tasks.rb +57 -0
- data/lib/rake/common_tasks/db.rake +20 -0
- data/lib/rake/common_tasks/default.rake +6 -0
- data/lib/rake/common_tasks/dotenv.rake +11 -0
- data/lib/rake/common_tasks/memcache.rake +11 -0
- data/lib/rake/common_tasks/redis.rake +21 -0
- data/lib/rake/common_tasks/s3deploy.rake +64 -0
- data/lib/rake/common_tasks/server.rake +6 -0
- data/lib/rake/common_tasks/test.rake +20 -0
- data/lib/rake/common_tasks/tmp.rake +8 -0
- data/lib/rake/common_tasks/version.rb +5 -0
- data/rake-common_tasks.gemspec +28 -0
- metadata +158 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1f306b14e9a8760a2d79bae45b8418bb29f5f131
|
4
|
+
data.tar.gz: 6c1d3737d29bc523881bde11420aded72e756e55
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: effc0e85c2c97d1444c7d415bdd7d1e633a8060232df5b7e470da23ca24dcfe7baa4c94e4e1bbbdd802d12fb344e5214d9733f4ccaad54b7934d4699fc9f6fb9
|
7
|
+
data.tar.gz: 25ff87ed4651cf492e0e66b3613ef8b78f5c1cff974b4ef365dcf538080deb790c0fd79274c42b9c387834b591318010ab7ccd6731dd89fe69ed8367f3bb5b36
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Rake::CommonTasks
|
2
|
+
|
3
|
+
Common Rake Tasks that are suitable for multiple projects.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'rake-common_tasks', require: 'rake/common_tasks'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
Sample Rakefile:
|
18
|
+
|
19
|
+
````rake
|
20
|
+
#!/usr/bin/env rake
|
21
|
+
|
22
|
+
# environment
|
23
|
+
ENV['RACK_ENV'] ||= 'development'
|
24
|
+
|
25
|
+
# load path
|
26
|
+
lib_path = File.expand_path('../lib', __FILE__)
|
27
|
+
($:.unshift lib_path) unless ($:.include? lib_path)
|
28
|
+
|
29
|
+
require 'rake'
|
30
|
+
require 'rake/common_taks'
|
31
|
+
|
32
|
+
# mixin helper methods used when writing rake tasks,
|
33
|
+
# e.g. system_try_and_fail, is_local?, progress_bar...
|
34
|
+
include Rake::CommonTasks::Helpers
|
35
|
+
|
36
|
+
# import all common rake tasks -- not recommended
|
37
|
+
CommonRakeTasks.import!
|
38
|
+
|
39
|
+
# import a specific set of rake tasks
|
40
|
+
CommonRakeTasks.import! 'default.rake', 'dotenv.rake' # etc...
|
41
|
+
````
|
42
|
+
|
43
|
+
## Available Rake Tasks
|
44
|
+
|
45
|
+
````bash
|
46
|
+
# db.rake
|
47
|
+
rake db:test:create # Create test env database *(postgres only)
|
48
|
+
rake db:test:drop # Drop test env database *(postgres only)
|
49
|
+
rake db:test:reset # Drop and Create test env database *(postgres only)
|
50
|
+
|
51
|
+
# dotenv.rake
|
52
|
+
rake dotenv # Load environment settings from .env
|
53
|
+
|
54
|
+
# default.rake
|
55
|
+
rake # Run tests
|
56
|
+
rake test # Run tests
|
57
|
+
|
58
|
+
# s3deploy.rake
|
59
|
+
rake s3:deploy # deploy to S3 (Staging)
|
60
|
+
rake s3:deploy:staging # deploy to S3 (Staging)
|
61
|
+
rake s3:deploy:production # deploy to S3 (production)
|
62
|
+
|
63
|
+
# server.rake
|
64
|
+
rake server # Start a local server with `./public' as it's root
|
65
|
+
|
66
|
+
# tmp.rake
|
67
|
+
rake tmp:clear # Clears the project's tmp directory
|
68
|
+
````
|
data/Rakefile
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'progress_bar'
|
2
|
+
require "rake/common_tasks/version"
|
3
|
+
|
4
|
+
module Rake
|
5
|
+
module CommonTasks
|
6
|
+
def self.import!(*files)
|
7
|
+
ENV['RAKE_ROOT'] = Dir.pwd
|
8
|
+
tasks = Dir.glob(File.expand_path('../common_tasks/**/*.rake', __FILE__))
|
9
|
+
tasks.each do |task|
|
10
|
+
if files.empty?
|
11
|
+
::Rake.load_rakefile task
|
12
|
+
end
|
13
|
+
|
14
|
+
if !files.empty? && files.include?(Pathname.new(task).basename.to_s)
|
15
|
+
::Rake.load_rakefile task
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Helpers
|
21
|
+
def system_try_and_fail(command)
|
22
|
+
sh command do |ok, res|
|
23
|
+
if !ok
|
24
|
+
yield if block_given?
|
25
|
+
raise "COMMAND FAILED: Error running #{command} (Pwd: #{Dir.pwd}, exit status:#{res.exitstatus}). Aborting"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def check_env!
|
31
|
+
raise "RACK_ENV unknown" if ENV['RACK_ENV'].nil? || ENV['RACK_ENV'] == ''
|
32
|
+
end
|
33
|
+
|
34
|
+
def is_local?
|
35
|
+
check_env!
|
36
|
+
%w(development test).include? ENV['RACK_ENV']
|
37
|
+
end
|
38
|
+
|
39
|
+
def is_production?
|
40
|
+
check_env!
|
41
|
+
ENV['RACK_ENV'] == 'production'
|
42
|
+
end
|
43
|
+
|
44
|
+
def progress_bar(total = 0)
|
45
|
+
::ProgressBar.new(total, :bar, :counter, :rate)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_db_name
|
49
|
+
if ENV['DATABASE_NAME'].nil? or ENV['DATABASE_NAME'] == ''
|
50
|
+
raise "ENV['DATABASE_NAME'] is nil or blank!"
|
51
|
+
end
|
52
|
+
|
53
|
+
"#{ENV['DATABASE_NAME']}_test"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :test do
|
3
|
+
desc "Create test database *(postgres only)"
|
4
|
+
task :create => :environment do
|
5
|
+
return unless is_local?
|
6
|
+
puts "Creating #{db_name} database..."
|
7
|
+
system_try_and_fail "createdb #{db_name}"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Drop test database *(postgres only)"
|
11
|
+
task :drop => :environment do
|
12
|
+
return unless is_local?
|
13
|
+
puts "Droppping #{db_name} database..."
|
14
|
+
system_try_and_fail "dropdb #{db_name}"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Prepare test env database *(postgres only)"
|
18
|
+
task :prepare => [:environment, :create, :drop]
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
task :dotenv do
|
2
|
+
env_file_suffix = "-#{ENV['RACK_ENV']}" unless is_local?
|
3
|
+
env_file = File.join(ENV['RAKE_ROOT'],".env#{env_file_suffix}")
|
4
|
+
if File.exist? env_file
|
5
|
+
puts "Loading environment from: #{env_file}"
|
6
|
+
require 'dotenv'
|
7
|
+
Dotenv.load env_file
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
task :environment => :dotenv
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'dalli'
|
2
|
+
|
3
|
+
namespace :memcache do
|
4
|
+
desc "Flush all data in memcached"
|
5
|
+
task :flush_all => :environment do
|
6
|
+
puts "Flushing All data stored in memcached..."
|
7
|
+
Dalli::Client.new.flush_all
|
8
|
+
puts "Done!"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
task :'memcached:flush_all' => [:'memcache:flush_all']
|
@@ -0,0 +1,21 @@
|
|
1
|
+
namespace :redis do
|
2
|
+
desc "Flush data from Redis db"
|
3
|
+
task :flushdb => :environment do
|
4
|
+
db = URI.parse(ENV['REDIS_URL']).try(:path).to_s[1..-1].to_i
|
5
|
+
puts "Flushing data from Redis db: #{db}..."
|
6
|
+
Redis.new.flushdb
|
7
|
+
puts "Done!"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Flush all data from Redis"
|
11
|
+
task :flushall => :environment do
|
12
|
+
server = "localhost:6379/0"
|
13
|
+
if ENV['REDIS_URL']
|
14
|
+
uri = URI.parse(ENV['REDIS_URL'])
|
15
|
+
server = "#{uri.host}:#{uri.port}#{uri.path}"
|
16
|
+
end
|
17
|
+
puts "Flushing all data from #{server}..."
|
18
|
+
Redis.new.flushall
|
19
|
+
puts "Done!"
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
require 'mime/types'
|
3
|
+
|
4
|
+
namespace :s3 do
|
5
|
+
namespace :deploy do
|
6
|
+
task :staging => :environment do
|
7
|
+
if ENV.key?('STAGING_BUCKET')
|
8
|
+
deploy_public_to_s3(ENV['STAGING_BUCKET'])
|
9
|
+
else
|
10
|
+
raise "Set the STAGING_BUCKET environment variable to the name of the bucket you want to deploy to."
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Deploy to S3 (production)"
|
15
|
+
task :production => :dotenv do
|
16
|
+
if ENV.key?('PRODUCTION_BUCKET')
|
17
|
+
deploy_public_to_s3(ENV['PRODUCTION_BUCKET'])
|
18
|
+
else
|
19
|
+
raise "Set the PRODUCTION_BUCKET environment variable to the name of the bucket you want to deploy to."
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
desc "Deploy to S3 (staging)"
|
24
|
+
task :deploy => :'deploy:staging'
|
25
|
+
|
26
|
+
def aws_configured?
|
27
|
+
!AWS.config.access_key_id.nil? && !AWS.config.secret_access_key.nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
def has_aws_env_keys?
|
31
|
+
ENV.key?('AWS_ACCESS_KEY_ID') && ENV.key?('AWS_SECRET_ACCESS_KEY')
|
32
|
+
end
|
33
|
+
|
34
|
+
def check_aws_config!
|
35
|
+
if !aws_configured?
|
36
|
+
aws_credentials = AWS::Core::CredentialProviders::SharedCredentialFileProvider.new.get_credentials
|
37
|
+
end
|
38
|
+
|
39
|
+
if aws_credentials.empty? && has_aws_env_keys?
|
40
|
+
aws_credentials.merge!(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
|
41
|
+
end
|
42
|
+
|
43
|
+
AWS.config(aws_credentials)
|
44
|
+
|
45
|
+
unless aws_configured?
|
46
|
+
raise "Deploy Failed: aws-sdk is not configured. More Info: http://docs.aws.amazon.com/AWSSdkDocsRuby/latest/DeveloperGuide/prog-basics-creds.html"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def deploy_public_to_s3(bucket)
|
51
|
+
check_aws_config!
|
52
|
+
Dir.glob("public/**/*") do |file|
|
53
|
+
unless file == '.' or file == '..'
|
54
|
+
unless File.directory?(file)
|
55
|
+
filename = file.to_s.gsub('public/', '')
|
56
|
+
content_type = MIME::Types.type_for(filename).first
|
57
|
+
print " - Writing #{filename} (#{content_type}) to S3"
|
58
|
+
AWS::S3.new.buckets[bucket].objects[filename].write(open(file), acl: :public_read, content_type: content_type)
|
59
|
+
puts "...Done!"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :test do
|
3
|
+
desc "Create test env database *(postgres only)"
|
4
|
+
task :create => :environment do
|
5
|
+
return unless is_local?
|
6
|
+
puts "Creating #{db_name} database..."
|
7
|
+
system_try_and_fail "createdb #{db_name}"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Drop test env database *(postgres only)"
|
11
|
+
task :drop => :environment do
|
12
|
+
return unless is_local?
|
13
|
+
puts "Droppping #{db_name} database..."
|
14
|
+
system_try_and_fail "dropdb #{db_name}"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Drop and Create test env database *(postgres only)"
|
18
|
+
task :reset => [:environment, :create, :drop]
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$:.unshift(lib) unless $:.include?(lib)
|
4
|
+
require 'rake/common_tasks/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = 'rake-common_tasks'
|
8
|
+
gem.version = Rake::CommonTasks::VERSION
|
9
|
+
gem.authors = ['Eric Marden']
|
10
|
+
gem.email = ['eric@xentek.net']
|
11
|
+
gem.description = %q{Common Rake Tasks}
|
12
|
+
gem.summary = %q{Common Rake Tasks, serving a variety of needs. Modular! Include only what you want and nothing that you don't.}
|
13
|
+
gem.homepage = 'https://github.com/xentek/rake-common_tasks'
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ['lib']
|
19
|
+
|
20
|
+
gem.add_dependency 'rake'
|
21
|
+
gem.add_dependency 'dotenv'
|
22
|
+
gem.add_dependency 'progress_bar'
|
23
|
+
gem.add_dependency 'httparty'
|
24
|
+
gem.add_dependency 'mime-types'
|
25
|
+
gem.add_dependency 'aws-sdk'
|
26
|
+
|
27
|
+
gem.add_development_dependency 'bundler', '~> 1.5'
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rake-common_tasks
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eric Marden
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dotenv
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: progress_bar
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: httparty
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mime-types
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: aws-sdk
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: bundler
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.5'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.5'
|
111
|
+
description: Common Rake Tasks
|
112
|
+
email:
|
113
|
+
- eric@xentek.net
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- Gemfile
|
120
|
+
- README.md
|
121
|
+
- Rakefile
|
122
|
+
- lib/rake/common_tasks.rb
|
123
|
+
- lib/rake/common_tasks/db.rake
|
124
|
+
- lib/rake/common_tasks/default.rake
|
125
|
+
- lib/rake/common_tasks/dotenv.rake
|
126
|
+
- lib/rake/common_tasks/memcache.rake
|
127
|
+
- lib/rake/common_tasks/redis.rake
|
128
|
+
- lib/rake/common_tasks/s3deploy.rake
|
129
|
+
- lib/rake/common_tasks/server.rake
|
130
|
+
- lib/rake/common_tasks/test.rake
|
131
|
+
- lib/rake/common_tasks/tmp.rake
|
132
|
+
- lib/rake/common_tasks/version.rb
|
133
|
+
- rake-common_tasks.gemspec
|
134
|
+
homepage: https://github.com/xentek/rake-common_tasks
|
135
|
+
licenses: []
|
136
|
+
metadata: {}
|
137
|
+
post_install_message:
|
138
|
+
rdoc_options: []
|
139
|
+
require_paths:
|
140
|
+
- lib
|
141
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
requirements: []
|
152
|
+
rubyforge_project:
|
153
|
+
rubygems_version: 2.2.2
|
154
|
+
signing_key:
|
155
|
+
specification_version: 4
|
156
|
+
summary: Common Rake Tasks, serving a variety of needs. Modular! Include only what
|
157
|
+
you want and nothing that you don't.
|
158
|
+
test_files: []
|