mirror of
https://github.com/inspec/inspec
synced 2024-11-23 13:13:22 +00:00
65c95d243e
This is a follow-up to #1585. The website-related Rake tasks have been moved to a www-specific Rakefile which can be found in the www/ directory. Any web-release-related gems have been moved to the www Gemfile as well. This also included modifying the docs rake tasks to be path- independent as they currently expect that Rake is being run from the root of the repo. Signed-off-by: Adam Leff <adam@leff.co>
140 lines
4.4 KiB
Ruby
140 lines
4.4 KiB
Ruby
#!/usr/bin/env rake
|
|
# encoding: utf-8
|
|
# Copyright:: Copyright (c) 2015 Chef Software, Inc.
|
|
# License:: Apache License, Version 2.0
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
$LOAD_PATH.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
|
|
|
|
require_relative '../tasks/docs.rb'
|
|
require_relative '../tasks/shared.rb'
|
|
|
|
task :default do
|
|
puts 'There is no default task - see `rake --tasks` for available www-related tasks.'
|
|
puts 'Run `rake www` to do a full website release.'
|
|
exit(1)
|
|
end
|
|
|
|
namespace :www do
|
|
desc 'Builds the tutorial contents'
|
|
task :tutorial do
|
|
Log.section 'Build the online tutorial in tutorial/'
|
|
sh('cd tutorial/ && npm install')
|
|
sh('cd tutorial/ && gulp build')
|
|
Verify.file('tutorial/dist/index.html')
|
|
Verify.file('tutorial/dist/css/inspec_tutorial.css')
|
|
Verify.file('tutorial/dist/scripts/inspec_tutorial.js')
|
|
Verify.file('tutorial/dist/dist/inspec_tutorial.js')
|
|
end
|
|
|
|
desc 'Builds the middleman site'
|
|
task :site do
|
|
Log.section 'Build middleman project'
|
|
Bundler.with_clean_env {
|
|
sh('bundle install && bundle exec middleman build')
|
|
}
|
|
Verify.file('build/index.html')
|
|
Verify.file('build/javascripts/all.js')
|
|
Verify.file('build/stylesheets/site.css')
|
|
end
|
|
|
|
desc 'Assemble the website site from middleman and the tutorial'
|
|
task :assemble do
|
|
Log.section 'Copy only tutorial into middleman build directory'
|
|
sh('rsync -a --exclude=index.html tutorial/dist/* build/')
|
|
sh('cp tutorial/dist/index.html build/tutorial.html')
|
|
end
|
|
|
|
desc 'Builds the full site locally'
|
|
task build: ['www:tutorial', 'www:site', 'www:assemble']
|
|
|
|
task :clean do
|
|
dst = 'build'
|
|
FileUtils.rm_rf(dst) if File.directory?(dst)
|
|
end
|
|
|
|
desc 'Releases the site to gh-pages'
|
|
task :release do
|
|
# This folder contains the built files
|
|
dst = 'build'
|
|
unless File.directory?(dst) && File.file?(File.join(dst, 'index.html'))
|
|
puts 'It looks like you have not built the site yet. Calling rake www:build'
|
|
Rake::Task['www:build'].invoke
|
|
end
|
|
|
|
unless File.directory?(dst) && File.file?(File.join(dst, 'index.html'))
|
|
raise 'It looks like the site was not build. Aborting.'
|
|
end
|
|
|
|
# check if git exists
|
|
sh('command -v git >/dev/null 2>&1') ||
|
|
raise("It looks like `git` isn't installed. It is required to run this build task.")
|
|
|
|
unless sh('git diff-index --quiet HEAD --')
|
|
raise 'Please make sure you have no uncommitted changes in this repository.'
|
|
end
|
|
|
|
File.write('build/CNAME', 'inspec.io')
|
|
file_count = Dir['build/*'].length
|
|
file_size = `du -hs build`.sub(/\s+.*$/m, '')
|
|
|
|
if system('git rev-parse --verify gh-pages')
|
|
Log.info 'Remove local gh-pages branch'
|
|
sh('git branch -D gh-pages')
|
|
end
|
|
|
|
current_branch = `git rev-parse --abbrev-ref HEAD`.strip
|
|
if current_branch.empty?
|
|
raise 'Cannot determine current branch to go back to! Aborting.'
|
|
end
|
|
|
|
Log.info 'Create empty gh-pages branch'
|
|
sh('git checkout --orphan gh-pages')
|
|
|
|
Log.info 'Clear out all local git files!'
|
|
sh('git rm -rf .')
|
|
|
|
Log.info "Add the built files in #{dst}"
|
|
sh("git add #{dst}")
|
|
|
|
Log.info 'Remove all other files in this empty branch'
|
|
sh('git clean -df')
|
|
|
|
Log.info 'Move the site to the root directory'
|
|
sh("git mv #{File.join(dst, '*')} .")
|
|
|
|
Log.info 'Commit to gh-pages'
|
|
sh("git commit -m 'website update'")
|
|
|
|
require 'inquirer'
|
|
if Ask.confirm("Ready to go, I have #{file_count} files at #{file_size}. "\
|
|
'Do you want to push this live?', default: false)
|
|
Log.info 'push to origin, this may take a moment'
|
|
sh('git push -u origin --force-with-lease gh-pages')
|
|
else
|
|
puts 'Aborted.'
|
|
end
|
|
|
|
sh("git checkout #{current_branch}")
|
|
end
|
|
end
|
|
|
|
desc 'Full website release: includes local clean, docs build, site build, and then release'
|
|
task :www do
|
|
Rake::Task['www:clean'].invoke
|
|
Rake::Task['docs'].invoke
|
|
Rake::Task['www:build'].invoke
|
|
Rake::Task['www:release'].invoke
|
|
end
|