capistrano-cul 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|