djin 0.3.0 → 0.4.0

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: 33934f255ebae5d8738c8f0152d1684eb1ece014c275f596d0e9aeea59c1caac
4
- data.tar.gz: 89103ce2b41819ddac02c95b4441eb959ea1d03cd92996deb80012a67c098cc9
3
+ metadata.gz: 395a6c76f1aac739197b1721dfedca93dfffcfcf456d3fc748fa16f024fb5a94
4
+ data.tar.gz: c2915512107075ee0fb3bafbfe50033925410241fef29dd54db747a2d0686328
5
5
  SHA512:
6
- metadata.gz: 2c0c492492dfd58153ae3ff0ee093b09e1c1e5587d6ed8e68b1e9ab4a5dc7aedee7b3c461262731145307cd095750eec01754094265447a8159e6f8a8dc9842f
7
- data.tar.gz: 0edeedbd0c7f12e7a09e178847923ace1068ccf5c76db43ac61fe7f8fec65332a805a14b0531d967230fe38e94436a4f25e7119e5c759a08f158a483ef76bc87
6
+ metadata.gz: 802cfbb81399c9ec9494b98036c7bd5932e735eb028b44ff84abc1ff0f2ff7930fe4d5a2d9b2bdae2b493684289e0e1d8631e570c942c71351321faa641bac85
7
+ data.tar.gz: 3b895f090fb9c73aac047c234a13191702393cf7fdff8c6b9eb0437daed931e7ae71ba0d6c8113d45b84d6424897309c66f310bfd470f58c955c1b508aa771d9
@@ -1,3 +1,10 @@
1
+ ## 0.4.0 - 25/06/2020
2
+ * [FEATURE] Adds Custom Args and Environment support in djin.yml
3
+
4
+ ## 0.3.1 - 29/05/2020
5
+ * [PATCH] Handles Ctrl + C
6
+ * [TECH] Adds Vertofile
7
+
1
8
  ## 0.3.0 - 19/05/2020
2
9
  * [FEATURE] Adds Version Option
3
10
  * [PATCH] Add task name in djin.yml parse errors
@@ -1,21 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- djin (0.3.0)
5
- dry-cli (~> 0.5.0)
4
+ djin (0.4.0)
5
+ dry-cli (~> 0.6.0)
6
6
  dry-struct (~> 1.3.0)
7
- dry-validation (~> 1.5.0)
7
+ dry-validation (~> 1.5.1)
8
+ mustache (~> 1.1.1)
8
9
  vseries (~> 0.1.0)
9
10
 
10
11
  GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
14
+ ast (2.4.1)
13
15
  byebug (11.1.1)
14
16
  concurrent-ruby (1.1.6)
15
17
  diff-lcs (1.3)
16
- dry-cli (0.5.1)
18
+ dry-cli (0.6.0)
17
19
  concurrent-ruby (~> 1.0)
18
- dry-configurable (0.11.5)
20
+ dry-configurable (0.11.6)
19
21
  concurrent-ruby (~> 1.0)
20
22
  dry-core (~> 0.4, >= 0.4.7)
21
23
  dry-equalizer (~> 0.2)
@@ -31,7 +33,7 @@ GEM
31
33
  concurrent-ruby (~> 1.0)
32
34
  dry-core (~> 0.2)
33
35
  dry-equalizer (~> 0.2)
34
- dry-schema (1.5.0)
36
+ dry-schema (1.5.1)
35
37
  concurrent-ruby (~> 1.0)
36
38
  dry-configurable (~> 0.8, >= 0.8.3)
37
39
  dry-core (~> 0.4)
@@ -51,7 +53,7 @@ GEM
51
53
  dry-equalizer (~> 0.3)
52
54
  dry-inflector (~> 0.1, >= 0.1.2)
53
55
  dry-logic (~> 1.0, >= 1.0.2)
54
- dry-validation (1.5.0)
56
+ dry-validation (1.5.1)
55
57
  concurrent-ruby (~> 1.0)
56
58
  dry-container (~> 0.7, >= 0.7.1)
57
59
  dry-core (~> 0.4)
@@ -59,7 +61,14 @@ GEM
59
61
  dry-initializer (~> 3.0)
60
62
  dry-schema (~> 1.5)
61
63
  ice_nine (0.11.2)
64
+ mustache (1.1.1)
65
+ parallel (1.19.2)
66
+ parser (2.7.1.4)
67
+ ast (~> 2.4.1)
68
+ rainbow (3.0.0)
62
69
  rake (13.0.1)
70
+ regexp_parser (1.7.1)
71
+ rexml (3.2.4)
63
72
  rspec (3.9.0)
64
73
  rspec-core (~> 3.9.0)
65
74
  rspec-expectations (~> 3.9.0)
@@ -73,6 +82,19 @@ GEM
73
82
  diff-lcs (>= 1.2.0, < 2.0)
74
83
  rspec-support (~> 3.9.0)
75
84
  rspec-support (3.9.2)
85
+ rubocop (0.86.0)
86
+ parallel (~> 1.10)
87
+ parser (>= 2.7.0.1)
88
+ rainbow (>= 2.2.2, < 4.0)
89
+ regexp_parser (>= 1.7)
90
+ rexml
91
+ rubocop-ast (>= 0.0.3, < 1.0)
92
+ ruby-progressbar (~> 1.7)
93
+ unicode-display_width (>= 1.4.0, < 2.0)
94
+ rubocop-ast (0.0.3)
95
+ parser (>= 2.7.0.1)
96
+ ruby-progressbar (1.10.1)
97
+ unicode-display_width (1.7.0)
76
98
  vseries (0.1.1)
77
99
 
78
100
  PLATFORMS
@@ -84,6 +106,7 @@ DEPENDENCIES
84
106
  djin!
85
107
  rake (~> 13.0)
86
108
  rspec (~> 3.0)
109
+ rubocop
87
110
 
88
111
  BUNDLED WITH
89
- 2.0.2
112
+ 2.1.4
data/README.md CHANGED
@@ -25,7 +25,7 @@ If you use Rbenv you can install djin only once and create a alias in your .basr
25
25
  To use djin first you need to create a djin.yml file:
26
26
 
27
27
  ```yaml
28
- djin_version: '0.3.0'
28
+ djin_version: '0.4.0'
29
29
 
30
30
  # With a docker image
31
31
  script:
@@ -50,7 +50,7 @@ You can also set task dependencies with depends_on option:
50
50
 
51
51
 
52
52
  ```yaml
53
- djin_version: '0.3.0'
53
+ djin_version: '0.4.0'
54
54
 
55
55
  _default_run_options: &default_run_options
56
56
  options: "--rm"
@@ -78,6 +78,46 @@ _default_run_options: &default_run_options
78
78
 
79
79
  After that you can run `djin {{task_name}}`, like `djin script` or `djin test`
80
80
 
81
+ ## Using Environment variables and custom args in djin.yml run tasks
82
+
83
+ You can use environment variables using the '{{YOUR_ENV_HERE}}' syntax, like so:
84
+
85
+ ```yaml
86
+ djin_version: '0.4.0'
87
+
88
+ _default_run_options: &default_run_options
89
+ options: "--rm"
90
+
91
+ "db:migrate":
92
+ docker-compose:
93
+ service: app
94
+ run:
95
+ commands: ENV={{ENV}} rake db:migrate
96
+ <<: *default_run_options
97
+
98
+ ```
99
+
100
+ It's also possible to pass custom arguments to the command, wich means is possible to make a djin task act like the command itself:
101
+
102
+ ```yaml
103
+ djin_version: '0.4.0'
104
+
105
+ _default_run_options: &default_run_options
106
+ options: "--rm"
107
+
108
+ "rubocop":
109
+ docker-compose:
110
+ service: app
111
+ run:
112
+ commands: rubocop {{args}}
113
+ <<: *default_run_options
114
+
115
+ ```
116
+
117
+ With that you can pass custom args after `--`, eg: `djin rubocop -- --parallel`, which wil make djin runs `rubocop --parallel` inside the service `app`.
118
+
119
+ Under the hood djin uses [Mustache](https://mustache.github.io/), so you can use other features like conditionals: `{{#IS_ENABLE}} Enabled {{/IS_ENABLE}}` (for args use the `args?`, eg: {{#args} {{args}} --and-other-thing{{/args?}}), to see more more options you can access this [Link](https://mustache.github.io/mustache.5.html)
120
+
81
121
  ## Development
82
122
 
83
123
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -0,0 +1,44 @@
1
+ verto_version '0.8.0'
2
+
3
+ config {
4
+ version.prefix = 'v' # Adds a version_prefix
5
+ git.pull_before_tag_creation = true
6
+ git.push_after_tag_creation = true
7
+ }
8
+
9
+ context(branch('master')) {
10
+ before_command_tag_up {
11
+ command_options.add(filter: 'release_only')
12
+ }
13
+
14
+ before_tag_creation {
15
+ version_changes = sh(
16
+ %q#git log --oneline --decorate | grep -B 100 -m 1 "tag:" | grep "pull request" | awk '{print $1}' | xargs git show --format='%b' | grep -v Approved | grep -v "^$" | grep -E "^[[:space:]]*\[.*\]" | sed 's/^[[:space:]]*\(.*\)/ * \1/'#, output: false
17
+ ).output
18
+
19
+ puts "---------------------------"
20
+ version_changes = "## #{new_version} - #{Time.now.strftime('%d/%m/%Y')}\n#{version_changes}\n"
21
+ exit unless confirm("Create new Realease?\n" \
22
+ "---------------------------\n" \
23
+ "#{version_changes}" \
24
+ "---------------------------\n"
25
+ )
26
+
27
+ # CHANGELOG
28
+ file('CHANGELOG.md').prepend(version_changes)
29
+ git!('add CHANGELOG.md')
30
+
31
+ file('lib/djin/version.rb').replace(latest_version.to_s, new_version.to_s)
32
+ git!('add lib/djin/version.rb')
33
+
34
+ file('README.md').replace_all(latest_version.to_s, new_version.to_s)
35
+ git!('add README.md')
36
+
37
+ sh!('bundle install')
38
+ sh!('rake install')
39
+ git!('add Gemfile.lock')
40
+
41
+ git!('commit -m "Bumps Version"')
42
+ }
43
+ }
44
+
@@ -26,11 +26,13 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ["lib"]
27
27
 
28
28
  spec.add_dependency "dry-struct", "~> 1.3.0"
29
- spec.add_dependency "dry-cli", "~> 0.5.0"
30
- spec.add_dependency "dry-validation", "~> 1.5.0"
29
+ spec.add_dependency "dry-cli", "~> 0.6.0"
30
+ spec.add_dependency "dry-validation", "~> 1.5.1"
31
31
  spec.add_dependency "vseries", "~> 0.1.0"
32
+ spec.add_dependency "mustache", "~> 1.1.1"
32
33
  spec.add_development_dependency "bundler", "~> 2.0"
33
34
  spec.add_development_dependency "rake", "~> 13.0"
34
35
  spec.add_development_dependency "rspec", "~> 3.0"
36
+ spec.add_development_dependency "rubocop"
35
37
  spec.add_development_dependency "byebug"
36
38
  end
data/djin.yml CHANGED
@@ -16,3 +16,11 @@ sh:
16
16
  run:
17
17
  commands: "sh"
18
18
  <<: *default_run_options
19
+ run:
20
+ docker-compose:
21
+ service: app
22
+ run:
23
+ commands: "sh -c '{{args}}'"
24
+ <<: *default_run_options
25
+
26
+
data/exe/djin CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ Signal.trap("INT") { exit 2 }
4
+
3
5
  require_relative '../lib/djin'
4
6
 
5
7
  Djin.load_tasks!
@@ -5,6 +5,7 @@ require "dry-struct"
5
5
  require "dry-validation"
6
6
  require "vseries"
7
7
  require "dry/cli"
8
+ require "mustache"
8
9
  require "djin/extensions/hash_extensions"
9
10
  require "djin/extensions/custom_predicates"
10
11
  require "djin/entities/types"
@@ -17,12 +18,12 @@ require "djin/repositories/task_repository"
17
18
 
18
19
  module Djin
19
20
  class Error < StandardError; end
20
- # Your code goes here...
21
21
 
22
22
  def self.load_tasks!(path = Pathname.getwd.join('djin.yml'))
23
23
  abort 'Error: djin.yml not found' unless path.exist?
24
24
 
25
25
  djin_file = YAML.safe_load(path.read, [], [], true)
26
+
26
27
  tasks = Djin::Interpreter.load!(djin_file)
27
28
 
28
29
  @task_repository = TaskRepository.new(tasks)
@@ -9,14 +9,12 @@ module Djin
9
9
 
10
10
  define_method(:task) { task }
11
11
 
12
- def call(**options)
13
- Executor.new.call(task)
12
+ def call(args: [], **)
13
+ Executor.new(args: args).call(task)
14
14
  end
15
15
  end
16
16
 
17
17
  register task.name, command
18
-
19
-
20
18
  end
21
19
  end
22
20
 
@@ -1,7 +1,8 @@
1
1
  module Djin
2
2
  class Executor
3
- def initialize(task_repository: Djin.task_repository)
3
+ def initialize(task_repository: Djin.task_repository, args: [])
4
4
  @task_repository = task_repository
5
+ @args = args
5
6
  end
6
7
 
7
8
  def call(*tasks)
@@ -22,7 +23,15 @@ module Djin
22
23
  end
23
24
 
24
25
  def run(command)
25
- system command
26
+ command_with_args = Mustache.render(command,
27
+ args: @args.join(' '),
28
+ args?: @args.any?,
29
+ **env)
30
+ system command_with_args
31
+ end
32
+
33
+ def env
34
+ @env = ENV.to_h.map {|k,v| [k.to_sym, v]}.to_h
26
35
  end
27
36
  end
28
37
  end
@@ -1,3 +1,3 @@
1
1
  module Djin
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: djin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Atkinson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-19 00:00:00.000000000 Z
11
+ date: 2020-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.5.0
33
+ version: 0.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.5.0
40
+ version: 0.6.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dry-validation
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.5.0
47
+ version: 1.5.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.5.0
54
+ version: 1.5.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: vseries
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: mustache
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.1.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.1.1
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: bundler
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '3.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: byebug
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -141,6 +169,7 @@ files:
141
169
  - LICENSE.txt
142
170
  - README.md
143
171
  - Rakefile
172
+ - Vertofile
144
173
  - bin/console
145
174
  - bin/setup
146
175
  - djin.gemspec