phase 1.0.1 → 1.0.2
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 +4 -4
- data/README.md +22 -1
- data/VERSION +1 -1
- data/lib/phase.rb +0 -2
- data/lib/phase/cli/build.rb +6 -2
- data/lib/phase/cli/deploy.rb +14 -14
- data/lib/phase/config/deploy.rb +1 -7
- data/lib/phase/configuration.rb +1 -1
- data/lib/phase/kit/deploy/deployment.rb +11 -56
- data/lib/phase/version.rb +1 -1
- data/phase.gemspec +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 831f02bdb22a9315a749be3d9d68047dd4a68d2e
|
4
|
+
data.tar.gz: 4bdeb2e3e904abc8617dddb1f47f07be1c781638
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8029008bd5d8b99f32fee336b68f63ffb329b57cf20f3dc38ca528d60a8d576ec6bb390b4e4066fe207328ce6984bdc74db7ed1219d978b10d78e90e8e1a8ad
|
7
|
+
data.tar.gz: 9ac574ca17979e278f47db24ddb5a71d012ffc064db4180c3bcbd5000964842f33753259ae7d07c4f3b765b65097effbb4fb9201361b581697702ce164068c37
|
data/README.md
CHANGED
@@ -18,7 +18,28 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
### Phasefile
|
22
|
+
|
23
|
+
In order to configure Phase, you'll need to create a `Phasefile` at the
|
24
|
+
root of your project.
|
25
|
+
|
26
|
+
**Phasefile**
|
27
|
+
```ruby
|
28
|
+
Phase.configure do |config|
|
29
|
+
# config.deploy.docker_repository = "mycompany/myrepo"
|
30
|
+
# config.deploy.docker_repository = "https://docker.mycompany.com/myrepo"
|
31
|
+
# config.deploy.asset_bucket = "static-assets"
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
#### Docker Repository - Required
|
36
|
+
This is where you tell phase where to push your built image to. Accepts
|
37
|
+
Docker Hub naming convention of "user/reponame" or your own container
|
38
|
+
host.
|
39
|
+
|
40
|
+
#### S3 Assets
|
41
|
+
Provide a bucket name and Phase will push your compiled assets to that S3
|
42
|
+
Bucket.
|
22
43
|
|
23
44
|
## Contributing
|
24
45
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.2
|
data/lib/phase.rb
CHANGED
data/lib/phase/cli/build.rb
CHANGED
@@ -6,6 +6,7 @@ module Phase
|
|
6
6
|
c.syntax = "phase build [-s]"
|
7
7
|
|
8
8
|
c.option "-s", "--sandbox", String, "Build in sandbox mode: uses current directory's possibly dirty git tree as build context."
|
9
|
+
c.option "-n", "--version-number", String, "Build number to create."
|
9
10
|
|
10
11
|
c.description = <<-EOS.strip_heredoc
|
11
12
|
Builds a new Docker image of the latest committed code on the current branch. Tags the
|
@@ -23,17 +24,20 @@ module Phase
|
|
23
24
|
def initialize(args, options)
|
24
25
|
super
|
25
26
|
@clean_build = !options.sandbox
|
27
|
+
@version_number = options.version_number
|
26
28
|
end
|
27
29
|
|
28
30
|
def run
|
29
|
-
version_number = get_next_version_number
|
30
|
-
|
31
31
|
build = ::Phase::Deploy::Build.new(version_number, clean_build: clean_build)
|
32
32
|
build.execute!
|
33
33
|
end
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
|
+
def version_number
|
38
|
+
@version_number ||= get_next_version_number
|
39
|
+
end
|
40
|
+
|
37
41
|
def get_next_version_number
|
38
42
|
current_version = ::Phase::Deploy::Version.current
|
39
43
|
|
data/lib/phase/cli/deploy.rb
CHANGED
@@ -3,37 +3,37 @@ module Phase
|
|
3
3
|
class Deploy < Command
|
4
4
|
|
5
5
|
command :deploy do |c|
|
6
|
-
c.syntax = "phase deploy <
|
7
|
-
|
8
|
-
c.option "-n", "--number", String, "Specific version number to deploy."
|
6
|
+
c.syntax = "phase deploy <environment_name> <version_number>"
|
9
7
|
|
10
8
|
c.description = <<-EOS.strip_heredoc
|
11
|
-
Builds and deploys code to
|
12
|
-
|
13
|
-
`config.deploy.version_lockfile`) unless an alternate version is provided with the
|
14
|
-
-n option.
|
9
|
+
Builds and deploys code to the specified <environment_name>, which may be
|
10
|
+
any environment configured in the Phasefile.
|
15
11
|
EOS
|
16
12
|
|
17
13
|
c.action do |args, options|
|
18
|
-
options.default(number: ::Phase::Deploy::Version.current)
|
19
14
|
new(args, options).run
|
20
15
|
end
|
21
16
|
end
|
22
17
|
|
23
|
-
attr_reader :
|
18
|
+
attr_reader :env_name, :version_number
|
24
19
|
|
25
20
|
def initialize(args, options)
|
26
21
|
super
|
27
22
|
|
28
|
-
fail "
|
29
|
-
|
23
|
+
fail "must specify both environment and version number" unless args.count >= 2
|
24
|
+
|
25
|
+
@env_name = args[0]
|
26
|
+
@version_number = args[1]
|
27
|
+
|
28
|
+
fail "must specify environment" unless env_name
|
29
|
+
fail "must specify version number" unless version_number
|
30
30
|
end
|
31
31
|
|
32
32
|
def run
|
33
|
-
|
34
|
-
|
33
|
+
environment = config.deploy.environments.find { |e| e.name == env_name }
|
34
|
+
fail "unknown environment: '#{env_name}'" unless environment
|
35
35
|
|
36
|
-
deployment =
|
36
|
+
deployment = Deploy::Deployment.new(environment, version_tag: version_number)
|
37
37
|
deployment.execute!
|
38
38
|
end
|
39
39
|
|
data/lib/phase/config/deploy.rb
CHANGED
@@ -21,16 +21,10 @@ module Phase
|
|
21
21
|
|
22
22
|
# @return [String] the cloud storage bucket ("directory") for storing compiled assets
|
23
23
|
# @example Sample settings
|
24
|
-
# config.deploy.
|
24
|
+
# config.deploy.asset_bucket = "static-assets"
|
25
25
|
attr_accessor :asset_bucket
|
26
26
|
|
27
27
|
|
28
|
-
# @return [String] any options or switches to be passed to the Docker daemon at runtime
|
29
|
-
# @example Sample settings
|
30
|
-
# config.deploy.docker_run_flags = "-v /dir:/dir -e VAR=value --env-file=.environment"
|
31
|
-
attr_accessor :docker_run_flags
|
32
|
-
|
33
|
-
|
34
28
|
def initialize
|
35
29
|
@environments = []
|
36
30
|
@version_lockfile = "VERSION"
|
data/lib/phase/configuration.rb
CHANGED
@@ -2,70 +2,25 @@ module Phase
|
|
2
2
|
module Deploy
|
3
3
|
|
4
4
|
class Deployment
|
5
|
-
|
6
|
-
include ::Phase::Util::Shell
|
5
|
+
attr_reader :options#, :build
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
def initialize(role_name, version_tag, options = {})
|
11
|
-
@role_name, @version_tag, @options = role_name, version_tag, options
|
7
|
+
def initialize(options = {})
|
8
|
+
@options = options
|
12
9
|
end
|
13
10
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
end
|
11
|
+
# def build
|
12
|
+
# @build ||= Build.new(options[:version_tag])
|
13
|
+
# end
|
18
14
|
|
19
|
-
|
20
|
-
|
21
|
-
deploy_image
|
15
|
+
def execute!
|
16
|
+
# build.execute!
|
17
|
+
deploy_image
|
22
18
|
end
|
23
19
|
|
24
20
|
private
|
25
21
|
|
26
|
-
def deploy_image
|
27
|
-
|
28
|
-
server_count = 2 # FIXME: make this a config var
|
29
|
-
run_flags = docker_run_flags
|
30
|
-
delay_seconds = 35 # FIXME: make this a config var
|
31
|
-
|
32
|
-
::SSHKit::Coordinator.new(hosts).each(options) do
|
33
|
-
execute(:docker, :pull, image_name)
|
34
|
-
|
35
|
-
# TODO: fail if pending migrations
|
36
|
-
# execute(:docker, :run, run_flags, "--rm -it", image_name,
|
37
|
-
# "bundle exec rails runner '::ActiveRecord::Migrator.needs_migration? ? exit(1) : exit(0)'")
|
38
|
-
|
39
|
-
server_count.times do |i|
|
40
|
-
progress_bar = ::ProgressBar.new("Deploying ##{i}", delay_seconds)
|
41
|
-
|
42
|
-
server_name = "server-#{i}"
|
43
|
-
port_number = 3000 + i # FIXME: make this a config var
|
44
|
-
|
45
|
-
execute(:docker, :stop, server_name, raise_on_non_zero_exit: false)
|
46
|
-
execute(:docker, :rm, server_name, raise_on_non_zero_exit: false)
|
47
|
-
|
48
|
-
execute(:docker, :run, run_flags, "-p #{port_number}:3000 --name #{server_name} -d", image_name)
|
49
|
-
|
50
|
-
# TODO: test for server responding correctly
|
51
|
-
unless i == server_count - 1
|
52
|
-
delay_seconds.times do
|
53
|
-
sleep 1
|
54
|
-
progress_bar.inc
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
progress_bar.finish
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def docker_image_name
|
64
|
-
@docker_image ||= "#{::Phase.config.deploy.docker_repository}:#{version_tag}"
|
65
|
-
end
|
66
|
-
|
67
|
-
def docker_run_flags
|
68
|
-
@docker_run_flags ||= ::Phase.config.deploy.docker_run_flags
|
22
|
+
def deploy_image
|
23
|
+
system("echo yaaaay")
|
69
24
|
end
|
70
25
|
end
|
71
26
|
|
data/lib/phase/version.rb
CHANGED
data/phase.gemspec
CHANGED
@@ -6,7 +6,7 @@ require 'phase/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "phase"
|
8
8
|
spec.version = Phase::VERSION
|
9
|
-
spec.authors = ["Piers Mainwaring"
|
9
|
+
spec.authors = ["Piers Mainwaring"]
|
10
10
|
spec.email = ["piers@impossibly.org"]
|
11
11
|
spec.summary = "A simple way to manage cloud instances within a multi-subnet network, like an AWS VPC."
|
12
12
|
spec.description = ""
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piers Mainwaring
|
8
|
-
- Orca Health, Inc.
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2016-01
|
11
|
+
date: 2016-04-01 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: commander
|
@@ -261,7 +260,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
261
260
|
version: '0'
|
262
261
|
requirements: []
|
263
262
|
rubyforge_project:
|
264
|
-
rubygems_version: 2.
|
263
|
+
rubygems_version: 2.5.1
|
265
264
|
signing_key:
|
266
265
|
specification_version: 4
|
267
266
|
summary: A simple way to manage cloud instances within a multi-subnet network, like
|