cpl 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +28 -9
- data/Gemfile.lock +1 -1
- data/bin/cpl +1 -1
- data/cpl +4 -13
- data/docs/commands.md +5 -6
- data/examples/circleci.yml +1 -2
- data/lib/command/cleanup_old_images.rb +26 -15
- data/lib/command/info.rb +2 -6
- data/lib/command/run.rb +2 -2
- data/lib/command/run_cleanup.rb +27 -6
- data/lib/command/run_detached.rb +15 -10
- data/lib/command/test.rb +3 -7
- data/lib/core/config.rb +4 -0
- data/lib/core/controlplane.rb +12 -7
- data/lib/core/controlplane_api.rb +3 -3
- data/lib/cpl/version.rb +1 -1
- data/lib/cpl.rb +1 -1
- metadata +2 -3
- data/lib/main.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d187c354ac6a9a75c0aea498f8fbc060f741809d075439ee22663fdf06f265d
|
4
|
+
data.tar.gz: ffde2f0f3be4663ba85baadf599c6a12882c2ba11734f9220d26366bacc5368d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70941d48b8ccc5bb3fb46b6c96c91fd0d3c2f13f2a702822ee6541231d90957df5a3b3c9d60d2091afad9f6e76be8870953f69085a97315c2a865d534d0c1ce7
|
7
|
+
data.tar.gz: 3a109996c812ec2b2e9dc76c189bd5d3518835e5b221ff8f12416982f3542f1753dcba441dbb3ec32224e807d0c83db54fe78e21cad43da0d829b8d65593a6d5
|
data/CONTRIBUTING.md
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
# Contributing
|
2
2
|
|
3
3
|
## Installation
|
4
|
-
|
4
|
+
|
5
|
+
Rather than installing `cpl` as a Ruby gem, install this repo locally and alias the `cpl` command globally for easier
|
6
|
+
access, e.g.:
|
5
7
|
|
6
8
|
```sh
|
7
9
|
git clone https://github.com/shakacode/heroku-to-control-plane
|
8
10
|
|
9
11
|
# Create an alias in some local shell startup script, e.g., `.profile`, `.bashrc`, etc.
|
10
|
-
alias cpl="~/projects/heroku-to-control-plane/cpl"
|
12
|
+
alias cpl="~/projects/heroku-to-control-plane/bin/cpl"
|
11
13
|
```
|
12
14
|
|
13
15
|
Or set the path of the Ruby gem in your Gemfile.
|
@@ -16,13 +18,30 @@ Or set the path of the Ruby gem in your Gemfile.
|
|
16
18
|
gem 'cpl', path: '~/projects/heroku-to-control-plane'
|
17
19
|
```
|
18
20
|
|
19
|
-
## Linting
|
20
|
-
|
21
|
+
## Linting/Testing
|
22
|
+
|
23
|
+
Before committing or pushing code, be sure to:
|
24
|
+
|
25
|
+
- Run `bundle exec rake update_command_docs` to sync any doc changes made in the source code to the docs
|
26
|
+
- Run `bundle exec rubocop -a` to fix any linting errors
|
27
|
+
- Run `bundle exec rspec` to run the test suite
|
28
|
+
|
29
|
+
You can also install [overcommit](https://github.com/sds/overcommit) and let it automatically check for you:
|
30
|
+
|
31
|
+
```sh
|
32
|
+
gem install overcommit
|
33
|
+
|
34
|
+
overcommit --install
|
35
|
+
```
|
21
36
|
|
22
37
|
## Debugging
|
23
38
|
|
24
|
-
1.
|
25
|
-
2.
|
26
|
-
|
27
|
-
|
28
|
-
|
39
|
+
1. Add a breakpoint (`debugger`) to any line of code you want to debug.
|
40
|
+
2. Modify the `lib/command/test.rb` file to trigger the code you want to test. To simulate a command, you can use
|
41
|
+
`Cpl::Cli.start` (e.g., `Cpl::Cli.start(["deploy-image", "-a", "my-app-name"])` would be the same as running
|
42
|
+
`cpl deploy-image -a my-app-name`).
|
43
|
+
3. Run the `test` command in your test app with a `.controlplane` directory.
|
44
|
+
|
45
|
+
```sh
|
46
|
+
cpl test
|
47
|
+
```
|
data/Gemfile.lock
CHANGED
data/bin/cpl
CHANGED
data/cpl
CHANGED
@@ -1,15 +1,6 @@
|
|
1
|
-
#!/bin/
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
|
4
|
+
require_relative "lib/cpl"
|
4
5
|
|
5
|
-
|
6
|
-
#
|
7
|
-
# Example .env:
|
8
|
-
# CPLN_TOKEN=xxx
|
9
|
-
#
|
10
|
-
if [ -f "$SCRIPT_DIR/.env" ]; then
|
11
|
-
export $(grep -v '^#' $SCRIPT_DIR/.env | xargs -0)
|
12
|
-
fi
|
13
|
-
|
14
|
-
# exec $SCRIPT_DIR/old_commands/main.sh "$@"
|
15
|
-
exec ruby $SCRIPT_DIR/lib/main.rb "$@"
|
6
|
+
Cpl::Cli.start
|
data/docs/commands.md
CHANGED
@@ -341,6 +341,7 @@ cpl run bash -a $APP_NAME --use-local-token
|
|
341
341
|
- Deletes stale run workloads for an app
|
342
342
|
- Workloads are considered stale based on how many days since created
|
343
343
|
- `stale_run_workload_created_days` in the `.controlplane/controlplane.yml` file specifies the number of days after created that the workload is considered stale
|
344
|
+
- Works for both interactive workloads (created with `cpl run`) and non-interactive workloads (created with `cpl run:detached`)
|
344
345
|
- Will ask for explicit user confirmation of deletion
|
345
346
|
|
346
347
|
```sh
|
@@ -364,18 +365,16 @@ cpl run:detached 'LOG_LEVEL=warn rails db:migrate' -a $APP_NAME
|
|
364
365
|
# COMMAND may also be passed at the end (in this case, no need to quote).
|
365
366
|
cpl run:detached -a $APP_NAME -- rails db:migrate
|
366
367
|
|
367
|
-
# Uses some other image.
|
368
|
-
cpl run:detached rails db:migrate -a $APP_NAME --image /some/full/image/path
|
369
|
-
|
370
|
-
# Uses latest app image (which may not be promoted yet).
|
371
|
-
cpl run:detached rails db:migrate -a $APP_NAME --image latest
|
372
|
-
|
373
368
|
# Uses a different image (which may not be promoted yet).
|
374
369
|
cpl run:detached rails db:migrate -a $APP_NAME --image appimage:123 # Exact image name
|
375
370
|
cpl run:detached rails db:migrate -a $APP_NAME --image latest # Latest sequential image
|
376
371
|
|
377
372
|
# Uses a different workload than `one_off_workload` from `.controlplane/controlplane.yml`.
|
378
373
|
cpl run:detached rails db:migrate:status -a $APP_NAME -w other-workload
|
374
|
+
|
375
|
+
# Overrides remote CPLN_TOKEN env variable with local token.
|
376
|
+
# Useful when superuser rights are needed in remote container.
|
377
|
+
cpl run:detached rails db:migrate:status -a $APP_NAME --use-local-token
|
379
378
|
```
|
380
379
|
|
381
380
|
### `setup-app`
|
data/examples/circleci.yml
CHANGED
@@ -59,8 +59,7 @@ build-review-app:
|
|
59
59
|
cpln profile create default --token ${CPLN_TOKEN} --org ${CPLN_ORG} --gvc ${APP_NAME}
|
60
60
|
cpln image docker-login
|
61
61
|
|
62
|
-
|
63
|
-
sudo ln -s ~/heroku-to-control-plane/cpl /usr/local/bin/cpl
|
62
|
+
gem install cpl
|
64
63
|
- run:
|
65
64
|
name: Provision review app if needed
|
66
65
|
command: |
|
@@ -31,6 +31,18 @@ module Command
|
|
31
31
|
|
32
32
|
private
|
33
33
|
|
34
|
+
def app_prefix
|
35
|
+
config.should_app_start_with?(config.app) ? "#{config.app}-" : "#{config.app}:"
|
36
|
+
end
|
37
|
+
|
38
|
+
def remove_deployed_image(app, app_images)
|
39
|
+
return app_images unless cp.fetch_gvc(app)
|
40
|
+
|
41
|
+
# If app exists, remove latest image, because we don't want to delete the image that is currently deployed
|
42
|
+
latest_image_name = latest_image_from(app_images, app_name: app)
|
43
|
+
app_images.filter { |item| item["name"] != latest_image_name }
|
44
|
+
end
|
45
|
+
|
34
46
|
def old_images # rubocop:disable Metrics/MethodLength
|
35
47
|
@old_images ||=
|
36
48
|
begin
|
@@ -39,21 +51,20 @@ module Command
|
|
39
51
|
now = DateTime.now
|
40
52
|
old_image_retention_days = config[:old_image_retention_days]
|
41
53
|
|
42
|
-
images = cp.image_query["items"].filter { |item| item["name"].start_with?(
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
})
|
54
|
+
images = cp.image_query["items"].filter { |item| item["name"].start_with?(app_prefix) }
|
55
|
+
images_by_app = images.group_by { |item| item["repository"] }
|
56
|
+
images_by_app.each do |app, app_images|
|
57
|
+
app_images = remove_deployed_image(app, app_images)
|
58
|
+
app_images.each do |image|
|
59
|
+
created_date = DateTime.parse(image["created"])
|
60
|
+
diff_in_days = (now - created_date).to_i
|
61
|
+
next unless diff_in_days >= old_image_retention_days
|
62
|
+
|
63
|
+
result_images.push({
|
64
|
+
name: image["name"],
|
65
|
+
date: created_date
|
66
|
+
})
|
67
|
+
end
|
57
68
|
end
|
58
69
|
|
59
70
|
result_images
|
data/lib/command/info.rb
CHANGED
@@ -112,10 +112,6 @@ module Command
|
|
112
112
|
result.uniq.sort
|
113
113
|
end
|
114
114
|
|
115
|
-
def should_app_start_with?(app)
|
116
|
-
config.apps[app.to_sym]&.dig(:match_if_app_name_starts_with)
|
117
|
-
end
|
118
|
-
|
119
115
|
def any_app_starts_with?(app)
|
120
116
|
@app_workloads.keys.find { |app_name| app_matches?(app_name, app, config.apps[app.to_sym]) }
|
121
117
|
end
|
@@ -132,7 +128,7 @@ module Command
|
|
132
128
|
end
|
133
129
|
|
134
130
|
def add_to_missing_workloads(app, workload)
|
135
|
-
if should_app_start_with?(app)
|
131
|
+
if config.should_app_start_with?(app)
|
136
132
|
@missing_apps_starting_with[app] ||= []
|
137
133
|
@missing_apps_starting_with[app].push(workload)
|
138
134
|
else
|
@@ -142,7 +138,7 @@ module Command
|
|
142
138
|
end
|
143
139
|
|
144
140
|
def print_app(app, org)
|
145
|
-
if should_app_start_with?(app)
|
141
|
+
if config.should_app_start_with?(app)
|
146
142
|
check_any_app_starts_with(app)
|
147
143
|
elsif cp.fetch_gvc(app, org).nil?
|
148
144
|
@missing_apps_workloads[app] = ["gvc"]
|
data/lib/command/run.rb
CHANGED
@@ -99,8 +99,8 @@ module Command
|
|
99
99
|
|
100
100
|
# Override image if specified
|
101
101
|
image = config.options[:image]
|
102
|
-
image =
|
103
|
-
container_spec["image"] = image
|
102
|
+
image = latest_image if image == "latest"
|
103
|
+
container_spec["image"] = "/org/#{config.org}/image/#{image}"
|
104
104
|
|
105
105
|
# Set runner
|
106
106
|
container_spec["env"] ||= []
|
data/lib/command/run_cleanup.rb
CHANGED
@@ -12,6 +12,7 @@ module Command
|
|
12
12
|
- Deletes stale run workloads for an app
|
13
13
|
- Workloads are considered stale based on how many days since created
|
14
14
|
- `stale_run_workload_created_days` in the `.controlplane/controlplane.yml` file specifies the number of days after created that the workload is considered stale
|
15
|
+
- Works for both interactive workloads (created with `cpl run`) and non-interactive workloads (created with `cpl run:detached`)
|
15
16
|
- Will ask for explicit user confirmation of deletion
|
16
17
|
DESC
|
17
18
|
|
@@ -20,8 +21,14 @@ module Command
|
|
20
21
|
|
21
22
|
progress.puts("Stale run workloads:")
|
22
23
|
stale_run_workloads.each do |workload|
|
23
|
-
|
24
|
-
|
24
|
+
output = ""
|
25
|
+
output += if config.should_app_start_with?(config.app)
|
26
|
+
" #{workload[:app]} - #{workload[:name]}"
|
27
|
+
else
|
28
|
+
" #{workload[:name]}"
|
29
|
+
end
|
30
|
+
output += " (#{Shell.color("#{workload[:date]} - #{workload[:days]} days ago", :red)})"
|
31
|
+
progress.puts(output)
|
25
32
|
end
|
26
33
|
|
27
34
|
return unless confirm_delete
|
@@ -62,11 +69,19 @@ module Command
|
|
62
69
|
now = DateTime.now
|
63
70
|
stale_run_workload_created_days = config[:stale_run_workload_created_days]
|
64
71
|
|
65
|
-
|
72
|
+
interactive_workloads = cp.query_workloads(
|
73
|
+
"-run-", partial_gvc_match: config.should_app_start_with?(config.app), partial_workload_match: true
|
74
|
+
)["items"]
|
75
|
+
non_interactive_workloads = cp.query_workloads(
|
76
|
+
"-runner-", partial_gvc_match: config.should_app_start_with?(config.app), partial_workload_match: true
|
77
|
+
)["items"]
|
78
|
+
workloads = interactive_workloads + non_interactive_workloads
|
79
|
+
|
66
80
|
workloads.each do |workload|
|
81
|
+
app_name = workload["links"].find { |link| link["rel"] == "gvc" }["href"].split("/").last
|
67
82
|
workload_name = workload["name"]
|
68
83
|
|
69
|
-
original_workload_name, workload_number = workload_name.split(
|
84
|
+
original_workload_name, workload_number = workload_name.split(/-run-|-runner-/)
|
70
85
|
next unless defined_workloads.include?(original_workload_name) && workload_number.match?(/^\d{4}$/)
|
71
86
|
|
72
87
|
created_date = DateTime.parse(workload["created"])
|
@@ -74,6 +89,7 @@ module Command
|
|
74
89
|
next unless diff_in_days >= stale_run_workload_created_days
|
75
90
|
|
76
91
|
run_workloads.push({
|
92
|
+
app: app_name,
|
77
93
|
name: workload_name,
|
78
94
|
date: created_date,
|
79
95
|
days: diff_in_days
|
@@ -91,8 +107,13 @@ module Command
|
|
91
107
|
end
|
92
108
|
|
93
109
|
def delete_workload(workload)
|
94
|
-
|
95
|
-
|
110
|
+
message = if config.should_app_start_with?(config.app)
|
111
|
+
"Deleting run workload '#{workload[:app]} - #{workload[:name]}'"
|
112
|
+
else
|
113
|
+
"Deleting run workload '#{workload[:name]}'"
|
114
|
+
end
|
115
|
+
step(message) do
|
116
|
+
cp.delete_workload(workload[:name], workload[:app])
|
96
117
|
end
|
97
118
|
end
|
98
119
|
end
|
data/lib/command/run_detached.rb
CHANGED
@@ -8,7 +8,8 @@ module Command
|
|
8
8
|
OPTIONS = [
|
9
9
|
app_option(required: true),
|
10
10
|
image_option,
|
11
|
-
workload_option
|
11
|
+
workload_option,
|
12
|
+
use_local_token_option
|
12
13
|
].freeze
|
13
14
|
DESCRIPTION = "Runs one-off **_non-interactive_** replicas (close analog of `heroku run:detached`)"
|
14
15
|
LONG_DESCRIPTION = <<~DESC
|
@@ -28,18 +29,16 @@ module Command
|
|
28
29
|
# COMMAND may also be passed at the end (in this case, no need to quote).
|
29
30
|
cpl run:detached -a $APP_NAME -- rails db:migrate
|
30
31
|
|
31
|
-
# Uses some other image.
|
32
|
-
cpl run:detached rails db:migrate -a $APP_NAME --image /some/full/image/path
|
33
|
-
|
34
|
-
# Uses latest app image (which may not be promoted yet).
|
35
|
-
cpl run:detached rails db:migrate -a $APP_NAME --image latest
|
36
|
-
|
37
32
|
# Uses a different image (which may not be promoted yet).
|
38
33
|
cpl run:detached rails db:migrate -a $APP_NAME --image appimage:123 # Exact image name
|
39
34
|
cpl run:detached rails db:migrate -a $APP_NAME --image latest # Latest sequential image
|
40
35
|
|
41
36
|
# Uses a different workload than `one_off_workload` from `.controlplane/controlplane.yml`.
|
42
37
|
cpl run:detached rails db:migrate:status -a $APP_NAME -w other-workload
|
38
|
+
|
39
|
+
# Overrides remote CPLN_TOKEN env variable with local token.
|
40
|
+
# Useful when superuser rights are needed in remote container.
|
41
|
+
cpl run:detached rails db:migrate:status -a $APP_NAME --use-local-token
|
43
42
|
```
|
44
43
|
EX
|
45
44
|
|
@@ -91,8 +90,8 @@ module Command
|
|
91
90
|
|
92
91
|
# Override image if specified
|
93
92
|
image = config.options[:image]
|
94
|
-
image =
|
95
|
-
container_spec["image"] = image
|
93
|
+
image = latest_image if image == "latest"
|
94
|
+
container_spec["image"] = "/org/#{config.org}/image/#{image}"
|
96
95
|
|
97
96
|
# Set cron job props
|
98
97
|
spec["type"] = "cron"
|
@@ -108,10 +107,16 @@ module Command
|
|
108
107
|
cp.apply("kind" => "workload", "name" => one_off, "spec" => spec)
|
109
108
|
end
|
110
109
|
|
111
|
-
def runner_script
|
110
|
+
def runner_script # rubocop:disable Metrics/MethodLength
|
112
111
|
script = "echo '-- STARTED RUNNER SCRIPT --'\n"
|
113
112
|
script += Scripts.helpers_cleanup
|
114
113
|
|
114
|
+
if config.options["use_local_token"]
|
115
|
+
script += <<~SHELL
|
116
|
+
CPLN_TOKEN=$CONTROLPLANE_TOKEN
|
117
|
+
SHELL
|
118
|
+
end
|
119
|
+
|
115
120
|
script += <<~SHELL
|
116
121
|
if ! eval "#{args_join(config.args)}"; then echo "----- CRASHED -----"; fi
|
117
122
|
|
data/lib/command/test.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Be sure to have run: gem install debug
|
4
3
|
require "debug"
|
5
4
|
|
6
5
|
module Command
|
@@ -14,13 +13,10 @@ module Command
|
|
14
13
|
HIDE = true
|
15
14
|
|
16
15
|
def call
|
17
|
-
#
|
16
|
+
# Modify this method to trigger the code you want to test.
|
18
17
|
# You can use `debugger` to debug.
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# rubocop:disable Lint/Debugger
|
22
|
-
pp latest_image_next
|
23
|
-
# rubocop:enable Lint/Debugger
|
18
|
+
# You can use `Cpl::Cli.start` to simulate a command
|
19
|
+
# (e.g., `Cpl::Cli.start(["deploy-image", "-a", "my-app-name"])`).
|
24
20
|
end
|
25
21
|
end
|
26
22
|
end
|
data/lib/core/config.rb
CHANGED
data/lib/core/controlplane.rb
CHANGED
@@ -45,7 +45,11 @@ class Controlplane # rubocop:disable Metrics/ClassLength
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def image_query(app_name = config.app, org_name = config.org)
|
48
|
-
|
48
|
+
# When `match_if_app_name_starts_with` is `true`, we query for images from any gvc containing the name,
|
49
|
+
# otherwise we query for images from a gvc with the exact name.
|
50
|
+
op = config.should_app_start_with?(app_name) ? "~" : "="
|
51
|
+
|
52
|
+
cmd = "cpln image query --org #{org_name} -o yaml --max -1 --prop repository#{op}#{app_name}"
|
49
53
|
perform_yaml(cmd)
|
50
54
|
end
|
51
55
|
|
@@ -86,7 +90,7 @@ class Controlplane # rubocop:disable Metrics/ClassLength
|
|
86
90
|
def gvc_query(app_name = config.app)
|
87
91
|
# When `match_if_app_name_starts_with` is `true`, we query for any gvc containing the name,
|
88
92
|
# otherwise we query for a gvc with the exact name.
|
89
|
-
op = config.
|
93
|
+
op = config.should_app_start_with?(app_name) ? "~" : "="
|
90
94
|
|
91
95
|
cmd = "cpln gvc query --org #{org} -o yaml --prop name#{op}#{app_name}"
|
92
96
|
perform_yaml(cmd)
|
@@ -128,10 +132,11 @@ class Controlplane # rubocop:disable Metrics/ClassLength
|
|
128
132
|
raise "Can't find workload '#{workload}', please create it with 'cpl apply-template #{workload} -a #{config.app}'."
|
129
133
|
end
|
130
134
|
|
131
|
-
def query_workloads(workload,
|
132
|
-
|
135
|
+
def query_workloads(workload, partial_gvc_match: false, partial_workload_match: false)
|
136
|
+
gvc_op = partial_gvc_match ? "~" : "="
|
137
|
+
workload_op = partial_workload_match ? "~" : "="
|
133
138
|
|
134
|
-
api.query_workloads(org: org, gvc: gvc, workload: workload,
|
139
|
+
api.query_workloads(org: org, gvc: gvc, workload: workload, gvc_op_type: gvc_op, workload_op_type: workload_op)
|
135
140
|
end
|
136
141
|
|
137
142
|
def workload_get_replicas(workload, location:)
|
@@ -204,8 +209,8 @@ class Controlplane # rubocop:disable Metrics/ClassLength
|
|
204
209
|
perform!(cmd)
|
205
210
|
end
|
206
211
|
|
207
|
-
def delete_workload(workload)
|
208
|
-
api.delete_workload(org: org, gvc:
|
212
|
+
def delete_workload(workload, a_gvc = gvc)
|
213
|
+
api.delete_workload(org: org, gvc: a_gvc, workload: workload)
|
209
214
|
end
|
210
215
|
|
211
216
|
def workload_connect(workload, location:, container: nil, shell: nil)
|
@@ -33,7 +33,7 @@ class ControlplaneApi
|
|
33
33
|
api_json_direct("/logs/org/#{org}/loki/api/v1/query_range?#{params}", method: :get, host: :logs)
|
34
34
|
end
|
35
35
|
|
36
|
-
def query_workloads(org:, gvc:, workload:,
|
36
|
+
def query_workloads(org:, gvc:, workload:, gvc_op_type:, workload_op_type:) # rubocop:disable Metrics/MethodLength
|
37
37
|
body = {
|
38
38
|
kind: "string",
|
39
39
|
spec: {
|
@@ -41,12 +41,12 @@ class ControlplaneApi
|
|
41
41
|
terms: [
|
42
42
|
{
|
43
43
|
rel: "gvc",
|
44
|
-
op:
|
44
|
+
op: gvc_op_type,
|
45
45
|
value: gvc
|
46
46
|
},
|
47
47
|
{
|
48
48
|
property: "name",
|
49
|
-
op:
|
49
|
+
op: workload_op_type,
|
50
50
|
value: workload
|
51
51
|
}
|
52
52
|
]
|
data/lib/cpl/version.rb
CHANGED
data/lib/cpl.rb
CHANGED
@@ -13,7 +13,7 @@ require "yaml"
|
|
13
13
|
require_relative "command/base"
|
14
14
|
|
15
15
|
modules = Dir["#{__dir__}/**/*.rb"].reject do |file|
|
16
|
-
file == __FILE__ || file.end_with?("
|
16
|
+
file == __FILE__ || file.end_with?("base.rb")
|
17
17
|
end
|
18
18
|
modules.sort.each { require(_1) }
|
19
19
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cpl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Gordon
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-07-
|
12
|
+
date: 2023-07-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: debug
|
@@ -273,7 +273,6 @@ files:
|
|
273
273
|
- lib/cpl.rb
|
274
274
|
- lib/cpl/version.rb
|
275
275
|
- lib/deprecated_commands.json
|
276
|
-
- lib/main.rb
|
277
276
|
- rakelib/create_release.rake
|
278
277
|
- script/add_command
|
279
278
|
- script/check_command_docs
|