forked from 18F/dashboard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
go
executable file
·148 lines (126 loc) · 3.53 KB
/
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#! /usr/bin/env ruby
#
# 18F Hub - Docs & connections between team members, projects, and skill sets
#
# Written in 2015 by Mike Bland ([email protected])
# on behalf of the 18F team, part of the US General Services Administration:
# https://18f.gsa.gov/
#
# To the extent possible under law, the author(s) have dedicated all copyright
# and related and neighboring rights to this software to the public domain
# worldwide. This software is distributed without any warranty.
#
# You should have received a copy of the CC0 Public Domain Dedication along
# with this software. If not, see
# <https://creativecommons.org/publicdomain/zero/1.0/>.
#
# @author Mike Bland ([email protected])
#
# ----
#
# ./go script: unified development environment interface
#
# Inspired by:
# http://www.thoughtworks.com/insights/blog/praise-go-script-part-i
# http://www.thoughtworks.com/insights/blog/praise-go-script-part-ii
#
# Author: Mike Bland ([email protected])
# Date: 2015-01-10
MIN_VERSION = "2.1.5"
unless RUBY_VERSION >= MIN_VERSION
puts <<EOF
*** ABORTING: Unsupported Ruby version ***
Ruby version #{MIN_VERSION} or greater is required to work with the Hub, but
this Ruby is version #{RUBY_VERSION}. Consider using a version manager such as
rbenv (https://github.com/sstephenson/rbenv) or rvm (https://rvm.io/)
to install a Ruby version specifically for Hub development.
EOF
exit 1
end
def exec_cmd(cmd)
exit $?.exitstatus unless system(cmd)
end
def init
begin
require 'bundler'
rescue LoadError
puts "Installing Bundler gem..."
exec_cmd 'gem install bundler'
puts "Bundler installed; installing gems"
end
update_gems
build
end
def update_gems
exec_cmd 'bundle'
end
def update_data
exec_cmd 'cd _data && ./import-public.rb'
end
def serve
exec 'bundle exec jekyll serve --trace'
end
def build
puts 'Building the site...'
exec_cmd('bundle exec jekyll b --trace')
puts 'Site built successfully.'
end
def ci_build
puts 'Building the site...'
init
build
puts 'Done!'
end
def deploy(deploy_commands)
puts 'Building the site...'
exec_cmd(['git pull'].concat(deploy_commands).join(' && '))
exec_cmd('/opt/install/rbenv/shims/bundle exec jekyll b --trace')
puts 'Site built successfully.'
end
def deploy_staging
timestamp = Time.new.strftime("%Y-%m-%d")
deploy([
'git submodule update --remote',
'/opt/install/rbenv/shims/bundle install',
'cd _data',
'/opt/install/rbenv/shims/ruby ./import-public.rb',
'cd ..',
'git add _data',
"if git commit -m 'Update data for #{timestamp}'; then git push; fi",
])
end
def deploy_prod
deploy []
end
COMMANDS = {
:init => 'Set up the Hub dev environment',
:update_gems => 'Execute Bundler to update gem set',
:update_data => 'Updates data files from data-private',
:serve => 'Serves the site at localhost:4000',
:build => 'Builds the site',
:ci_build => 'Builds the site for a CI system',
:deploy_staging => 'Builds the staging instance of the site',
:deploy_prod => 'Builds the production instance of the site',
}
def usage(exitstatus: 0)
puts <<EOF
Usage: #{$0} [options] [command]
options:
-h,--help Show this help
commands:
EOF
padding = COMMANDS.keys.max_by {|i| i.size}.size + 2
COMMANDS.each do |name, desc|
puts " %-#{padding}s#{desc}" % name
end
exit exitstatus
end
usage(exitstatus: 1) unless ARGV.size == 1
command = ARGV.shift
usage if ['-h', '--help'].include? command
command = command.to_sym
unless COMMANDS.member? command
puts "Unknown option or command: #{command}"
usage(exitstatus: 1)
end
send command