# # Copyright:: Copyright (c) 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. # namespace :spellcheck do task run: :prereqs do sh 'cspell lint --no-progress "**/*"' end task prereqs: %i{curl_check cspell_check config_check fetch_common} task :curl_check do curl_version = begin `curl --version` rescue nil end curl_version.is_a?(String) || abort(<<~INSTALL_CURL) curl is not available, cannot download chef_dictionary.txt INSTALL_CURL end task :fetch_common do sh "curl -s https://raw.githubusercontent.com/chef/chef_dictionary/main/chef.txt -o chef_dictionary.txt" end task :config_check do require "json" chef_dictionary = "chef_dictionary.txt" unless File.readable?(chef_dictionary) abort "Dictionary file '#{chef_dictionary}' not found, skipping spellcheck" end config_file = "cspell.json" unless File.readable?(config_file) abort "Spellcheck config file '#{config_file}' not found, skipping spellcheck" end unless (JSON.parse(File.read(config_file)) rescue false) abort "Failed to parse config file '#{config_file}', skipping spellcheck" end end task :cspell_check do cspell_version = begin `cspell --version` rescue nil end cspell_version.is_a?(String) || abort(<<~INSTALL_CSPELL) cspell is needed to run the spellcheck tasks. Run `npm install -g cspell` to install. For more information: https://www.npmjs.com/package/cspell INSTALL_CSPELL end end desc "Run spellcheck on the project." task spellcheck: "spellcheck:run"