sct 0.1.2 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d0ca9b99be4c5113497c4a114266df1434b03cbc5c704d241be685740d3d83e
4
- data.tar.gz: f623453bd6b418b9feeec0eee04d553a3614498909b297fb843b63c12fcb0ffb
3
+ metadata.gz: aa3cf9bee32173cc1c48060f4ff32601c2c85458dfc82ca577f659f6c76ea167
4
+ data.tar.gz: 27e703790c149759f1c94bbcf3b332511eeb6338ff2d54ed6df992f95faab265
5
5
  SHA512:
6
- metadata.gz: e31a534cd979e93dc7902bd634b92f7f375a6e047885b976aef36fc331928245684cbd9d881b6172087ea73e713c19b382312274933b456a38d9f84e05f1b312
7
- data.tar.gz: 39a7ec02f097a063d898f216a02997e0080657aaf92ec8020fa8baed582796948e50212776387211c6f9e1c7e43358e27e2d609f44f971aa1841237d72f1c078
6
+ metadata.gz: 3631eeb32fd0263b896715f087de24f092d1ddf1eac8b2b89f271f6f57e2e4da9cdf75ef2212eccf9ee0e4ab04ff6df09bd9c4137f99006a44f7e264f586a2c7
7
+ data.tar.gz: f3e3e98dbe9ffad2998f67ee05387840f103c3db8340317b6334ac790d1f385807453c521c70cac2cc844336f1277734862e4f42b9250e1fe0e8a7c1a10aff2e
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ .idea/
9
10
 
10
11
  # rspec failure tracking
11
12
  .rspec_status
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sct (0.1.1)
4
+ sct (0.1.3)
5
5
  class_interface (~> 0.1.1)
6
6
  colored (~> 1.2)
7
7
  commander (~> 4.4.7)
@@ -45,4 +45,4 @@ DEPENDENCIES
45
45
  sct!
46
46
 
47
47
  BUNDLED WITH
48
- 2.0.2
48
+ 2.1.4
@@ -0,0 +1,25 @@
1
+ module ClassLevelInheritableAttributes
2
+ def self.included(base)
3
+ base.extend(ClassMethods)
4
+ end
5
+
6
+ module ClassMethods
7
+ def inheritable_attributes(*args)
8
+ @inheritable_attributes ||= [:inheritable_attributes]
9
+ @inheritable_attributes += args
10
+ args.each do |arg|
11
+ class_eval %(
12
+ class << self; attr_accessor :#{arg} end
13
+ )
14
+ end
15
+ @inheritable_attributes
16
+ end
17
+
18
+ def inherited(subclass)
19
+ @inheritable_attributes.each do |inheritable_attribute|
20
+ instance_var = "@#{inheritable_attribute}"
21
+ subclass.instance_variable_set(instance_var, instance_variable_get(instance_var))
22
+ end
23
+ end
24
+ end
25
+ end
@@ -3,36 +3,41 @@ require 'sct/command_interface'
3
3
  module Sct
4
4
 
5
5
  class ClusterCommand
6
-
6
+
7
7
  IS_PUBLIC_COMMAND = true
8
- SYNTAX = 'sct cluster'
8
+ SYNTAX = 'sct cluster up | sct cluster down'
9
9
  SUMMARY = 'Starts or stops the minikube cluster'
10
- EXAMPLE = 'sct cluster up'
11
- EXAMPLE_DESCRIPTION = 'Starts the spend cloud cluster'
10
+ EXAMPLE = 'sct cluster up | sct cluster down'
11
+ EXAMPLE_DESCRIPTION = 'Starts or stops the spend cloud cluster'
12
12
  DESCRIPTION = "Sct cluster allows you to start and stop the Spend Cloud minikube cluster"
13
-
14
- OPTIONS = []
15
-
16
- def initialize
17
13
 
18
- end
14
+ OPTIONS = []
19
15
 
20
16
  def execute(args, options)
17
+ return puts "SCT has not been initialized. Run 'sct init' first.".red unless Sct::Config.exists
18
+
19
+ if `uname -a`.match?("Microsoft")
20
+ minikube = "minikube.exe"
21
+ else
22
+ minikube = "minikube"
23
+ end
24
+
21
25
  case args[0]
22
26
  when "up"
23
- system("minikube start")
24
- system("minikube ssh -- 'sudo su -c \"echo 10048576 > /proc/sys/fs/inotify/max_user_watches\"'")
27
+ system("#{minikube} start")
28
+ system("sudo sct hostfile")
29
+ system("#{minikube} ssh -- 'sudo su -c \"echo 10048576 > /proc/sys/fs/inotify/max_user_watches\"'")
25
30
  system("kubectl delete pod -n kube-system $(kubectl get pods -n kube-system | grep registry-creds | awk '{print $1}')")
26
31
  puts "\n✔️ You can now visit your environment at 👉 https://spend-cloud.spend.cloud.local 👌"
27
32
  when "down"
28
- system("minikube stop")
29
- else
33
+ system("#{minikube} stop")
34
+ else
30
35
  puts "Unknown or missing argument. Please run 'sct cluster up' or 'sct cluster down'"
31
- end
36
+ end
32
37
  end
33
38
 
34
39
  implements CommandInterface
35
-
40
+
36
41
  end
37
42
 
38
- end
43
+ end
@@ -0,0 +1,29 @@
1
+ require 'sct/command_interface'
2
+ require 'sct/command_option'
3
+
4
+ module Sct
5
+
6
+ class ComposerCommand
7
+
8
+ IS_PUBLIC_COMMAND = true
9
+ SYNTAX = 'sct composer'
10
+ SUMMARY = 'Run composer commands through SCT'
11
+ EXAMPLE = 'sct composer install'
12
+ EXAMPLE_DESCRIPTION = 'sct composer install will update the project with the latest dependencies'
13
+ DESCRIPTION = "sct will run composer commands through the local docker installation"
14
+
15
+ OPTIONS = [
16
+ CommandOption.new("--verbose", nil, "Increase verbosity of messages."),
17
+ CommandOption.new("--require STRING", String, "Package to require with a version constraint. Should be in format foo/bar:1.0.0"),
18
+ CommandOption.new("--require-dev STRING", String, "Development requirements, see --require."),
19
+ CommandOption.new("-V", nil, "Display this application version.")
20
+ ]
21
+
22
+ def execute(args, options)
23
+ require "sct/docker/composer"
24
+ Sct::Composer.exec(ARGV[1..(ARGV.length+1)])
25
+ end
26
+
27
+ implements CommandInterface
28
+ end
29
+ end
@@ -7,30 +7,31 @@ module Sct
7
7
  SYNTAX = 'sct hostfile'
8
8
  SUMMARY = 'adds the ingress url to the users hostfile'
9
9
  DESCRIPTION = ""
10
- EXAMPLE = "sct hostfile --path=/mnt/c/Windows/System32/drivers/etc/hosts"
10
+ EXAMPLE = "sct hostfile"
11
11
  EXAMPLE_DESCRIPTION = ""
12
12
 
13
13
  OPTIONS = []
14
14
 
15
- def initialize
16
- end
17
-
18
15
  def self.options
19
16
  end
20
17
 
21
18
  def execute(args, options)
22
19
 
20
+ return puts "SCT has not been initialized. Run 'sct init' first.".red unless Sct::Config.exists
21
+
23
22
  require 'hosts'
24
23
 
25
24
  return unless ingressUrl
25
+
26
26
  url = ingressUrl
27
+ host_path = Sct::Config.get("host-path")
27
28
 
28
29
  if !options.path.nil?
29
30
  hosts = Hosts::File.read(options.path)
30
- elsif setup && sct_file["hostpath"]
31
- hosts = Hosts::File.read("#{sct_file["hostpath"]}")
31
+ elsif host_path
32
+ hosts = Hosts::File.read(host_path)
32
33
  else
33
- puts "No hostpath found in Sctfile using default /etc/hosts".yellow
34
+ puts "No hostpath found in config file. Using default /etc/hosts".yellow
34
35
  hosts = Hosts::File.read('/etc/hosts')
35
36
  end
36
37
 
@@ -103,25 +104,6 @@ module Sct
103
104
  return Sct::Helpers.ingressUrl
104
105
  end
105
106
 
106
- def setup
107
-
108
- return false unless Sct::SctFolder.setup?
109
-
110
- return true
111
-
112
- end
113
-
114
- def sct_file
115
-
116
- return unless setup
117
-
118
- sct_file_string = File.read(Sct::SctFolder.sctfile_path)
119
-
120
- sct_file_hash = Sct::Helpers.to_hash(sct_file_string)
121
-
122
- return sct_file_hash
123
- end
124
-
125
107
  implements CommandInterface
126
108
 
127
109
  end
@@ -1,29 +1,59 @@
1
1
  require 'sct/command_interface'
2
+ require 'highline'
2
3
 
3
4
  module Sct
4
5
 
5
6
  class InitCommand
6
-
7
+
7
8
  IS_PUBLIC_COMMAND = true
8
9
  SYNTAX = 'sct init'
9
10
  SUMMARY = 'Initialize a base configuration file for sct'
10
11
  EXAMPLE = 'sct init'
11
- EXAMPLE_DESCRIPTION = 'sct init will create a sct folder inside your working directory and a Sctfile'
12
- DESCRIPTION = "sct init will create a configuration file called Sctfile in your project"
13
-
12
+ EXAMPLE_DESCRIPTION = 'sct init will create a configuration file'
13
+ DESCRIPTION = "sct init will create a configuration file"
14
+
14
15
  OPTIONS = []
15
-
16
- def initialize
17
16
 
17
+ def initialize
18
18
  end
19
19
 
20
20
  def execute(args, options)
21
- require "sct/setup/setup"
22
- Sct::Setup.start
21
+
22
+ Sct::Config.dir
23
+
24
+ cli = HighLine.new
25
+
26
+ email = cli.ask("What is your email address?") { |q|
27
+ q.validate = URI::MailTo::EMAIL_REGEXP
28
+ }
29
+
30
+ cloud_proxy_path = cli.ask("What is the path of your cloud proxy json credentials?") { |q|
31
+ q.default = "~/.config/gcloud/application_default_credentials.json"
32
+ }
33
+
34
+ host_path = cli.choose do |menu|
35
+ menu.prompt = "What is the path of your hostfile?"
36
+ menu.choice(:unix) { "/etc/hosts" }
37
+ menu.choices(:windows) { "/mnt/c/Windows/System32/drivers/etc/hosts" }
38
+ menu.default = :unix
39
+ end
40
+
41
+ contents = ""
42
+ contents << "email=#{email}\n"
43
+ contents << "cloud-proxy-path=#{File.expand_path(cloud_proxy_path)}\n"
44
+ contents << "host-path=#{File.expand_path(host_path)}\n"
45
+
46
+ if !File.directory?(Sct::Config.dir)
47
+ FileUtils.mkdir_p(Sct::Config.dir)
48
+ end
49
+
50
+ File.write(Sct::Config.path, contents)
51
+
52
+ puts "Generated config file at #{Sct::Config.path}"
23
53
  end
24
54
 
25
55
  implements CommandInterface
26
-
56
+
27
57
  end
28
58
 
29
- end
59
+ end
@@ -1,13 +1,12 @@
1
1
  require 'sct/command_interface'
2
2
  require 'sct/command_option'
3
- require "sct/sct_folder"
3
+ require "sct/config"
4
4
  require "sct/setup/helpers"
5
5
 
6
6
  module Sct
7
7
 
8
8
  class Mysql_proxyCommand
9
9
 
10
-
11
10
  DEFAULT_SECRET_NAME = "gcloud-credentials"
12
11
 
13
12
  IS_PUBLIC_COMMAND = true
@@ -16,55 +15,22 @@ module Sct
16
15
  DESCRIPTION = ""
17
16
  EXAMPLE = ""
18
17
  EXAMPLE_DESCRIPTION = ""
19
-
20
- OPTIONS = []
21
-
22
- @path
23
- @secret_name
24
-
25
- def initialize
26
-
27
- return unless setup
28
-
29
- @path = sct_file["cloud-proxy-path"]
30
- @secret_name = DEFAULT_SECRET_NAME
31
- end
32
-
33
- def self.options
34
-
35
- end
18
+ OPTIONS = []
36
19
 
37
20
  def execute(args, options)
38
21
 
39
- return puts "No sct directory found".red unless setup
22
+ return puts "SCT has not been initialized. Run 'sct init' first.".red unless Sct::Config.exists
40
23
 
24
+ path = Sct::Config.get('cloud-proxy-path')
25
+
41
26
  system("kubectl delete secret gcloud-credentials")
42
- system("kubectl create secret generic gcloud-credentials --from-file=#{@path}")
27
+ system("kubectl create secret generic gcloud-credentials --from-file=#{path}")
43
28
 
44
- puts "Authenticated with secret-name: '#{@secret_name}'".green
29
+ puts "Authenticated with secret-name: '#{DEFAULT_SECRET_NAME}'".green
45
30
 
46
31
  return true
47
32
  end
48
33
 
49
- def setup
50
-
51
- return false unless Sct::SctFolder.setup?
52
-
53
- return true
54
-
55
- end
56
-
57
- def sct_file
58
-
59
- return unless setup
60
-
61
- sct_file_string = File.read(Sct::SctFolder.sctfile_path)
62
-
63
- sct_file_hash = Sct::Helpers.to_hash(sct_file_string)
64
-
65
- return sct_file_hash
66
- end
67
-
68
34
  implements CommandInterface
69
35
 
70
36
  end
@@ -0,0 +1,37 @@
1
+ require 'sct/command_interface'
2
+ require 'sct/command_option'
3
+
4
+ module Sct
5
+
6
+ class PhpCommand
7
+
8
+ IS_PUBLIC_COMMAND = true
9
+ SYNTAX = 'sct php'
10
+ SUMMARY = 'Run php commands through SCT'
11
+ EXAMPLE = 'sct php -r "echo \'Hello World!\';"'
12
+ EXAMPLE_DESCRIPTION = 'sct php -r will execute a command directly through the php interpreter'
13
+ DESCRIPTION = "sct will run php commands through the local docker installation"
14
+
15
+ OPTIONS = [
16
+ CommandOption.new("-r", String, "Run php code directy through the interpreter"),
17
+ CommandOption.new("-V", nil, "Get the current php version. Note that it's a capital V. The lowercase v will return the SCT tool version"),
18
+ ]
19
+
20
+ def execute(args, options)
21
+ require "sct/docker/php"
22
+
23
+ # Workaround for the version option being caught by the SCT tool itself
24
+ args=ARGV[1..(ARGV.length+1)].map { |arg| arg == '-V' ? arg = '-v' : arg}
25
+
26
+ # Another workaround for the -r option to add quotes around the value
27
+ if args.include? '-r'
28
+ codeIndex = args.index('-r') + 1
29
+ args[codeIndex] = "\"#{args[codeIndex]}\""
30
+ end
31
+
32
+ Sct::Php.exec(args)
33
+ end
34
+
35
+ implements CommandInterface
36
+ end
37
+ end
@@ -0,0 +1,26 @@
1
+ require 'sct/command_interface'
2
+ require 'sct/command_option'
3
+
4
+ module Sct
5
+
6
+ class YarnCommand
7
+
8
+ IS_PUBLIC_COMMAND = true
9
+ SYNTAX = 'sct yarn'
10
+ SUMMARY = 'Run yarn commands through SCT'
11
+ EXAMPLE = 'sct yarn dev'
12
+ EXAMPLE_DESCRIPTION = 'sct yarn dev will start the dev installation of the current project'
13
+ DESCRIPTION = "sct will run yarn commands through the local docker installation"
14
+
15
+ OPTIONS = [
16
+ CommandOption.new("--port PORTNUMBER", Integer, "The portnumber on which the server will be deployed")
17
+ ]
18
+
19
+ def execute(args, options)
20
+ require "sct/docker/yarn"
21
+ Sct::Yarn.exec(ARGV[1..(ARGV.length+1)])
22
+ end
23
+
24
+ implements CommandInterface
25
+ end
26
+ end
data/lib/sct/config.rb ADDED
@@ -0,0 +1,44 @@
1
+ module Sct
2
+ class Config
3
+
4
+ def self.dir
5
+ user = ENV["SUDO_USER"] || ENV["USER"]
6
+
7
+ if `uname -a`.match?("Darwin")
8
+ home = "/Users"
9
+ else
10
+ home = "/home"
11
+ end
12
+
13
+ return "#{home}/#{user}/.config/sct"
14
+ end
15
+
16
+ def self.path
17
+ return File.expand_path(File.join(self.dir, 'config'))
18
+ end
19
+
20
+ def self.exists
21
+ return File.exists?(Config.path)
22
+ end
23
+
24
+ def self.get(key)
25
+ config = self.read
26
+
27
+ if !config.key?(key)
28
+ return nil
29
+ end
30
+
31
+ return config[key]
32
+ end
33
+
34
+ def self.read
35
+ if !self.exists
36
+ return {}
37
+ end
38
+
39
+ contents = File.read(self.path)
40
+
41
+ return Sct::Helpers.to_hash(contents)
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,15 @@
1
+ require "sct/docker/docker"
2
+
3
+ module Sct
4
+ class Composer < Docker
5
+
6
+ # Configure the Yarn command
7
+ def self.config
8
+ self.setImage("eu.gcr.io/dev-pasc-vcdm/helpers-composer:latest", true)
9
+ self.setPwdAsVolume("/app")
10
+ self.addVolume(self.convertPath(self.getTrueHomePath()+"/.composer") , "/.composer")
11
+ self.setCurrentUserAndGroup()
12
+ self.setEntrypoint("composer")
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,243 @@
1
+ require "sct/ClassLevelInheritableAttributes"
2
+
3
+ module Sct
4
+ class Docker
5
+ include ClassLevelInheritableAttributes
6
+ inheritable_attributes :image, :is_private_registry, :entrypoint, :volumes, :ports, :extra_arguments
7
+
8
+ @image = nil
9
+ @is_private_registry = false
10
+ @entrypoint = nil
11
+
12
+ @volumes = {}
13
+ @ports = {}
14
+ @user_group = []
15
+ @extra_arguments = {}
16
+
17
+ ###
18
+ # The Docker command configuration. This has to be able to execute the command properly
19
+ ###
20
+ def self.config
21
+ # Run some initialization commands
22
+ end
23
+
24
+ ###
25
+ # Execute the configured command
26
+ ###
27
+ def self.exec(cli_arguments)
28
+
29
+ cli_arguments.each do | argument |
30
+ self.addExtraArgument(argument)
31
+ end
32
+
33
+ self.config()
34
+
35
+ # Check if the basic variables are set
36
+ if !@image || @image.empty?
37
+ raise LoadError, "The required image is not defined for this command"
38
+ end
39
+
40
+ if !self.checkForImage() && @is_private_registry
41
+ if !self.loginToPrivateRegistry()
42
+ raise RuntimeError, "Could not authenticate to GCR (" + $?.exitstatus + ")"
43
+ end
44
+ end
45
+
46
+ self.runCommand()
47
+ end
48
+
49
+ ###
50
+ # The image for this Docker command
51
+ ###
52
+ def self.setImage(image, is_private_registry=false)
53
+ @image = image
54
+ @is_private_registry = is_private_registry
55
+ end
56
+
57
+ ###
58
+ # Set the current PWD as a volume on the specified path in the container
59
+ ###
60
+ def self.setPwdAsVolume(volume_path)
61
+ pwd = `pwd -P`
62
+
63
+ if self.operatingSystem() == "Windows"
64
+ pwd=self.convertPath(pwd)
65
+ end
66
+
67
+ addVolume(pwd, volume_path)
68
+ end
69
+
70
+ ###
71
+ # Add an extra volume in the container
72
+ ###
73
+ def self.addVolume(localPath, volume_path)
74
+ @volumes[localPath] = volume_path
75
+ end
76
+
77
+ ###
78
+ # Add a port mapping for the container
79
+ ###
80
+ def self.mapPort(external_port, container_port = nil)
81
+
82
+ external_port=String(external_port)
83
+ container_port=String(container_port)
84
+
85
+ if container_port.empty?
86
+ container_port = external_port
87
+ end
88
+
89
+ @ports[external_port] = container_port
90
+ end
91
+
92
+ ###
93
+ # Set the current user and group in the container
94
+ ###
95
+ def self.setCurrentUserAndGroup
96
+ @user_group = []
97
+ @user_group << `id -u`
98
+ @user_group << `id -g`
99
+ end
100
+
101
+ ###
102
+ # Set the entrypoint for the command in the container
103
+ ###
104
+ def self.setEntrypoint(entrypoint)
105
+ @entrypoint=entrypoint
106
+ end
107
+
108
+ ###
109
+ # Add extra arguments to be configured for the container
110
+ ###
111
+ def self.addExtraArgument(argument, value=nil)
112
+ argument = String(argument)
113
+
114
+ if value
115
+ value = String(value)
116
+ end
117
+
118
+ self.extra_arguments[argument] = value
119
+ end
120
+
121
+ ###
122
+ # Check if the image is already present in the system
123
+ ###
124
+ def self.checkForImage
125
+ image_list=`docker images -q #{@image} 2> /dev/null`
126
+
127
+ return image_list && !image_list.empty?
128
+ end
129
+
130
+ ###
131
+ # Login to the private container registry with the cloud credentials
132
+ ###
133
+ def self.loginToPrivateRegistry
134
+ `docker login -u oauth2accesstoken -p "$(gcloud auth application-default print-access-token)" https://eu.gcr.io &>2`
135
+ return $?.success?
136
+ end
137
+
138
+ ###
139
+ # Run the command
140
+ ###
141
+ def self.runCommand()
142
+ command = self.compileCommand()
143
+
144
+ system(command)
145
+
146
+ return $?.success?
147
+ end
148
+
149
+ ###
150
+ # Compile the command with all options
151
+ ###
152
+ def self.compileCommand()
153
+ # Basic docker run command
154
+ command = self.addToCommandString("" , "docker run --rm -it")
155
+
156
+ # Attach configured volumes
157
+ if @volumes
158
+ @volumes.each do |local_path, container_path|
159
+ command = self.addToCommandString(command, "--volume " + local_path +":"+ container_path)
160
+ end
161
+ end
162
+
163
+ # Map configured ports
164
+ if @ports
165
+ @ports.each do |external_port, container_port|
166
+ command = self.addToCommandString(command, "-p " + external_port +":"+ container_port)
167
+ end
168
+ end
169
+
170
+ if @user_group
171
+ command = self.addToCommandString(command, "--user "+ String(@user_group.shift()) +":"+ String(@user_group.shift()))
172
+ end
173
+
174
+ # Add image to command
175
+ command = self.addToCommandString(command, @image)
176
+
177
+ if @entrypoint
178
+ command = self.addToCommandString(command, String(@entrypoint))
179
+ end
180
+
181
+ # Append arguments and options to command
182
+ if @extra_arguments
183
+ @extra_arguments.each do |argument, value|
184
+ if value && !value.empty?
185
+ command = self.addToCommandString(command, argument+"="+value)
186
+ else
187
+ command = self.addToCommandString(command, argument)
188
+ end
189
+ end
190
+ end
191
+
192
+ return command
193
+ end
194
+
195
+ ###
196
+ # Append a part to the command string and remove any unwanted characters
197
+ ###
198
+ def self.addToCommandString(command_string, append)
199
+ return command_string + append.gsub(/\r?\n/, "") + " "
200
+ end
201
+
202
+ ###
203
+ # Check the operating system on which this command is being run
204
+ ###
205
+ def self.operatingSystem()
206
+ proc = `uname -a`
207
+
208
+ case proc
209
+ when /Microsoft/
210
+ os = "Windows"
211
+ when /Darwin/
212
+ os = "MacOS"
213
+ else
214
+ os = "Ubuntu"
215
+ end
216
+
217
+ return os
218
+ end
219
+
220
+ ###
221
+ # Get the actual home path of the user. This may be different depending on the operating system
222
+ ###
223
+ def self.getTrueHomePath
224
+ home_path = `echo ~`
225
+ if self.operatingSystem() == "Windows"
226
+ home_path = self.convertPath(`cmd.exe /c echo %userprofile%`, false)
227
+ end
228
+
229
+ return home_path
230
+ end
231
+
232
+ ###
233
+ # Convert the unix paths to Windows paths for Windows systems
234
+ ###
235
+ def self.convertPath(path, to_native=true)
236
+ if self.operatingSystem() == "Windows" && to_native
237
+ return path.gsub(/\/mnt\/c/, 'C:/').gsub(/\/\//, '/').gsub(/\\\\/, "/").gsub(/\r\n?/, '')
238
+ else
239
+ return path.gsub(/C:\\/, '/mnt/c').gsub(/\\\\/, "/").gsub(/\\/, '/').gsub(/\r\n?/, '')
240
+ end
241
+ end
242
+ end
243
+ end
@@ -0,0 +1,14 @@
1
+ require "sct/docker/docker"
2
+
3
+ module Sct
4
+ class Php < Docker
5
+
6
+ # Configure the Yarn command
7
+ def self.config
8
+ self.setImage("eu.gcr.io/dev-pasc-vcdm/proactive-base:latest", true)
9
+ self.setPwdAsVolume("/var/www")
10
+ self.setCurrentUserAndGroup()
11
+ self.setEntrypoint("php")
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ require "sct/docker/docker"
2
+
3
+ module Sct
4
+ class Yarn < Docker
5
+
6
+ # Configure the Yarn command
7
+ def self.config
8
+ self.setImage("eu.gcr.io/dev-pasc-vcdm/helpers-yarn:latest", true)
9
+ self.setPwdAsVolume("/app")
10
+ self.addVolume(self.convertPath(self.getTrueHomePath()+"/.cache") , "/.cache")
11
+ self.mapPort(8081, 8080)
12
+ self.mapPort(9001)
13
+ self.setCurrentUserAndGroup()
14
+ end
15
+ end
16
+ end
data/lib/sct/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sct
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/sct.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'sct'
2
+ require "sct/config"
2
3
  require 'sct/command'
3
4
  require "sct/version"
4
- require "sct/sct_folder"
5
5
  require 'colored'
6
6
  require 'commander'
7
7
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reshad Farid
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-20 00:00:00.000000000 Z
11
+ date: 2020-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: class_interface
@@ -147,17 +147,23 @@ files:
147
147
  - lib/.DS_Store
148
148
  - lib/sct.rb
149
149
  - lib/sct/.DS_Store
150
+ - lib/sct/ClassLevelInheritableAttributes.rb
150
151
  - lib/sct/command.rb
151
152
  - lib/sct/command_interface.rb
152
153
  - lib/sct/command_option.rb
153
154
  - lib/sct/commands/cluster.rb
155
+ - lib/sct/commands/composer.rb
154
156
  - lib/sct/commands/hostfile.rb
155
157
  - lib/sct/commands/init.rb
156
158
  - lib/sct/commands/mysqlproxy.rb
157
- - lib/sct/constants.rb
158
- - lib/sct/sct_folder.rb
159
+ - lib/sct/commands/php.rb
160
+ - lib/sct/commands/yarn.rb
161
+ - lib/sct/config.rb
162
+ - lib/sct/docker/composer.rb
163
+ - lib/sct/docker/docker.rb
164
+ - lib/sct/docker/php.rb
165
+ - lib/sct/docker/yarn.rb
159
166
  - lib/sct/setup/helpers.rb
160
- - lib/sct/setup/setup.rb
161
167
  - lib/sct/version.rb
162
168
  - sct.gemspec
163
169
  homepage: https://gitlab.com/proactive-software/packages/sct
data/lib/sct/constants.rb DELETED
@@ -1,4 +0,0 @@
1
- module Sct
2
- # parameter names
3
- PAR_SECRET_NAME = "secret-name"
4
- end
@@ -1,35 +0,0 @@
1
- module Sct
2
- class SctFolder
3
- FOLDER_NAME = "sct"
4
-
5
- def self.path
6
- value ||= "./#{FOLDER_NAME}/" if File.directory?("./#{FOLDER_NAME}/")
7
- value ||= "./.#{FOLDER_NAME}/" if File.directory?("./.#{FOLDER_NAME}/") # hidden folder
8
- value ||= "./" if File.basename(Dir.getwd) == FOLDER_NAME && File.exist?('Sctfile') # inside the folder
9
- value ||= "./" if File.basename(Dir.getwd) == ".#{FOLDER_NAME}" && File.exist?('Sctfile') # inside the folder and hidden
10
- return value
11
- end
12
-
13
- def self.sctfile_path
14
- return nil if self.path.nil?
15
-
16
- path = File.join(self.path, 'Sctfile')
17
- return path if File.exist?(path)
18
- return nil
19
- end
20
-
21
- # Does a sct configuration already exist?
22
- def self.setup?
23
- return false unless self.sctfile_path
24
- File.exist?(self.sctfile_path)
25
- end
26
-
27
- def self.create_folder!(path = nil)
28
- path = File.join(path || '.', FOLDER_NAME)
29
- return if File.directory?(path) # directory is already there
30
- puts "Found a folder called 'sct' at path '#{path}', please delete it" if File.exist?(path)
31
- FileUtils.mkdir_p(path)
32
- puts "Created new folder '#{path}'."
33
- end
34
- end
35
- end
@@ -1,58 +0,0 @@
1
- require 'highline'
2
-
3
- module Sct
4
- class Setup
5
-
6
- attr_accessor :sctfile_content
7
-
8
- def self.start
9
-
10
- require "sct/sct_folder"
11
-
12
- if Sct::SctFolder.setup?
13
- puts "Already setup at path `#{Sct::SctFolder.path}`"
14
- return
15
- end
16
-
17
- Sct::SctFolder.create_folder!
18
-
19
- setup = self.new
20
- setup.write_sctfile
21
-
22
- end
23
-
24
- def write_sctfile
25
-
26
- sctfile_file_name = "Sctfile"
27
-
28
- cli = HighLine.new
29
-
30
- email = cli.ask("What is your email address?") { |q|
31
- q.validate = URI::MailTo::EMAIL_REGEXP
32
- }
33
-
34
- cloud_proxy = cli.ask("What is the path of your cloud proxy json credentials?") { |q|
35
- q.default = "/.config/gcloud/application_default_credentials.json"
36
- }
37
-
38
- host_path = cli.choose do |menu|
39
- menu.prompt = "What is the path of your hostfile?"
40
- menu.choice(:unix) { "/etc/hosts" }
41
- menu.choices(:windows) { "/mnt/c/Windows/System32/drivers/etc/hosts" }
42
- menu.default = :unix
43
- end
44
-
45
- self.sctfile_content = ""
46
- self.sctfile_content << "#{email} \n"
47
- self.sctfile_content << "cloud-proxy-path=#{cloud_proxy} \n"
48
- self.sctfile_content << "hostpath=#{host_path} \n"
49
-
50
- sctfile_path = File.join(Sct::SctFolder.path, sctfile_file_name)
51
-
52
- File.write(sctfile_path, self.sctfile_content)
53
-
54
- puts "Generated Sctfile at #{sctfile_path}"
55
-
56
- end
57
- end
58
- end