cpl 0.7.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/command_docs.yml +24 -0
- data/.github/workflows/rspec.yml +8 -5
- data/.github/workflows/rubocop.yml +5 -2
- data/.overcommit.yml +3 -0
- data/Gemfile.lock +2 -2
- data/Rakefile +7 -2
- data/lib/command/base.rb +7 -13
- data/lib/command/run.rb +8 -6
- data/lib/command/run_detached.rb +12 -8
- data/lib/core/scripts.rb +2 -2
- data/lib/cpl/version.rb +1 -1
- data/script/check_command_docs +3 -0
- metadata +5 -3
- /data/script/{generate_commands_docs → update_command_docs} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 410e8bfdc923cabc36b900bb6cc3bb98e586cc2789579ec01cc33fe9c9c39fe1
|
4
|
+
data.tar.gz: a7428c35cff0dabcd1c68469561b82e2c3f24282b92dba9b1eeeb94c51d9d654
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c09fb9477e7dd638220e4ad711161a176daab7e82ed7224d584b6617989e3dd789ae5f66eb75e0086bdcd9690d680e2de668b5698ce322184ecdd23522835a3
|
7
|
+
data.tar.gz: 82f3a8aaf6b465850f9b577c5f7aed1b8b4313bf0224d52f058fc94e17f334a9cb9f51bb2638600c150184714fb254c2edeea1bb1f77b40a976fe20d0db11b54
|
@@ -0,0 +1,24 @@
|
|
1
|
+
name: Command Docs
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
pull_request:
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
rspec:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
name: Command Docs
|
13
|
+
steps:
|
14
|
+
- name: Checkout code
|
15
|
+
uses: actions/checkout@v3
|
16
|
+
- name: Set up Ruby
|
17
|
+
uses: ruby/setup-ruby@v1
|
18
|
+
with:
|
19
|
+
ruby-version: "3.0"
|
20
|
+
bundler-cache: true
|
21
|
+
- name: Install dependencies
|
22
|
+
run: bundle install
|
23
|
+
- name: Check if command docs are up to date
|
24
|
+
run: bundle exec rake check_command_docs
|
data/.github/workflows/rspec.yml
CHANGED
@@ -8,15 +8,18 @@ on:
|
|
8
8
|
|
9
9
|
jobs:
|
10
10
|
rspec:
|
11
|
-
runs-on: ubuntu-latest
|
12
|
-
name: RSpec
|
13
|
-
env:
|
14
|
-
RAILS_ENV: test
|
15
11
|
strategy:
|
16
12
|
matrix:
|
13
|
+
os:
|
14
|
+
- ubuntu-latest
|
15
|
+
- macos-latest
|
17
16
|
ruby:
|
18
17
|
- "2.7"
|
19
18
|
- "3.0"
|
19
|
+
runs-on: ${{ matrix.os }}
|
20
|
+
name: RSpec
|
21
|
+
env:
|
22
|
+
RAILS_ENV: test
|
20
23
|
steps:
|
21
24
|
- name: Checkout code
|
22
25
|
uses: actions/checkout@v3
|
@@ -28,7 +31,7 @@ jobs:
|
|
28
31
|
- name: Install dependencies
|
29
32
|
run: bundle install
|
30
33
|
- name: Run tests
|
31
|
-
run: bundle exec rspec
|
34
|
+
run: bundle exec rspec
|
32
35
|
- name: Upload coverage results
|
33
36
|
uses: actions/upload-artifact@master
|
34
37
|
if: always()
|
@@ -8,13 +8,16 @@ on:
|
|
8
8
|
|
9
9
|
jobs:
|
10
10
|
rubocop:
|
11
|
-
runs-on: ubuntu-latest
|
12
|
-
name: Rubocop
|
13
11
|
strategy:
|
14
12
|
matrix:
|
13
|
+
os:
|
14
|
+
- ubuntu-latest
|
15
|
+
- macos-latest
|
15
16
|
ruby:
|
16
17
|
- "2.7"
|
17
18
|
- "3.0"
|
19
|
+
runs-on: ${{ matrix.os }}
|
20
|
+
name: Rubocop
|
18
21
|
steps:
|
19
22
|
- name: Checkout code
|
20
23
|
uses: actions/checkout@v3
|
data/.overcommit.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cpl (0.
|
4
|
+
cpl (1.0.0)
|
5
5
|
debug (~> 1.7.1)
|
6
6
|
dotenv (~> 2.8.1)
|
7
7
|
psych (~> 5.1.0)
|
@@ -41,7 +41,7 @@ GEM
|
|
41
41
|
rainbow (3.1.1)
|
42
42
|
rake (13.0.6)
|
43
43
|
regexp_parser (2.6.2)
|
44
|
-
reline (0.3.
|
44
|
+
reline (0.3.4)
|
45
45
|
io-console (~> 0.5)
|
46
46
|
rexml (3.2.5)
|
47
47
|
rspec (3.12.0)
|
data/Rakefile
CHANGED
@@ -10,7 +10,12 @@ RuboCop::RakeTask.new
|
|
10
10
|
|
11
11
|
task default: %i[rspec rubocop]
|
12
12
|
|
13
|
+
desc "Checks if commands.md file is up to date"
|
14
|
+
task :check_command_docs do
|
15
|
+
sh "./script/check_command_docs"
|
16
|
+
end
|
17
|
+
|
13
18
|
desc "Updates commands.md file"
|
14
|
-
task :
|
15
|
-
sh "./script/
|
19
|
+
task :update_command_docs do
|
20
|
+
sh "./script/update_command_docs"
|
16
21
|
end
|
data/lib/command/base.rb
CHANGED
@@ -187,28 +187,22 @@ module Command
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
-
def wait_for(title)
|
191
|
-
progress.print "- Waiting for #{title}"
|
192
|
-
until yield
|
193
|
-
progress.print(".")
|
194
|
-
sleep(1)
|
195
|
-
end
|
196
|
-
progress.puts
|
197
|
-
end
|
198
|
-
|
199
190
|
def wait_for_workload(workload)
|
200
|
-
|
191
|
+
step("Waiting for workload", retry_on_failure: true) do
|
192
|
+
cp.fetch_workload(workload)
|
193
|
+
end
|
201
194
|
end
|
202
195
|
|
203
196
|
def wait_for_replica(workload, location)
|
204
|
-
|
197
|
+
step("Waiting for replica", retry_on_failure: true) do
|
205
198
|
cp.workload_get_replicas_safely(workload, location: location)&.dig("items", 0)
|
206
199
|
end
|
207
200
|
end
|
208
201
|
|
209
202
|
def ensure_workload_deleted(workload)
|
210
|
-
|
211
|
-
|
203
|
+
step("Deleting workload") do
|
204
|
+
cp.delete_workload(workload)
|
205
|
+
end
|
212
206
|
end
|
213
207
|
|
214
208
|
def latest_image_from(items, app_name: config.app, name_only: true)
|
data/lib/command/run.rb
CHANGED
@@ -56,24 +56,26 @@ module Command
|
|
56
56
|
|
57
57
|
attr_reader :location, :workload, :one_off, :container
|
58
58
|
|
59
|
-
def call
|
59
|
+
def call # rubocop:disable Metrics/MethodLength
|
60
60
|
@location = config[:default_location]
|
61
61
|
@workload = config.options["workload"] || config[:one_off_workload]
|
62
62
|
@one_off = "#{workload}-run-#{rand(1000..9999)}"
|
63
63
|
|
64
|
-
|
64
|
+
step("Cloning workload '#{workload}' on app '#{config.options[:app]}' to '#{one_off}'") do
|
65
|
+
clone_workload
|
66
|
+
end
|
67
|
+
|
65
68
|
wait_for_workload(one_off)
|
66
69
|
wait_for_replica(one_off, location)
|
67
70
|
run_in_replica
|
68
71
|
ensure
|
72
|
+
progress.puts
|
69
73
|
ensure_workload_deleted(one_off)
|
70
74
|
end
|
71
75
|
|
72
76
|
private
|
73
77
|
|
74
78
|
def clone_workload # rubocop:disable Metrics/MethodLength
|
75
|
-
progress.puts "- Cloning workload '#{workload}' on '#{config.options[:app]}' to '#{one_off}'"
|
76
|
-
|
77
79
|
# Create a base copy of workload props
|
78
80
|
spec = cp.fetch_workload!(workload).fetch("spec")
|
79
81
|
container_spec = spec["containers"].detect { _1["name"] == workload } || spec["containers"].first
|
@@ -127,7 +129,7 @@ module Command
|
|
127
129
|
if config.options[:terminal_size]
|
128
130
|
rows, cols = config.options[:terminal_size].split(",")
|
129
131
|
else
|
130
|
-
rows, cols = `stty
|
132
|
+
rows, cols = `stty size`.split(/\s+/)
|
131
133
|
end
|
132
134
|
script += "stty rows #{rows}\nstty cols #{cols}\n" if rows && cols
|
133
135
|
end
|
@@ -137,7 +139,7 @@ module Command
|
|
137
139
|
end
|
138
140
|
|
139
141
|
def run_in_replica
|
140
|
-
progress.puts
|
142
|
+
progress.puts("Connecting...\n\n")
|
141
143
|
command = %(bash -c 'eval "$CONTROLPLANE_RUNNER"')
|
142
144
|
cp.workload_exec(one_off, location: location, container: container, command: command)
|
143
145
|
end
|
data/lib/command/run_detached.rb
CHANGED
@@ -47,24 +47,28 @@ module Command
|
|
47
47
|
|
48
48
|
attr_reader :location, :workload, :one_off, :container
|
49
49
|
|
50
|
-
def call
|
50
|
+
def call # rubocop:disable Metrics/MethodLength
|
51
51
|
@location = config[:default_location]
|
52
52
|
@workload = config.options["workload"] || config[:one_off_workload]
|
53
53
|
@one_off = "#{workload}-runner-#{rand(1000..9999)}"
|
54
54
|
|
55
|
-
|
55
|
+
step("Cloning workload '#{workload}' on app '#{config.options[:app]}' to '#{one_off}'") do
|
56
|
+
clone_workload
|
57
|
+
end
|
58
|
+
|
56
59
|
wait_for_workload(one_off)
|
57
60
|
show_logs_waiting
|
58
61
|
ensure
|
59
|
-
|
62
|
+
if cp.fetch_workload(one_off)
|
63
|
+
progress.puts
|
64
|
+
ensure_workload_deleted(one_off)
|
65
|
+
end
|
60
66
|
exit(1) if @crashed
|
61
67
|
end
|
62
68
|
|
63
69
|
private
|
64
70
|
|
65
71
|
def clone_workload # rubocop:disable Metrics/MethodLength
|
66
|
-
progress.puts "- Cloning workload '#{workload}' on '#{config.options[:app]}' to '#{one_off}'"
|
67
|
-
|
68
72
|
# Get base specs of workload
|
69
73
|
spec = cp.fetch_workload!(workload).fetch("spec")
|
70
74
|
container_spec = spec["containers"].detect { _1["name"] == workload } || spec["containers"].first
|
@@ -121,17 +125,17 @@ module Command
|
|
121
125
|
end
|
122
126
|
|
123
127
|
def show_logs_waiting # rubocop:disable Metrics/MethodLength
|
124
|
-
progress.puts
|
128
|
+
progress.puts("Scheduled, fetching logs (it's a cron job, so it may take up to a minute to start)...\n\n")
|
125
129
|
begin
|
126
130
|
while cp.fetch_workload(one_off)
|
127
131
|
sleep(WORKLOAD_SLEEP_CHECK)
|
128
132
|
print_uniq_logs
|
129
133
|
end
|
130
134
|
rescue RuntimeError => e
|
131
|
-
progress.puts
|
135
|
+
progress.puts(Shell.color("ERROR: #{e}", :red))
|
132
136
|
retry
|
133
137
|
end
|
134
|
-
progress.puts
|
138
|
+
progress.puts("\nFinished workload and logger.")
|
135
139
|
end
|
136
140
|
|
137
141
|
def print_uniq_logs
|
data/lib/core/scripts.rb
CHANGED
@@ -10,7 +10,7 @@ module Scripts
|
|
10
10
|
-H "Authorization: ${CONTROLPLANE_TOKEN}" -s | grep -o '"replicas":[0-9]*' | grep -o '[0-9]*')
|
11
11
|
|
12
12
|
if [ "$REPLICAS_QTY" -gt 0 ]; then
|
13
|
-
echo "-- MULTIPLE REPLICAS ATTEMPT
|
13
|
+
echo "-- MULTIPLE REPLICAS ATTEMPT: $REPLICAS_QTY --"
|
14
14
|
exit -1
|
15
15
|
fi
|
16
16
|
SHELL
|
@@ -24,7 +24,7 @@ module Scripts
|
|
24
24
|
|
25
25
|
# NOTE: please escape all '/' as '//' (as it is ruby interpolation here as well)
|
26
26
|
def http_dummy_server_ruby
|
27
|
-
'require "socket";s=TCPServer.new(ENV["PORT"]);' \
|
27
|
+
'require "socket";s=TCPServer.new(ENV["PORT"] || 80);' \
|
28
28
|
'loop do c=s.accept;c.puts("HTTP/1.1 200 OK\\nContent-Length: 2\\n\\nOk");c.close end'
|
29
29
|
end
|
30
30
|
|
data/lib/cpl/version.rb
CHANGED
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: 0.
|
4
|
+
version: 1.0.0
|
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-05-
|
12
|
+
date: 2023-05-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: debug
|
@@ -202,6 +202,7 @@ executables:
|
|
202
202
|
extensions: []
|
203
203
|
extra_rdoc_files: []
|
204
204
|
files:
|
205
|
+
- ".github/workflows/command_docs.yml"
|
205
206
|
- ".github/workflows/rspec.yml"
|
206
207
|
- ".github/workflows/rubocop.yml"
|
207
208
|
- ".gitignore"
|
@@ -269,8 +270,9 @@ files:
|
|
269
270
|
- lib/main.rb
|
270
271
|
- rakelib/create_release.rake
|
271
272
|
- script/add_command
|
272
|
-
- script/
|
273
|
+
- script/check_command_docs
|
273
274
|
- script/rename_command
|
275
|
+
- script/update_command_docs
|
274
276
|
- templates/daily-task.yml
|
275
277
|
- templates/gvc.yml
|
276
278
|
- templates/identity.yml
|
File without changes
|