capistrano-twingly 2.4.0 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75fa4a0261e7641d6b29921d6dcfe7615790f703e6393e92d57147eb21a163c4
4
- data.tar.gz: 00f98265254260053e4fe778f3dfd9df8d442d293a527c06bedcab2fb4d9d004
3
+ metadata.gz: 000dcbd7e977d7e37ce27e2cd5f61278a835aa79febecf7dbb8edbd74fb8bf2b
4
+ data.tar.gz: 6954ff08beb258f8d0d3f598fd34652dc56c062b1070c1a8c396ee1bf68ac467
5
5
  SHA512:
6
- metadata.gz: bfaf032744fbf5f61a113f4c6702c5ca1d1b3a5a81cba5d5ed3f4765050d85724a9e384fd13ef317d78f029e3da8ec3b73ead1cc3d37d770b57e9455d56825a4
7
- data.tar.gz: c3b2685e826ea9e7a0961becedb167ab506420733f144070c932d36748b538787ea4576e515438aa12e4929128c8a3350d7b7db7340cfd6d1c6bbc67d18ec1cb
6
+ metadata.gz: d827b49fcf10fcec1f3d9127b27e026b3dc30327fa0406c0ae10714160e1ecd72c7accd00ea22629e9bc5d28eb7ce4ba4f4dfcd7b2028605a8b2a296c76b4a75
7
+ data.tar.gz: 5a97a343b609656ba2dabbd99d4d9536669e66131f4eda02374946b7a71f0a622736706e780f00e9b77c62cdf5d38a62087e40d1da187b92aed4a6b2a694cef9
@@ -0,0 +1,24 @@
1
+ name: CI
2
+
3
+ on: push
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-18.04
8
+
9
+ strategy:
10
+ matrix:
11
+ ruby: [2.7.1, head]
12
+
13
+ steps:
14
+ - name: Checkout Code
15
+ uses: actions/checkout@v2
16
+
17
+ - name: Setup Ruby ${{ matrix.ruby }}
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: ${{ matrix.ruby }}
21
+ bundler-cache: true
22
+
23
+ - name: Run
24
+ run: bundle exec rake
@@ -1,5 +1,44 @@
1
1
  # Change Log
2
2
 
3
+ ## [v4.0.1](https://github.com/twingly/capistrano-twingly/tree/v4.0.1) (2019-05-02)
4
+ [Full Changelog](https://github.com/twingly/capistrano-twingly/compare/v4.0.0...v4.0.1)
5
+
6
+ **Fixed bugs:**
7
+
8
+ - Initial deploy for systemd fails since \#47 [\#49](https://github.com/twingly/capistrano-twingly/issues/49)
9
+
10
+ **Merged pull requests:**
11
+
12
+ - Make sure systemd target is loaded before trying to stop it [\#50](https://github.com/twingly/capistrano-twingly/pull/50) ([roback](https://github.com/roback))
13
+
14
+ ## [v4.0.0](https://github.com/twingly/capistrano-twingly/tree/v4.0.0) (2019-04-29)
15
+ [Full Changelog](https://github.com/twingly/capistrano-twingly/compare/v3.0.0...v4.0.0)
16
+
17
+ **Closed issues:**
18
+
19
+ - Add systemd support [\#45](https://github.com/twingly/capistrano-twingly/issues/45)
20
+
21
+ **Merged pull requests:**
22
+
23
+ - Generate systemd config in addition to upstart [\#47](https://github.com/twingly/capistrano-twingly/pull/47) ([roback](https://github.com/roback))
24
+
25
+ ## [v3.0.0](https://github.com/twingly/capistrano-twingly/tree/v3.0.0) (2018-11-08)
26
+ [Full Changelog](https://github.com/twingly/capistrano-twingly/compare/v2.4.1...v3.0.0)
27
+
28
+ **Merged pull requests:**
29
+
30
+ - Remove LKP traces [\#44](https://github.com/twingly/capistrano-twingly/pull/44) ([walro](https://github.com/walro))
31
+
32
+ ## [v2.4.1](https://github.com/twingly/capistrano-twingly/tree/v2.4.1) (2018-10-05)
33
+ [Full Changelog](https://github.com/twingly/capistrano-twingly/compare/v2.4.0...v2.4.1)
34
+
35
+ ## [v2.4.0](https://github.com/twingly/capistrano-twingly/tree/v2.4.0) (2018-10-04)
36
+ [Full Changelog](https://github.com/twingly/capistrano-twingly/compare/v2.3.0...v2.4.0)
37
+
38
+ **Merged pull requests:**
39
+
40
+ - Each server can have different Procfiles [\#43](https://github.com/twingly/capistrano-twingly/pull/43) ([roback](https://github.com/roback))
41
+
3
42
  ## [v2.3.0](https://github.com/twingly/capistrano-twingly/tree/v2.3.0) (2018-10-04)
4
43
  [Full Changelog](https://github.com/twingly/capistrano-twingly/compare/v2.2.0...v2.3.0)
5
44
 
data/README.md CHANGED
@@ -45,7 +45,7 @@ require 'capistrano/twingly/nginx'
45
45
 
46
46
  # config/deploy.rb
47
47
  set :app_name, 'contest-bamba'
48
- set :server_names, %w(bamba.bloggportalen.se) # Optional
48
+ set :server_names, %w(bamba.bloggportalen.se)
49
49
  set :use_https, true # Optional
50
50
 
51
51
  namespace :deploy do
@@ -56,11 +56,11 @@ namespace :deploy do
56
56
  end
57
57
  ```
58
58
 
59
- ### Upstart
59
+ ### Upstart/Systemd
60
60
 
61
61
  ```Ruby
62
62
  # Capfile
63
- require 'capistrano/twingly/upstart'
63
+ require 'capistrano/twingly/service'
64
64
 
65
65
  # config/deploy.rb
66
66
  set :procfile_contents, -> {
@@ -74,29 +74,6 @@ set :procfile_contents, -> {
74
74
  }
75
75
 
76
76
  namespace :deploy do
77
- desc 'Start application'
78
- task :start do
79
- invoke 'deploy:export_upstart'
80
- on roles(:app) do
81
- sudo :start, fetch(:application)
82
- end
83
- end
84
-
85
- desc 'Restart application'
86
- task :restart do
87
- invoke 'deploy:export_upstart'
88
- on roles(:app) do
89
- execute "sudo restart #{fetch(:application)} || sudo start #{fetch(:application)}"
90
- end
91
- end
92
-
93
- desc 'Stop application'
94
- task :stop do
95
- on roles(:app) do
96
- sudo :stop, fetch(:application)
97
- end
98
- end
99
-
100
77
  after :stop, 'deploy:disable_autostart'
101
78
  after :start, 'deploy:enable_autostart'
102
79
  after :restart, 'deploy:enable_autostart'
@@ -148,13 +125,13 @@ end
148
125
 
149
126
  * Bump the version in `capistrano-twingly.gemspec` in a commit, no need to push (the release task does that).
150
127
 
128
+ * Ensure you are signed in to RubyGems.org as [twingly][twingly-rubygems] with `gem signin`.
129
+
151
130
  * Build and [publish](http://guides.rubygems.org/publishing/) the gem. This will create the proper tag in git, push the commit and tag and upload to RubyGems.
152
131
 
153
132
  bundle exec rake release
154
133
 
155
- * If you are not logged in as [twingly][twingly-rubygems] with ruby gems, the rake task will fail and tell you to set credentials via `gem push`, do that and run the `release` task again. It will be okay.
156
-
157
- * Update the changelog with [GitHub Changelog Generator](https://github.com/skywinder/github-changelog-generator/) (`gem install github_changelog_generator` if you don't have it, set `CHANGELOG_GITHUB_TOKEN` to a personal access token to avoid rate limiting by GitHub). This command will update `CHANGELOG.md`, commit and push manually.
134
+ * Update the changelog with [GitHub Changelog Generator](https://github.com/skywinder/github-changelog-generator/) (`gem install github_changelog_generator` if you don't have it, set `CHANGELOG_GITHUB_TOKEN` to a personal access token to avoid rate limiting by GitHub). This command will update `CHANGELOG.md`. You need to commit and push manually.
158
135
 
159
136
  github_changelog_generator
160
137
 
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "capistrano-twingly"
7
- spec.version = '2.4.0'
7
+ spec.version = '4.0.2'
8
8
  spec.authors = ["Twingly AB"]
9
9
  spec.email = ["support@twingly.com"]
10
10
  spec.summary = %q{Capistrano 3 tasks used for Twingly's Ruby deployment}
@@ -17,15 +17,14 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "capistrano", "~> 3.6.0"
21
- spec.add_dependency "capistrano-bundler", "1.1.4"
20
+ spec.add_dependency "capistrano", "~> 3.14"
21
+ spec.add_dependency "capistrano-bundler", "~> 2.0"
22
22
  spec.add_dependency "capistrano-chruby", "0.1.2"
23
23
  spec.add_dependency "foreman", "~> 0.82"
24
24
  spec.add_dependency "net-ssh", "~> 5.0"
25
25
  spec.add_dependency "ed25519", ">= 1.2", "< 1.3"
26
26
  spec.add_dependency "bcrypt_pbkdf", ">= 1.0", "< 2.0"
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.5"
29
28
  spec.add_development_dependency "rspec", "~> 3"
30
29
  spec.add_development_dependency "rake"
31
30
  end
@@ -13,7 +13,7 @@ require "capistrano/bundler"
13
13
 
14
14
  # Twingly tasks
15
15
  require "capistrano/twingly/nginx"
16
- require "capistrano/twingly/upstart"
16
+ require "capistrano/twingly/service"
17
17
  require "capistrano/twingly/tag_deploy_in_git"
18
18
  require "capistrano/twingly/current_git_branch"
19
19
  require "capistrano/twingly/servers_from_srv_record"
@@ -0,0 +1 @@
1
+ load File.expand_path("../tasks/service.rake", __FILE__)
@@ -6,8 +6,7 @@ namespace :deploy do
6
6
 
7
7
  app_dir = fetch(:deploy_to)
8
8
  app_name = fetch(:app_name)
9
- server_names = Array(fetch(:server_names))
10
- server_names << "#{app_name}.live.lkp.primelabs.se"
9
+ server_names = fetch(:server_names)
11
10
 
12
11
  https_port = ":443" if fetch(:use_https)
13
12
 
@@ -1,7 +1,6 @@
1
1
  require 'resolv'
2
2
 
3
3
  SRV_RECORDS = %w[
4
- _rubyapps._tcp.live.lkp.primelabs.se
5
4
  _rubyapps._tcp.sth.twingly.network
6
5
  ]
7
6
 
@@ -0,0 +1,128 @@
1
+ namespace :deploy do
2
+ desc 'Lookup which service manager is used on each server'
3
+ task :lookup_server_service_manager do
4
+ init_system_pid = 1
5
+
6
+ on roles(:app) do |host|
7
+ service_manager_name =
8
+ capture "ps -p#{init_system_pid} co command | grep systemd || echo upstart"
9
+
10
+ server(host).add_role(service_manager_name.to_sym)
11
+ end
12
+ end
13
+
14
+ desc 'Export service script'
15
+ task export_service: %w[lookup_server_service_manager foreman:upload_procfile] do
16
+ set :bundle_binstubs, -> { shared_path.join('bin') }
17
+
18
+ on roles(:upstart) do
19
+ within current_path do
20
+ sudo fetch(:chruby_exec), "#{fetch(:chruby_ruby)} -- #{fetch(:bundle_binstubs)}/foreman export upstart /etc/init -a #{fetch(:application)} -u \`whoami\` -l #{shared_path}/log"
21
+ end
22
+ end
23
+
24
+ on roles(:systemd) do
25
+ load_state =
26
+ capture "systemctl show #{fetch(:application)}.target -p LoadState --value"
27
+
28
+ if load_state == "loaded"
29
+ sudo :systemctl, "stop #{fetch(:application)}.target"
30
+ end
31
+
32
+ within current_path do
33
+ sudo fetch(:chruby_exec), "#{fetch(:chruby_ruby)} -- #{fetch(:bundle_binstubs)}/foreman export systemd /etc/systemd/system -a #{fetch(:application)} -u \`whoami\` -l #{shared_path}/log"
34
+ end
35
+
36
+ sudo :systemctl, "daemon-reload"
37
+ end
38
+ end
39
+
40
+ desc "Start application"
41
+ task start: :lookup_server_service_manager do
42
+ invoke "deploy:export_service"
43
+
44
+ on roles(:upstart) do
45
+ sudo :start, fetch(:application)
46
+ end
47
+
48
+ on roles(:systemd) do
49
+ sudo :systemctl, "start #{fetch(:application)}.target"
50
+ end
51
+ end
52
+
53
+ desc "Restart application"
54
+ task restart: :lookup_server_service_manager do
55
+ invoke "deploy:export_service"
56
+
57
+ on roles(:upstart) do
58
+ execute "sudo restart #{fetch(:application)} || sudo start #{fetch(:application)}"
59
+ end
60
+
61
+ on roles(:systemd) do
62
+ application = fetch(:application)
63
+ execute "sudo systemctl restart #{application}.target || sudo systemctl start #{application}.target"
64
+ end
65
+ end
66
+
67
+ desc "Stop application"
68
+ task stop: :lookup_server_service_manager do
69
+ on roles(:upstart) do
70
+ sudo :stop, fetch(:application)
71
+ end
72
+
73
+ on roles(:systemd) do
74
+ sudo :systemctl, "stop #{fetch(:application)}.target"
75
+ end
76
+ end
77
+
78
+ task disable_autostart: :lookup_server_service_manager do
79
+ on roles(:upstart) do
80
+ execute "/bin/echo manual | sudo /usr/bin/tee /etc/init/#{fetch(:application)}.override"
81
+ end
82
+
83
+ on roles(:systemd) do
84
+ sudo :systemctl, "disable #{fetch(:application)}.target"
85
+ end
86
+ end
87
+
88
+ task enable_autostart: :lookup_server_service_manager do
89
+ on roles(:upstart) do
90
+ execute "/bin/echo | sudo /usr/bin/tee /etc/init/#{fetch(:application)}.override"
91
+ end
92
+
93
+ on roles(:systemd) do
94
+ sudo :systemctl, "enable #{fetch(:application)}.target"
95
+ end
96
+ end
97
+
98
+ namespace :foreman do
99
+ desc 'Upload Procfile to server'
100
+ task upload_procfile: :generate_procfile do
101
+ on roles(:app) do |host|
102
+ upload! "tmp/Procfile_#{host.hostname}", "#{fetch(:deploy_to)}/current/Procfile"
103
+ end
104
+ end
105
+
106
+ desc 'Generate Procfile'
107
+ task :generate_procfile do
108
+ Dir.mkdir('tmp') unless Dir.exist?('tmp')
109
+
110
+ procfile_contents = fetch(:procfile_contents)
111
+
112
+ on roles(:app) do |host|
113
+ procfile_contents_string =
114
+ if procfile_contents.is_a?(Hash)
115
+ procfile_contents.fetch(host.hostname)
116
+ else
117
+ procfile_contents
118
+ end
119
+
120
+ File.open("tmp/Procfile_#{host.hostname}", 'w') do |conf|
121
+ procfile_contents_string.each_line do |line|
122
+ conf.puts "#{line.chomp} 2>&1 | logger -t #{fetch(:app_name)}"
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-twingly
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 4.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Twingly AB
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-04 00:00:00.000000000 Z
11
+ date: 2020-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.6.0
19
+ version: '3.14'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.6.0
26
+ version: '3.14'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: capistrano-bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.4
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.4
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: capistrano-chruby
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -120,20 +120,6 @@ dependencies:
120
120
  - - "<"
121
121
  - !ruby/object:Gem::Version
122
122
  version: '2.0'
123
- - !ruby/object:Gem::Dependency
124
- name: bundler
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: '1.5'
130
- type: :development
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - "~>"
135
- - !ruby/object:Gem::Version
136
- version: '1.5'
137
123
  - !ruby/object:Gem::Dependency
138
124
  name: rspec
139
125
  requirement: !ruby/object:Gem::Requirement
@@ -169,9 +155,9 @@ executables: []
169
155
  extensions: []
170
156
  extra_rdoc_files: []
171
157
  files:
158
+ - ".github/workflows/ci.yml"
172
159
  - ".gitignore"
173
160
  - ".rspec"
174
- - ".travis.yml"
175
161
  - CHANGELOG.md
176
162
  - Gemfile
177
163
  - LICENSE.txt
@@ -182,19 +168,19 @@ files:
182
168
  - lib/capistrano/twingly/current_git_branch.rb
183
169
  - lib/capistrano/twingly/nginx.rb
184
170
  - lib/capistrano/twingly/servers_from_srv_record.rb
171
+ - lib/capistrano/twingly/service.rb
185
172
  - lib/capistrano/twingly/tag_deploy_in_git.rb
186
173
  - lib/capistrano/twingly/tasks/current_git_branch.rake
187
174
  - lib/capistrano/twingly/tasks/nginx.rake
188
175
  - lib/capistrano/twingly/tasks/servers_from_srv_record.rake
176
+ - lib/capistrano/twingly/tasks/service.rake
189
177
  - lib/capistrano/twingly/tasks/tag_deploy_in_git.rake
190
- - lib/capistrano/twingly/tasks/upstart.rake
191
- - lib/capistrano/twingly/upstart.rb
192
178
  - spec/integration/net_ssh_spec.rb
193
179
  homepage: https://github.com/twingly/capistrano-twingly
194
180
  licenses:
195
181
  - MIT
196
182
  metadata: {}
197
- post_install_message:
183
+ post_install_message:
198
184
  rdoc_options: []
199
185
  require_paths:
200
186
  - lib
@@ -209,9 +195,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
195
  - !ruby/object:Gem::Version
210
196
  version: '0'
211
197
  requirements: []
212
- rubyforge_project:
213
- rubygems_version: 2.7.6
214
- signing_key:
198
+ rubygems_version: 3.1.4
199
+ signing_key:
215
200
  specification_version: 4
216
201
  summary: Capistrano 3 tasks used for Twingly's Ruby deployment
217
202
  test_files:
@@ -1,28 +0,0 @@
1
- language: ruby
2
- sudo: false
3
-
4
- rvm:
5
- - 2.4.2
6
- - ruby-head
7
-
8
- matrix:
9
- allow_failures:
10
- - rvm: ruby-head
11
- fast_finish: true
12
-
13
- before_install:
14
- - gem install bundler
15
-
16
- cache: bundler
17
-
18
- notifications:
19
- email: false
20
- hipchat:
21
- rooms:
22
- secure: "ILGWgc1QgHVRhwxWgYo+DxLySgOPdwahOV8py1dlRhi4juRUvMcMJSFYvTS47T1Mm8JSJXGaJtEcz24YgWF4XQsL2OawntdxJDNuzmFhF0fC+syN3qHXVzaRIplfcbGOj5rW4Uga8HumvvrQl/g5fscgsGM02BAOKgJhRPM7YLY="
23
- on_success: never
24
- on_failure: change
25
- template:
26
- - '%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message}
27
- (<a href="%{build_url}">Details</a>/<a href="%{compare_url}">Change view</a>)'
28
- format: html
@@ -1,58 +0,0 @@
1
- namespace :deploy do
2
- set :bundle_binstubs, -> { shared_path.join('bin') }
3
-
4
- desc 'Export upstart script'
5
- task :export_upstart do
6
- on roles(:app) do
7
- within current_path do
8
- sudo fetch(:chruby_exec), "#{fetch(:chruby_ruby)} -- #{fetch(:bundle_binstubs)}/foreman export upstart /etc/init -a #{fetch(:application)} -u \`whoami\` -l #{shared_path}/log"
9
- end
10
- end
11
- end
12
-
13
- task :disable_autostart do
14
- on roles(:app) do
15
- execute "/bin/echo manual | sudo /usr/bin/tee /etc/init/#{fetch(:application)}.override"
16
- end
17
- end
18
-
19
- task :enable_autostart do
20
- on roles(:app) do
21
- execute "/bin/echo | sudo /usr/bin/tee /etc/init/#{fetch(:application)}.override"
22
- end
23
- end
24
-
25
- namespace :foreman do
26
- desc 'Upload Procfile to server'
27
- task :upload_procfile do
28
- on roles(:app) do |host|
29
- upload! "tmp/Procfile_#{host.name}", "#{fetch(:deploy_to)}/current/Procfile"
30
- end
31
- end
32
-
33
- desc 'Generate Procfile'
34
- task :generate_procfile do
35
- Dir.mkdir('tmp') unless Dir.exist?('tmp')
36
-
37
- procfile_contents = fetch(:procfile_contents)
38
-
39
- on roles(:app) do |host|
40
- procfile_contents_string =
41
- if procfile_contents.is_a?(Hash)
42
- procfile_contents.fetch(host.hostname)
43
- else
44
- procfile_contents
45
- end
46
-
47
- File.open("tmp/Procfile_#{host.hostname}", 'w') do |conf|
48
- procfile_contents_string.each_line do |line|
49
- conf.puts "#{line.chomp} 2>&1 | logger -t #{fetch(:app_name)}"
50
- end
51
- end
52
- end
53
- end
54
- end
55
-
56
- before 'deploy:export_upstart', 'deploy:foreman:upload_procfile'
57
- before 'deploy:foreman:upload_procfile', 'deploy:foreman:generate_procfile'
58
- end
@@ -1 +0,0 @@
1
- load File.expand_path("../tasks/upstart.rake", __FILE__)