inspec/www/Rakefile
Ryan Davis 1750139dbb Revamp www rakefile and friends to make pushing doco easier.
Signed-off-by: Ryan Davis <zenspider@chef.io>
2019-11-06 18:26:14 -08:00

102 lines
2.7 KiB
Ruby
Executable file

$LOAD_PATH.unshift "../lib"
require "uri"
require "net/http"
require "fastly"
require_relative "../tasks/docs.rb"
require_relative "../tasks/shared.rb"
task default: :www # at bottom
namespace :www do # rubocop:disable Metrics/BlockLength
desc "Builds the middleman site"
task :site do
sh("bundle exec middleman build --parallel --clean --no-verbose")
# TODO: remove:
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"
task :assemble do
# do nothing for now
end
desc "Builds the full site locally"
task build: %w{www:site www:assemble}
task :clean do
rm_rf("build")
end
desc "Releases the site to gh-pages"
task :release do
src = File.expand_path "build"
unless system("git diff-index --quiet HEAD --")
warn "WARNING: You have uncommitted changes in this repository."
end
Dir.mktmpdir do |path|
sh("git worktree add #{path}/gh-pages gh-pages")
Dir.chdir "#{path}/gh-pages" do
rm_rf Dir["*"] # easiest way to account for removals
cp_r Dir["#{src}/*"], "." # copy build back
File.write("CNAME", "origin.inspec.io") # TODO: just check this file in?
sh "git add ." # add everything that changed
sh "git status"
if ENV["V"]
sh "git diff --cached"
end
if ENV["PUSH"]
sh "git commit -m 'website update'"
sh "git push -u origin gh-pages"
end
end
sh("git worktree remove -f #{path}/gh-pages")
end
end
desc "Flush the inspec.io cache at Fastly"
task :flush do
api_key = ENV["FASTLY_API_KEY"]
service_id = ENV["FASTLY_SERVICE_ID"]
unless api_key && service_id
puts
puts "WARNING: could not flush the Fastly cache for inspec.io."
puts "Please set FASTLY_API_KEY and FASTLY_SERVICE_ID environment variables"
puts "and run `rake www:flush`."
puts
next
end
Log.info "Flushing the Fastly cache"
begin
fastly_client = Fastly.new(api_key: api_key)
fastly_service = Fastly::Service.new({ id: service_id }, fastly_client)
purge_result = fastly_service.purge_all
rescue => e
puts "ERROR: Fastly cache could not be purged: #{e.class} - #{e.message}"
next
end
if purge_result["status"] == "ok"
puts "Success! The Fastly cache is purged."
else
puts "ERROR: Fastly cache could not be purged: #{purge_result}"
end
end
end
desc "Full website release: includes docs build, site build, and then release"
task www: %w{docs www:build www:release www:flush}