class Dependabot::Notice
def self.generate_deprecation_notice(version_manager, version_manager_type = :package_manager)
def self.generate_deprecation_notice(version_manager, version_manager_type = :package_manager) return nil unless version_manager.deprecated? mode = NoticeMode::WARN supported_versions_description = generate_supported_versions_description( version_manager.supported_versions, version_manager.support_later_versions?, version_manager_type ) notice_type = "#{version_manager.name}_deprecated_warn" title = version_manager_type == :language ? "Language deprecation notice" : "Package manager deprecation notice" description = "Dependabot will stop supporting `#{version_manager.name} v#{version_manager.detected_version}`!" ## Add the supported versions to the description description += "\n\n#{supported_versions_description}\n" unless supported_versions_description.empty? Notice.new( mode: mode, type: notice_type, package_manager_name: version_manager.name, title: title, description: description, show_in_pr: true, show_alert: true ) end
def self.generate_supported_versions_description(
def self.generate_supported_versions_description( supported_versions, support_later_versions, version_manager_type = :package_manager ) entity_text = version_manager_type == :language ? "language" : "package manager" return "Please upgrade your #{entity_text} version" unless supported_versions&.any? versions_string = supported_versions.map { |version| "`v#{version}`" } versions_string[-1] = "or #{versions_string[-1]}" if versions_string.count > 1 && !support_later_versions versions_string = versions_string.join(", ") later_description = support_later_versions ? ", or later" : "" return "Please upgrade to version #{versions_string}#{later_description}." if supported_versions.count == 1 "Please upgrade to one of the following versions: #{versions_string}#{later_description}." end
def self.markdown_from_description(notice)
def self.markdown_from_description(notice) description = notice.description return if description.empty? markdown = "> [!#{markdown_mode(notice.mode)}]\n" # Log each non-empty line of the deprecation notice description description.each_line do |line| line = line.strip markdown += "> #{line}\n" end markdown += ">\n\n" markdown end
def self.markdown_mode(mode)
def self.markdown_mode(mode) case mode when NoticeMode::INFO "INFO" when NoticeMode::WARN "WARNING" when NoticeMode::ERROR "IMPORTANT" else "INFO" end end
def initialize(
def initialize( mode:, type:, package_manager_name:, title: "", description: "", show_in_pr: false, show_alert: false ) @mode = mode @type = type @package_manager_name = package_manager_name @title = title @description = description @show_in_pr = show_in_pr @show_alert = show_alert end
def to_hash
def to_hash { mode: @mode, type: @type, package_manager_name: @package_manager_name, title: @title, description: @description, show_in_pr: @show_in_pr, show_alert: @show_alert } end