Skip to content

Instantly share code, notes, and snippets.

@jim80net
Created December 3, 2015 23:59
Show Gist options
  • Save jim80net/9f0a9ca9679f664cca08 to your computer and use it in GitHub Desktop.
Save jim80net/9f0a9ca9679f664cca08 to your computer and use it in GitHub Desktop.
Download scripts and templates dir from a git repo. (useful for deploying OSS CF releases)
#!/usr/bin/env ruby
# Usage: ./download_scripts_and_templates <repo> <ref>
# Output: Directory of download
require 'bundler/setup'
require 'logger'
require 'octokit'
require 'base64'
def prereqs
ARGV << '--help' if ARGV.count < 2
opts = OptionParser.new do |opts|
opts.banner = "Usage: #{File.basename($0)} <repo> <ref>\n GITHUB_API_KEY is a required env"
opts.separator ''
opts.on_tail('-h', '--help', 'Show this message') do
puts opts
exit 0
end
end
opts.parse!
end
def fetch_subtree(dir, root, subtree_name)
subtree = root.select { |v| v.path == subtree_name }.first
FileUtils.mkdir_p(File.join(dir, subtree_name))
subtree.rels[:self].get.data.tree.each do |v|
filename = v.path
b64content = v.rels[:self].get.data.content
File.open(File.join(dir,subtree_name,filename), 'w') do |f|
f.write Base64.decode64(b64content)
end
end
LOGGER.info subtree_name + " downloaded into #{dir}/#{subtree_name}/"
end
prereqs
LOGGER=Logger.new($stderr)
repo = ARGV[0]
ref = ARGV[1]
Octokit.auto_paginate = true
@client = Octokit::Client.new(:access_token => ENV.fetch('GITHUB_API_KEY'))
dir = Dir.mktmpdir(File.basename($0))
LOGGER.info "Created tmp directory: #{dir}"
tree = @client.tree(repo, ref).tree
fetch_subtree(dir, tree, "templates")
fetch_subtree(dir, tree, "scripts")
puts dir
@jim80net
Copy link
Author

jim80net commented Dec 3, 2015

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment