travis-custom-deploy 0.0.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 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