cpl 1.0.2 → 1.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: 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