#!/usr/bin/env ruby # http://www.rubydoc.info/github/rest-client/rest-client/RestClient require 'rest_client' require 'json' if ARGV.length < 3 puts "usage: #$0 " exit 1 end token, version, *files = ARGV base = "https://api.github.com/repos/junegunn/fzf-bin/releases" # List releases rels = JSON.parse(RestClient.get(base, :authorization => "token #{token}")) rel = rels.find { |r| r['tag_name'] == version } unless rel puts "#{version} not found" exit 1 end # List assets assets = Hash[rel['assets'].map { |a| a.values_at *%w[name id] }] files.select { |f| File.exists? f }.map do |file| Thread.new do name = File.basename file if asset_id = assets[name] puts "#{name} found. Deleting asset id #{asset_id}." RestClient.delete "#{base}/assets/#{asset_id}", :authorization => "token #{token}" else puts "#{name} not found" end puts "Uploading #{name}" RestClient.post( "#{base.sub 'api', 'uploads'}/#{rel['id']}/assets?name=#{name}", File.read(file), :authorization => "token #{token}", :content_type => "application/octet-stream") end end.each(&:join)