# frozen_string_literal: true module NeetoCompliance class NodeVersionVerifier < Base def local_node_version @_local_node_version ||= File.open(".node-version").read.chomp end def commons_node_version @_commons_node_version ||= File.open(commons_node_version_copy).read.chomp end def local_package_json_engines JSON.parse(open("package.json").read)["engines"] end def autofix_suggestion @errors.join("\n").yellow end def valid? @errors = [] unless updated_nvmrc_file? @errors << "Update node version in .nvmrc to #{commons_node_version}" end unless updated_node_version_file? @errors << "Update node version in .node-version to #{commons_node_version}" end unless check_node_step_added_to_semahore_config? @errors << "Add node version to your semaphore.yml as shown below: global_job_config: prologue: commands: - checkout - sem-version ruby 3.0.1 - sem-version node #{commons_node_version} - sem-service start postgres 12.4 \n " end unless updated_package_file? @errors << "Update node version in package.json to #{commons_node_version}" end @errors.length == 0 end def updated_node_version_file? commons_node_version == File.open(".node-version").read.chomp end def updated_nvmrc_file? commons_node_version == File.open(".nvmrc").read.chomp end def check_node_step_added_to_semahore_config? semaphore_config = YAML.load(File.open(".semaphore/semaphore.yml").read, aliases: true) semaphore_command = "sem-version node #{commons_node_version}" semaphore_config["global_job_config"]["prologue"]["commands"].include?(semaphore_command) end def updated_package_file? commons_node_version == local_package_json_engines["node"] end def commons_node_version_copy NeetoCompliance::NeetoCommons.path.join "common_files/.node-version" end def update_package_file "perl -p -i -e 's/\"node\": \"#{local_node_version}\"/\"node\": \"#{commons_node_version}\"/g' package.json" end def update_semaphore_config_file "perl -p -i -e 's/sem-version node #{local_node_version}/sem-version node #{commons_node_version}/g' .semaphore/semaphore.yml" end def autofix_command "#{update_semaphore_config_file}\n#{update_package_file}" end end end