mini-heroku 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/mh +25 -0
- data/lib/mini-heroku.rb +162 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3991e69eb5a68627bebd68a704540863561eba2a
|
4
|
+
data.tar.gz: 7165c557f29f0c4ceabba209fc47980830e5b761
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: '03573348cd4f7b75b8465bc39aab2dfa03800288f6fb34ce5a1926372f8b0c77b68795d6ba71fb019bc5e830c75277cbdb32943fc8955f3fc30f86d3cf8ce2bb'
|
7
|
+
data.tar.gz: d3dad0d8fda0619f225fa5c8820f3c6ab078e61ff952225e2ee16c046b4d251d6f37242ed122becd3832907d2ce94e040ac4c9f4adead428812a677cf6b8e6d0
|
data/bin/mh
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "mini-heroku"
|
3
|
+
arg = ARGV[0].chomp.downcase
|
4
|
+
case arg
|
5
|
+
when "create"
|
6
|
+
name = ARGV[1]
|
7
|
+
MiniHeroku.create(name)
|
8
|
+
when "refresh"
|
9
|
+
MiniHeroku.refresh()
|
10
|
+
when "deploy"
|
11
|
+
MiniHeroku.deploy()
|
12
|
+
when "setenvironment"
|
13
|
+
MiniHeroku.setProductionEnvironment()
|
14
|
+
when "start"
|
15
|
+
MiniHeroku.start()
|
16
|
+
when "help"
|
17
|
+
puts "Commands are:"
|
18
|
+
puts "create *name*"
|
19
|
+
puts "refresh"
|
20
|
+
puts "deploy"
|
21
|
+
puts "start"
|
22
|
+
puts "setenvironment"
|
23
|
+
else
|
24
|
+
puts "MH: Unknown command: " + arg + " ; type \"help\" for help"
|
25
|
+
end
|
data/lib/mini-heroku.rb
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module MiniHeroku
|
5
|
+
|
6
|
+
DEFAULT_PROCFILE = "web: bundle exec ruby server.rb -p $PORT"
|
7
|
+
DEFAULT_GITIGNORE = [".env","mhenvironment.json"].join("\n")
|
8
|
+
DEFAULT_SERVER = [
|
9
|
+
"require 'sinatra'",
|
10
|
+
"",
|
11
|
+
"get '/' do",
|
12
|
+
" \"Hello world! Your variable defaultKey is (probably empty): \#{ENV['defaultKey']}\"",
|
13
|
+
"end"
|
14
|
+
]
|
15
|
+
DEFAULT_CONFIG = {
|
16
|
+
devUsesProdEnviromnent: true,
|
17
|
+
environmentKeys: [
|
18
|
+
:defaultKey
|
19
|
+
]
|
20
|
+
}
|
21
|
+
|
22
|
+
def self.start()
|
23
|
+
system("heroku local")
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.create(name)
|
27
|
+
puts("MH: Creating #{name}")
|
28
|
+
system("git init")
|
29
|
+
system("heroku create #{name}")
|
30
|
+
refresh()
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.getGems()
|
34
|
+
installed = `gem list`.split("\n")
|
35
|
+
installed.map! do |g|
|
36
|
+
name, rest = g.split(" (")
|
37
|
+
version = rest.scan(/(^)((\d|\.)*)/)[0][1]
|
38
|
+
[name, version]
|
39
|
+
end
|
40
|
+
return Hash[installed]
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.refresh()
|
44
|
+
#config
|
45
|
+
config = DEFAULT_CONFIG
|
46
|
+
if File.file?("mhconfig.json")
|
47
|
+
config.merge!(JSON.parse(File.read("mhconfig.json"), :symbolize_names => true))
|
48
|
+
puts("MH: Config found")
|
49
|
+
end
|
50
|
+
File.open("mhconfig.json", "wb") do |f|
|
51
|
+
f.write JSON.pretty_generate(config)
|
52
|
+
end
|
53
|
+
|
54
|
+
#environment
|
55
|
+
environment = {
|
56
|
+
production: {},
|
57
|
+
development: {}
|
58
|
+
}
|
59
|
+
for key in config[:environmentKeys]
|
60
|
+
environment[:production][key] = ""
|
61
|
+
environment[:development][key] = ""
|
62
|
+
end
|
63
|
+
if File.file?("mhenvironment.json")
|
64
|
+
old = JSON.parse(File.read("mhenvironment.json"), :symbolize_names => true)
|
65
|
+
environment = environment.merge(old)
|
66
|
+
end
|
67
|
+
File.open("mhenvironment.json", "wb") do |f|
|
68
|
+
f.write(JSON.pretty_generate(environment))
|
69
|
+
end
|
70
|
+
|
71
|
+
#env file
|
72
|
+
File.open(".env", "w") do |f|
|
73
|
+
vars = {}
|
74
|
+
if config[:devUsesProdEnviromnent]
|
75
|
+
vars = environment[:production]
|
76
|
+
else
|
77
|
+
vars = environment[:development]
|
78
|
+
end
|
79
|
+
vars.each do |key, value|
|
80
|
+
f.puts("#{key}=#{value}")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
#procfile
|
85
|
+
if File.file?("Procfile")
|
86
|
+
puts "MH: Procfile found"
|
87
|
+
else
|
88
|
+
puts "MH: Creating Procfile"
|
89
|
+
File.open("Procfile", "w") do |f|
|
90
|
+
f.puts(DEFAULT_PROCFILE)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
#gitignore
|
95
|
+
if File.file?(".gitignore")
|
96
|
+
puts "MH: .gitignore found"
|
97
|
+
else
|
98
|
+
puts "MH: Creating .gitignore"
|
99
|
+
File.open(".gitignore", "w") do |f|
|
100
|
+
f.puts(DEFAULT_GITIGNORE)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
#gems
|
105
|
+
gems = ["sinatra"]
|
106
|
+
if File.file?("server.rb")
|
107
|
+
puts "MH: Checking Gems from server file"
|
108
|
+
gems = File.read("server.rb").split("\n").map do |line|
|
109
|
+
line.scan(/^(require ("|'))(\w*)("|')/).map{|match| match[2]}
|
110
|
+
end
|
111
|
+
gems.flatten!
|
112
|
+
else
|
113
|
+
puts "MH: Creating Default server file"
|
114
|
+
File.open("server.rb", "w") do |f|
|
115
|
+
f.puts(DEFAULT_SERVER)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
installedGems = getGems()
|
119
|
+
didInstall = false
|
120
|
+
for gem in gems
|
121
|
+
if !(installedGems.keys.include?(gem))
|
122
|
+
puts "MH: Installing Gem #{gem}"
|
123
|
+
system("gem install #{gem}")
|
124
|
+
didInstall = true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
if didInstall
|
128
|
+
puts "MH: Re-checking Gems"
|
129
|
+
installedGems = getGems()
|
130
|
+
end
|
131
|
+
puts "MH: Creating Gemfile"
|
132
|
+
File.open("Gemfile", "w") do |f|
|
133
|
+
f.puts("source 'https://rubygems.org'")
|
134
|
+
f.puts("ruby '#{RUBY_VERSION}'")
|
135
|
+
gems.each do |gem|
|
136
|
+
f.puts("gem '#{gem}', '>=#{installedGems[gem]}'")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
puts "MH: Bundle"
|
141
|
+
system("bundle")
|
142
|
+
puts "MH: Refresh complete"
|
143
|
+
end
|
144
|
+
|
145
|
+
def self.setProductionEnvironment()
|
146
|
+
environment = JSON.parse(File.read("mhenvironment.json"), :symbolize_names => true)[:production]
|
147
|
+
environment = environment.each.map{|key, val| "#{key}=#{val}"}.join(" ")
|
148
|
+
system("heroku config:set " + environment)
|
149
|
+
end
|
150
|
+
|
151
|
+
def self.deploy
|
152
|
+
puts("MH: Name the commit:")
|
153
|
+
name = STDIN.gets().chomp()
|
154
|
+
system("git add .")
|
155
|
+
system("git commit -m \"#{name}\"")
|
156
|
+
system("git push heroku master")
|
157
|
+
puts("MH: Deploy complete")
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
#MiniHeroku.create("mini-heroku-test")
|
162
|
+
#MiniHeroku.setProductionEnvironment()
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mini-heroku
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.9
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Martin Larsson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-06-26 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Makes it easy to create, update and deply a sinatra webserver to heroku.
|
14
|
+
Be warned, this gem might run over your files if something goes worng. see 'mh help'
|
15
|
+
for commands
|
16
|
+
email: martin.99.larsson@telia.com
|
17
|
+
executables:
|
18
|
+
- mh
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- bin/mh
|
23
|
+
- lib/mini-heroku.rb
|
24
|
+
homepage: http://rubygems.org/gems/mini-heroku
|
25
|
+
licenses:
|
26
|
+
- MIT
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 2.5.2
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: Small gem for heroku and sinatra based webservers
|
48
|
+
test_files: []
|