capistrano-faster-assets-and-packs 1.2.0
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 +7 -0
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.md +19 -0
- data/README.md +56 -0
- data/Rakefile +1 -0
- data/capistrano-faster-assets.gemspec +35 -0
- data/lib/capistrano/faster_assets/version.rb +5 -0
- data/lib/capistrano/faster_assets.rb +1 -0
- data/lib/capistrano/tasks/faster_assets.rake +133 -0
- data/lib/capistrano-faster-assets.rb +0 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f952d6737627d0543cfb7cba55778ed62fd21736d14ec5fc50a9ba62dda1b027
|
4
|
+
data.tar.gz: d506e108b114bd3fdcb63ff91fb8ccefe839fcea12facac4632d2694b9e19c9b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ff47915e19698df4a031d434a1b069399e10d9bf8007f36e00ad0cdd948e5e884d7ef26dd54a5772d4a02336814b1a5fe718ec56e25f35ab7ae717d6ac4984af
|
7
|
+
data.tar.gz: 8c746b093d0de5f53d6c7c052f7ade40fcff3dc92cabe91ca3d5cd9b1cedb1ed350b6f6325d07326a25fca09da534629acb9dd37f425c73e6db1f907869336b0
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2014 Andrew Thal, Ruben Stranders
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the "Software"),
|
5
|
+
to deal in the Software without restriction, including without limitation
|
6
|
+
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
7
|
+
and/or sell copies of the Software, and to permit persons to whom the
|
8
|
+
Software is furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included
|
11
|
+
in all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
14
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
15
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
16
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
17
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
18
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
19
|
+
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# Capistrano::FasterAssets
|
2
|
+
|
3
|
+
This gem speeds up asset compilation by skipping the assets:precompile task if none of the assets were changed since last release.
|
4
|
+
|
5
|
+
**Feature**: Skipping the webpack:compile task if none of the `app/javascript/*` or `yarn.lock` changed since last release.
|
6
|
+
|
7
|
+
This Gem is fork form **capistrano-faster-assets** and one of amazing PR of this gem.
|
8
|
+
Original Gem was amazing, but unfortunately it was stop maintenance from 5 years ago. So I fork it and push this gem to rubygem.
|
9
|
+
|
10
|
+
Original Version: https://github.com/capistrano-plugins/capistrano-faster-assets
|
11
|
+
Original PR: https://github.com/AutoUncle/capistrano-faster-assets
|
12
|
+
|
13
|
+
Works *only* with Capistrano 3+.
|
14
|
+
|
15
|
+
### Installation
|
16
|
+
|
17
|
+
Add this to `Gemfile`:
|
18
|
+
|
19
|
+
group :development do
|
20
|
+
gem 'capistrano', '~> 3.1'
|
21
|
+
gem 'capistrano-rails', '~> 1.1'
|
22
|
+
gem 'capistrano-faster-assets-and-packs', '~> 1.0'
|
23
|
+
end
|
24
|
+
|
25
|
+
And then:
|
26
|
+
|
27
|
+
$ bundle install
|
28
|
+
|
29
|
+
### Setup and usage
|
30
|
+
|
31
|
+
#### assets compilation
|
32
|
+
Add this line to `Capfile`, after `require 'capistrano/rails/assets'`
|
33
|
+
|
34
|
+
require 'capistrano/faster_assets'
|
35
|
+
|
36
|
+
Configure your asset depedencies in deploy.rb if you need to check additional paths (e.g. if you have some assets in YOUR_APP/engines/YOUR_ENGINE/app/assets). Default paths are:
|
37
|
+
|
38
|
+
set :assets_dependencies, %w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)
|
39
|
+
|
40
|
+
### webpack compilation
|
41
|
+
Configure your webpack depedencies in deploy.rb if you need to check additional paths. Default paths are:
|
42
|
+
set :webpack_dependencies, %w(app/javascript app/yarn.lock)
|
43
|
+
|
44
|
+
Configure your webpack source_entry_packs in deploy.rb, if your `source_entry_packs` configuration in config/webpack.yml is not `packs`.
|
45
|
+
Default is:
|
46
|
+
|
47
|
+
set :webpack_entry_path, 'packs'
|
48
|
+
|
49
|
+
### Reference
|
50
|
+
|
51
|
+
Original Gem: https://github.com/capistrano-plugins/capistrano-faster-assets
|
52
|
+
The PR Version: https://github.com/AutoUncle/capistrano-faster-assets
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'capistrano/faster_assets/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.name = 'capistrano-faster-assets-and-packs'
|
7
|
+
gem.version = Capistrano::FasterAssets::VERSION
|
8
|
+
gem.authors = ['Andrew Thal', 'Ruben Stranders', 'Arthur Li']
|
9
|
+
gem.email = ['athal7@me.com', 'r.stranders@gmail.com', 'z22919456@gmail.com']
|
10
|
+
gem.description = <<-EOF.gsub(/^\s+/, '')
|
11
|
+
Speeds up asset compilation by skipping the assets:precompile task if none of the assets were changed since last release.
|
12
|
+
And also skiping the webpack:compile task if nonoe of the app/javascript or yarn.lock changed since last release.
|
13
|
+
|
14
|
+
This Gem is fork form *capistrano-faster-assets* and one of amazing PR in this gem
|
15
|
+
|
16
|
+
Original Version: https://github.com/capistrano-plugins/capistrano-faster-assets
|
17
|
+
Original PR: https://github.com/AutoUncle/capistrano-faster-assets
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
Works *only* with Capistrano 3+.
|
22
|
+
|
23
|
+
Based on https://coderwall.com/p/aridag
|
24
|
+
EOF
|
25
|
+
gem.summary = 'Speeds up asset compilation if none of the assets were changed since last release.'
|
26
|
+
gem.homepage = 'https://github.com/z22919456/capistrano-faster-assets-and-packs'
|
27
|
+
|
28
|
+
gem.files = `git ls-files`.split($/)
|
29
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
30
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
31
|
+
gem.require_paths = ['lib']
|
32
|
+
|
33
|
+
gem.add_dependency 'capistrano', '>= 3.1'
|
34
|
+
gem.add_development_dependency 'rake'
|
35
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path("../tasks/faster_assets.rake", __FILE__)
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# Original source: https://coderwall.com/p/aridag
|
2
|
+
# Original Gem: https://github.com/capistrano-plugins/capistrano-faster-assets
|
3
|
+
# Original PR: https://github.com/AutoUncle/capistrano-faster-assets
|
4
|
+
|
5
|
+
# set the locations that we will look for changed assets to determine whether to precompile
|
6
|
+
set :assets_dependencies, %w[app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb]
|
7
|
+
set :webpack_dependencies, %w[app/javascript yarn.lock package-lock.json]
|
8
|
+
set :force_precompile, false
|
9
|
+
set :webpack_entry_path, 'packs'
|
10
|
+
|
11
|
+
# clear the previous precompile task
|
12
|
+
Rake::Task['deploy:assets:precompile'].clear_actions
|
13
|
+
class PrecompileRequired < StandardError; end
|
14
|
+
class WebpackCompileRequired < StandardError; end
|
15
|
+
|
16
|
+
namespace :deploy do
|
17
|
+
namespace :assets do
|
18
|
+
desc 'Precompile assets'
|
19
|
+
task :precompile do
|
20
|
+
on roles(fetch(:assets_roles)) do
|
21
|
+
within release_path do
|
22
|
+
with rails_env: fetch(:rails_env) do
|
23
|
+
raise PrecompileRequired, 'A forced precompile was triggered' if fetch(:force_precompile)
|
24
|
+
|
25
|
+
# find the most recent release
|
26
|
+
latest_release = capture(:ls, '-xr', releases_path).split[1]
|
27
|
+
|
28
|
+
# precompile if this is the first deploy
|
29
|
+
raise PrecompileRequired, 'Fresh deployment detected (no previous releases present)' unless latest_release
|
30
|
+
|
31
|
+
latest_release_path = releases_path.join(latest_release)
|
32
|
+
|
33
|
+
# precompile if the previous deploy failed to finish precompiling
|
34
|
+
begin
|
35
|
+
execute(:ls, latest_release_path.join('assets_manifest_backup'))
|
36
|
+
rescue StandardError
|
37
|
+
raise PrecompileRequired,
|
38
|
+
'The previous deployment does not have any assets_manifest_backup this indicates precompile was not successful'
|
39
|
+
end
|
40
|
+
|
41
|
+
### Check Assets
|
42
|
+
|
43
|
+
fetch(:assets_dependencies).each do |dep|
|
44
|
+
release = release_path.join(dep)
|
45
|
+
latest = latest_release_path.join(dep)
|
46
|
+
|
47
|
+
# skip if both directories/files do not exist
|
48
|
+
next if [release, latest].map { |d| test "[ -e #{d} ]" }.uniq == [false]
|
49
|
+
|
50
|
+
# execute raises if there is a diff
|
51
|
+
begin
|
52
|
+
execute(:diff, '-Nqr', release, latest)
|
53
|
+
rescue StandardError
|
54
|
+
raise PrecompileRequired, "Found a difference between the current and the new version of: #{dep}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# copy over all of the assets from the last release
|
59
|
+
release_asset_path = release_path.join('public', fetch(:assets_prefix))
|
60
|
+
# skip if assets directory is symlink
|
61
|
+
begin
|
62
|
+
execute(:test, '-L', release_asset_path.to_s)
|
63
|
+
rescue StandardError
|
64
|
+
execute(:cp, '-r', latest_release_path.join('public', fetch(:assets_prefix)), release_asset_path.parent)
|
65
|
+
end
|
66
|
+
|
67
|
+
# check that the manifest has been created correctly, if not
|
68
|
+
# trigger a precompile
|
69
|
+
begin
|
70
|
+
# Support sprockets 2
|
71
|
+
execute(:ls, release_asset_path.join('manifest*'))
|
72
|
+
rescue StandardError
|
73
|
+
begin
|
74
|
+
# Support sprockets 3
|
75
|
+
execute(:ls, release_asset_path.join('.sprockets-manifest*'))
|
76
|
+
rescue StandardError
|
77
|
+
raise PrecompileRequired, 'No sprockets-manifest found'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
### Check Webpack
|
82
|
+
fetch(:webpack_dependencies).each do |dep|
|
83
|
+
release = release_path.join(dep)
|
84
|
+
latest = latest_release_path.join(dep)
|
85
|
+
|
86
|
+
# skip if both directories/files do not exist
|
87
|
+
next if [release, latest].map { |d| test "[ -e #{d} ]" }.uniq == [false]
|
88
|
+
|
89
|
+
# execute raises if there is a diff
|
90
|
+
begin
|
91
|
+
execute(:diff, '-Nqr', release, latest)
|
92
|
+
rescue StandardError
|
93
|
+
raise WebpackCompileRequired, "Found a difference between the current and the new version of: #{dep}"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# copy over all of the packs from the last release
|
98
|
+
release_webpack_path = release_path.join('public', fetch(:webpack_entry_path))
|
99
|
+
# skip if packs directory is symlink
|
100
|
+
begin
|
101
|
+
execute(:test, '-L', release_webpack_path.to_s)
|
102
|
+
rescue StandardError
|
103
|
+
begin
|
104
|
+
# check that the packs of the last release has been created, or trigger a webpack compile
|
105
|
+
execute(:cp, '-r', latest_release_path.join('public', fetch(:webpack_entry_path)),
|
106
|
+
release_webpack_path.parent)
|
107
|
+
rescue StandardError
|
108
|
+
raise WebpackCompileRequired, 'No latest packs found'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# check that the webpack manifest has been created correctly, if not
|
113
|
+
# trigger a webpack compile
|
114
|
+
begin
|
115
|
+
execute(:ls, release_webpack_path.join('manifest*'))
|
116
|
+
rescue StandardError
|
117
|
+
raise WebpackCompileRequired, 'No webpack manifest found'
|
118
|
+
end
|
119
|
+
|
120
|
+
info('Skipping webpack precompile, no asset diff found')
|
121
|
+
rescue PrecompileRequired => e
|
122
|
+
warn(e.message)
|
123
|
+
execute(:rake, 'assets:precompile')
|
124
|
+
rescue WebpackCompileRequired => e
|
125
|
+
warn(e.message)
|
126
|
+
execute(:rake, 'yarn:install')
|
127
|
+
execute(:rake, 'webpacker:compile')
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
File without changes
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capistrano-faster-assets-and-packs
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Thal
|
8
|
+
- Ruben Stranders
|
9
|
+
- Arthur Li
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2022-06-28 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: capistrano
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ">="
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.1'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '3.1'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: rake
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
description: |
|
44
|
+
Speeds up asset compilation by skipping the assets:precompile task if none of the assets were changed since last release.
|
45
|
+
And also skiping the webpack:compile task if nonoe of the app/javascript or yarn.lock changed since last release.
|
46
|
+
This Gem is fork form *capistrano-faster-assets* and one of amazing PR in this gem
|
47
|
+
Original Version: https://github.com/capistrano-plugins/capistrano-faster-assets
|
48
|
+
Original PR: https://github.com/AutoUncle/capistrano-faster-assets
|
49
|
+
Works *only* with Capistrano 3+.
|
50
|
+
Based on https://coderwall.com/p/aridag
|
51
|
+
email:
|
52
|
+
- athal7@me.com
|
53
|
+
- r.stranders@gmail.com
|
54
|
+
- z22919456@gmail.com
|
55
|
+
executables: []
|
56
|
+
extensions: []
|
57
|
+
extra_rdoc_files: []
|
58
|
+
files:
|
59
|
+
- ".gitignore"
|
60
|
+
- Gemfile
|
61
|
+
- LICENSE.md
|
62
|
+
- README.md
|
63
|
+
- Rakefile
|
64
|
+
- capistrano-faster-assets.gemspec
|
65
|
+
- lib/capistrano-faster-assets.rb
|
66
|
+
- lib/capistrano/faster_assets.rb
|
67
|
+
- lib/capistrano/faster_assets/version.rb
|
68
|
+
- lib/capistrano/tasks/faster_assets.rake
|
69
|
+
homepage: https://github.com/z22919456/capistrano-faster-assets-and-packs
|
70
|
+
licenses: []
|
71
|
+
metadata: {}
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubygems_version: 3.1.6
|
88
|
+
signing_key:
|
89
|
+
specification_version: 4
|
90
|
+
summary: Speeds up asset compilation if none of the assets were changed since last
|
91
|
+
release.
|
92
|
+
test_files: []
|