capistrano-twingly 2.4.0 → 4.0.2

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 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__)