winter 0.0.2 → 0.0.3

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.
data/README.md CHANGED
@@ -83,13 +83,15 @@ All commands that need a `Winterfile` will use the default filename 'Winterfile'
83
83
  ```bash
84
84
  $ winter
85
85
  Commands:
86
- winter build [Winterfile] # Build a service from a Winterfile
87
- winter help [COMMAND] # Describe available commands or one specific...
88
- winter start [Winterfile] # Start the services in [Winterfile]
89
- winter status # Show status of available services
90
- winter stop [Winterfile] # Stop the services in [Winterfile]
91
- winter validate [Winterfile] # (optional) Check the configuration files
92
- winter version # Display version information.
86
+ winter build [Winterfile] # Build a service from a Win...
87
+ winter fetch <URL|GROUP> [artifact] [version] # Download the Winterfile an...
88
+ winter help [COMMAND] # Describe available command...
89
+ winter start [Winterfile] # Start the services in [Win...
90
+ winter status # Show status of available s...
91
+ winter stop [Winterfile] # Stop the services in [Wint...
92
+ winter validate [Winterfile] # (optional) Check the confi...
93
+ winter version # Display version information.
94
+
93
95
  ```
94
96
 
95
97
  #### Build
@@ -105,6 +107,17 @@ Build a service from a Winterfile
105
107
  [--debug=DEBUG] # Set log level to debug.
106
108
  [--local=LOCAL] # Resolve dependencies only from local repository
107
109
 
110
+ #### Fetch
111
+
112
+ Download the Winterfile and configuration from a URL.
113
+
114
+ Usage:
115
+ winter fetch <URL|GROUP> [artifact] [version]
116
+
117
+ Options:
118
+ [--debug=DEBUG] # Set log level to debug.
119
+ --repos, [--repositories=REPOSITORIES] # Comma separated list of repositories to search.
120
+
108
121
  #### Start
109
122
 
110
123
  Start the services in [Winterfile]
data/example/Winterfile CHANGED
@@ -1,6 +1,5 @@
1
1
  name "osgi_sample"
2
2
 
3
- repo "~/.m2/repository"
4
3
  repo "http://artifactory:8081/artifactory/"
5
4
 
6
5
  read "conf/default/wf_config.json"
data/lib/winter/cli.rb CHANGED
@@ -18,6 +18,7 @@ require 'winter/dsl'
18
18
  require 'winter/logger'
19
19
  require 'winter/version'
20
20
  require 'winter/service/build'
21
+ require 'winter/service/fetch'
21
22
  require 'winter/service/start'
22
23
  require 'winter/service/status'
23
24
  require 'winter/service/stop'
@@ -88,6 +89,24 @@ module Winter
88
89
  s.build( winterfile, options )
89
90
  end
90
91
 
92
+ desc "fetch <URL|GROUP> [artifact] [version]", "Download the Winterfile and configuration from a URL."
93
+ method_option :debug, :desc => "Set log level to debug."
94
+ method_option :repositories, :desc => "Comma separated list of repositories to search.", :default => '', :aliases => "--repos"
95
+ def fetch( url_or_group, artifact=nil, version='LATEST' )
96
+ $LOG.level = Logger::DEBUG if options[:debug]
97
+ s = Winter::Service.new
98
+ if( url_or_group =~ /^http:/ )
99
+ s.fetch_url url_or_group
100
+ #elsif( !url_or_group.nil? && !artifact.nil? && !version.nil? )
101
+ elsif( !artifact.nil? )
102
+ repos = options[:repositories] || ''
103
+ repos = repos.split(',')
104
+ s.fetch_GAV url_or_group, artifact, version, repos
105
+ else
106
+ $LOG.error "Invalid arguments. See `winter help fetch`."
107
+ end
108
+ end
109
+
91
110
  end #class
92
111
  end #module
93
112
 
@@ -39,7 +39,7 @@ module Winter
39
39
  end
40
40
 
41
41
  def getMaven
42
- dest_file = File.join(@destination,"#{@artifact}-#{@version}.#{@package}")
42
+ dest_file = File.join(@destination,outputFilename)
43
43
 
44
44
  c = "mvn org.apache.maven.plugins:maven-dependency-plugin:2.5:get "
45
45
  c << " -DremoteRepositories=#{@repositories.join(',').shellescape}"
@@ -56,15 +56,19 @@ module Winter
56
56
  c << " -q"
57
57
  end
58
58
 
59
+ $LOG.debug c
59
60
  result = system( c )
60
61
  if result == false
61
- $LOG.debug c
62
62
  $LOG.error("Failed to retrieve artifact: #{@group}:#{@artifact}:#{@version}:#{@package}")
63
63
  else
64
64
  $LOG.info "#{@group}:#{@artifact}:#{@version}:#{@package}"
65
65
  $LOG.debug dest_file
66
66
  end
67
+ return result
68
+ end
67
69
 
70
+ def outputFilename
71
+ "#{@artifact}-#{@version}.#{@package}"
68
72
  end
69
73
  end
70
74
 
data/lib/winter/dsl.rb CHANGED
@@ -40,6 +40,9 @@ module Winter
40
40
 
41
41
  def self.evaluate( winterfile, options={} )
42
42
  # Must create instance for instance_eval to have correct scope
43
+ if !File.exists?(winterfile)
44
+ raise "#{winterfile} not found."
45
+ end
43
46
  dsl = DSL.new options
44
47
  res = dsl.eval_winterfile winterfile
45
48
  validate(res)
@@ -95,8 +98,8 @@ module Winter
95
98
  dep.version = version
96
99
  dep.repositories = @repositories
97
100
  dep.package = options[:package] || 'jar'
98
- dep.offline = @options['offline'] || @options['offline'] == 'true'
99
- dep.transative = true
101
+ dep.offline = @options['local'] || @options['local'] == 'true'
102
+ dep.transative = false
100
103
  dep.destination = File.join(Dir.getwd,RUN_DIR,@name,LIBS_DIR)
101
104
  #dep.verbose = true
102
105
 
@@ -112,7 +115,7 @@ module Winter
112
115
  dep.version = version
113
116
  dep.repositories = @repositories
114
117
  dep.package = options[:package] || 'jar'
115
- dep.offline = @options['offline'] || @options['offline'] == 'true'
118
+ dep.offline = @options['local'] || @options['local'] == 'true'
116
119
  dep.transative = false
117
120
  dep.destination = File.join(Dir.getwd,RUN_DIR,@name,BUNDLES_DIR)
118
121
  #dep.verbose = true
@@ -22,7 +22,12 @@ module Winter
22
22
 
23
23
  def build(winterfile, options)
24
24
  #dsl = DSL.new options
25
- dsl = DSL.evaluate winterfile, options
25
+ begin
26
+ dsl = DSL.evaluate winterfile, options
27
+ rescue Exception=>e
28
+ $LOG.error e
29
+ exit
30
+ end
26
31
  dependencies = dsl[:dependencies]
27
32
  service = dsl[:config]['service']
28
33
  service_dir = File.join(WINTERFELL_DIR,RUN_DIR,service)
@@ -41,6 +46,14 @@ module Winter
41
46
  $LOG.debug "Deleted service directory #{service_dir}"
42
47
  end
43
48
  end
49
+
50
+ # re-evaluate the DSL to get new dependencies
51
+ begin
52
+ dsl = DSL.evaluate winterfile, options
53
+ rescue Exception=>e
54
+ $LOG.error e
55
+ exit
56
+ end
44
57
  end
45
58
  end
46
59
 
@@ -58,18 +71,32 @@ module Winter
58
71
  end while pid
59
72
  end
60
73
 
74
+ error = false
61
75
  dependencies.each do |dep|
62
76
  while (active_threads >= max_threads) do
63
- #puts "Total active threads: #{active_threads}"
77
+ $LOG.debug "Total active threads: #{active_threads}"
78
+ #$LOG.debug "threads: #{active_threads}"
64
79
  sleep 1
65
80
  end
66
- active_threads += 1
67
- fork do
68
- dep.getMaven
81
+ #File.join(@destination,"#{@artifact}-#{@version}.#{@package}")
82
+ if !File.exists?(File.join(dep.destination,dep.outputFilename))
83
+ active_threads += 1
84
+ fork do
85
+ result = dep.getMaven
86
+ error = true if result == false
87
+ end
88
+ else
89
+ $LOG.info "Already have #{dep.outputFilename}"
69
90
  end
70
91
  end
92
+
71
93
  #wait for stragglers
72
- sleep 1 while (active_threads > 0)
94
+ while (active_threads > 0) do
95
+ sleep 1
96
+ $LOG.debug "threads: #{active_threads}"
97
+ end
98
+
99
+ exit 99 if error
73
100
  end
74
101
  end
75
102
  end
@@ -0,0 +1,76 @@
1
+ # Copyright 2013 LiveOps, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may not
4
+ # use this file except in compliance with the License. You may obtain a copy
5
+ # 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, WITHOUT
11
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
+ # License for the specific language governing permissions and limitations
13
+ # under the License.
14
+
15
+ require 'winter/constants'
16
+ require 'winter/logger'
17
+ require 'winter/dependency'
18
+
19
+ require 'fileutils'
20
+
21
+ module Winter
22
+ class Service
23
+
24
+ def fetch_url( url )
25
+
26
+ begin
27
+ uri = URI.parse(url)
28
+ file = uri.path.split('/').last
29
+
30
+ content = Net::HTTP.get uri
31
+ File.open(file, 'w') do |file|
32
+ file.write content
33
+ end
34
+ rescue Exception=>e
35
+ $LOG.error "Could not fetch winter configuration from : #{url}"
36
+ $LOG.debug e
37
+ end
38
+
39
+ extract_jar file
40
+ end
41
+
42
+ def fetch_GAV(group, artifact, version, repos=[])
43
+ dep = Dependency.new
44
+ dep.artifact = artifact
45
+ dep.group = group
46
+ dep.version = version
47
+ dep.repositories = repos
48
+ #dep.package = options[:package] || 'jar'
49
+ #dep.offline = @options['offline'] || @options['offline'] == 'true'
50
+ dep.transative = true
51
+ dep.destination = File.join('.')
52
+
53
+ dep.getMaven
54
+
55
+ extract_jar "#{artifact}-#{version}.jar"
56
+ end
57
+
58
+ def extract_jar( file )
59
+ begin
60
+ system "jar -xf #{file}"
61
+ rescue Exception=>e
62
+ $LOG.error "#{file} is corrupt or invalid."
63
+ $LOG.debug e
64
+ end
65
+
66
+ cleanup file
67
+ end
68
+
69
+ def cleanup(file)
70
+ File.delete(file) if File.exists?(file)
71
+ end
72
+
73
+ private :cleanup, :extract_jar
74
+ end
75
+
76
+ end
@@ -43,7 +43,13 @@ module Winter
43
43
  end
44
44
 
45
45
  def start(winterfile, options)
46
- dsl = DSL.evaluate winterfile, options
46
+ begin
47
+ dsl = DSL.evaluate winterfile, options
48
+ rescue Exception=>e
49
+ $LOG.error e
50
+ exit
51
+ end
52
+
47
53
  dsl[:dependencies].each do |dep|
48
54
  $LOG.debug "dependency: #{dep.group}.#{dep.artifact}"
49
55
  end
@@ -20,9 +20,14 @@ module Winter
20
20
 
21
21
  # stop winterfell service
22
22
  def stop(winterfile='Winterfile', options={})
23
- tmp = DSL.evaluate winterfile, options
24
- config = tmp[:config]
25
- service = config['service']
23
+ begin
24
+ tmp = DSL.evaluate winterfile, options
25
+ config = tmp[:config]
26
+ service = config['service']
27
+ rescue Exception=>e
28
+ $LOG.error e
29
+ exit
30
+ end
26
31
 
27
32
  @service_dir = File.join(File.split(winterfile)[0],RUN_DIR,service)
28
33
  f_pid = File.join(@service_dir, "pid")
@@ -34,9 +39,11 @@ module Winter
34
39
  end
35
40
 
36
41
  begin
37
- Process.getpgid pid
38
- Process.kill("TERM", -Process.getpgid(pid))
39
- rescue
42
+ pgid = Process.getpgid pid
43
+ pgid *= -1 if !config['daemonize']
44
+ Process.kill("TERM", pgid)
45
+ rescue => e
46
+ $LOG.debug( e )
40
47
  $LOG.info( "Process #{pid} does not exist. Removing pid file." )
41
48
  end
42
49
 
@@ -19,7 +19,12 @@ module Winter
19
19
  class Service
20
20
 
21
21
  def validate( winterfile='Winterfile', options={} )
22
- DSL.evaluate winterfile, options
22
+ begin
23
+ DSL.evaluate winterfile, options
24
+ rescue Exception=>e
25
+ $LOG.error e
26
+ exit
27
+ end
23
28
  end
24
29
 
25
30
  end
@@ -13,5 +13,5 @@
13
13
  # under the License.
14
14
 
15
15
  module Winter
16
- VERSION = "0.0.2"
16
+ VERSION = "0.0.3"
17
17
  end
data/spec/cli_spec.rb CHANGED
@@ -17,6 +17,7 @@ SimpleCov.start
17
17
 
18
18
  require 'winter'
19
19
  require 'winter/cli'
20
+ require 'fileutils'
20
21
 
21
22
  describe Winter do
22
23
 
@@ -28,6 +29,17 @@ describe Winter do
28
29
  end
29
30
  end
30
31
 
32
+ describe "Fetch a jar" do
33
+ it "Fetches a jar from a URL" do
34
+ begin
35
+ lambda {
36
+ cli = Winter::CLI.new
37
+ cli.fetch 'com.liveops.sample', 'winter', '1.0.0-SNAPSHOT'
38
+ }.should_not raise_error
39
+ end
40
+ end
41
+ end
42
+
31
43
  describe "validate" do
32
44
  it "Reads a local pom file" do
33
45
  begin
@@ -54,7 +66,7 @@ describe Winter do
54
66
  it "Build a service from a manifest" do
55
67
  begin
56
68
  lambda {
57
- args = ["build", "spec/sample_data/Winterfile", "--clean"]
69
+ args = ["build", "spec/sample_data/Winterfile", "--clean", "--local"]
58
70
  cli = Winter::CLI.start( args )
59
71
  }.should_not raise_error
60
72
  Dir["run/default/libs"].include? "maven-dependency-plugin-2.5.jar"
@@ -65,12 +77,20 @@ describe Winter do
65
77
 
66
78
  describe 'start and stop a service : ' do
67
79
  context "start, status and stop " do
80
+ before "build service to get artifacts." do
81
+ lambda {
82
+ args = ["build", "spec/sample_data/Winterfile", "--clean", "--local"]
83
+ cli = Winter::CLI.start( args )
84
+ }.should_not raise_error
85
+ end
86
+
68
87
  it "Start, status and stop a service" do
69
88
  begin
70
89
  Dir.chdir(File.split("spec/sample_data/Winterfile")[0]) do
71
90
  lambda {
72
- Winter::CLI.start ["start" , "--debug"]
91
+ Winter::CLI.start ["start"]
73
92
  Winter::CLI.start ["status"]
93
+ #Winter::CLI.start ["stop"]
74
94
  }.should_not raise_error
75
95
  #lambda {
76
96
  # puts "TRYING STOP"
@@ -93,8 +113,10 @@ describe Winter do
93
113
 
94
114
  after do
95
115
  Dir.chdir(File.split("spec/sample_data/Winterfile")[0]) do
96
- Winter::CLI.start ["stop"]
116
+ #Winter::CLI.start ["stop"]
97
117
  end
118
+
119
+ FileUtils.rm_r( "spec/sample_data/run" )
98
120
  end
99
121
  end
100
122
 
data/winter.gemspec CHANGED
@@ -18,6 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features|coverage)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.required_ruby_version = '>= 1.9.1'
22
+
23
+ spec.add_runtime_dependency "thor", "~> 0.18.0"
21
24
  spec.add_development_dependency "bundler", "~> 1.3"
22
25
  spec.add_development_dependency "rake"
23
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-08 00:00:00.000000000 Z
12
+ date: 2014-01-30 00:00:00.000000000 Z
13
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.18.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.18.0
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: bundler
16
32
  requirement: !ruby/object:Gem::Requirement
@@ -74,6 +90,7 @@ files:
74
90
  - lib/winter/dsl.rb
75
91
  - lib/winter/logger.rb
76
92
  - lib/winter/service/build.rb
93
+ - lib/winter/service/fetch.rb
77
94
  - lib/winter/service/start.rb
78
95
  - lib/winter/service/status.rb
79
96
  - lib/winter/service/stop.rb
@@ -101,7 +118,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
118
  requirements:
102
119
  - - ! '>='
103
120
  - !ruby/object:Gem::Version
104
- version: '0'
121
+ version: 1.9.1
105
122
  required_rubygems_version: !ruby/object:Gem::Requirement
106
123
  none: false
107
124
  requirements: