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