dry-stack 0.0.1 → 0.0.3

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: 4062fa15735d0dc9e08fc19a5fcbd0296a15e999fd18993a7b755b79c979bca2
4
- data.tar.gz: f74d61dda0cdf31c8fd3f7e371caa27fbf58885e25e74aba2047d24cefacd3d2
3
+ metadata.gz: 25076e926da29d61b22b6be14379e4e9e23af5bf1146c2c5d0ef64f917023a24
4
+ data.tar.gz: 023ed0ce2c46e14303f1fefdba6811e2401a7c9ac08f4bb44e288cce30943dae
5
5
  SHA512:
6
- metadata.gz: a444ad20bee842da84d5975f7a0ca5693fc321685711690f36ca1d381a19c67dd4e71ed9b42c061543bb6e755f93e5211f982c0b3fbf6ad829ee0794ccf5267c
7
- data.tar.gz: 50cb5cc162083924ca72b4ec504f92c28f90a8dfd3ed30610a514ee45b6147956608de08d059f771066976d1efd06e0045cddc843fc1f4dae5b66421f0a02429
6
+ metadata.gz: 4fc1f361dbde144d87b4a3c0d90b859940f0fca6d3f84c02fd28bf9a4849fb373e1bb8f8a3bc2d0665c22106ba642481e1b8c85adc71199e719c99b95249e8f2
7
+ data.tar.gz: bc466a6b44eeab9f10a9596316f2b4563c63d42b8632e81f4cc90af87d1ba0117ea4d5079c8554f5c8d8ba3da44013ec1160a0a9560f9cbcf92e53960e06eea9
data/bin/dry-stack CHANGED
@@ -4,7 +4,8 @@ $LOAD_PATH << lib
4
4
  #$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  require 'dry-stack'
7
+ require 'dry-stack/command_line'
8
+ require 'dry-stack/command_compose'
7
9
  include Dry
8
10
 
9
-
10
- Dry::Stack.command_line ARGV
11
+ Dry::CommandLine.run ARGV
data/bin/stack.drs ADDED
@@ -0,0 +1,19 @@
1
+ Stack :simple_stack do
2
+
3
+ HttpFront services: {admin: 'admin.*', operator: 'operator.*', reports: 'reports.*',
4
+ navigator: 'navigator.*', backend: 'admin.*, operator.*, navigator.*'}
5
+
6
+ PublishPorts admin: 4000, operator: 4001, navigator: 4002, reports: 7000 # mode: ingress, protocol: tcp
7
+
8
+ Service :admin, image: 'frontend', env: {APP: 'admin'}, ports: 5000
9
+ Service :operator, image: 'frontend', env: {APP: 'operator'}, ports: 5000
10
+ Service :navigator, image: 'frontend', env: {APP: 'navigator'}, ports: 5000
11
+
12
+ Service :backend, image: 'backend', ports: 3000 do
13
+ env APP_PORT: 3000, NODE_ENV: 'development', SKIP_GZ: true, DB_URL: '$DB_URL'
14
+ end
15
+
16
+ Service :reports, image: 'reports:0.1', env: {DB_URL: '$DB_URL'}, ports: 7000
17
+
18
+ Network :default, attachable: true
19
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'command_line'
2
+
3
+ Dry::CommandLine::COMMANDS[:to_compose] = Class.new do
4
+ def run(stack, params, args)
5
+ yaml = stack.to_compose.lines[1..].join
6
+
7
+ # substitute ENV variables
8
+ params[:'no-env'] ? $stdout.puts(yaml) : system("echo \"#{yaml}\"")
9
+ end
10
+
11
+ def help = 'Print stack in docker compose format'
12
+ end.new
13
+
14
+
@@ -0,0 +1,59 @@
1
+ require_relative '../version'
2
+
3
+ module Dry
4
+ module CommandLine
5
+ COMMANDS = {}
6
+
7
+ class << self
8
+ def load_env
9
+ File.read('.env').lines.map(&:strip).grep_v(/^\s*#/).reject(&:empty?)
10
+ .map {_1.split('=').map(&:strip).tap { |k,v|
11
+ ENV[k] = v
12
+ }}.to_h
13
+ rescue =>e
14
+ puts "Load env error: #{e.message}"
15
+ raise 'Invalid .env file'
16
+ end
17
+
18
+ def run(args)
19
+ params = {}
20
+
21
+ ARGV << '-h' if ARGV.empty?
22
+ OptionParser.new do |o|
23
+ o.version = "v#{Dry::Stack::VERSION}"
24
+
25
+ usage = [
26
+ 'dry-stack -s stackfile [options] COMMAND',
27
+ 'cat stackfile | dry-stack COMMAND',
28
+ 'dry-stack COMMAND < stack.drs'
29
+ ]
30
+ o.banner = "Usage:\n\t#{usage.join "\n\t"}"
31
+ o.separator ''
32
+ o.separator 'Commands:'
33
+ COMMANDS.each { |name, cmd| o.separator "#{' ' * 5}#{name} - #{cmd.help}" }
34
+
35
+ o.separator ''
36
+ o.separator 'Options:'
37
+
38
+ # in all caps are required
39
+ o.on('-s', '--stack STACK_NAME', 'Stack file')
40
+ o.on('-e', '--env', 'Load .env file') { load_env }
41
+ o.on('-n', '--no-env', 'Do not process env variables') { true }
42
+ o.on('-h', '--help') { puts o; exit }
43
+ o.parse! args, into: params
44
+
45
+ raise 'Stack file not defined' if $stdin.tty? && !params[:stack]
46
+
47
+ command = args.shift || ''
48
+ raise "Unknown command: #{command}" unless COMMANDS.key?(command.to_sym)
49
+
50
+ eval $stdin.tty? ? File.read(params[:stack]) : STDIN.read
51
+ COMMANDS[command.to_sym].run Stack.last_stack, params, args
52
+ rescue => e
53
+ puts e.message
54
+ exit 1
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'yaml'
3
+ require 'optparse'
3
4
 
4
5
  module Dry
5
6
 
@@ -16,13 +17,6 @@ module Dry
16
17
  class Stack
17
18
  class << self
18
19
  attr_accessor :last_stack
19
-
20
- def command_line(argv)
21
- if argv[1] == 'compose'
22
- load argv[0]
23
- $stdout.puts Stack.last_stack.to_compose
24
- end
25
- end
26
20
  end
27
21
 
28
22
  def initialize(name)
data/lib/version.rb ADDED
@@ -0,0 +1,5 @@
1
+ module Dry
2
+ class Stack
3
+ VERSION = '0.0.3'
4
+ end
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-stack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-28 00:00:00.000000000 Z
11
+ date: 2022-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -102,8 +102,12 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - bin/dry-stack
105
+ - bin/stack.drs
105
106
  - lib/dry-stack.rb
107
+ - lib/dry-stack/command_compose.rb
108
+ - lib/dry-stack/command_line.rb
106
109
  - lib/dry-stack/stack.rb
110
+ - lib/version.rb
107
111
  homepage: https://rubygems.org/gems/dry-stack
108
112
  licenses:
109
113
  - Nonstandard