dlss-capistrano 3.6.0 → 3.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c8f550ec45bd1d6633ac6868fc417aefc33b64ba8ef8134b14cb40f61c01c48
4
- data.tar.gz: 2d1d900f77b688e06e7ccfaa314494307947b0a43ac19bdda7b0c163263f19f8
3
+ metadata.gz: 59f3e0a3a28fd4c039e6e2a861b16603911fe806ad71ca1aee18ffedb6e17ef9
4
+ data.tar.gz: c272545718a09a47b2cc2cd523edc55a6cd43c6b71453d390a14da1464d756d5
5
5
  SHA512:
6
- metadata.gz: d3e1f76b839e71f7aaf1103d865ab0a30051161d3dd8360d525ee0486c554409a0ddcf8758f4b5081e36815710caa4d484790cab04f675e378a0f4fdcae97394
7
- data.tar.gz: a266d77daf559af7cf561587f4ed5e47e27d79dad8afe835d3f38884cbb23cdd64f81dd5ecad3acdb6adc998540d57c3115ed071b971d5392abb248de5dadcea
6
+ metadata.gz: 5cbb9b707d0ff42c95c15e97f08a70bfd02a19cdc7fda35ca112571c907e911e43a1451a8ca3cccebe902db757fa5f4a6f31fc86fd63ef5976cf8047a525021e
7
+ data.tar.gz: a9b908df522ad9696ca5b99b9235c77016fc3eaf9c7665fba277c5b3f48bb4ccf964c9c7c696339cbd204b99245587713e75fc8af24913a5c72d9732de14408e
@@ -0,0 +1,12 @@
1
+ ## Why was this change made?
2
+
3
+
4
+
5
+ ## How was this change tested?
6
+
7
+
8
+
9
+ ## Which documentation and/or configurations were updated?
10
+
11
+
12
+
data/README.md CHANGED
@@ -20,10 +20,50 @@ set :bundler2_config_path, '/tmp' # set to '#{shared_path}/bundle' by default
20
20
 
21
21
  Note that only `bundler2_config_use_hook` **must** be set in order to use this functionality.
22
22
 
23
+ ### Sidekiq symlink
24
+
25
+ Every time the version of Sidekiq or Ruby changes, a corresponding Puppet PR must be made in order to update the XSendFilePath that allows Apache to access the bundled Sidekiq gem's assets. dlss-capistrano provides a hook to create a symlink to the bundled Sidekiq to avoid having to do this:
26
+
27
+ ```ruby
28
+ set :bundled_sidekiq_symlink, true # false is the default value
29
+ set :bundled_sidekiq_roles, [:app] # this is the default value
30
+ ```
31
+
32
+ Set this in `config/deploy.rb` to automate the symlink creation, and then use `XSendFilePath /path/to/my/app/shared/bundled_sidekiq/web/assets` in Apache configuration (in Puppet).
33
+
23
34
  ### SSH
24
35
 
25
36
  `cap ENV ssh` establishes an SSH connection to the host running in `ENV` environment, and changes into the current deployment directory
26
37
 
38
+ ### SSH Connection Checking
39
+
40
+ `cap ENV ssh_check` establishes an SSH connection to all app servers running in `ENV` environment and prints environment information to confirm the connection was made. This is used by [sdr-deploy](https://github.com/sul-dlss-labs/sdr-deploy/) to check SSH connections can be made in bulk before proceeding with a mass deploy.
41
+
42
+ ### Display Revision (and branches)
43
+
44
+ `cap ENV deployed_branch` displays the currently deployed revision (commit ID) and any branches containing the revision for each server in `ENV`.
45
+
46
+ ### Resque-Pool hot swap (OPTIONAL)
47
+
48
+ The `dlss-capistrano` gem provides a set of tasks for managing `resque-pool` workers when deployed in `hot_swap` mode. (If you are using `resque-pool` without `hot_swap`, we recommend continuing to use the `capistrano-resque-pool` gem instead of what `dlss-capistrano` provides.) The tasks are:
49
+
50
+ ```shell
51
+ $ cap ENV resque:pool:hot_swap # this gracefully replaces the current pool with a new pool
52
+ $ cap ENV resque:pool:stop # this gracefully stops the current pool
53
+ ```
54
+
55
+ By default, these tasks are not provided; instead, they must be explicitly enabled via adding a new `require` statement to the application's `Capfile`:
56
+
57
+ ```ruby
58
+ require 'dlss/capistrano/resque_pool'
59
+ ```
60
+
61
+ This is the hook provided if you opt in:
62
+
63
+ ```ruby
64
+ after 'deploy:publishing', 'resque:pool:hot_swap'
65
+ ```
66
+
27
67
  ### Sidekiq via systemd
28
68
 
29
69
  `cap ENV sidekiq_systemd:{quiet,stop,start,restart}`: quiets, stops, starts, restarts Sidekiq via systemd.
@@ -4,7 +4,7 @@ $:.unshift lib unless $:.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "dlss-capistrano"
7
- s.version = "3.6.0"
7
+ s.version = "3.10.1"
8
8
 
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.authors = ["Chris Beer", 'Mike Giarlo']
@@ -2,6 +2,4 @@ require 'capistrano/one_time_key'
2
2
  require 'capistrano/bundle_audit'
3
3
  require 'capistrano/shared_configs'
4
4
 
5
- load File.expand_path('../capistrano/tasks/bundle_config.rake', __FILE__)
6
- load File.expand_path('../capistrano/tasks/sidekiq_systemd.rake', __FILE__)
7
- load File.expand_path('../capistrano/tasks/ssh.rake', __FILE__)
5
+ Dir.glob("#{__dir__}/capistrano/tasks/*.rake").each { |r| import r }
@@ -0,0 +1 @@
1
+ import "#{__dir__}/resque_pool/tasks/resque_pool.rake"
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ # These tasks are a drop-in replacement for capistrano-resque-pool when using
4
+ # hot-swappable pools. We replace these tasks because the upstream ones assume a
5
+ # pidfile is present, which is not the case with hot-swappable pools.
6
+
7
+ namespace :load do
8
+ task :defaults do
9
+ # Same capistrano variable used by capistrano-resque-pool for compatibility
10
+ set :resque_server_roles, fetch(:resque_server_roles, [:app])
11
+ end
12
+ end
13
+
14
+ # Integrate hook into Capistrano
15
+ namespace :deploy do
16
+ before :starting, :add_resque_pool_hotswap_hook do
17
+ invoke 'resque:pool:add_hook'
18
+ end
19
+ end
20
+
21
+ namespace :resque do
22
+ namespace :pool do
23
+ # Lifted from capistrano-resque-pool
24
+ def rails_env
25
+ fetch(:resque_rails_env) ||
26
+ fetch(:rails_env) || # capistrano-rails doesn't automatically set this (yet),
27
+ fetch(:stage) # so we need to fall back to the stage.
28
+ end
29
+
30
+ # NOTE: no `desc` here to avoid publishing this task in the `cap -T` list
31
+ task :add_hook do
32
+ after 'deploy:publishing', 'resque:pool:hot_swap'
33
+ end
34
+
35
+ desc 'Swap in a new pool, then shut down the old pool'
36
+ task :hot_swap do
37
+ on roles(fetch(:resque_server_roles)) do
38
+ within current_path do
39
+ execute :bundle, :exec, 'resque-pool', "--daemon --hot-swap --environment #{rails_env}"
40
+ end
41
+ end
42
+ end
43
+
44
+ desc 'Gracefully shut down current pool'
45
+ task :stop do
46
+ on roles(fetch(:resque_server_roles)) do
47
+ # This will usually return a single pid, but if you do multiple quick
48
+ # deployments, you may pick up multiple pids here, in which case we only
49
+ # kill the oldest one
50
+ pid = capture(:pgrep, '-f resque-pool-master').split.first
51
+
52
+ if test "kill -0 #{pid} > /dev/null 2>&1"
53
+ execute :kill, "-s QUIT #{pid}"
54
+ else
55
+ warn "Process #{pid} is not running"
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,31 @@
1
+ # Capistrano plugin hook to set default values
2
+ namespace :load do
3
+ task :defaults do
4
+ set :bundled_sidekiq_symlink, fetch(:bundled_sidekiq_symlink, false)
5
+ set :bundled_sidekiq_roles, fetch(:bundled_sidekiq_roles, [:app])
6
+ end
7
+ end
8
+
9
+ # Integrate sidekiq-bundle hook into Capistrano
10
+ namespace :deploy do
11
+ before :starting, :add_bundled_sidekiq_hook do
12
+ invoke 'bundled_sidekiq:add_hook' if fetch(:bundled_sidekiq_symlink)
13
+ end
14
+ end
15
+
16
+ namespace :bundled_sidekiq do
17
+ # NOTE: no `desc` here to avoid publishing this task in the `cap -T` list
18
+ task :add_hook do
19
+ after 'bundler:install', 'bundled_sidekiq:symlink'
20
+ end
21
+
22
+ # NOTE: no `desc` here to avoid publishing this task in the `cap -T` list
23
+ task :symlink do
24
+ on roles fetch(:bundled_sidekiq_roles) do
25
+ within release_path do
26
+ bundled_sidekiq_path = capture(:bundle, :info, '--path', :sidekiq)
27
+ execute(:ln, '-sf', bundled_sidekiq_path, "#{shared_path}/bundled_sidekiq")
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ desc 'display the deployed branch and commit'
2
+ task :deployed_branch do
3
+ on roles(:app) do |host|
4
+ within current_path do
5
+ revision = capture :cat, 'REVISION'
6
+ branches = `git branch -r --contains #{revision}`.strip
7
+ info "#{host}: #{revision} (#{branches})"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ desc "check ssh connections to all app servers"
2
+ task :ssh_check do
3
+ on roles(:app), in: :sequence do
4
+ execute
5
+ end
6
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dlss-capistrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.0
4
+ version: 3.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-04-21 00:00:00.000000000 Z
12
+ date: 2020-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -76,6 +76,7 @@ executables: []
76
76
  extensions: []
77
77
  extra_rdoc_files: []
78
78
  files:
79
+ - ".github/pull_request_template.md"
79
80
  - ".gitignore"
80
81
  - Gemfile
81
82
  - LICENSE
@@ -84,9 +85,14 @@ files:
84
85
  - dlss-capistrano.gemspec
85
86
  - lib/dlss.rb
86
87
  - lib/dlss/capistrano.rb
88
+ - lib/dlss/capistrano/resque_pool.rb
89
+ - lib/dlss/capistrano/resque_pool/tasks/resque_pool.rake
87
90
  - lib/dlss/capistrano/tasks/bundle_config.rake
91
+ - lib/dlss/capistrano/tasks/bundled_sidekiq.rake
92
+ - lib/dlss/capistrano/tasks/deployed_branch.rake
88
93
  - lib/dlss/capistrano/tasks/sidekiq_systemd.rake
89
94
  - lib/dlss/capistrano/tasks/ssh.rake
95
+ - lib/dlss/capistrano/tasks/ssh_check.rake
90
96
  - lib/lyberteam-capistrano-devel.rb
91
97
  homepage:
92
98
  licenses:
@@ -107,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
113
  - !ruby/object:Gem::Version
108
114
  version: 1.3.6
109
115
  requirements: []
110
- rubygems_version: 3.0.3
116
+ rubygems_version: 3.1.2
111
117
  signing_key:
112
118
  specification_version: 4
113
119
  summary: Capistrano recipes for use in SUL/DLSS projects