revup 0.1.0 → 0.2.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.
@@ -0,0 +1,81 @@
1
+ # Revup
2
+
3
+ Revup is a simple deployment utility, for the Sauspiel client versioned_assets, packaged as a rake task.
4
+
5
+ You tell it which files to deploy and Revup will push it to the server and register the new revision of the versioned_asset.
6
+
7
+
8
+ ## Install
9
+
10
+ Revup is packaged as a Ruby gem and can be added to the Gemfile of the versioned_asset project:
11
+
12
+ ```Ruby
13
+ gem "revup", "~> 0.1.0"
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ To add a deploy task for a versioned_asset, add the following to its Rakefile:
19
+
20
+ ```Ruby
21
+ task :build do
22
+ # builds the versioned_asset
23
+ end
24
+
25
+ namespace :deploy do
26
+ require 'revup/deploy_task'
27
+
28
+ Revup::DeployTask.new(:desktop => build) do |deploy|
29
+ deploy.host = 'remote.server.hostname'
30
+ deploy.app_dir = '/path/to/app/root'
31
+ deploy.files_root = File.expand_path('../build', __FILE__)
32
+ deploy.versioned_asset_name = 'html5-desktop-game-client'
33
+ deploy.files = %w{
34
+ game_client_desktop.html
35
+ sauspiel.desktop-datauri.css
36
+ libs.js
37
+ sauspiel.desktop.js
38
+ }
39
+ deploy.remote_setup = 'export PATH=/foo/bin:$PATH APP=sauspiel; eval "$(rbenv init -)"'
40
+ end
41
+ end
42
+ ```
43
+
44
+ This will add a task called `deploy:desktop`. You could also call the task ‘html5-desktop-game-client’, in which case you don’t have to explicitely specify the `versioned_asset_name`.
45
+
46
+ The, optional, `remote_setup` setting is a string that will be prepended to each command performed on the remote host.
47
+
48
+ If you have multiple deploy tasks it can be handy to define shared settings on the class. Eg:
49
+
50
+ ```Ruby
51
+ namespace :deploy do
52
+ require 'revup/deploy_task'
53
+
54
+ Revup::DeployTask.host = 'remote.server.hostname'
55
+ Revup::DeployTask.remote_setup = 'export PATH=/foo/bin:$PATH APP=sauspiel; eval "$(rbenv init -)"'
56
+ Revup::DeployTask.app_dir = '/path/to/app/root'
57
+ Revup::DeployTask.files_root = File.expand_path('../build', __FILE__)
58
+
59
+ Revup::DeployTask.new(:desktop => build) do |deploy|
60
+ deploy.versioned_asset_name = 'html5-desktop-game-client'
61
+ deploy.files = %w{
62
+ game_client_desktop.html
63
+ sauspiel.desktop-datauri.css
64
+ libs.js
65
+ sauspiel.desktop.js
66
+ }
67
+ end
68
+ end
69
+ ```
70
+
71
+ ## Register versioned_asset with Rails app
72
+
73
+ Before you can actually deploy a new revision of a versioned_asset, the Rails application will have to know about that versioned_asset.
74
+
75
+ % APP=sauspiel RAILS_ENV=test bundle exec rails console
76
+ Loading test environment (Rails 3.1.3)
77
+ irb(main):001:0> VersionedAsset.create(:name => 'html5-desktop-game-client')
78
+ (0.1ms) BEGIN
79
+ SQL (0.5ms) INSERT INTO `versioned_assets` (`created_at`, `name`, `released_revision_id`, `updated_at`) VALUES ('2012-01-12 14:27:23', 'html5-desktop-game-client', NULL, '2012-01-12 14:27:23')
80
+ (0.6ms) COMMIT
81
+ => #<VersionedAsset id: 909168789, name: "html5-desktop-game-client", released_revision_id: nil, created_at: "2012-01-12 14:27:23", updated_at: "2012-01-12 14:27:23">
@@ -7,7 +7,7 @@ require 'revup/version'
7
7
 
8
8
  module Revup
9
9
  class DeployTask < Rake::TaskLib
10
- DEFAULT_TO_CLASS_ATTRS = [:host, :app_dir, :remote_setup, :files_root, :logger, :local_tmp_dir, :remote_tmp_dir]
10
+ DEFAULT_TO_CLASS_ATTRS = [:host, :user, :app_dir, :remote_setup, :files_root, :logger, :local_tmp_dir, :remote_tmp_dir]
11
11
  class << self
12
12
  attr_accessor *DEFAULT_TO_CLASS_ATTRS
13
13
  end
@@ -18,14 +18,16 @@ module Revup
18
18
  logger.level = Logger::INFO
19
19
  logger.progname = "revup (#{VERSION})"
20
20
 
21
- attr_accessor :component_name
21
+ attr_accessor :versioned_asset_name
22
22
 
23
- attr_accessor :component_name_and_prerequisites
23
+ attr_accessor :versioned_asset_name_and_prerequisites
24
24
 
25
25
  attr_accessor :files_root, :files
26
26
 
27
27
  attr_accessor :host
28
28
 
29
+ attr_accessor :user
30
+
29
31
  attr_accessor :app_dir
30
32
 
31
33
  attr_accessor :revision
@@ -36,14 +38,14 @@ module Revup
36
38
 
37
39
  attr_accessor :logger
38
40
 
39
- def initialize(component_name_and_prerequisites)
41
+ def initialize(versioned_asset_name_and_prerequisites)
40
42
  DEFAULT_TO_CLASS_ATTRS.each do |attr|
41
43
  send("#{attr}=", self.class.send(attr))
42
44
  end
43
45
 
44
- @component_name_and_prerequisites = component_name_and_prerequisites
45
- @component_name = @component_name_and_prerequisites.is_a?(Hash) ?
46
- @component_name_and_prerequisites.keys.first : @component_name_and_prerequisites
46
+ @versioned_asset_name_and_prerequisites = versioned_asset_name_and_prerequisites
47
+ @versioned_asset_name = @versioned_asset_name_and_prerequisites.is_a?(Hash) ?
48
+ @versioned_asset_name_and_prerequisites.keys.first : @versioned_asset_name_and_prerequisites
47
49
 
48
50
  yield self if block_given?
49
51
  define
@@ -57,7 +59,7 @@ module Revup
57
59
  end
58
60
 
59
61
  def archive_basename
60
- "#{@component_name}-#{@revision}"
62
+ "#{@versioned_asset_name}-#{@revision}"
61
63
  end
62
64
 
63
65
  def local_archive_path
@@ -75,8 +77,8 @@ module Revup
75
77
  # Actual task definition
76
78
 
77
79
  def define
78
- desc "Deploy build of the `#{@component_name}' component"
79
- task(@component_name_and_prerequisites) do
80
+ desc "Deploy build of the `#{@versioned_asset_name}' versioned_asset"
81
+ task(@versioned_asset_name_and_prerequisites) do
80
82
  deploy
81
83
  end
82
84
  end
@@ -85,6 +87,7 @@ module Revup
85
87
  validate files_root, "Please specify the location of the root of the files that should be deployed."
86
88
  validate files, "Please specify a list of files that should be deployed."
87
89
  validate host, "Please specify the host of the machine to deploy to."
90
+ validate user, "Please specify the user of the machine to deploy to."
88
91
  validate app_dir, "Please specify the path to the application."
89
92
  validate revision, "Please specify the Git revision hash."
90
93
 
@@ -102,7 +105,7 @@ module Revup
102
105
  end
103
106
 
104
107
  def upload_and_register
105
- Net::SSH.start(@host, ENV['USER']) do |connection|
108
+ Net::SSH.start(@host, @user) do |connection|
106
109
  @ssh = connection
107
110
 
108
111
  ssh "mkdir -p '#{remote_archive_dir}'"
@@ -112,7 +115,7 @@ module Revup
112
115
  # Unpack archive
113
116
  ssh "tar -C '#{remote_archive_dir}' -zxf '#{remote_archive_path}'"
114
117
  # Register revision
115
- ssh "cd '#{@app_dir}' && bundle exec ./script/register_component_revision '#{remote_archive_dir}' '#{component_name}' '#{revision}'"
118
+ ssh "cd '#{@app_dir}' && bundle exec ./script/register_versioned_asset_revision '#{remote_archive_dir}' '#{versioned_asset_name}' '#{revision}'"
116
119
 
117
120
  cleanup!
118
121
  end
@@ -1,3 +1,3 @@
1
1
  module Revup
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,107 +1,84 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: revup
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 0
9
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Eloy Duran
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-01-12 00:00:00 +01:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-01-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: net-ssh
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
16
+ requirement: &70336829881540 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
25
19
  - - ~>
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 2
29
- - 3
30
- - 0
20
+ - !ruby/object:Gem::Version
31
21
  version: 2.3.0
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: net-scp
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
24
+ version_requirements: *70336829881540
25
+ - !ruby/object:Gem::Dependency
26
+ name: net-scp
27
+ requirement: &70336829881020 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
39
30
  - - ~>
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 1
43
- - 0
44
- - 4
31
+ - !ruby/object:Gem::Version
45
32
  version: 1.0.4
46
33
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: rspec
50
34
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- requirements:
35
+ version_requirements: *70336829881020
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &70336829880220 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
53
41
  - - ~>
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 2
57
- - 8
58
- - 0
42
+ - !ruby/object:Gem::Version
59
43
  version: 2.8.0
60
44
  type: :development
61
- version_requirements: *id003
45
+ prerelease: false
46
+ version_requirements: *70336829880220
62
47
  description:
63
- email:
48
+ email:
64
49
  - eloy@fngtps.com
65
50
  - martin@sauspiel.de
66
51
  executables: []
67
-
68
52
  extensions: []
69
-
70
53
  extra_rdoc_files: []
71
-
72
- files:
54
+ files:
73
55
  - lib/revup/deploy_task.rb
74
56
  - lib/revup/version.rb
75
57
  - LICENSE
76
- has_rdoc: true
58
+ - README.md
77
59
  homepage:
78
- licenses:
60
+ licenses:
79
61
  - MIT
80
62
  post_install_message:
81
63
  rdoc_options: []
82
-
83
- require_paths:
64
+ require_paths:
84
65
  - lib
85
- required_ruby_version: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- segments:
90
- - 0
91
- version: "0"
92
- required_rubygems_version: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- segments:
97
- - 0
98
- version: "0"
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
99
78
  requirements: []
100
-
101
79
  rubyforge_project:
102
- rubygems_version: 1.3.6
80
+ rubygems_version: 1.8.11
103
81
  signing_key:
104
82
  specification_version: 3
105
83
  summary: A simple deploy tool, packaged as a rake task. Currently targeted for sauspiel.de
106
84
  test_files: []
107
-