djin 0.8.0 → 0.11.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/.github/workflows/ruby.yml +27 -11
- data/.gitignore +1 -0
- data/.irbrc +4 -0
- data/.rubocop.yml +5 -0
- data/CHANGELOG.md +17 -0
- data/Dockerfile +10 -3
- data/Gemfile +4 -0
- data/Gemfile.lock +41 -18
- data/README.md +138 -11
- data/Vertofile +12 -19
- data/djin.gemspec +3 -1
- data/djin.yml +13 -2
- data/docker-compose.yml +16 -2
- data/docker-entrypoint.sh +7 -0
- data/examples/djin.yml +13 -7
- data/examples/djin_lib/test.yml +12 -0
- data/examples/local_tasks/.djin/server_tasks.yml +17 -0
- data/examples/local_tasks/djin.yml +22 -0
- data/examples/remote_tasks/djin.yml +9 -0
- data/lib/djin.rb +67 -17
- data/lib/djin/cli.rb +36 -0
- data/lib/djin/config_loader.rb +124 -30
- data/lib/djin/entities/include_config.rb +47 -0
- data/lib/djin/entities/include_config/base.rb +16 -0
- data/lib/djin/entities/include_config/local.rb +16 -0
- data/lib/djin/entities/{file_config.rb → main_config.rb} +16 -1
- data/lib/djin/extensions/hash_extensions.rb +14 -0
- data/lib/djin/extensions/object_extensions.rb +24 -0
- data/lib/djin/include_resolver.rb +50 -0
- data/lib/djin/interpreter.rb +11 -4
- data/lib/djin/interpreter/base_command_builder.rb +1 -0
- data/lib/djin/memory_cache.rb +17 -0
- data/lib/djin/repositories/remote_config_repository.rb +86 -0
- data/lib/djin/root_cli_parser.rb +46 -0
- data/lib/djin/version.rb +1 -1
- metadata +45 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8ed8e839aa664296b03ffabbd80b1394d68bfbd02439205d79d26fc7b450653
|
4
|
+
data.tar.gz: a7023cca57674f3f7e176d80b21f7c60d3251017df6f1252bd47d3549ed89740
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8e9ead0edc8cf175b3fad08e6129f023be758610bc2e0636cd4d0b72aa7b2239b08b84234693127ddd8f1e74731852a5e7e2d0bdf8de55bbb17f88734aac625
|
7
|
+
data.tar.gz: 9d2f4d89f2a1a220b67f3e8a0d97b95e43c75f542559eb8ead1d829c4687f9a856f644268c3e3f3ed3a63f20d765d9689653490eb4a6d527fa1e4f864a18eb57
|
data/.github/workflows/ruby.yml
CHANGED
@@ -1,23 +1,37 @@
|
|
1
1
|
name: Ruby
|
2
2
|
|
3
|
-
on: [push]
|
3
|
+
on: [push, workflow_dispatch]
|
4
4
|
|
5
5
|
jobs:
|
6
6
|
build:
|
7
7
|
runs-on: ubuntu-16.04
|
8
8
|
strategy:
|
9
9
|
matrix:
|
10
|
-
ruby: [ '2.
|
10
|
+
ruby: [ '2.5', '2.6', '2.7' ]
|
11
11
|
name: Ruby ${{ matrix.ruby }}
|
12
12
|
steps:
|
13
13
|
- uses: actions/checkout@v2
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
|
15
|
+
- name: Setup Code Climate test-reporter
|
16
|
+
run: |
|
17
|
+
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
18
|
+
chmod +x ./cc-test-reporter
|
19
|
+
./cc-test-reporter before-build
|
20
|
+
|
21
|
+
- name: Build
|
22
|
+
run: |
|
23
|
+
docker-compose -p djin_ruby_${{ matrix.ruby }} build --build-arg ${{ matrix.ruby }} app
|
24
|
+
|
25
|
+
- name: Run tests
|
26
|
+
run: |
|
27
|
+
docker-compose -p djin_ruby_${{ matrix.ruby }} run --rm app rspec
|
28
|
+
env:
|
29
|
+
TMP_TEST_FILE_FOLDER: '/tmp'
|
30
|
+
|
31
|
+
- name: Publish code coverage
|
32
|
+
run: |
|
33
|
+
# TODO: Move to script
|
34
|
+
docker-compose -p djin_ruby_${{ matrix.ruby }} run --rm app 'export GIT_BRANCH="${GITHUB_REF/refs\/heads\//}" && ./cc-test-reporter after-build -r ${{secrets.CC_TEST_REPORTER_ID}}'
|
21
35
|
|
22
36
|
lint:
|
23
37
|
runs-on: ubuntu-16.04
|
@@ -27,8 +41,10 @@ jobs:
|
|
27
41
|
- uses: actions/setup-ruby@v1
|
28
42
|
with:
|
29
43
|
ruby-version: '2.6'
|
30
|
-
-
|
44
|
+
- name: Install Gems
|
45
|
+
run: |
|
31
46
|
gem install bundler
|
32
47
|
bundle install --jobs 4 --retry 3
|
33
|
-
|
48
|
+
- name: Rubocop
|
49
|
+
run: bundle exec rubocop
|
34
50
|
|
data/.gitignore
CHANGED
data/.irbrc
ADDED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
## 0.11.2 - 29/01/2021
|
2
|
+
* [FIX] Remote-Config Fetch for custom Branches
|
3
|
+
[FIX] Integration Specs
|
4
|
+
|
5
|
+
## 0.11.1 - 15/01/2021
|
6
|
+
* [FIX] remote-config fetch with same repo reference
|
7
|
+
|
8
|
+
## 0.11.0 - 14/01/2021
|
9
|
+
* [FEATURE] Remote Configs
|
10
|
+
* [TECH] Adds Test Coverage
|
11
|
+
|
12
|
+
## 0.10.0 - 08/10/2020
|
13
|
+
* [FEATURE] -f command option
|
14
|
+
|
15
|
+
## 0.9.0 - 17/09/2020
|
16
|
+
* [FEATURE] Include Option
|
17
|
+
|
1
18
|
## 0.8.0 - 31/08/2020
|
2
19
|
* [FEATURE] Adds aliases option
|
3
20
|
|
data/Dockerfile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
ARG RUBY_VERSION
|
2
|
+
FROM ruby:${RUBY_VERSION:-2.6.5}-alpine AS builder
|
2
3
|
|
3
4
|
ENV BUILD_PACKAGES build-base git
|
4
5
|
|
@@ -13,17 +14,23 @@ COPY djin.gemspec Gemfile Gemfile.lock ./
|
|
13
14
|
|
14
15
|
COPY lib/djin/version.rb lib/djin/version.rb
|
15
16
|
|
16
|
-
RUN gem install bundler -v 2.
|
17
|
+
RUN gem install bundler -v 2.1.4
|
17
18
|
|
18
19
|
RUN bundle install
|
19
20
|
|
21
|
+
FROM builder AS dev
|
22
|
+
|
23
|
+
WORKDIR /usr/src/djin
|
24
|
+
|
25
|
+
COPY . .
|
26
|
+
|
20
27
|
FROM ruby:2.6.5-alpine
|
21
28
|
|
22
29
|
WORKDIR /usr/src/djin
|
23
30
|
|
24
31
|
COPY --from=builder /usr/local/bundle/ /usr/local/bundle
|
25
32
|
|
26
|
-
RUN gem install bundler -v 2.
|
33
|
+
RUN gem install bundler -v 2.1.4
|
27
34
|
|
28
35
|
ENV DEPENDENCIES git
|
29
36
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,73 +1,86 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
djin (0.
|
4
|
+
djin (0.11.2)
|
5
5
|
dry-cli (~> 0.6.0)
|
6
6
|
dry-equalizer (~> 0.3.0)
|
7
7
|
dry-struct (~> 1.3.0)
|
8
8
|
dry-validation (~> 1.5.1)
|
9
|
+
git (~> 1.8.1)
|
9
10
|
mustache (~> 1.1.1)
|
10
11
|
vseries (~> 0.1.0)
|
11
12
|
|
12
13
|
GEM
|
13
14
|
remote: https://rubygems.org/
|
14
15
|
specs:
|
16
|
+
activesupport (6.1.1)
|
17
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
+
i18n (>= 1.6, < 2)
|
19
|
+
minitest (>= 5.1)
|
20
|
+
tzinfo (~> 2.0)
|
21
|
+
zeitwerk (~> 2.3)
|
15
22
|
ast (2.4.1)
|
16
23
|
byebug (11.1.1)
|
17
24
|
concurrent-ruby (1.1.7)
|
18
25
|
diff-lcs (1.3)
|
26
|
+
docile (1.3.2)
|
19
27
|
dry-cli (0.6.0)
|
20
28
|
concurrent-ruby (~> 1.0)
|
21
|
-
dry-configurable (0.
|
29
|
+
dry-configurable (0.12.0)
|
22
30
|
concurrent-ruby (~> 1.0)
|
23
|
-
dry-core (~> 0.
|
24
|
-
dry-equalizer (~> 0.2)
|
31
|
+
dry-core (~> 0.5, >= 0.5.0)
|
25
32
|
dry-container (0.7.2)
|
26
33
|
concurrent-ruby (~> 1.0)
|
27
34
|
dry-configurable (~> 0.1, >= 0.1.3)
|
28
|
-
dry-core (0.
|
35
|
+
dry-core (0.5.0)
|
29
36
|
concurrent-ruby (~> 1.0)
|
30
37
|
dry-equalizer (0.3.0)
|
31
38
|
dry-inflector (0.2.0)
|
32
|
-
dry-initializer (3.0.
|
33
|
-
dry-logic (1.0
|
39
|
+
dry-initializer (3.0.4)
|
40
|
+
dry-logic (1.1.0)
|
34
41
|
concurrent-ruby (~> 1.0)
|
35
|
-
dry-core (~> 0.
|
36
|
-
|
37
|
-
dry-schema (1.5.3)
|
42
|
+
dry-core (~> 0.5, >= 0.5)
|
43
|
+
dry-schema (1.6.0)
|
38
44
|
concurrent-ruby (~> 1.0)
|
39
45
|
dry-configurable (~> 0.8, >= 0.8.3)
|
40
|
-
dry-core (~> 0.
|
41
|
-
dry-equalizer (~> 0.2)
|
46
|
+
dry-core (~> 0.5, >= 0.5)
|
42
47
|
dry-initializer (~> 3.0)
|
43
48
|
dry-logic (~> 1.0)
|
44
|
-
dry-types (~> 1.
|
49
|
+
dry-types (~> 1.5)
|
45
50
|
dry-struct (1.3.0)
|
46
51
|
dry-core (~> 0.4, >= 0.4.4)
|
47
52
|
dry-equalizer (~> 0.3)
|
48
53
|
dry-types (~> 1.3)
|
49
54
|
ice_nine (~> 0.11)
|
50
|
-
dry-types (1.
|
55
|
+
dry-types (1.5.0)
|
51
56
|
concurrent-ruby (~> 1.0)
|
52
57
|
dry-container (~> 0.3)
|
53
|
-
dry-core (~> 0.
|
54
|
-
dry-equalizer (~> 0.3)
|
58
|
+
dry-core (~> 0.5, >= 0.5)
|
55
59
|
dry-inflector (~> 0.1, >= 0.1.2)
|
56
60
|
dry-logic (~> 1.0, >= 1.0.2)
|
57
|
-
dry-validation (1.5.
|
61
|
+
dry-validation (1.5.6)
|
58
62
|
concurrent-ruby (~> 1.0)
|
59
63
|
dry-container (~> 0.7, >= 0.7.1)
|
60
64
|
dry-core (~> 0.4)
|
61
65
|
dry-equalizer (~> 0.2)
|
62
66
|
dry-initializer (~> 3.0)
|
63
|
-
dry-schema (~> 1.5)
|
67
|
+
dry-schema (~> 1.5, >= 1.5.2)
|
68
|
+
factory_bot (6.1.0)
|
69
|
+
activesupport (>= 5.0.0)
|
70
|
+
git (1.8.1)
|
71
|
+
rchardet (~> 1.8)
|
72
|
+
i18n (1.8.7)
|
73
|
+
concurrent-ruby (~> 1.0)
|
64
74
|
ice_nine (0.11.2)
|
75
|
+
json (2.3.1)
|
76
|
+
minitest (5.14.3)
|
65
77
|
mustache (1.1.1)
|
66
78
|
parallel (1.19.2)
|
67
79
|
parser (2.7.1.4)
|
68
80
|
ast (~> 2.4.1)
|
69
81
|
rainbow (3.0.0)
|
70
82
|
rake (13.0.1)
|
83
|
+
rchardet (1.8.0)
|
71
84
|
regexp_parser (1.7.1)
|
72
85
|
rexml (3.2.4)
|
73
86
|
rspec (3.9.0)
|
@@ -95,8 +108,16 @@ GEM
|
|
95
108
|
rubocop-ast (0.0.3)
|
96
109
|
parser (>= 2.7.0.1)
|
97
110
|
ruby-progressbar (1.10.1)
|
111
|
+
simplecov (0.17.1)
|
112
|
+
docile (~> 1.1)
|
113
|
+
json (>= 1.8, < 3)
|
114
|
+
simplecov-html (~> 0.10.0)
|
115
|
+
simplecov-html (0.10.2)
|
116
|
+
tzinfo (2.0.4)
|
117
|
+
concurrent-ruby (~> 1.0)
|
98
118
|
unicode-display_width (1.7.0)
|
99
119
|
vseries (0.1.1)
|
120
|
+
zeitwerk (2.4.2)
|
100
121
|
|
101
122
|
PLATFORMS
|
102
123
|
ruby
|
@@ -105,9 +126,11 @@ DEPENDENCIES
|
|
105
126
|
bundler (~> 2.0)
|
106
127
|
byebug
|
107
128
|
djin!
|
129
|
+
factory_bot
|
108
130
|
rake (~> 13.0)
|
109
131
|
rspec (~> 3.0)
|
110
132
|
rubocop
|
133
|
+
simplecov (~> 0.17.0)
|
111
134
|
|
112
135
|
BUNDLED WITH
|
113
136
|
2.1.4
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|

|
4
4
|
[](https://codeclimate.com/github/catks/djin/maintainability)
|
5
|
+
[](https://codeclimate.com/github/catks/djin/test_coverage)
|
5
6
|
|
6
7
|
Djin is a make-like utility for docker containers
|
7
8
|
|
@@ -13,7 +14,7 @@ Djin is distributed as a Ruby Gem, to install simple run:
|
|
13
14
|
|
14
15
|
### With Rbenv
|
15
16
|
|
16
|
-
If you use Rbenv you can install djin only once and create
|
17
|
+
If you use Rbenv you can install djin only once and create an alias in your .basrc, .zshrc, etc:
|
17
18
|
|
18
19
|
#### ZSH
|
19
20
|
$ RBENV_VERSION=$(rbenv global) gem install djin && echo "alias djin='RBENV_VERSION=$(rbenv global) djin'" >> ~/.zshrc
|
@@ -26,7 +27,7 @@ If you use Rbenv you can install djin only once and create a alias in your .basr
|
|
26
27
|
To use djin first you need to create a djin.yml file:
|
27
28
|
|
28
29
|
```yaml
|
29
|
-
djin_version: '0.
|
30
|
+
djin_version: '0.11.2'
|
30
31
|
|
31
32
|
tasks:
|
32
33
|
# With a docker image
|
@@ -53,12 +54,12 @@ You can also set task dependencies with depends_on option:
|
|
53
54
|
|
54
55
|
|
55
56
|
```yaml
|
56
|
-
djin_version: '0.
|
57
|
+
djin_version: '0.11.2'
|
57
58
|
|
58
59
|
_default_run_options: &default_run_options
|
59
60
|
options: "--rm"
|
60
61
|
|
61
|
-
tasks:
|
62
|
+
tasks:
|
62
63
|
"db:create":
|
63
64
|
docker-compose:
|
64
65
|
service: app
|
@@ -82,7 +83,7 @@ tasks:
|
|
82
83
|
Or mix local commands and docker/docker-compose commands:
|
83
84
|
|
84
85
|
```yaml
|
85
|
-
djin_version: '0.
|
86
|
+
djin_version: '0.11.2'
|
86
87
|
|
87
88
|
_default_run_options: &default_run_options
|
88
89
|
options: "--rm"
|
@@ -121,7 +122,7 @@ After that you can run `djin {{task_name}}`, like `djin script` or `djin test`
|
|
121
122
|
You can also use environment variables using the '{{YOUR_ENV_HERE}}' syntax, like so:
|
122
123
|
|
123
124
|
```yaml
|
124
|
-
djin_version: '0.
|
125
|
+
djin_version: '0.11.2'
|
125
126
|
|
126
127
|
_default_run_options: &default_run_options
|
127
128
|
options: "--rm"
|
@@ -138,7 +139,7 @@ tasks:
|
|
138
139
|
|
139
140
|
Or define some variables to use in multiple locations
|
140
141
|
```yaml
|
141
|
-
djin_version: '0.
|
142
|
+
djin_version: '0.11.2'
|
142
143
|
|
143
144
|
_default_run_options: &default_run_options
|
144
145
|
options: "--rm"
|
@@ -162,7 +163,7 @@ tasks:
|
|
162
163
|
It's also possible to pass custom arguments to the command, which means is possible to make a djin task act like the command itself:
|
163
164
|
|
164
165
|
```yaml
|
165
|
-
djin_version: '0.
|
166
|
+
djin_version: '0.11.2'
|
166
167
|
|
167
168
|
_default_run_options: &default_run_options
|
168
169
|
options: "--rm"
|
@@ -179,19 +180,145 @@ tasks:
|
|
179
180
|
|
180
181
|
```
|
181
182
|
|
182
|
-
With that you can pass custom args after `--`, eg: `djin rubocop -- --parallel`, which
|
183
|
+
With that, you can pass custom args after `--`, eg: `djin rubocop -- --parallel`, which will make djin runs `rubocop --parallel` inside the service `app`.
|
183
184
|
|
184
185
|
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)
|
185
186
|
|
187
|
+
### Reusing tasks
|
188
|
+
|
189
|
+
If you have multiple tasks with similar behavior and with small differences you can use the `include` keyword, so this:
|
190
|
+
|
191
|
+
```yaml
|
192
|
+
djin_version: '0.11.2'
|
193
|
+
|
194
|
+
tasks:
|
195
|
+
"host1:ssh":
|
196
|
+
local:
|
197
|
+
run:
|
198
|
+
- ssh my_user@host1.com.br
|
199
|
+
|
200
|
+
"host1:restart":
|
201
|
+
local:
|
202
|
+
run:
|
203
|
+
- ssh -t my_user@host1.com.br restart
|
204
|
+
|
205
|
+
"host1:logs":
|
206
|
+
local:
|
207
|
+
run:
|
208
|
+
- ssh -t my_user@host1.com.br tail -f /var/log/my_log
|
209
|
+
|
210
|
+
"host2:ssh":
|
211
|
+
local:
|
212
|
+
run:
|
213
|
+
- ssh my_user@host2.com.br
|
214
|
+
|
215
|
+
"host2:restart":
|
216
|
+
local:
|
217
|
+
run:
|
218
|
+
- ssh -t my_user@host2.com.br restart
|
219
|
+
|
220
|
+
"host2:logs":
|
221
|
+
local:
|
222
|
+
run:
|
223
|
+
- ssh -t my_user@host2.com.br tail -f /var/log/my_file
|
224
|
+
|
225
|
+
```
|
226
|
+
|
227
|
+
can become this:
|
228
|
+
|
229
|
+
```yaml
|
230
|
+
# djin.yml
|
231
|
+
djin_version: '0.11.2'
|
232
|
+
|
233
|
+
include:
|
234
|
+
- file: '.djin/server_tasks.yml'
|
235
|
+
context:
|
236
|
+
variables:
|
237
|
+
namespace: host1
|
238
|
+
host: host1.com
|
239
|
+
ssh_user: my_user
|
240
|
+
|
241
|
+
- file: '.djin/server_tasks.yml'
|
242
|
+
context:
|
243
|
+
variables:
|
244
|
+
namespace: host2
|
245
|
+
host: host2.com
|
246
|
+
ssh_user: my_user
|
247
|
+
|
248
|
+
```
|
249
|
+
|
250
|
+
|
251
|
+
```yaml
|
252
|
+
# .djin/server_tasks.yml
|
253
|
+
djin_version: '0.11.2'
|
254
|
+
|
255
|
+
tasks:
|
256
|
+
"{{namespace}}:ssh":
|
257
|
+
local:
|
258
|
+
run:
|
259
|
+
- ssh {{ssh_user}}@{{host}}
|
260
|
+
|
261
|
+
"{{namespace}}:restart":
|
262
|
+
local:
|
263
|
+
run:
|
264
|
+
- ssh -t {{ssh_user}}@{{host}} restart
|
265
|
+
|
266
|
+
"{{namespace}}:logs":
|
267
|
+
local:
|
268
|
+
run:
|
269
|
+
- ssh -t {{ssh_user}}@{{host}} tail -f /var/log/my_log
|
270
|
+
```
|
271
|
+
|
272
|
+
You can also reuse tasks in some git repository, to do that you need to declare a git source and optionally a version:
|
273
|
+
|
274
|
+
```yaml
|
275
|
+
djin_version: '0.11.2'
|
276
|
+
|
277
|
+
include:
|
278
|
+
- git: 'https://github.com/catks/djin.git'
|
279
|
+
version: 'master'
|
280
|
+
file: 'examples/djin_lib/test.yml'
|
281
|
+
context:
|
282
|
+
variables:
|
283
|
+
namespace: 'remote:'
|
284
|
+
|
285
|
+
```
|
286
|
+
|
287
|
+
After that run `djin remote-config fetch` to fetch the repo and you can start using the tasks (All remote repos are cloned in `~/.djin/remote`)
|
288
|
+
|
289
|
+
See `djin remote-config` to learn more.
|
290
|
+
|
291
|
+
### Loading custom files
|
292
|
+
|
293
|
+
You can also specify a file to be read by djin with `-f`, eg:
|
294
|
+
|
295
|
+
```bash
|
296
|
+
djin -f my_file.yml # Returns the help for all tasks in my_file
|
297
|
+
djin -f my_file.yml build # Execute the build task defined in my_file.yml
|
298
|
+
```
|
299
|
+
|
300
|
+
You can also specify multiple files to join tasks between files:
|
301
|
+
|
302
|
+
```bash
|
303
|
+
# Mix the tasks
|
304
|
+
djin -f my_file.yml -f my_file2.yml # Returns the help for all tasks in my_file
|
305
|
+
djin -f my_file.yml -f my_file2.yml build # Execute the build task defined in my_file.yml or my_file2.yml
|
306
|
+
```
|
307
|
+
|
308
|
+
|
186
309
|
## Development
|
187
310
|
|
188
311
|
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.
|
189
312
|
|
190
313
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, run `djin release -- {{increment_option}}` (where {{incremment_option}} can be `--patch`, `--minor` or `major`), which will change version, update the CHANGELOG.md, create a new commit, create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
191
314
|
|
192
|
-
## TODO:
|
193
315
|
|
194
|
-
|
316
|
+
## TODO
|
317
|
+
|
318
|
+
1. Enable multiple -f options to merge configuration between files
|
319
|
+
2. Option to export tasks to Makefile
|
320
|
+
3. djin-export docker image to create and sync makefiles
|
321
|
+
4. include a key option to add tasks in git repositories files (maybe with a local cache)
|
195
322
|
|
196
323
|
## Contributing
|
197
324
|
|