pushwagner 0.0.1 → 0.0.1.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.
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  .idea
2
+ *.gem
data/README.md ADDED
@@ -0,0 +1 @@
1
+ [X] Release early, [ ] Release often
data/TODO.md ADDED
@@ -0,0 +1,33 @@
1
+ Static-file provision:
2
+
3
+ [ ] Support hooks, i.e.:
4
+ hooks:
5
+ before:
6
+ - cmd: mvn package
7
+ cwd: anyone-web
8
+ scope: local
9
+ after:
10
+ - cmd: unzip anyone-web.zip
11
+ cwd: /srv/www/gethubble.com
12
+ scope: remote
13
+ [ ] Add another wrapper for files:
14
+ static:
15
+ name:
16
+ files: # files to upload
17
+ - ...
18
+ hooks: # before and after deploy hooks
19
+ - ...
20
+ services: # assumes service with same name
21
+ - restart
22
+
23
+
24
+ Maven:
25
+ [ ] Support hooks (?)
26
+
27
+ Conventions:
28
+ - Maven artifacts are deployed to `$path_prefix/$artifact_id`
29
+ - Services assume name: `$artifact_id`
30
+
31
+ Static-files:
32
+ - Are uploaded to `$path_prefix/$name`
33
+ - Services assume name: `$name`
@@ -11,7 +11,7 @@ module Pushwagner
11
11
  opts = HashWithIndifferentAccess.new(opts)
12
12
 
13
13
  config_file = opts[:config_file] || File.join(File.dirname(__FILE__), '/config/deploy.yml')
14
- @version = opts[:version]
14
+ @version = opts[:version].to_s
15
15
  @current = opts[:environment] || 'development'
16
16
 
17
17
  @config = HashWithIndifferentAccess.new(YAML::load_file(config_file) || {})
@@ -22,7 +22,7 @@ module Pushwagner
22
22
  end
23
23
 
24
24
  def maven
25
- @maven = config['maven'] ? Maven.new(config['maven'], version) : {}
25
+ @maven = (config['maven'] ? Maven.new(config['maven'], version) : {})
26
26
  end
27
27
 
28
28
  def maven?
@@ -10,12 +10,12 @@ module Pushwagner
10
10
  end
11
11
 
12
12
  def set_version(version)
13
- @environment.version = version
13
+ @environment.version = version.to_s
14
14
  end
15
15
 
16
16
  def deploy(opts = {})
17
- Maven::Deployer.new(@environment, opts).deploy
18
- Static::Deployer.new(@environment, opts).deploy
17
+ Maven::Deployer.new(@environment, opts).deploy if @environment.maven?
18
+ Static::Deployer.new(@environment, opts).deploy if @environment.static?
19
19
  end
20
20
 
21
21
  def restart(opts = {})
@@ -9,16 +9,22 @@ module Pushwagner
9
9
 
10
10
  attr_reader :repository, :artifacts
11
11
  def initialize(maven, version)
12
- return if !maven or maven.empty?
12
+ required("Need maven configuration") unless maven
13
13
 
14
- @version = version || required("Deployment version for artifacts is required")
14
+ @version = version.to_s || required("Deployment version for artifacts is required")
15
15
  @repository = Repository.new(maven['repositories'])
16
- @artifacts = Hash[(maven['artifacts'] || {}).map { |k,h| [k, Artifact.new(h['artifact_id'], h['group_id'], h['version'] || version)] }]
16
+ @artifacts = Hash[(maven['artifacts'] || required("Requires at least one maven artifact")).map { |k,h| [k, Artifact.new(h['artifact_id'], h['group_id'], h['version'] || version)] }]
17
+
18
+ (artifacts && repository) || required("Could not initialize maven configuration")
17
19
  end
18
20
 
19
21
  def required(msg)
20
22
  raise StandardError.new(msg)
21
23
  end
24
+
25
+ def any?
26
+ artifacts && repository
27
+ end
22
28
  end
23
29
 
24
30
  class Maven::Artifact
@@ -63,7 +69,7 @@ module Pushwagner
63
69
 
64
70
  def absolute_url(artifact)
65
71
  if artifact.snapshot?
66
- doc = Nokogiri::XML(open(URI.parse("#{snapshots_url}/#{artifact.base_path}/maven-metadata.xml"), :http_basic_authentication => authentication(false)))
72
+ doc = Nokogiri::XML(open(URI.parse("#{snapshots_url}/#{artifact.base_path}/maven-metadata.xml"), :http_basic_authentication => authentication(true).split(":")))
67
73
  snapshot_version = doc.xpath("//metadata/versioning/snapshotVersions/snapshotVersion/value/text()").first.content
68
74
  return "#{snapshots_url}/#{artifact.base_path}/#{artifact.artifact_id}-#{snapshot_version}.jar"
69
75
  end
@@ -118,22 +124,21 @@ module Pushwagner
118
124
  def pull_artifact(name, artifact, host)
119
125
  Net::SSH.start(host, environment.user) do |ssh|
120
126
  puts "Pulling #{repository.absolute_url(artifact)} to #{host}:#{environment.path_prefix}/#{artifact.jar_name}..."
121
- ssh.exec("curl --user '#{repository.authentication(artifact.snapshot?)}' #{repository.absolute_url(artifact)} > #{environment.path_prefix}/#{artifact.jar_name}")
127
+ ssh.exec("curl --user '#{repository.authentication(artifact.snapshot?)}' #{repository.absolute_url(artifact)} > #{environment.path_prefix}/#{name}/#{artifact.jar_name}")
122
128
  end
123
129
  end
124
130
 
125
131
  def mark_previous(name, host)
126
- Net::SSH.start(host, user) do |ssh|
132
+ Net::SSH.start(host, environment.user) do |ssh|
127
133
  puts "Marking previous release on #{host}..."
128
- ssh.exec("cp -P #{environment.path_prefix}/#{name}.jar #{environment.path_prefix}/#{name}.previous.jar")
134
+ ssh.exec("cp -P #{environment.path_prefix}/#{name}/#{name}.jar #{environment.path_prefix}/#{name}/#{name}.previous.jar")
129
135
  end
130
136
  end
131
137
 
132
138
  def mark_new(name, artifact, host)
133
- Net::SSH.start(host, user) do |ssh|
134
- cwd = deploy_path(app_name)
139
+ Net::SSH.start(host, environment.user) do |ssh|
135
140
  puts "Marking #{artifact.jar_name} as current on #{host}..."
136
- ssh.exec("ln -sf #{environment.path_prefix}/#{artifact.jar_name} #{environment.path_prefix}/#{name}.jar")
141
+ ssh.exec("ln -sf #{environment.path_prefix}/#{name}/#{artifact.jar_name} #{environment.path_prefix}/#{name}/#{name}.jar")
137
142
  end
138
143
  end
139
144
 
@@ -1,3 +1,3 @@
1
1
  module Pushwagner
2
- VERSION = "0.0.1"
3
- end
2
+ VERSION = "0.0.1.1"
3
+ end
data/spec/maven_spec.rb CHANGED
@@ -9,6 +9,14 @@ describe Pushwagner::Maven do
9
9
  expect { Pushwagner::Maven.new(cfg, nil) }.to raise_error(StandardError, "Deployment version for artifacts is required")
10
10
  end
11
11
 
12
+ it "requires valid configuration" do
13
+ expect{Pushwagner::Maven.new(nil, "1baz")}.to raise_error(StandardError, "Need maven configuration")
14
+ end
15
+
16
+ it "requires valid repositories configuration" do
17
+ expect{Pushwagner::Maven.new({}, "1baz")}.to raise_error(StandardError, "repositories configuration required")
18
+ end
19
+
12
20
  it "trickles the version down to artifacts" do
13
21
  m = Pushwagner::Maven.new(cfg, "1foo")
14
22
  expect(m.artifacts["some-api"].version).to eq("1foo")
@@ -19,17 +27,10 @@ describe Pushwagner::Maven do
19
27
  expect(m.artifacts["some-notifier"].version).to eq("1.0final")
20
28
  end
21
29
 
22
- it "returns nil-object maven when not configured" do
23
- m = Pushwagner::Maven.new({}, "1baz")
24
- expect(m.artifacts).to be_nil
25
- expect(m).to_not be_nil
26
- end
27
-
28
30
  describe "initialization of artifacts" do
29
- it "handles no artifacts" do
31
+ it "requires at least one artifact" do
30
32
  cfg.delete('artifacts')
31
- m = Pushwagner::Maven.new(cfg, "1bar")
32
- expect(m.artifacts.size).to eq(0)
33
+ expect {Pushwagner::Maven.new(cfg, "1bar")}.to raise_error(StandardError, "Requires at least one maven artifact")
33
34
  end
34
35
  it "parses two artifacts" do
35
36
  m = Pushwagner::Maven.new(cfg, "1bar")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pushwagner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-21 00:00:00.000000000 Z
12
+ date: 2012-11-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-ssh
@@ -118,7 +118,9 @@ files:
118
118
  - .rvmrc
119
119
  - Gemfile
120
120
  - Gemfile.lock
121
+ - README.md
121
122
  - Rakefile
123
+ - TODO.md
122
124
  - bin/pw
123
125
  - lib/pushwagner.rb
124
126
  - lib/pushwagner/environment.rb