forked from jenkins-infra/jenkins.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrelease.rss.rb
executable file
·70 lines (59 loc) · 1.87 KB
/
release.rss.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env ruby
#
# generate the plugin/core release history RSS
#
# Usage: release-rss.ruby <URL of release-hisotory.json>
#
require 'rss'
require 'faraday'
require 'faraday/follow_redirects'
def get_url(url)
conn = Faraday.new url do |f|
f.use Faraday::FollowRedirects::Middleware, limit: 5
f.response :json, content_type: /\bjson$/
f.adapter Faraday.default_adapter
end
resp = conn.get
end
def toGA(gav)
gav.split(":").reverse.drop(1).reverse.join(":")
end
rss = RSS::Maker.make("atom") do |maker|
maker.channel.id = "urn:63067410335c11e0bc8e0800200c9a66:feed"
maker.channel.updated = Time.now.to_s
maker.channel.author = "Jenkins History Bot"
maker.channel.title = "Jenkins plugin releases"
maker.channel.links.new_link { |link| link.href = "https://www.jenkins.io/" }
maker.channel.links.new_link do |link|
link.href = "https://www.jenkins.io/releases.rss"
link.rel = "self"
link.type = "application/atom+xml"
end
first = {}
releaseHistory = get_url(ARGV[0]).body["releaseHistory"].reverse
releaseHistory.each do |i|
i["releases"].each do |r|
first[toGA(r["gav"])] = r["gav"]
end
end
releaseHistory[0..30].each do |i|
i["releases"].each do |r|
next unless r["gav"] && r["title"]
maker.items.new_item do |item|
s = (first[toGA(r["gav"])] == r["gav"]) ? " (new)" : ""
item.title = "#{r["title"]} #{r["version"]}#{s}"
item.id = "urn:63067410335c11e0bc8e0800200c9a66:#{r["gav"]}"
item.summary = "#{r["title"]} #{r["version"]}"
item.links.new_link do |link|
link.href = r["url"]
link.rel = "alternate"
link.type = "text/html"
end
item.published = Time.at(r["timestamp"] / 1000)
item.updated = Time.at(r["timestamp"] / 1000)
item.pubDate = Time.at(r["timestamp"] / 1000)
end
end
end
end
puts rss