Skip to content

Commit 20c603b

Browse files
authored
Merge pull request #260 from sensu/issue_256
allow for readme override
2 parents 1e997fb + f598aef commit 20c603b

File tree

6 files changed

+100
-12
lines changed

6 files changed

+100
-12
lines changed

app/helpers/extension_versions_helper.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ def extension_atom_content(extension_version)
6464
#
6565
def render_document(content, extension, repo_loc = "", version = "", hard_wrap: false)
6666
document = begin
67-
if %w(md mdown markdown).include?(extension.downcase)
67+
if ExtensionVersion::MARKDOWN_EXTENSIONS.include?(extension.downcase)
6868
filter = HTML::Pipeline.new [
69+
HTML::Pipeline::PlainTextInputFilter,
6970
HTML::Pipeline::MarkdownFilter,
7071
HTML::Pipeline::AutolinkFilter,
7172
HTML::Pipeline::MentionFilter,

app/models/extension_version.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
class ExtensionVersion < ApplicationRecord
22
include SeriousErrors
3+
4+
MARKDOWN_EXTENSIONS = %w(markdown mdown mkdn mkd md)
35

46
# Associations
57
# --------------------

app/workers/sync_extension_contents_at_versions_worker.rb

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
class SyncExtensionContentsAtVersionsWorker < ApplicationWorker
2+
include MarkdownHelper
23

34
def logger
45
if Rails.env.production?
@@ -13,7 +14,7 @@ def perform(extension_id, tags, compatible_platforms = [], release_infos_by_tag
1314
@extension = Extension.find_by(id: extension_id)
1415
raise RuntimeError.new("#{I18n.t('nouns.extension')} ID: #{extension_id.inspect} not found.") unless @extension
1516

16-
puts "PERFORMING #{@extension.name}: #{tags.join(', ')}"
17+
#puts "PERFORMING #{@extension.name}: #{tags.join(', ')}"
1718
logger.info("PERFORMING: #{@extension.inspect}, #{tags.inspect}, #{compatible_platforms.inspect}")
1819

1920
@errored_tags = []
@@ -49,6 +50,7 @@ def sync_extension_version(release_info)
4950
set_commit_count(version)
5051
scan_files(version)
5152
sync_release_info(version, release_info)
53+
check_for_overrides(version)
5254
PersistAssets.call(version: version)
5355
update_annotations(version)
5456
version.save
@@ -65,14 +67,14 @@ def semver?
6567

6668
begin
6769
tag = SemverNormalizer.call(@tag)
68-
puts "Normalized Tag: #{tag}"
70+
# puts "Normalized Tag: #{tag}"
6971
Semverse::Version.new(tag)
7072
return true
7173
rescue Semverse::InvalidVersionFormat => error
7274
unless @errored_tags.include?(@tag)
7375
@errored_tags << @tag
7476
compilation_error = [@extension.compilation_error, error.message]
75-
@extension.update_column(:compilation_error, compilation_error.reject(&:empty?).join('; '))
77+
@extension.update_column(:compilation_error, compilation_error.compact.join('; '))
7678
message = "#{@extension.lowercase_name} release is invalid: #{error.message}"
7779
logger.info message
7880
end
@@ -100,6 +102,72 @@ def fetch_readme
100102
end
101103
end
102104

105+
def check_for_overrides(version)
106+
return if version.blank? || version.config["overrides"].nil?
107+
overrides = version.config["overrides"][0]
108+
if overrides["readme_url"].present?
109+
override_readme(version, overrides["readme_url"])
110+
end
111+
end
112+
113+
def override_readme(version, readme_url)
114+
115+
message = []
116+
117+
begin
118+
url = URI.parse(readme_url)
119+
rescue URI::Error => error
120+
logger.info "URI error: #{readme_url} - #{error.message}"
121+
return
122+
end
123+
124+
readme_ext = File.extname(url.path).gsub(".", "")
125+
unless ExtensionVersion::MARKDOWN_EXTENSIONS.include?(readme_ext)
126+
message << "#{version.version} override readme_url is not a valid markdown file."
127+
end
128+
129+
# get file contents
130+
begin
131+
file = url.open
132+
rescue OpenURI::HTTPError => error
133+
status = error.io.status
134+
message << "#{version.version} #{url.path} file read error: #{status[0]} - #{status[1]}"
135+
logger.info message.compact.join('; ')
136+
compilation_error = [version.compilation_error] + message
137+
version.update_column(:compilation_error, compilation_error.compact.join('; '))
138+
return
139+
end
140+
141+
readme = file.read
142+
143+
if readme.include?('!DOCTYPE html')
144+
message << "#{version.version} override readme is not valid markdown."
145+
end
146+
147+
begin
148+
filter = HTML::Pipeline.new [
149+
HTML::Pipeline::MarkdownFilter,
150+
], {gfm: true}
151+
filter.call(readme)
152+
rescue
153+
message << "#{version.version} override readme is not valid markdown."
154+
end
155+
156+
if message.present?
157+
compilation_error = [version.compilation_error] + message
158+
version.update_column(:compilation_error, compilation_error.compact.join('; '))
159+
else
160+
161+
readme = readme.encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''})
162+
163+
version.update(
164+
readme: readme,
165+
readme_extension: readme_ext
166+
)
167+
logger.info "OVERRIDE README: #{url.path}"
168+
end
169+
end
170+
103171
def extract_readme_file_extension(filename)
104172
if match = filename.match(/\.[a-zA-Z0-9]+$/)
105173
match[0].gsub(".", "")

spec/interactors/compile_github_extension_version_config_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"asset_filename"=>"\#{repo}-\#{version}-linux-x86_64.tar.gz"}],
1414
"labels"=> {"example"=> "custom"},
1515
"annotations"=> {"io.sensu.bonsai.test"=> "test value"},
16-
"description"=> "test asset"
16+
"description"=>"test asset"
1717
} }
1818
let(:extension) { create :extension, extension_versions_count: 0, github_url: "https://github.com/owner/#{repo_name}" }
1919
let(:version) { create :extension_version, extension: extension, config: config, version: version_name }

spec/interactors/find_or_create_release_asset_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
describe FindOrCreateReleaseAsset do
44

5-
6-
75
describe ".call" do
86

97
context "when valid version and build" do

spec/workers/sync_extension_contents_at_versions_worker_spec.rb

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
@s3_bucket = s3.bucket(ENV['AWS_S3_ASSETS_BUCKET'])
2929

3030
# trap incorrect ENV variables (Travis) or no network connection
31-
begin
32-
stub_aws unless @s3_bucket.exists?
33-
rescue
31+
#begin
32+
# stub_aws unless @s3_bucket.exists?
33+
#rescue
3434
stub_aws
35-
end
35+
#end
3636

3737
end
3838

@@ -41,6 +41,8 @@ def stub_aws
4141
Aws::S3::Resource.any_instance.stub_chain(:bucket, :object, :exists?).and_return(true)
4242
Aws::S3::Resource.any_instance.stub_chain(:bucket, :object, :public_url).and_return('https://s3.us-west-2.amazonaws.com/bucket/example.com')
4343
Aws::S3::Resource.any_instance.stub_chain(:bucket, :object, :last_modified).and_return(DateTime.now.to_s(:db))
44+
Aws::S3::Resource.any_instance.stub_chain(:bucket, :object, :delete).and_return(true)
45+
Aws::S3::Resource.any_instance.stub_chain(:bucket, :object, :put).and_return(true)
4446
end
4547

4648
describe 'tag checking' do
@@ -92,7 +94,7 @@ def stub_aws
9294
it 'puts annotations in annotations field' do
9395
config_hash['annotations'] = {
9496
suggested_asset_url: '/suggested/asset',
95-
suggested_asset_message: 'Suggested Asset Messaage'
97+
suggested_asset_message: 'Suggested Asset Message'
9698
}
9799
version.update_column(:config, config_hash)
98100
subject.perform(extension.id, tags)
@@ -103,4 +105,21 @@ def stub_aws
103105

104106
end
105107

108+
describe 'overrides' do
109+
let(:config_hash) { version.config }
110+
let(:tags) { [version.version] }
111+
112+
it 'loads an alternate readme file' do
113+
config_hash["overrides"] = {
114+
"readme_url"=>"https://github.com/sensu/bonsai/blob/master/README.md"
115+
}
116+
version.update_column(:config, config_hash)
117+
subject.perform(extension.id, tags)
118+
version.reload
119+
expect(version.readme).to include('bonsai.sensu.io')
120+
end
121+
122+
end
123+
124+
106125
end

0 commit comments

Comments
 (0)