travis-custom-deploy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: aec931f741eed8f077825a3befa8466e5e4976f6
4
+ data.tar.gz: 5532a7c0308adc31324907698f77c67ed1161236
5
+ SHA512:
6
+ metadata.gz: 520ad562cd94147e07f0f61e91f5b9ab6ea096624a4c5d04d024e32d3b5bc0fdc867b34012208fa4a426a4cbeccefac062e2dcc989a134e293f4eab62af025f0
7
+ data.tar.gz: 265c9efffe93c98e2bff80db8e516fa165a9a6a3464a71b4cb0959b449443e9a619eab071f216055404779d16496f4d1cb8af907f8ea4f96ef5887f9f84ae835
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ Gemfile.lock
2
+ *.swp
3
+ rdoc/
4
+ .bundle/
5
+ coverage
6
+ tags
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE.md ADDED
File without changes
data/README.md ADDED
@@ -0,0 +1,13 @@
1
+ travis-custom-deploy
2
+ ====================
3
+
4
+ Deploy your ruby based applications on your own server.
5
+
6
+ env:
7
+ global:
8
+ - "CUSTOM_DEPLOY_HOST=host"
9
+ - "CUSTOM_DEPLOY_USER=user"
10
+ - "CUSTOM_DEPLOY_PASSWORD=password"
11
+ - "CUSTOM_DEPLOY_REMOTEDIR=/path/to/"
12
+
13
+ travis-custom-deploy sftp site/
data/Rakefile ADDED
@@ -0,0 +1,58 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rdoc'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), *%w[lib]))
6
+
7
+ # Returns the name of the project
8
+ def name
9
+ @name ||= Dir['*.gemspec'].first.split('.').first
10
+ end
11
+
12
+ # Returns the version number of the project
13
+ def version
14
+ line = File.read("lib/#{name}/version.rb")[/^\s*VERSION\s*=\s*.*/]
15
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
16
+ end
17
+
18
+ if ENV["TRAVIS"] == "true"
19
+ require 'coveralls/rake/task'
20
+ Coveralls::RakeTask.new
21
+
22
+ task :default => [:test, :features, 'coveralls:push']
23
+ else
24
+ task :default => [:test, :features]
25
+ end
26
+
27
+ # << test
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ # << rdoc
36
+ require 'rdoc/task'
37
+ Rake::RDocTask.new do |rdoc|
38
+ rdoc.rdoc_dir = 'rdoc'
39
+ rdoc.title = "#{name} #{version}"
40
+ rdoc.rdoc_files.include('README*')
41
+ rdoc.rdoc_files.include('lib/**/*.rb')
42
+ end
43
+
44
+ # << features
45
+ begin
46
+ require 'cucumber/rake/task'
47
+ Cucumber::Rake::Task.new(:features) do |t|
48
+ t.profile = "travis"
49
+ end
50
+ Cucumber::Rake::Task.new(:"features:html", "Run Cucumber features and produce HTML output") do |t|
51
+ t.profile = "html_report"
52
+ end
53
+ rescue LoadError
54
+ desc 'Cucumber rake task not available'
55
+ task :features do
56
+ abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
57
+ end
58
+ end
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'travis-custom-deploy'
4
+
5
+ def usage
6
+ puts 'Usage: travis-custom-deploy TRANSFER_TYPE FILES...'
7
+ end
8
+
9
+ if ARGV.count < 2
10
+ usage
11
+ end
12
+
13
+ transfer = ARGV[0]
14
+ files = ARGV[1..-1]
15
+
16
+ host = ENV['DEPLOY_HOST']
17
+ username = ENV['DEPLOY_USERNAME']
18
+ password = ENV['DEPLOY_PASSWORD']
19
+ remotedir = ENV['DEPLOY_REMOTEDIR']
20
+
21
+ transfer_opts = {
22
+ :type => transfer,
23
+ :host => ENV['DEPLOY_HOST'],
24
+ :username => ENV['DEPLOY_USERNAME'],
25
+ :password => ENV['DEPLOY_PASSWORD'],
26
+ :remotedir => ENV['DEPLOY_REMOTEDIR']
27
+ }
28
+
29
+ d = TravisCustomDeploy::Deployment.new(transfer_opts, files)
30
+ d.deploy
data/cucumber.yml ADDED
@@ -0,0 +1,3 @@
1
+ default: --format pretty
2
+ travis: --format progress
3
+ html_report: --format progress --format html --out=features_report.html
data/features/.gitkeep ADDED
File without changes
@@ -0,0 +1,5 @@
1
+ require 'travis-custom-deploy/deployment'
2
+ require 'travis-custom-deploy/transfer'
3
+ require 'travis-custom-deploy/version'
4
+ require 'travis-custom-deploy/services'
5
+ require 'travis-custom-deploy/transfer/base'
@@ -0,0 +1,65 @@
1
+ module TravisCustomDeploy
2
+
3
+ class Deployment
4
+
5
+ attr_reader :remoteopts
6
+ attr_reader :files
7
+
8
+ def initialize(remoteopts, files)
9
+ check_remoteopts(remoteopts)
10
+ @remoteopts = remoteopts
11
+ @files = files
12
+ check_services(@files[0])
13
+ @transfer = get_transfer(remoteopts[:type])
14
+ end
15
+
16
+ # Actually start the deployment
17
+ def deploy
18
+ @transfer.transfer
19
+ end
20
+
21
+ # Check if the remoteopts are valid
22
+ #
23
+ # opts - the remote opts to check
24
+ def check_remoteopts(opts)
25
+ raise ArgumentError, 'host must not be nil' if opts[:host].nil?
26
+ raise ArgumentError, 'username must not be nil' if opts[:username].nil?
27
+ raise ArgumentError, 'password must not be nil' if opts[:password].nil?
28
+ raise ArgumentError, 'transfer type must not be nil' if opts[:type].nil?
29
+ end
30
+
31
+ # Create an instance for the transfer type and return it
32
+ #
33
+ # type - the transfer type like sftp, ftp, etc.
34
+ def get_transfer(type)
35
+ type = type[0].upcase + type[1..-1]
36
+ try_require(type)
37
+ Transfer.const_get(type).new(@remoteopts, @files)
38
+ end
39
+
40
+ # Try requiring a transfer type class
41
+ #
42
+ # name - the name of the transfer type like: sftp, stp
43
+ def try_require(name)
44
+ require("travis-custom-deploy/transfer/#{name.downcase}")
45
+ true
46
+ end
47
+ protected :try_require
48
+
49
+ # check if the first file matches service:<service-name>
50
+ # and try to determine the files based on the service.
51
+ #
52
+ # first_file the first file given
53
+ def check_services(first_file)
54
+ if first_file.start_with?('service:')
55
+ service = first_file.sub(/service:/, '')
56
+ SERVICES.each do |k,v|
57
+ if k == service
58
+ @files = v
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ end
65
+ end
@@ -0,0 +1,10 @@
1
+ module TravisCustomDeploy
2
+
3
+ SERVICES = {
4
+
5
+ 'jekyll' => [ '_site/' ]
6
+
7
+ # future services
8
+ }
9
+
10
+ end
@@ -0,0 +1,10 @@
1
+ module TravisCustomDeploy
2
+
3
+ module Transfer
4
+
5
+ autoload :Sftp, 'travis-custom-deploy/transfer/sftp'
6
+ autoload :Ftp, 'travis-custom-deploy/transfer/ftp'
7
+
8
+ end
9
+
10
+ end
@@ -0,0 +1,30 @@
1
+ module TravisCustomDeploy
2
+
3
+ module Transfer
4
+
5
+ class Base
6
+
7
+ attr_reader :remoteopts
8
+ attr_reader :files
9
+
10
+ def initialize(remoteopts, files)
11
+ @remoteopts = remoteopts
12
+ @files = files
13
+ prepare_remotedir
14
+ end
15
+
16
+ # The method which needs to be implemented by subclasses
17
+ # of transfer types.
18
+ def transfer
19
+ raise NotImplementedError
20
+ end
21
+
22
+ # Prepares the remote directory (remote trailing slash)
23
+ def prepare_remotedir
24
+ @remotedir = @remoteopts[:remotedir]
25
+ @remotedir = "" if @remotedir.nil?
26
+ @remotedir = @remotedir[0..-2] if @remotedir[-1] == "/"
27
+ end
28
+ end
29
+ end
30
+ end
File without changes
@@ -0,0 +1,25 @@
1
+ require 'net/sftp'
2
+
3
+ module TravisCustomDeploy
4
+
5
+ module Transfer
6
+
7
+ class Sftp < Base
8
+
9
+ def initialize(remoteopts, files)
10
+ super(remoteopts, files)
11
+ end
12
+
13
+ # transfers the given files via sftp
14
+ def transfer
15
+ Net::SFTP.start(@remoteopts[:host], @remoteopts[:username], :password => @remoteopts[:password]) do |sftp|
16
+ for e in @files
17
+ sftp.upload!(e, "#{@remotedir}/")
18
+ end
19
+ end
20
+ end
21
+
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ module TravisCustomDeploy
2
+
3
+ VERSION = "0.0.1"
4
+
5
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'coveralls'
2
+ Coveralls.wear_merged!
3
+
4
+ require 'test/unit'
5
+ require 'shoulda-context'
6
+ require 'rr'
7
+
8
+ require 'travis-custom-deploy'
9
+ include TravisCustomDeploy
@@ -0,0 +1,36 @@
1
+ require 'helper'
2
+
3
+ class TestDeployment < Test::Unit::TestCase
4
+
5
+ context "A deployment" do
6
+ setup do
7
+ @opts = {
8
+ :type => 'sftp',
9
+ :host => 'example.org',
10
+ :username => 'username',
11
+ :password => 'password',
12
+ :remotedir => '/public/'
13
+ }
14
+ end
15
+
16
+ context "with files" do
17
+ setup do
18
+ @deployment = Deployment.new(@opts, ['foo', 'bar', 'foo2'])
19
+ end
20
+
21
+ should "return file names" do
22
+ assert_equal ['foo', 'bar', 'foo2'], @deployment.files
23
+ end
24
+ end
25
+
26
+ context "with service identifier as first file name" do
27
+ setup do
28
+ @deployment = Deployment.new(@opts, ['service:jekyll'])
29
+ end
30
+
31
+ should "return file names of service" do
32
+ assert_equal ['_site/'], @deployment.files
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,31 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "travis-custom-deploy/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "travis-custom-deploy"
6
+ s.version = TravisCustomDeploy::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.licenses = ['MIT']
9
+ s.authors = ["Jens Nazarenus"]
10
+ s.email = ["me@jens-na.de"]
11
+ s.homepage = "https://github.com/jens-na/travis-custom-deploy"
12
+ s.summary = %q{Travis custom deployment gem}
13
+ s.description = %q{Deploy your ruby based applications to your own servers}
14
+
15
+ s.add_runtime_dependency('net-sftp', "~> 2.1.2")
16
+
17
+ s.add_development_dependency("rspec", "~>2.14.1")
18
+ s.add_development_dependency('rake', "~> 10.1.1")
19
+ s.add_development_dependency('cucumber', "~> 1.3.10")
20
+ s.add_development_dependency('redgreen', "~> 1.2.2")
21
+ s.add_development_dependency('shoulda-context', "~> 1.1.6")
22
+ s.add_development_dependency('rr', "~> 1.1.2")
23
+ s.add_development_dependency('coveralls', "~> 0.7.0")
24
+ s.add_development_dependency('pry')
25
+ s.add_development_dependency('pry-nav')
26
+
27
+ s.files = `git ls-files`.split("\n")
28
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
29
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
30
+ s.require_paths = ["lib"]
31
+ end
metadata ADDED
@@ -0,0 +1,207 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: travis-custom-deploy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jens Nazarenus
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: net-sftp
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.1.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.1.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.14.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.14.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 10.1.1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 10.1.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.10
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.3.10
69
+ - !ruby/object:Gem::Dependency
70
+ name: redgreen
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.2.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: shoulda-context
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.1.6
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.1.6
97
+ - !ruby/object:Gem::Dependency
98
+ name: rr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.1.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 1.1.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: coveralls
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.7.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.7.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry-nav
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Deploy your ruby based applications to your own servers
154
+ email:
155
+ - me@jens-na.de
156
+ executables:
157
+ - travis-custom-deploy
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - ".gitignore"
162
+ - Gemfile
163
+ - LICENSE.md
164
+ - README.md
165
+ - Rakefile
166
+ - bin/travis-custom-deploy
167
+ - cucumber.yml
168
+ - features/.gitkeep
169
+ - lib/travis-custom-deploy.rb
170
+ - lib/travis-custom-deploy/deployment.rb
171
+ - lib/travis-custom-deploy/services.rb
172
+ - lib/travis-custom-deploy/transfer.rb
173
+ - lib/travis-custom-deploy/transfer/base.rb
174
+ - lib/travis-custom-deploy/transfer/ftp.rb
175
+ - lib/travis-custom-deploy/transfer/sftp.rb
176
+ - lib/travis-custom-deploy/version.rb
177
+ - test/helper.rb
178
+ - test/test_deployment.rb
179
+ - travis-custom-deploy.gemspec
180
+ homepage: https://github.com/jens-na/travis-custom-deploy
181
+ licenses:
182
+ - MIT
183
+ metadata: {}
184
+ post_install_message:
185
+ rdoc_options: []
186
+ require_paths:
187
+ - lib
188
+ required_ruby_version: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ requirements: []
199
+ rubyforge_project:
200
+ rubygems_version: 2.2.0
201
+ signing_key:
202
+ specification_version: 4
203
+ summary: Travis custom deployment gem
204
+ test_files:
205
+ - features/.gitkeep
206
+ - test/helper.rb
207
+ - test/test_deployment.rb