diff --git a/Gemfile b/Gemfile index 42cae2d..77d7481 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,7 @@ source "http://rubygems.org" -gem "boxen", "~> 0.1" +gem "boxen", "~> 0.4" + +group :development do + gem "aws-sdk" +end diff --git a/Gemfile.lock b/Gemfile.lock index 179673a..d4c580a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,6 +3,11 @@ GEM specs: addressable (2.3.2) ansi (1.4.3) + aws-sdk (1.6.9) + httparty (~> 0.7) + json (~> 1.4) + nokogiri (>= 1.4.4) + uuidtools (~> 2.1) boxen (0.4.0) ansi (~> 1.4) hiera (~> 1.0.0) @@ -19,13 +24,19 @@ GEM hashie (1.2.0) hiera (1.0.0) highline (1.6.15) + httparty (0.9.0) + multi_json (~> 1.0) + multi_xml + json (1.7.5) json_pure (1.7.5) librarian-puppet (0.9.6) json_pure puppet thor (~> 0.15) multi_json (1.3.6) + multi_xml (0.5.1) multipart-post (1.1.5) + nokogiri (1.5.5) octokit (1.15.1) addressable (~> 2.2) faraday (~> 0.8) @@ -36,9 +47,11 @@ GEM facter (>= 1.6.11) hiera (>= 1.0.0rc) thor (0.16.0) + uuidtools (2.1.3) PLATFORMS ruby DEPENDENCIES - boxen (~> 0.1) + aws-sdk + boxen (~> 0.4) diff --git a/README.md b/README.md index d3502e8..7491ee5 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This repository template is just a basic example of _how_ to do things with them 1. Install XCode Command Line Tools and/or full XCode. 1. Create a new repository on GitHub as your user for your Boxen. (eg. -`wfarr/my-boxen`). **Make sure it is a private repository!** for now +`wfarr/my-boxen`). **Make sure it is a private repository!** 1. Get running like so: ``` mkdir -p ~/src/my-boxen @@ -76,3 +76,8 @@ what-have-you for your organization. For organization projects (read: repositories that people will be working in), please see the documentation in the projects module template we provide. For per-user configuration that doesn't need to be applied globally to everyone, please see the documentation in the people module template we provide. + +## Binary packages + +We support binary packaging for everything in Homebrew, RBEnv, and NVM. +See `config/boxen.rb` for the environment variables to define. diff --git a/config/boxen.rb b/config/boxen.rb index 59b3348..50fd07d 100644 --- a/config/boxen.rb +++ b/config/boxen.rb @@ -6,3 +6,8 @@ # Change the repo boxen will use. # ENV['BOXEN_REPO_NAME'] = 'boxen/our-boxen' + +# Boxen binary packaging +# ENV["BOXEN_S3_ACCESS_KEY"] = '' +# ENV["BOXEN_S3_SECRET_KEY"] = '' +# ENV["BOXEN_S3_BUCKET"] = '' diff --git a/script/sync b/script/sync new file mode 100755 index 0000000..4628117 --- /dev/null +++ b/script/sync @@ -0,0 +1,112 @@ +#!/usr/bin/ruby +# Sync binary snapshots to S3. + +require "pathname" +require "tempfile" + +# Put us where we belong, in the root dir of our boxen repo. + +Dir.chdir Pathname.new(__FILE__).realpath + "../.." + +# Make sure our local dependencies are up to date. + +abort "Sorry, can't bootstrap." unless system "script/bootstrap" + +# Set up our local configuration, deps, and load path. + +load "config/basic.rb" + +require "aws-sdk" +require "boxen/config" + +access_key = ENV["BOXEN_S3_ACCESS_KEY"] +secret_key = ENV["BOXEN_S3_SECRET_KEY"] +bucket_name = ENV["BOXEN_S3_BUCKET"] + +unless access_key && secret_key && bucket_name + abort "Please set the BOXEN_S3_{ACCESS_KEY,SECRET_KEY,BUCKET} env vars." +end + +s3 = AWS::S3.new :access_key_id => access_key, :secret_access_key => secret_key +os = `sw_vers -productVersion`.strip.split(".")[0..1].join "." + +bucket = s3.buckets[bucket_name] +config = Boxen::Config.load + +# Sync Homebrew packages. + +Dir.chdir "#{config.homedir}/homebrew/Cellar" do + Dir["*/*"].each do |dir| + name, version = File.split dir + + file = "homebrew/#{os}/#{name}-#{version}.tar.bz2" + temp = Tempfile.new "homebrew" + obj = bucket.objects[file] + + next if obj.exists? + + printf "Snapshotting #{name} #{version}... " + $stdout.flush + + system "tar", "-cjf", temp.path, dir + puts "done." + + printf "Shipping #{name} #{version} to S3... " + $stdout.flush + + obj.write :acl => :public_read, :file => temp.path + puts "done." + end +end + +# Sync rbenv rubies. + +Dir.chdir "#{config.homedir}/rbenv/versions" do + Dir["*"].each do |dir| + next if File.symlink? dir + + version = File.basename dir + file = "rbenv/#{os}/#{version}.tar.bz2" + temp = Tempfile.new "rbenv" + obj = bucket.objects[file] + + next if obj.exists? + + printf "Snapshotting ruby #{version}... " + $stdout.flush + + system "tar -cjf #{temp.path} #{version}" + puts "done." + + printf "Shipping ruby #{version} to S3... " + $stdout.flush + + obj.write :acl => :public_read, :file => temp.path + puts "done." + end +end + +# Sync NVM nodes. + +Dir.chdir "#{config.homedir}/nvm" do + Dir["v*"].each do |dir| + version = File.basename dir + file = "nvm/#{os}/#{version}.tar.bz2" + temp = Tempfile.new "nvm" + obj = bucket.objects[file] + + next if obj.exists? + + printf "Snapshotting node.js #{version}... " + $stdout.flush + + system "tar -cjf #{temp.path} #{version}" + puts "done." + + printf "Shipping node.js #{version} to S3... " + $stdout.flush + + obj.write :acl => :public_read, :file => temp.path + puts "done." + end +end diff --git a/vendor/cache/aws-sdk-1.6.9.gem b/vendor/cache/aws-sdk-1.6.9.gem new file mode 100644 index 0000000000000000000000000000000000000000..38c1332b90e01eec5f9e884b0f3d6d65317c86a1 GIT binary patch literal 585728 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