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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97534e7ffeb4c0b6c7db70851d6cbac5f86ca0329a76af9975dc4a164eeb08b3
4
- data.tar.gz: 3e8a4e9a60af5859bf157464a164f3b7b430a335a33815d65d9bbc54415d43b5
3
+ metadata.gz: 9d187c354ac6a9a75c0aea498f8fbc060f741809d075439ee22663fdf06f265d
4
+ data.tar.gz: ffde2f0f3be4663ba85baadf599c6a12882c2ba11734f9220d26366bacc5368d
5
5
  SHA512:
6
- metadata.gz: 41f11336b2c8a741693e5acc415225bf64d19b4fd0f2240da6ee3de884a517abdb23a37b1ebe166b5b8fd0ccf4d0ae0b95cb7fb3cce0c8f770bfd7c7bc5c6e3e
7
- data.tar.gz: e3367bea0aeca04add5823d7129f0ffa3f276709e967d5fe6e533241c8fbace80dd1811b54cb2ee7fd71ce500d54535e4bbe4aea76a1c58114ecf324a3fee763
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
- Rather than installing `cpl` as a Ruby gem, install this repo locally and alias `cpl` command globally for easier access, e.g.:
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
- Be sure to run `rubocop -a` before committing code.
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. Install gem: `gem install debug`
25
- 2. Require: Add a `require "debug"` statement to the file you want to debug.
26
- 3. Add breakpoint: Add a `debugger` statement to the line you want to debug.
27
- 4. Modify the `lib/command/test.rb` file to triggger the code that you want to run.
28
- 5. Run the test in your test app with a `.controlplane` directory. `cpl test -a my-app-name`
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cpl (1.0.2)
4
+ cpl (1.0.3)
5
5
  debug (~> 1.7.1)
6
6
  dotenv (~> 2.8.1)
7
7
  psych (~> 5.1.0)
data/bin/cpl CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "cpl"
4
+ require_relative "../lib/cpl"
5
5
 
6
6
  Cpl::Cli.start
data/cpl CHANGED
@@ -1,15 +1,6 @@
1
- #!/bin/sh
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- SCRIPT_DIR=$(dirname $(realpath $0))
4
+ require_relative "lib/cpl"
4
5
 
5
- # exports .env to vars
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`
@@ -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
- git clone https://github.com/shakacode/heroku-to-control-plane ~/heroku-to-control-plane
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?("#{config.app}:") }
43
-
44
- # Remove latest image, because we don't want to delete the image that is currently deployed
45
- latest_image_name = latest_image_from(images)
46
- images = images.filter { |item| item["name"] != latest_image_name }
47
-
48
- images.each do |image|
49
- created_date = DateTime.parse(image["created"])
50
- diff_in_days = (now - created_date).to_i
51
- next unless diff_in_days >= old_image_retention_days
52
-
53
- result_images.push({
54
- name: image["name"],
55
- date: created_date
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 = "/org/#{config.org}/image/#{latest_image}" if image == "latest"
103
- container_spec["image"] = image if 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"] ||= []
@@ -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
- progress.puts(" #{workload[:name]} " \
24
- "(#{Shell.color("#{workload[:date]} - #{workload[:days]} days ago", :red)})")
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
- workloads = cp.query_workloads("-run-", partial_match: true)["items"]
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("-run-")
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
- step("Deleting run workload '#{workload[:name]}'") do
95
- cp.delete_workload(workload[:name])
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
@@ -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 = "/org/#{config.org}/image/#{latest_image}" if image == "latest"
95
- container_spec["image"] = image if 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
- # Change code here to test.
16
+ # Modify this method to trigger the code you want to test.
18
17
  # You can use `debugger` to debug.
19
- # debugger
20
- # Or print values
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
@@ -34,6 +34,10 @@ class Config
34
34
  "#{app_dir}/.controlplane"
35
35
  end
36
36
 
37
+ def should_app_start_with?(app)
38
+ apps[app.to_sym]&.dig(:match_if_app_name_starts_with) || false
39
+ end
40
+
37
41
  private
38
42
 
39
43
  def ensure_current_config!
@@ -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
- cmd = "cpln image query --org #{org_name} -o yaml --max -1 --prop repository=#{app_name}"
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.current[:match_if_app_name_starts_with] ? "~" : "="
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, partial_match: false)
132
- op = partial_match ? "~" : "="
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, op_type: op)
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: gvc, workload: workload)
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:, op_type:) # rubocop:disable Metrics/MethodLength
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: op_type,
49
+ op: workload_op_type,
50
50
  value: workload
51
51
  }
52
52
  ]
data/lib/cpl/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cpl
4
- VERSION = "1.0.2"
4
+ VERSION = "1.0.3"
5
5
  MIN_CPLN_VERSION = "0.0.71"
6
6
  end
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?("main.rb") || file.end_with?("base.rb")
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.2
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-02 00:00:00.000000000 Z
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
data/lib/main.rb DELETED
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "cpl"
4
-
5
- Cpl::Cli.start