Commit 966c19f70b02e2395d0ea1ba7260c305dce61eef
1 parent
553c2e33d0
Update for script/sync
Showing 11 changed files with 142 additions and 3 deletions Inline Diff
Gemfile
| source "http://rubygems.org" | 1 | 1 | source "http://rubygems.org" | |
| 2 | 2 | |||
| gem "boxen", "~> 0.1" | 3 | 3 | gem "boxen", "~> 0.4" | |
| 4 | ||||
| 5 | group :development do | |||
| 6 | gem "aws-sdk" | |||
| 7 | end |
Gemfile.lock
| GEM | 1 | 1 | GEM | |
| remote: http://rubygems.org/ | 2 | 2 | remote: http://rubygems.org/ | |
| specs: | 3 | 3 | specs: | |
| addressable (2.3.2) | 4 | 4 | addressable (2.3.2) | |
| ansi (1.4.3) | 5 | 5 | ansi (1.4.3) | |
| 6 | aws-sdk (1.6.9) | |||
| 7 | httparty (~> 0.7) | |||
| 8 | json (~> 1.4) | |||
| 9 | nokogiri (>= 1.4.4) | |||
| 10 | uuidtools (~> 2.1) | |||
| boxen (0.4.0) | 6 | 11 | boxen (0.4.0) | |
| ansi (~> 1.4) | 7 | 12 | ansi (~> 1.4) | |
| hiera (~> 1.0.0) | 8 | 13 | hiera (~> 1.0.0) | |
| highline (~> 1.6) | 9 | 14 | highline (~> 1.6) | |
| json_pure (~> 1.7) | 10 | 15 | json_pure (~> 1.7) | |
| librarian-puppet (~> 0.9) | 11 | 16 | librarian-puppet (~> 0.9) | |
| octokit (~> 1.15) | 12 | 17 | octokit (~> 1.15) | |
| puppet (~> 3.0) | 13 | 18 | puppet (~> 3.0) | |
| facter (1.6.12) | 14 | 19 | facter (1.6.12) | |
| faraday (0.8.4) | 15 | 20 | faraday (0.8.4) | |
| multipart-post (~> 1.1) | 16 | 21 | multipart-post (~> 1.1) | |
| faraday_middleware (0.8.8) | 17 | 22 | faraday_middleware (0.8.8) | |
| faraday (>= 0.7.4, < 0.9) | 18 | 23 | faraday (>= 0.7.4, < 0.9) | |
| hashie (1.2.0) | 19 | 24 | hashie (1.2.0) | |
| hiera (1.0.0) | 20 | 25 | hiera (1.0.0) | |
| highline (1.6.15) | 21 | 26 | highline (1.6.15) | |
| 27 | httparty (0.9.0) | |||
| 28 | multi_json (~> 1.0) | |||
| 29 | multi_xml | |||
| 30 | json (1.7.5) | |||
| json_pure (1.7.5) | 22 | 31 | json_pure (1.7.5) | |
| librarian-puppet (0.9.6) | 23 | 32 | librarian-puppet (0.9.6) | |
| json_pure | 24 | 33 | json_pure | |
| puppet | 25 | 34 | puppet | |
| thor (~> 0.15) | 26 | 35 | thor (~> 0.15) | |
| multi_json (1.3.6) | 27 | 36 | multi_json (1.3.6) | |
| 37 | multi_xml (0.5.1) | |||
| multipart-post (1.1.5) | 28 | 38 | multipart-post (1.1.5) | |
| 39 | nokogiri (1.5.5) | |||
| octokit (1.15.1) | 29 | 40 | octokit (1.15.1) | |
| addressable (~> 2.2) | 30 | 41 | addressable (~> 2.2) | |
| faraday (~> 0.8) | 31 | 42 | faraday (~> 0.8) | |
| faraday_middleware (~> 0.8) | 32 | 43 | faraday_middleware (~> 0.8) | |
| hashie (~> 1.2) | 33 | 44 | hashie (~> 1.2) | |
| multi_json (~> 1.3) | 34 | 45 | multi_json (~> 1.3) | |
| puppet (3.0.0) | 35 | 46 | puppet (3.0.0) | |
| facter (>= 1.6.11) | 36 | 47 | facter (>= 1.6.11) | |
| hiera (>= 1.0.0rc) | 37 | 48 | hiera (>= 1.0.0rc) | |
| thor (0.16.0) | 38 | 49 | thor (0.16.0) | |
| 50 | uuidtools (2.1.3) | |||
| 39 | 51 | |||
| PLATFORMS | 40 | 52 | PLATFORMS | |
| ruby | 41 | 53 | ruby | |
| 42 | 54 | |||
| DEPENDENCIES | 43 | 55 | DEPENDENCIES | |
| boxen (~> 0.1) | 44 | 56 | aws-sdk |
README.md
| # Our Boxen | 1 | 1 | # Our Boxen | |
| 2 | 2 | |||
| This is a template Boxen project designed for your organization to fork and | 3 | 3 | This is a template Boxen project designed for your organization to fork and | |
| modify appropriately. | 4 | 4 | modify appropriately. | |
| The Boxen rubygem and the Boxen puppet modules are only a framework for getting | 5 | 5 | The Boxen rubygem and the Boxen puppet modules are only a framework for getting | |
| things done. | 6 | 6 | things done. | |
| This repository template is just a basic example of _how_ to do things with them. | 7 | 7 | This repository template is just a basic example of _how_ to do things with them. | |
| 8 | 8 | |||
| ## Getting Started | 9 | 9 | ## Getting Started | |
| 10 | 10 | |||
| 1. Install XCode Command Line Tools and/or full XCode. | 11 | 11 | 1. Install XCode Command Line Tools and/or full XCode. | |
| 1. Create a new repository on GitHub as your user for your Boxen. (eg. | 12 | 12 | 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 | 13 | 13 | `wfarr/my-boxen`). **Make sure it is a private repository!** | |
| 1. Get running like so: | 14 | 14 | 1. Get running like so: | |
| ``` | 15 | 15 | ``` | |
| mkdir -p ~/src/my-boxen | 16 | 16 | mkdir -p ~/src/my-boxen | |
| cd ~/src/my-boxen | 17 | 17 | cd ~/src/my-boxen | |
| git init | 18 | 18 | git init | |
| git remote add upstream https://github.com/boxen/our-boxen | 19 | 19 | git remote add upstream https://github.com/boxen/our-boxen | |
| git fetch upstream | 20 | 20 | git fetch upstream | |
| git co -b master upstream/master | 21 | 21 | git co -b master upstream/master | |
| git remote add origin https://github.com/wfarr/my-boxen | 22 | 22 | git remote add origin https://github.com/wfarr/my-boxen | |
| git push origin master | 23 | 23 | git push origin master | |
| 24 | 24 | |||
| script/boxen | 25 | 25 | script/boxen | |
| ``` | 26 | 26 | ``` | |
| 1. Close and reopen your Terminal. If you have a shell config file | 27 | 27 | 1. Close and reopen your Terminal. If you have a shell config file | |
| (eg. `~/.bashrc`) you'll need to add this at the very end: | 28 | 28 | (eg. `~/.bashrc`) you'll need to add this at the very end: | |
| `[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh`, and reload | 29 | 29 | `[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh`, and reload | |
| your shell. | 30 | 30 | your shell. | |
| 1. Confirm the Boxen env has loaded: `boxen --env` | 31 | 31 | 1. Confirm the Boxen env has loaded: `boxen --env` | |
| 32 | 32 | |||
| Now you have your own my-boxen repo that you can hack on. | 33 | 33 | Now you have your own my-boxen repo that you can hack on. | |
| You may have noticed we didn't ask you to fork the repo. | 34 | 34 | You may have noticed we didn't ask you to fork the repo. | |
| This is because when our-boxen goes open source that'd have some | 35 | 35 | This is because when our-boxen goes open source that'd have some | |
| implications about your fork also potentially being public. | 36 | 36 | implications about your fork also potentially being public. | |
| That's obviously quite bad, so that's why we strongly suggest you | 37 | 37 | That's obviously quite bad, so that's why we strongly suggest you | |
| create an entirely separate repo and simply pull the code in, as shown above. | 38 | 38 | create an entirely separate repo and simply pull the code in, as shown above. | |
| 39 | 39 | |||
| ## What You Get | 40 | 40 | ## What You Get | |
| 41 | 41 | |||
| This template project provides the following by default: | 42 | 42 | This template project provides the following by default: | |
| 43 | 43 | |||
| * Homebrew | 44 | 44 | * Homebrew | |
| * Git | 45 | 45 | * Git | |
| * Hub | 46 | 46 | * Hub | |
| * DNSMasq w/ .dev resolver for localhost | 47 | 47 | * DNSMasq w/ .dev resolver for localhost | |
| * NVM | 48 | 48 | * NVM | |
| * RBenv | 49 | 49 | * RBenv | |
| * Full Disk Encryption requirement | 50 | 50 | * Full Disk Encryption requirement | |
| * NodeJS 0.4 | 51 | 51 | * NodeJS 0.4 | |
| * NodeJS 0.6 | 52 | 52 | * NodeJS 0.6 | |
| * NodeJS 0.8 | 53 | 53 | * NodeJS 0.8 | |
| * Ruby 1.8.7 | 54 | 54 | * Ruby 1.8.7 | |
| * Ruby 1.9.2 | 55 | 55 | * Ruby 1.9.2 | |
| * Ruby 1.9.3 | 56 | 56 | * Ruby 1.9.3 | |
| * Ack | 57 | 57 | * Ack | |
| * Findutils | 58 | 58 | * Findutils | |
| * GNU-Tar | 59 | 59 | * GNU-Tar | |
| 60 | 60 | |||
| ## Customizing | 61 | 61 | ## Customizing | |
| 62 | 62 | |||
| You can always check out the number of existing modules we already | 63 | 63 | You can always check out the number of existing modules we already | |
| provide as optional installs under the | 64 | 64 | provide as optional installs under the | |
| [boxen organization](https://github.com/boxen). These modules are all | 65 | 65 | [boxen organization](https://github.com/boxen). These modules are all | |
| tested to be compatible with Boxen. Use the `Puppetfile` to pull them | 66 | 66 | tested to be compatible with Boxen. Use the `Puppetfile` to pull them | |
| in dependencies automatically whenever `boxen` is run. You'll have to | 67 | 67 | in dependencies automatically whenever `boxen` is run. You'll have to | |
| make sure your "node" (Puppet's term for your laptop, basically) | 68 | 68 | make sure your "node" (Puppet's term for your laptop, basically) | |
| includes or requires them. You can do this by either modifying | 69 | 69 | includes or requires them. You can do this by either modifying | |
| `manifests/site.pp` for each module, _or_ we would generally recommend | 70 | 70 | `manifests/site.pp` for each module, _or_ we would generally recommend | |
| you create a module for your organization (eg. `modules/github`) and | 71 | 71 | you create a module for your organization (eg. `modules/github`) and | |
| create an environment class in that. Then you need only adjust | 72 | 72 | create an environment class in that. Then you need only adjust |
config/boxen.rb
| # This file will be loaded by config/basic early in a Boxen run. Use | 1 | 1 | # This file will be loaded by config/basic early in a Boxen run. Use | |
| # it to provide any custom code or behavior your Boxen setup requires. | 2 | 2 | # it to provide any custom code or behavior your Boxen setup requires. | |
| 3 | 3 | |||
| # Change the prefix boxen is installed to. | 4 | 4 | # Change the prefix boxen is installed to. | |
| # ENV['BOXEN_HOME'] = '/opt/boxen' | 5 | 5 | # ENV['BOXEN_HOME'] = '/opt/boxen' | |
| 6 | 6 | |||
| # Change the repo boxen will use. | 7 | 7 | # Change the repo boxen will use. | |
| # ENV['BOXEN_REPO_NAME'] = 'boxen/our-boxen' | 8 | 8 | # ENV['BOXEN_REPO_NAME'] = 'boxen/our-boxen' | |
| 9 | ||||
| 10 | # Boxen binary packaging | |||
| 11 | # ENV["BOXEN_S3_ACCESS_KEY"] = '' |
script/sync
| File was created | 1 | #!/usr/bin/ruby | ||
| 2 | # Sync binary snapshots to S3. | |||
| 3 | ||||
| 4 | require "pathname" | |||
| 5 | require "tempfile" | |||
| 6 | ||||
| 7 | # Put us where we belong, in the root dir of our boxen repo. | |||
| 8 | ||||
| 9 | Dir.chdir Pathname.new(__FILE__).realpath + "../.." | |||
| 10 | ||||
| 11 | # Make sure our local dependencies are up to date. | |||
| 12 | ||||
| 13 | abort "Sorry, can't bootstrap." unless system "script/bootstrap" | |||
| 14 | ||||
| 15 | # Set up our local configuration, deps, and load path. | |||
| 16 | ||||
| 17 | load "config/basic.rb" | |||
| 18 | ||||
| 19 | require "aws-sdk" | |||
| 20 | require "boxen/config" | |||
| 21 | ||||
| 22 | access_key = ENV["BOXEN_S3_ACCESS_KEY"] | |||
| 23 | secret_key = ENV["BOXEN_S3_SECRET_KEY"] | |||
| 24 | bucket_name = ENV["BOXEN_S3_BUCKET"] | |||
| 25 | ||||
| 26 | unless access_key && secret_key && bucket_name | |||
| 27 | abort "Please set the BOXEN_S3_{ACCESS_KEY,SECRET_KEY,BUCKET} env vars." | |||
| 28 | end | |||
| 29 | ||||
| 30 | s3 = AWS::S3.new :access_key_id => access_key, :secret_access_key => secret_key | |||
| 31 | os = `sw_vers -productVersion`.strip.split(".")[0..1].join "." | |||
| 32 | ||||
| 33 | bucket = s3.buckets[bucket_name] | |||
| 34 | config = Boxen::Config.load | |||
| 35 | ||||
| 36 | # Sync Homebrew packages. | |||
| 37 | ||||
| 38 | Dir.chdir "#{config.homedir}/homebrew/Cellar" do | |||
| 39 | Dir["*/*"].each do |dir| | |||
| 40 | name, version = File.split dir | |||
| 41 | ||||
| 42 | file = "homebrew/#{os}/#{name}-#{version}.tar.bz2" | |||
| 43 | temp = Tempfile.new "homebrew" | |||
| 44 | obj = bucket.objects[file] | |||
| 45 | ||||
| 46 | next if obj.exists? | |||
| 47 | ||||
| 48 | printf "Snapshotting #{name} #{version}... " | |||
| 49 | $stdout.flush | |||
| 50 | ||||
| 51 | system "tar", "-cjf", temp.path, dir | |||
| 52 | puts "done." | |||
| 53 | ||||
| 54 | printf "Shipping #{name} #{version} to S3... " | |||
| 55 | $stdout.flush | |||
| 56 | ||||
| 57 | obj.write :acl => :public_read, :file => temp.path | |||
| 58 | puts "done." | |||
| 59 | end | |||
| 60 | end | |||
| 61 | ||||
| 62 | # Sync rbenv rubies. | |||
| 63 | ||||
| 64 | Dir.chdir "#{config.homedir}/rbenv/versions" do | |||
| 65 | Dir["*"].each do |dir| | |||
| 66 | next if File.symlink? dir | |||
| 67 | ||||
| 68 | version = File.basename dir | |||
| 69 | file = "rbenv/#{os}/#{version}.tar.bz2" | |||
| 70 | temp = Tempfile.new "rbenv" | |||
| 71 | obj = bucket.objects[file] | |||
| 72 | ||||
| 73 | next if obj.exists? | |||
| 74 | ||||
| 75 | printf "Snapshotting ruby #{version}... " | |||
| 76 | $stdout.flush | |||
| 77 |
vendor/cache/aws-sdk-1.6.9.gem
No preview for this file type
vendor/cache/httparty-0.9.0.gem
No preview for this file type
vendor/cache/json-1.7.5.gem
No preview for this file type
vendor/cache/multi_xml-0.5.1.gem
No preview for this file type
vendor/cache/nokogiri-1.5.5.gem
No preview for this file type
vendor/cache/uuidtools-2.1.3.gem
No preview for this file type