picobox 0.3.2 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4275326b0f3ef581577f457535d3fbfd0a290d19
4
- data.tar.gz: d7dca7b8be77278cd771defee9b8b79432dafe7b
3
+ metadata.gz: ded8cb446fb955057bf0fccbe10101bc727513e4
4
+ data.tar.gz: aa79bcdb1461b5591d9ed9cc7261096cca0ca213
5
5
  SHA512:
6
- metadata.gz: ec7eb20215cfdd81cf245df2bf48d7cc75541b7f8c2ec42fcce33daf3cdc2febcc203042fa4543f7bef896898d77005fa1a6da90efc501636ed653c178ce795d
7
- data.tar.gz: cff37976027d8507bdcf0ad96a5b4e880af4c7845712f93bf2c2601c07a96ccf4ab6b932a07fbab41d4de8d2a90872907191ca5886bdfbdd4dc376af253f750e
6
+ metadata.gz: 1d467ece912eaac8bec1dbde2db545d007eee5af20311221dedba388f907839c149a7e52fc170a32b07bfec59fbb6375aeb90d9cec87b24d30404ecaf405c7fe
7
+ data.tar.gz: 5abd04e59a4a2e0c41d76ca327920d82880c9f232ada5d5633831a90a8e89341d3e871e308a563650e81c39b4a2bc5d84fd944169919cbb227f66b436bbe8bbd
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # Picobox
2
2
 
3
- Docker development environment for humans. So thin (1×10−12 m) you can barley feel it.
3
+ Docker development environment for humans.
4
4
 
5
5
  Don't want to learn a whole -bunch --of -commands_with_flags/just -to run_rails || other_things?
6
6
 
7
7
  Start picobox and continue with the way you have always done things, except now, isolated inside containers
8
8
 
9
- *Early release, caution, there be dragons...*
10
9
 
11
- ## Installation CLI
10
+ ## Install CLI
11
+
12
12
 
13
13
  ```bash
14
14
  $ gem install picobox
@@ -17,14 +17,13 @@ $ picobox install
17
17
 
18
18
  That's it your done
19
19
 
20
+ **Available boxes**
20
21
 
21
- ## Uninstall Picobox
22
- ```bash
23
- $ picobox uninstall
24
- $ gem uninstall picobox
25
- ```
26
-
27
- Now you are really done
22
+ elixir
23
+ nodejs
24
+ python
25
+ rails
26
+ ruby
28
27
 
29
28
 
30
29
  ## Usage
@@ -32,14 +31,12 @@ Now you are really done
32
31
  ![demo](https://github.com/surzycki/picobox/blob/master/docs/testdrive.gif)
33
32
  (may take a sec to load)
34
33
 
35
- **Create box**
34
+ **Create rails box**
36
35
 
37
36
  ```bash
38
37
  $ mkdir -p Code/rails
39
38
  $ cd Code/rails
40
39
  $ picobox init rails
41
- $ picobox build
42
- $ picobox start
43
40
  ```
44
41
 
45
42
  Your box is up and running, use your container-ized rails as you would normally
@@ -53,7 +50,7 @@ $ rake -T
53
50
  $ rails s
54
51
  ```
55
52
 
56
- **Do more stuff**
53
+ **Install gems, irb, bundler and more**
57
54
  ```bash
58
55
  $ gem install rails --no-ri --no-rdoc
59
56
  $ irb
@@ -63,13 +60,45 @@ $ ruby
63
60
 
64
61
  Everything is running inside your box transparently !
65
62
 
66
- ## Dependencies
67
63
 
68
- ### Linux
64
+ ## Detailed Usage
65
+
66
+ ```bash
67
+ Commands:
68
+ picobox boxes # list of available boxes
69
+ picobox help [COMMAND] # Describe available commands or one specific command
70
+ picobox init [BOX] # initialize directory for use with picobox
71
+ picobox install # installs picobox
72
+ picobox reset # reset picobox containers
73
+ picobox restart # restart picobox
74
+ picobox service SUBCOMMAND # do things with the SERVICES
75
+ picobox ssh [SERVICE] # open shell to service
76
+ picobox start # start picobox
77
+ picobox status # current status of containers
78
+ picobox stop # stop picobox
79
+ picobox uninstall # removes picobox
80
+ picobox update # udpates picobox
81
+ picobox version # displays current version
82
+
83
+ Commands:
84
+ picobox service add [SERVICE] # adds a service to your box
85
+ picobox service build [SERVICE] optional # builds the picobox
86
+ picobox service help [COMMAND] # Describe subcommands or one specific subcommand
87
+ picobox service list # list available services
88
+ picobox service remove [SERVICE] # removes a service from your box
89
+
90
+ Options:
91
+ [--verbose], [--no-verbose] # Verbose debugging output
92
+ ```
93
+
94
+ ### Dependencies
95
+ **Linux**
96
+
69
97
  * build-essential
70
98
  * ruby
71
99
  * ruby-dev
72
100
 
101
+
73
102
  ## Development
74
103
 
75
104
  To run the tests you'll need ruby 2.3 since we are using the <<~EOS operator (un-indented multiline strings)
@@ -79,7 +108,7 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
79
108
  To use without installing, use:
80
109
 
81
110
  ```bash
82
- $ bin/picobox version
111
+ $ bin/picobox_dev version
83
112
  ```
84
113
 
85
114
  To run tests:
@@ -98,9 +127,10 @@ $ rake build
98
127
  $ gem install pkg/picobox-x.x.x.gem
99
128
  ```
100
129
 
101
- ## Helpful stuff
130
+ ### Helpful stuff
102
131
 
103
132
  **debug during an aruba test run**
133
+
104
134
  spec/support/aruba.rb
105
135
  ```ruby
106
136
  require 'byebug/core'
@@ -117,19 +147,15 @@ $ bundle exec byebug -R localhost:8989
117
147
  (byebug) last_command_started
118
148
  ```
119
149
 
120
-
121
-
122
- ## TODO
150
+ ### TODO
151
+ - [ ] Install runtime dependecies on linux during setup
123
152
  - [ ] Documentation (both in code and wiki)
124
153
  - [ ] Include aliases specific to the box when unpacking (maybe)
125
- - [ ] Add more boxes
126
154
  - [ ] Add destroy command
127
- - [ ] Add Habitus API web server to add ssh keys to containers**
155
+ - [ ] Explore Habitus API web server to add ssh keys to containers**
128
156
  - [ ] Use traefik.io for dns
129
157
  - [ ] Uninstall should stop and remove all instances that are running
130
- - [ ] Block most commands if picobox not installed
131
158
  - [ ] Some services should install thier own volumes
132
- - [ ] Box update function
133
159
  - [ ] Remove TTY::File, TTY::Prompt dependency (needs native extensions)
134
160
 
135
161
  **http://blog.cloud66.com/using-ssh-private-keys-securely-in-docker-build/
data/lib/picobox/box.rb CHANGED
@@ -15,22 +15,16 @@ module Picobox
15
15
  rescue Errors::BoxNotImplemented
16
16
  display_box_not_available type
17
17
  list # called like for exception handling
18
- rescue Errors::ProjectNotInitialized
19
- display_project_not_initialized
20
- exit 1
21
18
  rescue StandardError => e
22
- display_info(e, :red)
19
+ display_error e
23
20
  exit 1
24
21
  end
25
22
 
26
23
  def list()
27
24
  accept(Commands::UpdatePackages.new)
28
25
  accept(Commands::ListBoxes.new)
29
- rescue Errors::PicoboxNotInstalled
30
- display_picobox_not_installed
31
- exit 1
32
26
  rescue StandardError => e
33
- display_info(e, :red)
27
+ display_error e
34
28
  exit 1
35
29
  end
36
30
  end
data/lib/picobox/cli.rb CHANGED
@@ -77,7 +77,6 @@ module Picobox
77
77
  def version
78
78
  say "Picobox: #{Picobox::VERSION}"
79
79
  say "Packages: #{Picobox::Utils::Packages.new(Os::CurrentOs.get).installed_version[1..-1]}"
80
-
81
80
  rescue SignalException
82
81
  exit 1
83
82
  end
@@ -88,7 +87,6 @@ module Picobox
88
87
  LONGDESC
89
88
  def install
90
89
  Picobox.set_verbosity options[:verbose]
91
-
92
90
  System.new(Os::CurrentOs.get).install
93
91
  rescue SignalException
94
92
  exit 1
@@ -100,7 +98,6 @@ module Picobox
100
98
  LONGDESC
101
99
  def update
102
100
  Picobox.set_verbosity options[:verbose]
103
-
104
101
  System.new(Os::CurrentOs.get).install
105
102
  rescue SignalException
106
103
  exit 1
@@ -112,7 +109,6 @@ module Picobox
112
109
  LONGDESC
113
110
  def uninstall
114
111
  Picobox.set_verbosity options[:verbose]
115
-
116
112
  System.new(Os::CurrentOs.get).uninstall
117
113
  rescue SignalException
118
114
  exit 1
@@ -141,7 +137,6 @@ module Picobox
141
137
  LONGDESC
142
138
  def start()
143
139
  Picobox.set_verbosity options[:verbose]
144
-
145
140
  System.new(Os::CurrentOs.get).start
146
141
  rescue SignalException
147
142
  exit 1
@@ -153,7 +148,6 @@ module Picobox
153
148
  LONGDESC
154
149
  def stop()
155
150
  Picobox.set_verbosity options[:verbose]
156
-
157
151
  System.new(Os::CurrentOs.get).stop
158
152
  rescue SignalException
159
153
  exit 1
@@ -165,7 +159,6 @@ module Picobox
165
159
  LONGDESC
166
160
  def restart()
167
161
  Picobox.set_verbosity options[:verbose]
168
-
169
162
  System.new(Os::CurrentOs.get).restart
170
163
  rescue SignalException
171
164
  exit 1
@@ -6,7 +6,8 @@ module Picobox
6
6
 
7
7
  raise Errors::ProjectNotInitialized unless os.project_initialized?
8
8
 
9
- system("docker-compose up -d #{Picobox.output}")
9
+ system("docker-compose up -d #{Picobox.output}") or raise Errors::DockerError
10
+
10
11
  publish_event :started
11
12
  end
12
13
 
@@ -6,7 +6,7 @@ module Picobox
6
6
 
7
7
  raise Errors::ProjectNotInitialized unless os.project_initialized?
8
8
 
9
- system("docker-compose down #{Picobox.output}")
9
+ system("docker-compose down #{Picobox.output}") or raise Errors::DockerError
10
10
 
11
11
  publish_event :stopped
12
12
  end
@@ -11,9 +11,9 @@ module Picobox
11
11
 
12
12
  filename = packages.download
13
13
 
14
- system("sudo rm -rf #{Picobox.packages_dir}")
15
- system("sudo mkdir #{Picobox.packages_dir}")
16
- system("sudo tar xvf #{filename} -C #{Picobox.packages_dir} --strip-components=1 #{Picobox.output}")
14
+ system("rm -rf #{Picobox.packages_dir}")
15
+ system("mkdir #{Picobox.packages_dir}")
16
+ system("tar xvf #{filename} -C #{Picobox.packages_dir} --strip-components=1 #{Picobox.output}")
17
17
 
18
18
  Shell::IniFile.get(os)[:packages] = { version: packages.current_version, last_update: Time.now.to_i }
19
19
 
@@ -23,7 +23,23 @@ module Picobox
23
23
 
24
24
 
25
25
  def visit_linux subject
26
- visit_darwin subject
26
+ raise Errors::PicoboxNotInstalled unless os.picobox_installed?
27
+
28
+ packages = Utils::Packages.new(os)
29
+
30
+ if packages.update?
31
+ publish_event :update_packages_start
32
+
33
+ filename = packages.download
34
+
35
+ system("sudo rm -rf #{Picobox.packages_dir}")
36
+ system("sudo mkdir #{Picobox.packages_dir}")
37
+ system("sudo tar xvf #{filename} -C #{Picobox.packages_dir} --strip-components=1 #{Picobox.output}")
38
+
39
+ Shell::IniFile.get(os)[:packages] = { version: packages.current_version, last_update: Time.now.to_i }
40
+
41
+ publish_event :update_packages_stop
42
+ end
27
43
  end
28
44
  end
29
45
  end
@@ -1,6 +1,6 @@
1
1
  module Picobox
2
2
  # names for files / directories
3
- VERSION = '0.3.2'
3
+ VERSION = '0.3.4'
4
4
  HOMEPAGE = 'https://github.com/surzycki/picobox'
5
5
  PACKAGES_INFO_URL = 'https://api.github.com/repos/picobox/packages/releases/latest'
6
6
  CONFIG_DIR = '.picobox'
@@ -12,5 +12,6 @@ module Picobox
12
12
  class FileNotFoundError < PicoboxError; end
13
13
  class PicoboxNotInstalled < PicoboxError; end
14
14
  class DistroNotSupported < PicoboxError; end
15
+ class DockerError < PicoboxError; end
15
16
  end
16
17
  end
@@ -11,11 +11,8 @@ module Picobox
11
11
 
12
12
  def init
13
13
  accept(Commands::InitializeProject.new)
14
- rescue Errors::PicoboxNotInstalled
15
- display_picobox_not_installed
16
- exit 1
17
14
  rescue StandardError => e
18
- display_info(e, :red)
15
+ display_error e
19
16
  exit 1
20
17
  end
21
18
  end
@@ -12,24 +12,15 @@ module Picobox
12
12
  def build(service=nil)
13
13
  accept(Commands::BuildService.new(service))
14
14
  rescue StandardError => e
15
- display_info(e, :red)
15
+ display_error e
16
16
  exit 1
17
17
  end
18
18
 
19
19
  def add(services)
20
20
  services.each { |service| accept(Commands::AddService.new(service)) }
21
21
  accept(Commands::Restart.new)
22
- rescue Errors::ServiceNotImplemented => e
23
- display_service_not_available e.message
24
- exit 1
25
- rescue Errors::ProjectNotInitialized
26
- display_project_not_initialized
27
- exit 1
28
- rescue Picobox::Errors::FileNotFoundError => e
29
- display_file_not_found e.message
30
- exit 1
31
22
  rescue StandardError => e
32
- display_info(e, :red)
23
+ display_error e
33
24
  exit 1
34
25
  end
35
26
 
@@ -42,14 +33,8 @@ module Picobox
42
33
  display_service_not_installed type
43
34
  rescue Errors::ServiceNotImplemented
44
35
  display_service_not_available type
45
- rescue Errors::ProjectNotInitialized
46
- display_project_not_initialized
47
- exit 1
48
- rescue Picobox::Errors::FileNotFoundError => e
49
- display_file_not_found e.message
50
- exit
51
36
  rescue StandardError => e
52
- display_info(e, :red)
37
+ display_error e
53
38
  exit 1
54
39
  end
55
40
 
@@ -57,11 +42,8 @@ module Picobox
57
42
  def list()
58
43
  accept(Commands::UpdatePackages.new)
59
44
  accept(Commands::ListServices.new)
60
- rescue Errors::PicoboxNotInstalled
61
- display_picobox_not_installed
62
- exit 1
63
45
  rescue StandardError => e
64
- display_info(e, :red)
46
+ display_error e
65
47
  exit 1
66
48
  end
67
49
  end
@@ -4,11 +4,11 @@ module Picobox
4
4
  class << self
5
5
  def get(os)
6
6
  case "#{os.user_shell}:#{os.to_s}"
7
- when '/bin/bash:darwin'
7
+ when /\/bin\/bash:darwin/
8
8
  Shell::DotProfile.new(os)
9
- when '/bin/zsh:darwin', '/usr/bin/zsh:linux'
9
+ when /\/bin\/zsh:darwin/, /\/bin\/zsh:linux/
10
10
  Shell::DotZshRC.new(os)
11
- when '/bin/bash:linux'
11
+ when /\/bin\/bash:linux/
12
12
  Shell::DotBashRC.new(os)
13
13
  else
14
14
  raise Errors::ShellNotSupported, "#{os.user_shell}:#{os.to_s}"
@@ -19,14 +19,8 @@ module Picobox
19
19
  accept(Commands::SetupShell.new)
20
20
  accept(Commands::FinishInstall.new)
21
21
  accept(Commands::ReloadShell.new)
22
- rescue Errors::ShellNotSupported => e
23
- display_shell_not_supported e.message
24
- exit 1
25
- rescue Errors::DistroNotSupported => e
26
- display_distro_not_supported
27
- exit 1
28
22
  rescue StandardError => e
29
- display_info(e, :red)
23
+ display_error e
30
24
  exit 1
31
25
  end
32
26
 
@@ -35,58 +29,40 @@ module Picobox
35
29
  accept(Commands::StartUninstall.new)
36
30
  accept(Commands::RemoveSetupShell.new)
37
31
  accept(Commands::FinishUninstall.new)
38
- rescue Errors::PicoboxNotInstalled
39
- display_picobox_not_installed
40
- exit 1
41
32
  rescue StandardError => e
42
- display_info(e, :red)
33
+ display_error e
43
34
  exit 1
44
35
  end
45
36
 
46
37
 
47
38
  def start
48
39
  accept(Commands::Start.new)
49
- rescue Errors::ProjectNotInitialized
50
- display_project_not_initialized
51
- exit 1
52
40
  rescue StandardError => e
53
- display_info(e, :red)
41
+ display_error e
54
42
  exit 1
55
43
  end
56
44
 
57
45
 
58
46
  def stop
59
47
  accept(Commands::Stop.new)
60
- rescue Errors::ProjectNotInitialized
61
- display_project_not_initialized
62
- exit 1
63
48
  rescue StandardError => e
64
- display_info(e, :red)
49
+ display_error e
65
50
  exit 1
66
51
  end
67
52
 
68
53
 
69
54
  def restart
70
55
  accept(Commands::Restart.new)
71
- rescue Errors::ProjectNotInitialized
72
- display_project_not_initialized
73
- exit 1
74
56
  rescue StandardError => e
75
- display_info(e, :red)
57
+ display_error e
76
58
  exit 1
77
59
  end
78
60
 
79
61
 
80
62
  def ssh(service)
81
63
  accept(Commands::SshInstance.new(service))
82
- rescue Errors::SystemDownError
83
- display_system_down
84
- exit 1
85
- rescue Errors::ProjectNotInitialized
86
- display_project_not_initialized
87
- exit 1
88
64
  rescue StandardError => e
89
- display_info(e, :red)
65
+ display_error e
90
66
  exit 1
91
67
  end
92
68
  end
@@ -17,6 +17,30 @@ module Picobox
17
17
  end
18
18
 
19
19
 
20
+ def display_error(e)
21
+ case e
22
+ when Errors::ProjectNotInitialized
23
+ display_project_not_initialized
24
+ when Errors::DockerError
25
+ display_docker_error
26
+ when Errors::SystemDownError
27
+ display_system_down
28
+ when Errors::ShellNotSupported
29
+ display_shell_not_supported e.message
30
+ when Errors::DistroNotSupported
31
+ display_distro_not_supported
32
+ when Errors::PicoboxNotInstalled
33
+ display_picobox_not_installed
34
+ when Errors::ServiceNotImplemented
35
+ display_service_not_available e.message
36
+ when Picobox::Errors::FileNotFoundError
37
+ display_file_not_found e.message
38
+ else
39
+ display_info(e, :red)
40
+ end
41
+ end
42
+
43
+ private
20
44
  def display_project_not_initialized
21
45
  display_status('error', 'no project found', :red)
22
46
  display_info("Run 'picobox init [BOX]'", :yellow)
@@ -66,6 +90,12 @@ module Picobox
66
90
  display_info('distro is not yet supported :(', :red)
67
91
  end
68
92
 
93
+ def display_docker_error
94
+ display_info "Docker gave an error", :red
95
+ display_info "Check to see if docker is running", :red
96
+ display_info("Try running 'docker ps'", :yellow)
97
+ end
98
+
69
99
  private
70
100
  def thor
71
101
  @thor ||= Thor::Shell::Color.new
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: picobox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Surzycki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-02 00:00:00.000000000 Z
11
+ date: 2017-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug