| $LOAD_PATH.unshift '/srv/whimsy/lib' |
| |
| # Remove world writable directories that Travis may insert into the PATH, |
| # as these cause security errors during testing |
| ENV['PATH'] = ENV['PATH'].split(File::PATH_SEPARATOR). |
| reject {|path| File.world_writable? path}.join(File::PATH_SEPARATOR) |
| |
| require 'whimsy/asf/config' |
| |
| require 'rspec/core/rake_task' |
| RSpec::Core::RakeTask.new(:spec) |
| task :default => :spec |
| task :spec => 'test:setup' |
| task :test => :spec |
| |
| # setup authentication |
| task :auth do |
| require 'etc' |
| require 'io/console' |
| require 'base64' |
| |
| user = ENV['USER'] || ETC.getlogin |
| STDOUT.write "Enter password for #{user}: " |
| password = STDIN.noecho(&:gets).chomp |
| ENV['HTTP_AUTHORIZATION'] = "Basic #{Base64.encode64("#{user}:#{password}")}" |
| STDOUT.puts |
| end |
| |
| task :server => [:bundle, :listen] do |
| ENV['DOCUMENT_ROOT'] = File.expand_path('../..', Dir.pwd) |
| ENV['RACK_ENV']='development' |
| ENV['OBJC_DISABLE_INITIALIZE_FORK_SAFETY']='YES' if RUBY_PLATFORM =~ /darwin/ |
| at_exit {sleep 0.5} |
| sh 'bundle exec passenger start' |
| end |
| |
| namespace :server do |
| task :test => :work do |
| ENV['DOCUMENT_ROOT'] = File.expand_path('../..', Dir.pwd) |
| ENV['RACK_ENV']='test' |
| ENV['USER']='test' |
| require 'bundler' |
| Bundler.require(:default, :test) |
| require 'wunderbar/listen' |
| end |
| end |
| |
| task "touch" do |
| sh 'touch', File.expand_path('../tmp/restart.txt', __FILE__) |
| end |
| |
| file 'package-lock.json' => 'package.json' do |
| sh 'npm install' |
| sh 'touch package-lock.json' |
| end |
| |
| file 'test/work' do |
| mkdir_p 'test/work' |
| end |
| |
| file 'test/work/repository' => 'test/work' do |
| unless File.exist? 'test/work/repository/format' |
| system 'svnadmin create test/work/repository' |
| end |
| end |
| |
| file 'test/work/board' => 'test/work/repository' do |
| Dir.chdir('test/work') do |
| rm_rf 'board' if File.exist? 'board' |
| system "svn co file:///#{Dir.pwd}/repository board" |
| cp Dir['../data/*.txt'], 'board' |
| Dir.chdir('board') {system 'svn add *.txt; svn commit -m "initial commit"'} |
| end |
| end |
| |
| testfiles = %w(board_minutes_2015_01_21 board_minutes_2015_02_18 test) |
| testfiles.each do |testfile| |
| file "test/work/data/#{testfile}.yml" do |
| mkdir_p 'test/work/data' unless File.exist? 'test/work/data' |
| cp "test/#{testfile}.yml", "test/work/data/#{testfile}.yml" |
| end |
| end |
| |
| task :reset do |
| testfiles.each do |testfile| |
| if File.exist? "test/work/data/#{testfile}.yml" |
| if |
| IO.read("test/#{testfile}.yml") != |
| IO.read("test/work/data/#{testfile}.yml") |
| then |
| rm "test/work/data/#{testfile}.yml" |
| end |
| end |
| end |
| |
| if |
| Dir['test/work/board/*'].any? do |file| |
| base = "test/data/#{File.basename file}" |
| not File.exist?(base) or IO.read(base) != IO.read(file) |
| end |
| then |
| rm_rf 'test/work/board' |
| end |
| |
| unless Dir.exist? 'test/work/board' |
| rm_rf 'test/work/repository' |
| end |
| end |
| |
| task :work => ['test/work/board', |
| *testfiles.map {|testfile| "test/work/data/#{testfile}.yml"}] |
| |
| namespace :test do |
| task :setup => [:reset, :work, 'package-lock.json'] |
| task :server => 'server:test' |
| |
| task :stress => :setup do |
| ruby 'test/stresstest.rb' |
| end |
| end |
| |
| task :clobber do |
| rm_rf 'test/work' |
| end |
| |
| task :update do |
| # update agenda application |
| Dir.chdir File.dirname(__FILE__) do |
| puts "#{File.dirname(File.realpath(__FILE__))}:" |
| system 'git pull' |
| end |
| |
| # update libs |
| if File.exist? "#{ENV['HOME']}/.whimsy" |
| libs = YAML.load_file("#{ENV['HOME']}/.whimsy")[:lib] || [] |
| libs.each do |lib| |
| puts "\n#{lib}:" |
| if not File.exist? lib |
| puts 'not found' |
| next |
| end |
| |
| # determine repository type |
| repository = :none |
| parent = File.realpath(lib) |
| while repository == :none and parent != '/' |
| if File.exist? File.join(parent, '.svn') |
| repository = :svn |
| elsif File.exist? File.join(parent, '.git') |
| repository = :git |
| else |
| parent = File.dirname(parent) |
| end |
| end |
| |
| # update repository |
| Dir.chdir lib do |
| system 'svn up' if repository == :svn |
| system 'git pull' if repository == :git |
| end |
| end |
| end |
| |
| # update gems |
| puts "\nbundle update:" |
| system 'bundle update' |
| end |
| |
| namespace :svn do |
| task :update do |
| ASF::Config.get(:svn).each do |svn| |
| if Dir.exist? svn |
| puts "\n#{svn}:" |
| Dir.chdir(svn) {system 'svn up'} |
| end |
| end |
| end |
| end |
| |
| task :bundle => 'Gemfile.lock' do |
| require 'bundler' |
| Bundler.require(:default, :development) |
| end |
| |
| # restart server when files update |
| task :listen => :bundle do |
| dirs = [ |
| File.expand_path('..', File.realpath(__FILE__)), |
| File.expand_path('../../../../lib', File.realpath(__FILE__)) |
| ] |
| |
| listener = Listen.to(*dirs) do |modified, added, removed| |
| puts "detected update: #{(modified + added + removed).join(', ')}" |
| FileUtils.touch "#{dirs.first}/tmp/restart.txt" |
| end |
| |
| listener.ignore /~$/ |
| listener.ignore /^\..*\.sw\w$/ |
| listener.ignore /passenger.\d+\.(log|pid(\.lock)?)$/ |
| |
| listener.start |
| end |
| |
| # cleanup |
| require 'rake/clean' |
| CLEAN.include 'passenger.3000.*', 'test/work' |
| CLOBBER.include 'node_modules', 'package-lock.json' |