diff --git a/lib/tasks/repositories.rake b/lib/tasks/repositories.rake new file mode 100644 index 0000000..2573490 --- /dev/null +++ b/lib/tasks/repositories.rake @@ -0,0 +1,57 @@ +require 'net/https' + +namespace :repositories do + def get_url_content(url, headers = {}) + uri = URI.parse(url) + req = Net::HTTP::Get.new(uri) + + headers.each do |header, value| + req[header] = value + end + + Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| + http.request(req) + end.body + end + + desc 'Update version from github repositories' + task github: :environment do + GithubRepository.all.each do |repo| + begin + software = Software.find(repo.software_id) + versions = software.versions.all.map(&:number) + headers = { + 'Accept' => 'application/vnd.github.v3+json', + 'Authorization' => 'token cabbd658df98458404ab519f02bca93bb2923dfb' + } + tags = + JSON.parse( + get_url_content( + "https://api.github.com/repos/#{repo.name}/git/refs/tags", + headers + ) + ) + + tags.each do |tag| + version = tag['ref'].split('/').last + next if versions.include?(version) + puts version + + date = + JSON.parse( + get_url_content(tag['object']['url'], headers) + )['committer']['date'] + + Version.new( + software_id: software.id, + number: version, + date: date + ).save + end + rescue => e + puts e + next + end + end + end +end