Skip to content

Instantly share code, notes, and snippets.

@tas50
Created March 13, 2017 17:43
Show Gist options
  • Save tas50/f1bb4d5afabaf57aa598762187608930 to your computer and use it in GitHub Desktop.
Save tas50/f1bb4d5afabaf57aa598762187608930 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require "net/http"
require "json"
require "date"
def cookbooks
uri = URI("https://supermarket.chef.io/api/v1/users/chef")
response = Net::HTTP.get(uri)
JSON.parse(response)["cookbooks"]["owns"].keys
end
def versions(cb_name)
uri = URI("https://supermarket.chef.io/api/v1/cookbooks/#{cb_name}")
response = Net::HTTP.get(uri)
JSON.parse(response)["versions"].map! { |x| x.split("/")[-1] }
end
def cb_version_publish_date(cb, version)
uri = URI("https://supermarket.chef.io/api/v1/cookbooks/#{cb}/versions/#{version}")
response = Net::HTTP.get(uri)
DateTime.parse(JSON.parse(response)["published_at"])
end
if ARGV.empty?
puts "You must pass the date in format similar to 2017-01-01"
exit!
end
since_date = DateTime.parse(ARGV.first)
releases = []
cookbooks.each do |cb|
versions(cb).each do |version|
puts "Checking #{cb} version #{version}"
if cb_version_publish_date(cb, version) >= since_date
releases << { cb => version }
else
break
end
end
end
puts "\nThere have been #{releases.count} releases since #{since_date}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment