forked from gsamokovarov/web-console
-
Notifications
You must be signed in to change notification settings - Fork 178
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Wait for started up a web server after rackup
Sometimes a connection to web server fails on the "test:templates" rake task. This commit fixes it by adding a "wait" task. ref: https://travis-ci.org/rails/web-console/jobs/75395250 And split Rakefile into "lib/web_console/tasks/*.rake".
- Loading branch information
1 parent
3bf8cc5
commit 7532c2e
Showing
3 changed files
with
111 additions
and
101 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
namespace :ext do | ||
rootdir = Pathname('extensions') | ||
|
||
desc 'Build Chrome Extension' | ||
task chrome: 'chrome:build' | ||
|
||
namespace :chrome do | ||
dist = Pathname('dist/crx') | ||
extdir = rootdir.join(dist) | ||
manifest_json = rootdir.join('chrome/manifest.json') | ||
|
||
directory extdir | ||
|
||
task build: [ extdir, 'lib:templates' ] do | ||
cd rootdir do | ||
cp_r [ 'img/', 'tmp/lib/' ], dist | ||
`cd chrome && git ls-files`.split("\n").each do |src| | ||
dest = dist.join(src) | ||
mkdir_p dest.dirname | ||
cp Pathname('chrome').join(src), dest | ||
end | ||
end | ||
end | ||
|
||
# Generate a .crx file. | ||
task crx: [ :build, :npm ] do | ||
out = "crx-web-console-#{JSON.parse(File.read(manifest_json))["version"]}.crx" | ||
cd(extdir) { sh "node \"$(npm bin)/crx\" pack ./ -p ../crx-web-console.pem -o ../#{out}" } | ||
end | ||
|
||
# Generate a .zip file for Chrome Web Store. | ||
task zip: [ :build ] do | ||
version = JSON.parse(File.read(manifest_json))["version"] | ||
cd(extdir) { sh "zip -r ../crx-web-console-#{version}.zip ./" } | ||
end | ||
|
||
desc 'Launch a browser with the chrome extension.' | ||
task run: [ :build ] do | ||
cd(rootdir) { sh "sh ./script/run_chrome.sh --load-extension=#{dist}" } | ||
end | ||
end | ||
|
||
task :npm do | ||
cd(rootdir) { sh "npm install --silent" } | ||
end | ||
|
||
namespace :lib do | ||
templates = Pathname('lib/web_console/templates') | ||
tmplib = rootdir.join('tmp/lib/') | ||
js_erb = FileList.new(templates.join('**/*.js.erb')) | ||
dirs = js_erb.pathmap("%{^#{templates},#{tmplib}}d") | ||
|
||
task templates: dirs + js_erb.pathmap("%{^#{templates},#{tmplib}}X") | ||
|
||
dirs.each { |d| directory d } | ||
rule '.js' => [ "%{^#{tmplib},#{templates}}X.js.erb" ] do |t| | ||
File.write(t.name, WebConsole::Testing::ERBPrecompiler.new(t.source).build) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
namespace :test do | ||
desc "Run tests for templates" | ||
task templates: "templates:all" | ||
|
||
namespace :templates do | ||
task all: [ :daemonize, :npm, :rackup, :wait, :mocha, :kill, :exit ] | ||
task serve: [ :npm, :rackup ] | ||
|
||
work_dir = Pathname(EXPANDED_CWD).join("test/templates") | ||
pid_file = Pathname(Dir.tmpdir).join("web_console.#{SecureRandom.uuid}.pid") | ||
runner_uri = URI.parse("http://localhost:29292/html/spec_runner.html") | ||
rackup_opts = "-p #{runner_uri.port}" | ||
test_result = nil | ||
|
||
def need_to_wait?(uri) | ||
Net::HTTP.start(uri.host, uri.port) { |http| http.get(uri.path) } | ||
rescue Errno::ECONNREFUSED | ||
retry if yield | ||
end | ||
|
||
task :daemonize do | ||
rackup_opts += " -D -P #{pid_file}" | ||
end | ||
|
||
task :npm do | ||
Dir.chdir(work_dir) { system "npm install --silent" } | ||
end | ||
|
||
task :rackup do | ||
Dir.chdir(work_dir) { system "bundle exec rackup #{rackup_opts}" } | ||
end | ||
|
||
task :wait do | ||
cnt = 0 | ||
need_to_wait?(runner_uri) { sleep 1; cnt += 1; cnt < 5 } | ||
end | ||
|
||
task :mocha do | ||
Dir.chdir(work_dir) { test_result = system("$(npm bin)/mocha-phantomjs #{runner_uri}") } | ||
end | ||
|
||
task :kill do | ||
system "kill #{File.read pid_file}" | ||
end | ||
|
||
task :exit do | ||
exit test_result | ||
end | ||
end | ||
end |