39 lines
1.1 KiB
Ruby
39 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module GitHub
|
|
# Helper functions for interacting with GitHub Actions.
|
|
#
|
|
# @api private
|
|
module Actions
|
|
def self.escape(string)
|
|
string.gsub(/\r/, "%0D")
|
|
.gsub(/\n/, "%0A")
|
|
.gsub(/]/, "%5D")
|
|
.gsub(/;/, "%3B")
|
|
end
|
|
|
|
# Helper class for formatting annotations on GitHub Actions.
|
|
class Annotation
|
|
def initialize(type, message, file: nil, line: nil, column: nil)
|
|
raise ArgumentError, "Unsupported type: #{type.inspect}" unless [:warning, :error].include?(type)
|
|
|
|
@type = type
|
|
@message = String(message)
|
|
@file = Pathname(file) if file
|
|
@line = Integer(line) if line
|
|
@column = Integer(column) if column
|
|
end
|
|
|
|
def to_s
|
|
file = "file=#{Actions.escape(@file.to_s)}" if @file
|
|
line = "line=#{@line}" if @line
|
|
column = "col=#{@column}" if @column
|
|
|
|
metadata = [*file, *line, *column].join(",").presence&.prepend(" ")
|
|
|
|
"::#{@type}#{metadata}::#{Actions.escape(@message)}"
|
|
end
|
|
end
|
|
end
|
|
end
|