capistrano-cul 0.0.1 → 0.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 +4 -4
- data/CHANGELOG.md +9 -2
- data/README.md +66 -3
- data/Rakefile +0 -1
- data/VERSION +1 -1
- data/lib/capistrano/cul/wp.rb +2 -0
- data/lib/capistrano/cul.rb +0 -1
- data/lib/capistrano/tasks/wp/update.cap +39 -0
- data/lib/capistrano/tasks/wp.cap +137 -0
- metadata +5 -4
- data/lib/capistrano/cul/hooks.rb +0 -1
- data/lib/capistrano/tasks/hooks.cap +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dca3bc890ad9faa20306aaed7454ad9d2ddb1db6
|
4
|
+
data.tar.gz: 5963b8b24d7f7c4b50dd62f96ba2f3d6d9e7a0a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3bd0ddad0c8c40937d698fdd1f9083de018653b1774626f72980d565269dd988799f751da06655987cff80ecaeab64044e4d1fc9cbc7eb60c09652488464dad
|
7
|
+
data.tar.gz: b5ec2011f7e9551442968a852e78949a36f8c6a9309cebec824ed8052eea445cb590af7e54858b28d259044f01a8217ed114c3d8eaf83fd02b8713f290cb1f4b
|
data/CHANGELOG.md
CHANGED
@@ -4,9 +4,16 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
|
8
|
+
|
7
9
|
## [Unreleased]
|
10
|
+
### Added
|
11
|
+
|
12
|
+
## [0.0.2] - 2017-08-08
|
13
|
+
### Added
|
14
|
+
- Adding Wordpress deployment capabilities
|
8
15
|
|
9
16
|
## [0.0.1] - 2017-08-05
|
10
17
|
### Added
|
11
|
-
- Added cul:downtime task
|
12
|
-
- Added cul:auto_tag task
|
18
|
+
- Added `cul:downtime` task
|
19
|
+
- Added `cul:auto_tag` task
|
data/README.md
CHANGED
@@ -2,15 +2,18 @@
|
|
2
2
|
|
3
3
|
Capistrano v3 tasks shared across CUL projects.
|
4
4
|
|
5
|
+
This gem provides common cap tasks that are used in almost every cul project. It also includes a set of cap tasks and hooks that are specific for Wordpress deployments. Do not include the Wordpress library if you are not deploying a Wordpress site.
|
6
|
+
|
5
7
|
## Installation
|
6
8
|
|
9
|
+
### Install gem
|
7
10
|
Add this line to your application's Gemfile:
|
8
11
|
|
9
12
|
```ruby
|
10
|
-
gem 'capistrano-cul'
|
13
|
+
gem 'capistrano-cul'
|
11
14
|
```
|
12
15
|
|
13
|
-
_Note:_ If installing in a rails application, should only be in `:development` and `:test` groups.
|
16
|
+
_Note:_ If installing in a rails application, gem should only be installed in `:development` and `:test` groups.
|
14
17
|
|
15
18
|
|
16
19
|
And then execute:
|
@@ -21,14 +24,21 @@ Or install it yourself as:
|
|
21
24
|
|
22
25
|
$ gem install capistrano-cul
|
23
26
|
|
27
|
+
### Add Capistrano::Cul tasks to `Capfile`
|
24
28
|
In your application's `Capfile` include:
|
25
29
|
|
30
|
+
```ruby
|
31
|
+
require 'capistrano/cul'
|
26
32
|
```
|
33
|
+
|
34
|
+
For Wordpress deployments, in your application's `Capfile` include:
|
35
|
+
```ruby
|
27
36
|
require 'capistrano/cul'
|
37
|
+
require 'capistrano/cul/wp'
|
28
38
|
```
|
29
39
|
|
30
40
|
## Usage
|
31
|
-
|
41
|
+
### Shared cap tasks (`capistrano/cul`)
|
32
42
|
1. `cap {env} cul:auto_tag`
|
33
43
|
|
34
44
|
Tags the current commit as the version number provided in `VERSION`.
|
@@ -36,6 +46,59 @@ Two tasks are provided as part of this gem:
|
|
36
46
|
|
37
47
|
Pulls down the downtime branch of the repository to a `/downtime` directory and symlinks `current` to `downtime`. To undo this action, redeploy your application.
|
38
48
|
|
49
|
+
### Wordpress deployment (`capistrano/cul/wp`)
|
50
|
+
#### Tasks
|
51
|
+
1. `cap {env} cul:wp:setup`
|
52
|
+
|
53
|
+
Sets up a WordPress docroot and runs deployment; does not install WordPress and does not create any users.
|
54
|
+
2. `cap {env} cul:wp:install`
|
55
|
+
|
56
|
+
Runs a WordPress installation for a newly set up instance and creates a new admin user.
|
57
|
+
3. `cap {env} cul:wp:symlink_custom_plugins_and_themes`
|
58
|
+
|
59
|
+
Creates symlinks for custom plugins and themes as part of a WordPress deployment. Generally run as an `after :deploy` hook.
|
60
|
+
4. `cap {env} cul:wp:update:core`
|
61
|
+
|
62
|
+
Updates WordPress core to the latest version.
|
63
|
+
5. `cap {env} cul:wp:update:plugins`
|
64
|
+
|
65
|
+
Updates non-repo-managed plugins to the latest version.
|
66
|
+
6. `cap {env} cul:wp:update:themes`
|
67
|
+
|
68
|
+
Updates non-repo-managed themes to the latest version.
|
69
|
+
7. `cap {env} cul:wp:update:all`
|
70
|
+
|
71
|
+
Updates WordPress core, plugins, and themes (in that order) by calling update:core, update:plugins and update:themes tasks.
|
72
|
+
|
73
|
+
#### Configurable variables
|
74
|
+
The Wordpress tasks listed above require the following variables .
|
75
|
+
```ruby
|
76
|
+
set :wp_docroot # (string) Path to webserver document root for site
|
77
|
+
set :wp_data_path # (string) Path to data directory (outside of wp_docroot) that contains wp-content
|
78
|
+
set :url # (string) Public website URL
|
79
|
+
set :title # (string) Website title
|
80
|
+
set :multisite # (boolean) Whether or not this is a multisite wordpress installation
|
81
|
+
set :wp_custom_plugins # (hash) Map of custom plugin file/directory names to repo-relative paths
|
82
|
+
set :wp_custom_themes # (hash) Map of custom theme file/directory names to repo-relative paths
|
83
|
+
```
|
84
|
+
|
85
|
+
Here's a sample configuration:
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
set :wp_docroot, "#{fetch(:deploy_to)}/wp_docroot"
|
89
|
+
set :wp_data_path, "/path/to/data/directory/#{fetch(:application)}_#{fetch(:stage)}"
|
90
|
+
set :multisite, false
|
91
|
+
set :title, 'Amazing WordPress Site'
|
92
|
+
|
93
|
+
set :wp_custom_plugins, {
|
94
|
+
'custom-plugin-file.php' => 'plugins/custom-plugin-file.php',
|
95
|
+
'custom-plugin-directory' => 'plugins/custom-plugin-directory'
|
96
|
+
}
|
97
|
+
set :wp_custom_themes, {
|
98
|
+
'mytheme' => 'themes/mytheme'
|
99
|
+
}
|
100
|
+
```
|
101
|
+
|
39
102
|
## Development
|
40
103
|
|
41
104
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/capistrano/cul.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
namespace :cul do
|
2
|
+
namespace :wp do
|
3
|
+
namespace :update do
|
4
|
+
desc "Updates WordPress core to the latest version."
|
5
|
+
task :core do
|
6
|
+
on roles(:web) do
|
7
|
+
within fetch(:wp_docroot) do
|
8
|
+
execute :wp, 'core', 'update'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Updates non-repo-managed plugins to the latest version."
|
14
|
+
task :plugins do
|
15
|
+
on roles(:web) do
|
16
|
+
within fetch(:wp_docroot) do
|
17
|
+
execute :wp, 'plugin', 'update', '--all'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Updates non-repo-managed themes to the latest version."
|
23
|
+
task :themes do
|
24
|
+
on roles(:web) do
|
25
|
+
within fetch(:wp_docroot) do
|
26
|
+
execute :wp, 'theme', 'update', '--all'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
desc "Updates WordPress core, plugins, and themes (in that order)."
|
32
|
+
task :all do
|
33
|
+
invoke 'cul:wp:update:core'
|
34
|
+
invoke 'cul:wp:update:plugins'
|
35
|
+
invoke 'cul:wp:update:themes'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
namespace :cul do
|
2
|
+
namespace :wp do
|
3
|
+
after :deploy, 'cul:wp:symlink_custom_plugins_and_themes'
|
4
|
+
|
5
|
+
desc "Creates symlinks for custom plugins and themes as part of a WordPress deployment. Generally run as an `after :deploy` hook."
|
6
|
+
task :symlink_custom_plugins_and_themes do
|
7
|
+
symlink_custom_plugins_and_themes
|
8
|
+
end
|
9
|
+
|
10
|
+
# Runs normal deploy task, downloads new copy of WP, sets up docroot, runs
|
11
|
+
# deploy command, sets up symlinks. Does not run WP install and does not
|
12
|
+
# create any wp users.
|
13
|
+
desc "Sets up a WordPress docroot and runs deployment; does not install wordpress and does not create any users"
|
14
|
+
task :setup do
|
15
|
+
puts "Deploying repo branch: #{fetch(:branch)}"
|
16
|
+
|
17
|
+
set :wp_version, ask('WordPress version to download:', 'latest')
|
18
|
+
# Printing out wp_version here because the `set` command above only runs
|
19
|
+
# the first time its associated symbol is referenced, and we want to
|
20
|
+
# capture version before running any other commands.
|
21
|
+
puts "Setting up wp_version: #{fetch(:wp_version)}"
|
22
|
+
|
23
|
+
require_cap_params!([:branch, :wp_version, :wp_docroot, :wp_data_path])
|
24
|
+
|
25
|
+
on roles(:web) do
|
26
|
+
wp_docroot_wp_config_file_path = File.join(fetch(:wp_docroot), 'wp-config.php')
|
27
|
+
wp_docroot_robots_txt_file_path = File.join(fetch(:wp_docroot), 'robots.txt')
|
28
|
+
wp_docroot_wp_content_path = File.join(fetch(:wp_docroot), 'wp-content')
|
29
|
+
|
30
|
+
shared_wp_config_file_path = shared_path.join('wp-config.php')
|
31
|
+
shared_robots_txt_file_path = shared_path.join('robots.txt')
|
32
|
+
|
33
|
+
wp_data_wp_content_path = File.join(fetch(:wp_data_path), 'wp-content')
|
34
|
+
|
35
|
+
invoke 'deploy' # Deploy before doing setup
|
36
|
+
|
37
|
+
# Create nginx logs directory if it doesn't already exist
|
38
|
+
execute :mkdir, '-p', deploy_path.join('logs')
|
39
|
+
|
40
|
+
# Make full path to wp_docroot directory if not exist
|
41
|
+
execute :mkdir, '-p', fetch(:wp_docroot)
|
42
|
+
|
43
|
+
# Make full path to wp_data_path if not exist
|
44
|
+
execute :mkdir, '-p', fetch(:wp_data_path)
|
45
|
+
|
46
|
+
# If wp_docroot/wp-includes does not exist, do wordpress download
|
47
|
+
unless test("[ -d #{File.join(fetch(:wp_docroot), 'wp-includes')} ]")
|
48
|
+
# Download and unpack new WP instance to wp_docroot
|
49
|
+
execute :wp, 'core', ['download', "--version=#{fetch(:wp_version)}", "--path=#{fetch(:wp_docroot)}"]
|
50
|
+
end
|
51
|
+
|
52
|
+
# Check for wp-config.php file in shared. Create if it doesn't exist.
|
53
|
+
unless test("[ -f #{shared_wp_config_file_path} ]")
|
54
|
+
# If no wp-config.php file is found in the 'shared' directory, copy WordPress built-in wp-config-sample.php to there
|
55
|
+
execute :cp, File.join(fetch(:wp_docroot), 'wp-config-sample.php'), shared_wp_config_file_path
|
56
|
+
end
|
57
|
+
|
58
|
+
# Delete original wp-sample-config.php
|
59
|
+
execute :rm, '-f', File.join(fetch(:wp_docroot), 'wp-config-sample.php')
|
60
|
+
# Create symlink for wp_document_root wp-config.php to 'shared' version.
|
61
|
+
execute :ln, '-sf', shared_wp_config_file_path, wp_docroot_wp_config_file_path
|
62
|
+
|
63
|
+
# Check for robots.txt file in shared. Create if it doesn't exist.
|
64
|
+
unless test("[ -f #{shared_robots_txt_file_path} ]")
|
65
|
+
execute "echo -e \"User-agent: *\nDisallow: /\" > #{shared_robots_txt_file_path}"
|
66
|
+
end
|
67
|
+
# Create symlink for wp_document_root robots.txt to 'shared' version.
|
68
|
+
execute :ln, '-sf', shared_robots_txt_file_path, wp_docroot_robots_txt_file_path
|
69
|
+
|
70
|
+
# Check for wp-content directory at wp_data_wp_content_path. Create if it doesn't exist.
|
71
|
+
unless test("[ -d #{wp_data_wp_content_path} ]")
|
72
|
+
# If no wp-config.php file is found in the 'shared' directory, copy WordPress built-in wp-config-sample.php to there
|
73
|
+
execute :cp, '-r', wp_docroot_wp_content_path, wp_data_wp_content_path
|
74
|
+
end
|
75
|
+
# Delete original wp-content directory
|
76
|
+
execute :rm, '-rf', wp_docroot_wp_content_path
|
77
|
+
# Create symlink for wp_document_root wp-content to wp_data_wp_content_path
|
78
|
+
execute :ln, '-sf', wp_data_wp_content_path, wp_docroot_wp_content_path
|
79
|
+
end
|
80
|
+
|
81
|
+
symlink_custom_plugins_and_themes
|
82
|
+
end
|
83
|
+
|
84
|
+
desc "Runs a WordPress installation for a newly set up instance and creates a new admin user"
|
85
|
+
task :install do
|
86
|
+
puts "Please provide administrative credentials:"
|
87
|
+
ask(:admin_user, "Admin username:")
|
88
|
+
ask(:admin_password, "Admin password:")
|
89
|
+
ask(:admin_email, "Admin email:")
|
90
|
+
|
91
|
+
require_cap_params!([:url, :title, :admin_user, :admin_password, :admin_email])
|
92
|
+
|
93
|
+
on roles(:web) do
|
94
|
+
within fetch(:wp_docroot) do
|
95
|
+
execute :wp, 'core', fetch(:multisite) ? 'multisite-install' : 'install',
|
96
|
+
"--url='#{fetch(:url)}'",
|
97
|
+
"--title='#{fetch(:title)}'",
|
98
|
+
"--admin_user='#{fetch(:admin_user)}'",
|
99
|
+
"--admin_password='#{fetch(:admin_password)}'",
|
100
|
+
"--admin_email='#{fetch(:admin_email)}'"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.require_cap_params!(vars)
|
106
|
+
validate vars do |key, value|
|
107
|
+
if value.nil? || value.empty?
|
108
|
+
raise Capistrano::ValidationError, "Missing required parameter #{key}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.symlink_custom_plugins_and_themes
|
114
|
+
on roles(:web) do
|
115
|
+
wp_data_wp_content_path = File.join(fetch(:wp_data_path), 'wp-content')
|
116
|
+
wp_data_plugin_path = File.join(wp_data_wp_content_path, 'plugins')
|
117
|
+
wp_data_themes_path = File.join(wp_data_wp_content_path, 'themes')
|
118
|
+
|
119
|
+
if test("[ -d #{wp_data_wp_content_path} ]")
|
120
|
+
# Remove old symlinks
|
121
|
+
[wp_data_plugin_path, wp_data_themes_path].each do |dir|
|
122
|
+
execute :find, dir, '-maxdepth 1', '-type l', '-exec rm {} \;'
|
123
|
+
end
|
124
|
+
|
125
|
+
# Add latest symlinks
|
126
|
+
fetch(:wp_custom_plugins, {}).each do |plugin, repo_relative_path|
|
127
|
+
execute :ln, '-sf', File.join(current_path, repo_relative_path), File.join(wp_data_plugin_path, plugin)
|
128
|
+
end
|
129
|
+
|
130
|
+
fetch(:wp_custom_themes, {}).each do |theme, repo_relative_path|
|
131
|
+
execute :ln, '-sf', File.join(current_path, repo_relative_path), File.join(wp_data_themes_path, theme)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-cul
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carla Galarza
|
@@ -55,10 +55,11 @@ files:
|
|
55
55
|
- VERSION
|
56
56
|
- capistrano-cul.gemspec
|
57
57
|
- lib/capistrano/cul.rb
|
58
|
-
- lib/capistrano/cul/hooks.rb
|
59
58
|
- lib/capistrano/cul/tasks.rb
|
59
|
+
- lib/capistrano/cul/wp.rb
|
60
60
|
- lib/capistrano/tasks/cul.cap
|
61
|
-
- lib/capistrano/tasks/
|
61
|
+
- lib/capistrano/tasks/wp.cap
|
62
|
+
- lib/capistrano/tasks/wp/update.cap
|
62
63
|
homepage: https://github.com/cul/capistrano-cul
|
63
64
|
licenses:
|
64
65
|
- MIT
|
@@ -79,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
80
|
version: '0'
|
80
81
|
requirements: []
|
81
82
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
83
|
+
rubygems_version: 2.6.12
|
83
84
|
signing_key:
|
84
85
|
specification_version: 4
|
85
86
|
summary: Common capistrano tasks shared across projects at CUL
|
data/lib/capistrano/cul/hooks.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
load File.expand_path('../../tasks/hooks.cap', __FILE__)
|
File without changes
|