fulmar 1.3.0 → 1.4.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 +4 -4
- data/lib/fulmar/domain/service/application_service.rb +2 -2
- data/lib/fulmar/domain/service/configuration_service.rb +4 -0
- data/lib/fulmar/domain/service/dependency_service.rb +57 -0
- data/lib/fulmar/domain/task/base.rake +5 -0
- data/lib/fulmar/domain/task/vhost.rake +55 -0
- data/lib/fulmar/infrastructure/service/composer_service.rb +4 -1
- data/lib/fulmar/infrastructure/service/transfer/base.rb +0 -6
- data/lib/fulmar/infrastructure/service/transfer/rsync.rb +2 -2
- data/lib/fulmar/infrastructure/service/transfer/rsync_with_versions.rb +2 -2
- data/lib/fulmar/service/helper/common_helper.rb +6 -6
- data/lib/fulmar/service/helper/dependencies_helper.rb +16 -0
- data/lib/fulmar/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 868b4a631f7d6353d760308daccd0457903b21fc
|
4
|
+
data.tar.gz: 5059427443e582732688fe6d0c722d50bd395058
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb09328c8bc4ba396c967329787a21a8d0fb7cd5fd8080636c6d105b3edb4902d7358a597c0e5e98d058c0288011c084db6c4b698fcbeb726305954790fbb00f
|
7
|
+
data.tar.gz: caa5e4392cc720b383e14029e378b01b808181e07e5fe09d5af0cf98d250538f205508ebc72c178d81e91696bdb0637ebc79e87f1b6704287f093827e4dc5749
|
@@ -30,12 +30,12 @@ module Fulmar
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def wrap_environment
|
33
|
-
proc do
|
33
|
+
proc do |t, args|
|
34
34
|
configuration = Fulmar::Domain::Service::ConfigurationService.instance
|
35
35
|
environment = configuration.environment
|
36
36
|
target = configuration.target
|
37
37
|
|
38
|
-
yield if block_given?
|
38
|
+
yield(t, args) if block_given?
|
39
39
|
|
40
40
|
configuration.environment = environment unless environment.nil?
|
41
41
|
configuration.target = target unless target.nil?
|
@@ -67,6 +67,10 @@ module Fulmar
|
|
67
67
|
@target = target ? target.to_sym : nil
|
68
68
|
end
|
69
69
|
|
70
|
+
def ssh_user_and_host
|
71
|
+
self[:user].blank? ? self[:hostname] : self[:user] + '@' + self[:hostname]
|
72
|
+
end
|
73
|
+
|
70
74
|
def dependencies(env = nil)
|
71
75
|
env.nil? ? @config[:dependencies][:all] : @config[:dependencies][:all].deep_merge(@config[:dependencies][env])
|
72
76
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rugged'
|
2
|
+
|
3
|
+
module Fulmar
|
4
|
+
module Domain
|
5
|
+
module Service
|
6
|
+
# Manages dependencies to subrepositories
|
7
|
+
class DependencyService
|
8
|
+
def initialize(config)
|
9
|
+
@config = config
|
10
|
+
end
|
11
|
+
|
12
|
+
def setup(env = @config.environment)
|
13
|
+
shell = Fulmar::Infrastructure::Service::ShellService.new(@config[:local_path])
|
14
|
+
@config.dependencies(env).each_pair do |_key, data|
|
15
|
+
next unless data[:type].blank? || data[:type] == 'git'
|
16
|
+
shell.run "git clone #{data[:source]} #{data[:path]}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def update(env = @config.environment)
|
21
|
+
@config.dependencies(env).each_pair do |_key, data|
|
22
|
+
next unless data[:type].blank? || data[:type] == 'git'
|
23
|
+
git = Rugged::Repository.new(data[:path])
|
24
|
+
|
25
|
+
# Switch to the configured branch/tag/commit
|
26
|
+
if git.branches.select { |b| b.name.split('/').last == data[:ref] }.any?
|
27
|
+
checkout_branch(git, data[:ref])
|
28
|
+
elsif git.tags.map(&:name).include?(data[:ref])
|
29
|
+
git.checkout('refs/tags/'+data[:ref])
|
30
|
+
elsif data[:ref].match(/^[a-zA-Z0-9]{40}$/) && git.exists?(data[:ref])
|
31
|
+
git.checkout(data[:ref])
|
32
|
+
else
|
33
|
+
fail "Cannot find ref #{data[:ref]} in repo #{data[:path]}"
|
34
|
+
end
|
35
|
+
|
36
|
+
# Pull
|
37
|
+
shell = Fulmar::Infrastructure::Service::ShellService.new @config[:local_path]+'/'+data[:path]
|
38
|
+
unless shell.run 'git pull --rebase -q'
|
39
|
+
fail "Cannot update repository #{data[:path]}. Please update manually."
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def checkout_branch(git, branch)
|
47
|
+
if git.branches.collect(&:name).include? branch
|
48
|
+
git.checkout(branch)
|
49
|
+
else
|
50
|
+
new_branch = git.branches.create(branch.split('/').last, branch)
|
51
|
+
git.checkout(new_branch)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -9,3 +9,8 @@ if configuration.feature? :flow
|
|
9
9
|
require 'fulmar/service/helper/flow_helper'
|
10
10
|
include Fulmar::Domain::Service::Helper::FlowHelper
|
11
11
|
end
|
12
|
+
|
13
|
+
if full_configuration[:dependencies].any?
|
14
|
+
require 'fulmar/service/helper/dependencies_helper'
|
15
|
+
include Fulmar::Domain::Service::Helper::DependenciesHelper
|
16
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
if configuration.any? { |data| data[:type] == 'vhost' }
|
2
|
+
namespace :vhost do
|
3
|
+
configuration.each do |env, target, data|
|
4
|
+
next if data[:type] != 'vhost'
|
5
|
+
|
6
|
+
desc "Create a vhost for #{env}"
|
7
|
+
task :create do
|
8
|
+
configuration.environment = env
|
9
|
+
configuration.target = target
|
10
|
+
branch = git.current_branch
|
11
|
+
match = branch.match(/f\d+_([a-zA-Z0-9]+)/)
|
12
|
+
unless match
|
13
|
+
STDERR.puts "Cannot deploy branch '#{branch}'"
|
14
|
+
return
|
15
|
+
end
|
16
|
+
configuration[:branch_name] = branch
|
17
|
+
configuration[:vhost_name] = match[1]
|
18
|
+
render_templates
|
19
|
+
upload configuration[:vhost_template]
|
20
|
+
sites_enabled_dir = configuration[:sites_enabled_dir] || '../sites_enabled'
|
21
|
+
remote_shell.run [
|
22
|
+
"ln -s #{configuration[:vhost_template]} #{sites_enabled_dir}/#{configuration[:vhost_template]}",
|
23
|
+
"service #{configuration[:webserver] || 'nginx'} reload"
|
24
|
+
]
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "List existing vhosts for #{env}"
|
28
|
+
task :list do
|
29
|
+
configuration.environment = env
|
30
|
+
configuration.target = target
|
31
|
+
|
32
|
+
remote_shell.run 'ls -1'
|
33
|
+
remote_shell.last_output.each do |line|
|
34
|
+
match = line.match(/auto_vhost_(.*)\.conf/)
|
35
|
+
if match
|
36
|
+
name = match[1]
|
37
|
+
puts "- #{name}, delete via 'fulmar vhost:delete[#{name}]'"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "Delete a vhost for #{env}"
|
43
|
+
task :delete, [:name] do |_t, argv|
|
44
|
+
configuration.environment = env
|
45
|
+
configuration.target = target
|
46
|
+
|
47
|
+
remote_shell.run [
|
48
|
+
"rm auto_vhost_#{argv[:name]}.conf",
|
49
|
+
"service #{configuration[:webserver] || 'nginx'} reload"
|
50
|
+
]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -3,12 +3,15 @@ module Fulmar
|
|
3
3
|
module Service
|
4
4
|
# Provides access to composer
|
5
5
|
class ComposerService
|
6
|
+
DEFAULT_PARAMS = ['--no-dev']
|
7
|
+
|
6
8
|
def initialize(shell, custom_path = '/usr/bin/env composer')
|
7
9
|
@local_shell = shell
|
10
|
+
@local_shell.quiet = true
|
8
11
|
@path = custom_path
|
9
12
|
end
|
10
13
|
|
11
|
-
def execute(command, arguments =
|
14
|
+
def execute(command, arguments = DEFAULT_PARAMS)
|
12
15
|
@local_shell.run "#{@path} #{command} #{arguments.join(' ')}"
|
13
16
|
end
|
14
17
|
end
|
@@ -45,12 +45,6 @@ module Fulmar
|
|
45
45
|
# Placeholder for consistent api, currently only implemented in rsync_with_versions
|
46
46
|
true
|
47
47
|
end
|
48
|
-
|
49
|
-
protected
|
50
|
-
|
51
|
-
def ssh_user_and_host
|
52
|
-
@config[:user].blank? ? @config[:hostname] : @config[:user] + '@' + @config[:hostname]
|
53
|
-
end
|
54
48
|
end
|
55
49
|
end
|
56
50
|
end
|
@@ -37,9 +37,9 @@ module Fulmar
|
|
37
37
|
def rsync_command
|
38
38
|
if @config[:rsync][:direction] == 'up'
|
39
39
|
from = @config[:local_path]
|
40
|
-
to = ssh_user_and_host + ':' + @config[:remote_path]
|
40
|
+
to = @config.ssh_user_and_host + ':' + @config[:remote_path]
|
41
41
|
else
|
42
|
-
from = ssh_user_and_host + ':' + @config[:remote_path]
|
42
|
+
from = @config.ssh_user_and_host + ':' + @config[:remote_path]
|
43
43
|
to = @config[:local_path]
|
44
44
|
end
|
45
45
|
|
@@ -45,7 +45,7 @@ module Fulmar
|
|
45
45
|
# Ensures all needed services are set up
|
46
46
|
def prepare
|
47
47
|
super
|
48
|
-
@remote_shell = Fulmar::Infrastructure::Service::ShellService.new @config[:remote_path], ssh_user_and_host
|
48
|
+
@remote_shell = Fulmar::Infrastructure::Service::ShellService.new @config[:remote_path], @config.ssh_user_and_host
|
49
49
|
@remote_shell.debug = @config[:debug]
|
50
50
|
end
|
51
51
|
|
@@ -143,7 +143,7 @@ module Fulmar
|
|
143
143
|
options << "--chmod='#{@config[:rsync][:chmod]}'" if @config[:rsync][:chmod]
|
144
144
|
options << '--delete' if @config[:rsync][:delete]
|
145
145
|
|
146
|
-
"rsync #{options.join(' ')} '#{@config[:local_path]}/' '#{ssh_user_and_host}:#{@config[:remote_path]}/#{@config[:temp_dir]}'"
|
146
|
+
"rsync #{options.join(' ')} '#{@config[:local_path]}/' '#{@config.ssh_user_and_host}:#{@config[:remote_path]}/#{@config[:temp_dir]}'"
|
147
147
|
end
|
148
148
|
|
149
149
|
# Copies the data from the sync temp to the actual release directory
|
@@ -17,7 +17,7 @@ module Fulmar
|
|
17
17
|
(@_config_service ||= Fulmar::Domain::Service::ConfigurationService.instance)
|
18
18
|
end
|
19
19
|
|
20
|
-
def composer(command, arguments =
|
20
|
+
def composer(command, arguments = Fulmar::Infrastructure::Service::ComposerService::DEFAULT_PARAMS)
|
21
21
|
(storage['composer'] ||= Fulmar::Infrastructure::Service::ComposerService.new(local_shell)).execute(command, arguments)
|
22
22
|
end
|
23
23
|
|
@@ -42,11 +42,11 @@ module Fulmar
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def upload(filename)
|
45
|
-
Fulmar::Infrastructure::Service::CopyService.upload(local_shell, filename, configuration
|
45
|
+
Fulmar::Infrastructure::Service::CopyService.upload(local_shell, filename, configuration.ssh_user_and_host, configuration[:remote_path])
|
46
46
|
end
|
47
47
|
|
48
48
|
def download(filename)
|
49
|
-
Fulmar::Infrastructure::Service::CopyService.download(local_shell, configuration
|
49
|
+
Fulmar::Infrastructure::Service::CopyService.download(local_shell, configuration.ssh_user_and_host, filename, configuration[:local_path])
|
50
50
|
end
|
51
51
|
|
52
52
|
def new_shell(path, hostname = 'localhost')
|
@@ -64,15 +64,15 @@ module Fulmar
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def info(text)
|
67
|
-
puts (ENV['TERM'] == 'xterm-256color' ? text.blue : "* Info: #{text}")
|
67
|
+
puts (ENV['TERM'] == 'xterm-256color' ? text.blue : "* Info: #{text}") if verbose
|
68
68
|
end
|
69
69
|
|
70
70
|
def warn(text)
|
71
|
-
puts (ENV['TERM'] == 'xterm-256color' ? text.magenta : "* Warning: #{text}")
|
71
|
+
STDERR.puts (ENV['TERM'] == 'xterm-256color' ? text.magenta : "* Warning: #{text}")
|
72
72
|
end
|
73
73
|
|
74
74
|
def error(text)
|
75
|
-
puts (ENV['TERM'] == 'xterm-256color' ? text.light_red : "* Error: #{text}")
|
75
|
+
STDERR.puts (ENV['TERM'] == 'xterm-256color' ? text.light_red : "* Error: #{text}")
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'fulmar/domain/service/dependency_service'
|
2
|
+
|
3
|
+
module Fulmar
|
4
|
+
module Domain
|
5
|
+
module Service
|
6
|
+
module Helper
|
7
|
+
# Provides access helper to the database service from within a task
|
8
|
+
module DependenciesHelper
|
9
|
+
def dependencies
|
10
|
+
storage['dependecies'] ||= Fulmar::Domain::Service::DependencyService.new configuration
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/fulmar/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fulmar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Siegl
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-04-
|
12
|
+
date: 2015-04-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -140,12 +140,14 @@ files:
|
|
140
140
|
- lib/fulmar/domain/service/application_service.rb
|
141
141
|
- lib/fulmar/domain/service/config_rendering_service.rb
|
142
142
|
- lib/fulmar/domain/service/configuration_service.rb
|
143
|
+
- lib/fulmar/domain/service/dependency_service.rb
|
143
144
|
- lib/fulmar/domain/service/file_sync_service.rb
|
144
145
|
- lib/fulmar/domain/service/initialization_service.rb
|
145
146
|
- lib/fulmar/domain/task/base.rake
|
146
147
|
- lib/fulmar/domain/task/database_sync.rake
|
147
148
|
- lib/fulmar/domain/task/environment.rake
|
148
149
|
- lib/fulmar/domain/task/versions.rake
|
150
|
+
- lib/fulmar/domain/task/vhost.rake
|
149
151
|
- lib/fulmar/infrastructure/service/composer_service.rb
|
150
152
|
- lib/fulmar/infrastructure/service/copy_service.rb
|
151
153
|
- lib/fulmar/infrastructure/service/database/database_service.rb
|
@@ -160,6 +162,7 @@ files:
|
|
160
162
|
- lib/fulmar/service/bootstrap_service.rb
|
161
163
|
- lib/fulmar/service/helper/common_helper.rb
|
162
164
|
- lib/fulmar/service/helper/database_helper.rb
|
165
|
+
- lib/fulmar/service/helper/dependencies_helper.rb
|
163
166
|
- lib/fulmar/service/helper/flow_helper.rb
|
164
167
|
- lib/fulmar/service/helper_service.rb
|
165
168
|
- lib/fulmar/service/logger_service.rb
|