semaph 0.5.0 → 0.6.0
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/.semaphore/semaphore.yml +5 -1
- data/Gemfile.lock +21 -1
- data/Rakefile +4 -1
- data/lib/semaph/commands.rb +63 -0
- data/lib/semaph/commands/rerun_workflow_command.rb +0 -2
- data/lib/semaph/commands/stop_workflow_command.rb +0 -2
- data/lib/semaph/model/job.rb +13 -2
- data/lib/semaph/model/workflow.rb +15 -2
- data/lib/semaph/shells/pipeline/job_log_command.rb +15 -13
- data/lib/semaph/shells/pipeline/job_log_grep_command.rb +1 -8
- data/lib/semaph/shells/pipeline/jobs_poll_command.rb +39 -14
- data/lib/semaph/shells/pipeline/pipeline_shell.rb +9 -65
- data/lib/semaph/shells/project/workflows_list_command.rb +1 -14
- data/lib/semaph/shells/workflow/workflow_shell.rb +4 -64
- data/lib/semaph/version.rb +1 -1
- data/semaph.gemspec +1 -0
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31aeabe99b27b7a10bc26f91c6a60e87e3374b309df5e41b8354694d99bd1a90
|
4
|
+
data.tar.gz: 34499279ff5fedb14739093655ad29ff703c9c3d40222208783106d73d746841
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47939331aee8435b5584f29ab39cf9647730dc0ead3b340c20175df3da849120aec5e9b97d3cd7dc116aa6044ac4fd9e1c4648b6ece862afe01a40b8e5007da9
|
7
|
+
data.tar.gz: 4f7b74225fd180ea85fad14c73a8a808733fc1d4836b69b99069a25314996bdd70066c1c1bb35b5e247cbeeefe5191760af50102d338e65992fdbd44ebfe529c
|
data/.semaphore/semaphore.yml
CHANGED
@@ -16,4 +16,8 @@ blocks:
|
|
16
16
|
- name: Build
|
17
17
|
commands:
|
18
18
|
- checkout
|
19
|
-
-
|
19
|
+
- sem-version ruby $(grep ruby .tool-versions | cut -d ' ' -f 2)
|
20
|
+
- cache restore $(git ls-tree HEAD Gemfile.lock | cut -f3 -d$' ' | cut -f1 -d$'\t')
|
21
|
+
- bundle install --deployment --path vendor/bundle
|
22
|
+
- cache store $(git ls-tree HEAD Gemfile.lock | cut -f3 -d$' ' | cut -f1 -d$'\t') vendor/bundle
|
23
|
+
- bundle exec rake
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
semaph (0.
|
4
|
+
semaph (0.6.0)
|
5
5
|
faraday
|
6
6
|
rainbow
|
7
7
|
shell_shock
|
@@ -9,18 +9,37 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
+
ast (2.4.0)
|
12
13
|
coderay (1.1.2)
|
13
14
|
faraday (1.0.1)
|
14
15
|
multipart-post (>= 1.2, < 3)
|
15
16
|
method_source (1.0.0)
|
16
17
|
minitest (5.14.1)
|
17
18
|
multipart-post (2.1.1)
|
19
|
+
parallel (1.19.1)
|
20
|
+
parser (2.7.1.3)
|
21
|
+
ast (~> 2.4.0)
|
18
22
|
pry (0.13.1)
|
19
23
|
coderay (~> 1.1)
|
20
24
|
method_source (~> 1.0)
|
21
25
|
rainbow (3.0.0)
|
22
26
|
rake (12.3.3)
|
27
|
+
regexp_parser (1.7.0)
|
28
|
+
rexml (3.2.4)
|
29
|
+
rubocop (0.85.0)
|
30
|
+
parallel (~> 1.10)
|
31
|
+
parser (>= 2.7.0.1)
|
32
|
+
rainbow (>= 2.2.2, < 4.0)
|
33
|
+
regexp_parser (>= 1.7)
|
34
|
+
rexml
|
35
|
+
rubocop-ast (>= 0.0.3)
|
36
|
+
ruby-progressbar (~> 1.7)
|
37
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
38
|
+
rubocop-ast (0.0.3)
|
39
|
+
parser (>= 2.7.0.1)
|
40
|
+
ruby-progressbar (1.10.1)
|
23
41
|
shell_shock (0.0.5)
|
42
|
+
unicode-display_width (1.7.0)
|
24
43
|
|
25
44
|
PLATFORMS
|
26
45
|
ruby
|
@@ -29,6 +48,7 @@ DEPENDENCIES
|
|
29
48
|
minitest (~> 5.0)
|
30
49
|
pry
|
31
50
|
rake (~> 12.0)
|
51
|
+
rubocop
|
32
52
|
semaph!
|
33
53
|
|
34
54
|
BUNDLED WITH
|
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rake/testtask"
|
3
|
+
require "rubocop/rake_task"
|
3
4
|
|
4
5
|
Rake::TestTask.new(:test) do |t|
|
5
6
|
t.libs << "test"
|
@@ -7,4 +8,6 @@ Rake::TestTask.new(:test) do |t|
|
|
7
8
|
t.test_files = FileList["test/**/*_test.rb"]
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
|
+
RuboCop::RakeTask.new(:cop)
|
12
|
+
|
13
|
+
task default: %i[cop test]
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "semaph/commands/reload_command"
|
2
|
+
require "semaph/commands/rerun_workflow_command"
|
3
|
+
require "semaph/commands/stop_workflow_command"
|
4
|
+
require "semaph/commands/visit_url_command"
|
5
|
+
|
6
|
+
module Semaph
|
7
|
+
module Commands
|
8
|
+
def self.workflow_commands(shell, workflow)
|
9
|
+
shell.add_command ::Semaph::Commands::RerunWorkflowCommand.new(workflow), "rerun"
|
10
|
+
shell.add_command ::Semaph::Commands::StopWorkflowCommand.new(workflow), "stop"
|
11
|
+
add_open_workflow_command(shell, workflow)
|
12
|
+
add_open_branch_command(shell, workflow)
|
13
|
+
add_github_commands(shell, workflow)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.add_open_workflow_command(shell, workflow)
|
17
|
+
shell.add_command(
|
18
|
+
::Semaph::Commands::VisitUrlCommand.new(
|
19
|
+
"https://#{workflow.project.client.host}/workflows/#{workflow.id}",
|
20
|
+
"browse to workflow",
|
21
|
+
),
|
22
|
+
"open-workflow",
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.add_open_branch_command(shell, workflow)
|
27
|
+
shell.add_command(
|
28
|
+
::Semaph::Commands::VisitUrlCommand.new(
|
29
|
+
"https://#{workflow.project.client.host}/branches/#{workflow.branch_id}",
|
30
|
+
"browse to branch in semaphore",
|
31
|
+
),
|
32
|
+
"open-branch",
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.add_github_commands(shell, workflow)
|
37
|
+
return unless workflow.project.github_url
|
38
|
+
|
39
|
+
add_github_branch(shell, workflow)
|
40
|
+
add_github_commit(shell, workflow)
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.add_github_branch(shell, workflow)
|
44
|
+
shell.add_command(
|
45
|
+
::Semaph::Commands::VisitUrlCommand.new(
|
46
|
+
"#{workflow.project.github_url}/tree/#{workflow.branch}",
|
47
|
+
"browse to the branch in github",
|
48
|
+
),
|
49
|
+
"open-github-branch",
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.add_github_commit(shell, workflow)
|
54
|
+
shell.add_command(
|
55
|
+
::Semaph::Commands::VisitUrlCommand.new(
|
56
|
+
"#{workflow.project.github_url}/commit/#{workflow.sha}",
|
57
|
+
"browse to the commit in github",
|
58
|
+
),
|
59
|
+
"open-github-commit",
|
60
|
+
)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/semaph/model/job.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
1
3
|
module Semaph
|
2
4
|
module Model
|
3
5
|
class Job
|
@@ -20,8 +22,17 @@ module Semaph
|
|
20
22
|
assign_from_block(raw_block)
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
24
|
-
|
25
|
+
def write_log(base)
|
26
|
+
FileUtils.mkdir_p(base)
|
27
|
+
filename = "#{base}/#{id}.log"
|
28
|
+
return filename if File.exist?(filename)
|
29
|
+
|
30
|
+
puts "retrieving log for job #{id}"
|
31
|
+
File.open(filename, "w") do |file|
|
32
|
+
file.puts pipeline.workflow.project.client.job_log(id)
|
33
|
+
end
|
34
|
+
|
35
|
+
filename
|
25
36
|
end
|
26
37
|
|
27
38
|
def description
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require "semaph/formatting"
|
1
2
|
require "semaph/model/pipeline_collection"
|
2
3
|
|
3
4
|
module Semaph
|
@@ -9,11 +10,15 @@ module Semaph
|
|
9
10
|
@project = project
|
10
11
|
@raw = raw
|
11
12
|
@id = raw["wf_id"]
|
12
|
-
@sha = raw["commit_sha"]
|
13
|
-
@commit = @sha.slice(0..10)
|
14
13
|
@created_at = Time.at(raw["created_at"]["seconds"].to_i)
|
15
14
|
@branch = raw["branch_name"]
|
16
15
|
@branch_id = raw["branch_id"]
|
16
|
+
extract_git_details
|
17
|
+
end
|
18
|
+
|
19
|
+
def extract_git_details
|
20
|
+
@sha = raw["commit_sha"]
|
21
|
+
@commit = @sha.slice(0..10)
|
17
22
|
@commit = `git log -n 1 --format="%h %an %s" #{sha}`.chomp if `git cat-file -t #{sha} 2>&1`.chomp == "commit"
|
18
23
|
end
|
19
24
|
|
@@ -27,6 +32,14 @@ module Semaph
|
|
27
32
|
Workflow.new(project, workflow_response["workflow"])
|
28
33
|
end
|
29
34
|
|
35
|
+
def description
|
36
|
+
[
|
37
|
+
Semaph::Formatting.time(created_at),
|
38
|
+
branch,
|
39
|
+
commit,
|
40
|
+
].join(" ")
|
41
|
+
end
|
42
|
+
|
30
43
|
def stop
|
31
44
|
project.client.stop_workflow(@id)
|
32
45
|
end
|
@@ -13,6 +13,20 @@ module Semaph
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def execute(index_string)
|
16
|
+
base = "tmp/logs/pipeline/#{@job_collection.pipeline.id}"
|
17
|
+
with_job(index_string) do |job|
|
18
|
+
unless job.finished?
|
19
|
+
puts "This job has not finished yet"
|
20
|
+
return
|
21
|
+
end
|
22
|
+
|
23
|
+
system("less #{job.write_log(base)}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def with_job(index_string)
|
16
30
|
index = index_string.to_i - 1
|
17
31
|
|
18
32
|
job = @job_collection.all[index]
|
@@ -22,19 +36,7 @@ module Semaph
|
|
22
36
|
return
|
23
37
|
end
|
24
38
|
|
25
|
-
|
26
|
-
puts "This job has not finished yet"
|
27
|
-
return
|
28
|
-
end
|
29
|
-
|
30
|
-
base = "tmp/logs/pipeline/#{job.pipeline.id}"
|
31
|
-
FileUtils.mkdir_p(base)
|
32
|
-
filename = "#{base}/#{job.id}.log"
|
33
|
-
unless File.exist?(filename)
|
34
|
-
puts "retrieving log for job #{job.id}"
|
35
|
-
File.open(filename, "w") { |file| file.puts job.log }
|
36
|
-
end
|
37
|
-
system("less #{filename}")
|
39
|
+
yield job
|
38
40
|
end
|
39
41
|
end
|
40
42
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require "fileutils"
|
2
|
-
|
3
1
|
module Semaph
|
4
2
|
module Shells
|
5
3
|
module Pipeline
|
@@ -15,17 +13,12 @@ module Semaph
|
|
15
13
|
|
16
14
|
def execute(expression)
|
17
15
|
base = "tmp/logs/pipeline/#{job_collection.pipeline.id}"
|
18
|
-
FileUtils.mkdir_p(base)
|
19
16
|
@job_collection.send(@scope).each do |job|
|
20
17
|
unless job.finished?
|
21
18
|
puts "skipping incomplete job #{job.id}"
|
22
19
|
next
|
23
20
|
end
|
24
|
-
|
25
|
-
unless File.exist?(filename)
|
26
|
-
puts "retrieving log for job #{job.id}"
|
27
|
-
File.open(filename, "w") { |file| file.puts job.log }
|
28
|
-
end
|
21
|
+
job.write_log(base)
|
29
22
|
end
|
30
23
|
system("ag #{expression} #{base} | less")
|
31
24
|
end
|
@@ -2,7 +2,7 @@ module Semaph
|
|
2
2
|
module Shells
|
3
3
|
module Pipeline
|
4
4
|
class JobsPollCommand
|
5
|
-
attr_reader :usage, :help
|
5
|
+
attr_reader :usage, :help, :job_collection
|
6
6
|
|
7
7
|
def initialize(job_collection)
|
8
8
|
@job_collection = job_collection
|
@@ -11,25 +11,50 @@ module Semaph
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def execute(_whatever)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
failed_jobs = @job_collection.failed
|
19
|
-
if failed_jobs.count.positive?
|
20
|
-
puts "Some jobs have already failed:"
|
21
|
-
failed_jobs.each { |job| puts job.description }
|
22
|
-
`terminal-notifier -group semaph -message "#{failed_jobs.count} jobs have failed" -title "Job failures"` if @can_notify
|
14
|
+
while job_collection.incomplete.count.positive?
|
15
|
+
report_incomplete(job_collection.incomplete)
|
16
|
+
if job_collection.failed.count.positive?
|
17
|
+
report_failures(job_collection.failed)
|
23
18
|
return
|
24
19
|
end
|
25
20
|
sleep 20
|
26
|
-
|
27
|
-
incomplete_jobs = @job_collection.incomplete
|
21
|
+
job_collection.reload
|
28
22
|
end
|
29
|
-
|
23
|
+
report_final
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def report_final
|
29
|
+
job_collection.all.each_with_index do |job, index|
|
30
30
|
puts "#{index + 1} #{job.description}"
|
31
31
|
end
|
32
|
-
|
32
|
+
failed_job_count = job_collection.failed.count
|
33
|
+
notify(
|
34
|
+
"Workflow completed",
|
35
|
+
"#{job_collection.pipeline.workflow.description} completed with #{failed_job_count} failed jobs",
|
36
|
+
failed_job_count.positive?,
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
def report_incomplete(incomplete_jobs)
|
41
|
+
puts "polling #{job_collection.pipeline.workflow.description}"
|
42
|
+
puts "#{incomplete_jobs.count} incomplete jobs remaining:"
|
43
|
+
incomplete_jobs.each { |job| puts job.description }
|
44
|
+
end
|
45
|
+
|
46
|
+
def report_failures(failed_jobs)
|
47
|
+
puts "Some jobs have failed:"
|
48
|
+
failed_jobs.each { |job| puts job.description }
|
49
|
+
notify("Job Failures", "#{failed_jobs.count} jobs have failed", true)
|
50
|
+
end
|
51
|
+
|
52
|
+
def notify(title, message, failed)
|
53
|
+
return unless @can_notify
|
54
|
+
|
55
|
+
sound = failed ? "basso" : "blow"
|
56
|
+
|
57
|
+
`terminal-notifier -group semaph -message "#{message}" -title "#{title}" -sound #{sound}`
|
33
58
|
end
|
34
59
|
end
|
35
60
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
require "semaph/commands
|
2
|
-
require "semaph/commands/rerun_workflow_command"
|
1
|
+
require "semaph/commands"
|
3
2
|
require "semaph/shells/pipeline/jobs_list_command"
|
4
3
|
require "semaph/shells/pipeline/job_log_command"
|
5
4
|
require "semaph/shells/pipeline/job_log_grep_command"
|
@@ -16,6 +15,8 @@ module Semaph
|
|
16
15
|
|
17
16
|
def initialize(pipeline)
|
18
17
|
@pipeline = pipeline
|
18
|
+
workflow = pipeline.workflow
|
19
|
+
project = workflow.project
|
19
20
|
@prompt = "🏗 #{project.client.name} #{project.name} #{workflow.id} #{pipeline.yaml} > "
|
20
21
|
add_commands
|
21
22
|
@jobs_list_command.execute("")
|
@@ -23,77 +24,20 @@ module Semaph
|
|
23
24
|
|
24
25
|
private
|
25
26
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
pipeline.workflow
|
32
|
-
end
|
33
|
-
|
34
|
-
def job_collection
|
35
|
-
pipeline.job_collection
|
27
|
+
def add_commands
|
28
|
+
add_command ::Semaph::Commands::ReloadCommand.new, "reload" if ENV["SEMAPH_RELOAD"]
|
29
|
+
workflow = pipeline.workflow
|
30
|
+
::Semaph::Commands.workflow_commands(self, workflow)
|
31
|
+
add_job_collection_commands(pipeline.job_collection)
|
36
32
|
end
|
37
33
|
|
38
|
-
def
|
34
|
+
def add_job_collection_commands(job_collection)
|
39
35
|
@jobs_list_command = JobsListCommand.new(job_collection)
|
40
36
|
add_command @jobs_list_command, "list-jobs", "ls"
|
41
37
|
add_command JobsPollCommand.new(job_collection), "poll-jobs"
|
42
38
|
add_command JobLogCommand.new(job_collection), "job-log"
|
43
39
|
add_command JobLogGrepCommand.new(job_collection, :all), "grep-all-logs"
|
44
40
|
add_command JobLogGrepCommand.new(job_collection, :failed), "grep-failed-logs"
|
45
|
-
add_command ::Semaph::Commands::RerunWorkflowCommand.new(workflow), "rerun"
|
46
|
-
add_open_branch_command
|
47
|
-
add_open_workflow_command
|
48
|
-
add_github_commands
|
49
|
-
add_command ::Semaph::Commands::ReloadCommand.new, "reload" if ENV["SEMAPH_RELOAD"]
|
50
|
-
end
|
51
|
-
|
52
|
-
def add_open_workflow_command
|
53
|
-
add_command(
|
54
|
-
::Semaph::Commands::VisitUrlCommand.new(
|
55
|
-
"https://#{project.client.host}/workflows/#{workflow.id}",
|
56
|
-
"browse to workflow",
|
57
|
-
),
|
58
|
-
"open-workflow",
|
59
|
-
)
|
60
|
-
end
|
61
|
-
|
62
|
-
def add_open_branch_command
|
63
|
-
add_command(
|
64
|
-
::Semaph::Commands::VisitUrlCommand.new(
|
65
|
-
"https://#{project.client.host}/branches/#{workflow.branch_id}",
|
66
|
-
"browse to branch in semaphore",
|
67
|
-
),
|
68
|
-
"open-branch",
|
69
|
-
)
|
70
|
-
end
|
71
|
-
|
72
|
-
def add_github_commands
|
73
|
-
return unless workflow.project.github_url
|
74
|
-
|
75
|
-
add_github_branch
|
76
|
-
add_github_commit
|
77
|
-
end
|
78
|
-
|
79
|
-
def add_github_branch
|
80
|
-
add_command(
|
81
|
-
::Semaph::Commands::VisitUrlCommand.new(
|
82
|
-
"#{workflow.project.github_url}/tree/#{workflow.branch}",
|
83
|
-
"browse to the branch in github",
|
84
|
-
),
|
85
|
-
"open-github-branch",
|
86
|
-
)
|
87
|
-
end
|
88
|
-
|
89
|
-
def add_github_commit
|
90
|
-
add_command(
|
91
|
-
::Semaph::Commands::VisitUrlCommand.new(
|
92
|
-
"#{workflow.project.github_url}/commit/#{workflow.sha}",
|
93
|
-
"browse to the commit in github",
|
94
|
-
),
|
95
|
-
"open-github-commit",
|
96
|
-
)
|
97
41
|
end
|
98
42
|
end
|
99
43
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require "semaph/formatting"
|
2
|
-
|
3
1
|
module Semaph
|
4
2
|
module Shells
|
5
3
|
module Project
|
@@ -17,20 +15,9 @@ module Semaph
|
|
17
15
|
@workflow_collection.all.each_with_index do |workflow, index|
|
18
16
|
next unless workflow.branch.include?(branch)
|
19
17
|
|
20
|
-
puts
|
18
|
+
puts "#{index + 1} #{workflow.description}"
|
21
19
|
end
|
22
20
|
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def description(index, workflow)
|
27
|
-
[
|
28
|
-
index + 1,
|
29
|
-
Semaph::Formatting.time(workflow.created_at),
|
30
|
-
workflow.branch,
|
31
|
-
workflow.commit,
|
32
|
-
].join(" ")
|
33
|
-
end
|
34
21
|
end
|
35
22
|
end
|
36
23
|
end
|
@@ -1,7 +1,4 @@
|
|
1
|
-
require "semaph/commands
|
2
|
-
require "semaph/commands/rerun_workflow_command"
|
3
|
-
require "semaph/commands/stop_workflow_command"
|
4
|
-
require "semaph/commands/visit_url_command"
|
1
|
+
require "semaph/commands"
|
5
2
|
require "semaph/shells/workflow/pipelines_list_command"
|
6
3
|
require "semaph/shells/workflow/pipelines_select_command"
|
7
4
|
require "shell_shock/context"
|
@@ -16,6 +13,7 @@ module Semaph
|
|
16
13
|
|
17
14
|
def initialize(workflow)
|
18
15
|
@workflow = workflow
|
16
|
+
project = @workflow.project
|
19
17
|
@prompt = "🏗 #{project.client.name} #{project.name} #{workflow.id} > "
|
20
18
|
add_commands
|
21
19
|
@list_command.execute("")
|
@@ -23,71 +21,13 @@ module Semaph
|
|
23
21
|
|
24
22
|
private
|
25
23
|
|
26
|
-
def project
|
27
|
-
@workflow.project
|
28
|
-
end
|
29
|
-
|
30
|
-
def pipeline_collection
|
31
|
-
@workflow.pipeline_collection
|
32
|
-
end
|
33
|
-
|
34
24
|
def add_commands
|
25
|
+
pipeline_collection = @workflow.pipeline_collection
|
35
26
|
@list_command = PipelinesListCommand.new(pipeline_collection)
|
36
27
|
add_command @list_command, "list-pipelines", "ls"
|
37
28
|
add_command PipelinesSelectCommand.new(pipeline_collection), "select-pipeline", "cd"
|
38
|
-
add_command ::Semaph::Commands::RerunWorkflowCommand.new(workflow), "rerun"
|
39
|
-
add_command ::Semaph::Commands::StopWorkflowCommand.new(workflow), "stop"
|
40
|
-
add_open_branch_command
|
41
|
-
add_open_workflow_command
|
42
|
-
add_github_commands
|
43
29
|
add_command ::Semaph::Commands::ReloadCommand.new, "reload" if ENV["SEMAPH_RELOAD"]
|
44
|
-
|
45
|
-
|
46
|
-
def add_open_workflow_command
|
47
|
-
add_command(
|
48
|
-
::Semaph::Commands::VisitUrlCommand.new(
|
49
|
-
"https://#{project.client.host}/workflows/#{workflow.id}",
|
50
|
-
"browse to workflow",
|
51
|
-
),
|
52
|
-
"open-workflow",
|
53
|
-
)
|
54
|
-
end
|
55
|
-
|
56
|
-
def add_open_branch_command
|
57
|
-
add_command(
|
58
|
-
::Semaph::Commands::VisitUrlCommand.new(
|
59
|
-
"https://#{project.client.host}/branches/#{workflow.branch_id}",
|
60
|
-
"browse to branch in semaphore",
|
61
|
-
),
|
62
|
-
"open-branch",
|
63
|
-
)
|
64
|
-
end
|
65
|
-
|
66
|
-
def add_github_commands
|
67
|
-
return unless workflow.project.github_url
|
68
|
-
|
69
|
-
add_github_branch
|
70
|
-
add_github_commit
|
71
|
-
end
|
72
|
-
|
73
|
-
def add_github_branch
|
74
|
-
add_command(
|
75
|
-
::Semaph::Commands::VisitUrlCommand.new(
|
76
|
-
"#{workflow.project.github_url}/tree/#{workflow.branch}",
|
77
|
-
"browse to the branch in github",
|
78
|
-
),
|
79
|
-
"open-github-branch",
|
80
|
-
)
|
81
|
-
end
|
82
|
-
|
83
|
-
def add_github_commit
|
84
|
-
add_command(
|
85
|
-
::Semaph::Commands::VisitUrlCommand.new(
|
86
|
-
"#{workflow.project.github_url}/commit/#{workflow.sha}",
|
87
|
-
"browse to the commit in github",
|
88
|
-
),
|
89
|
-
"open-github-commit",
|
90
|
-
)
|
30
|
+
::Semaph::Commands.workflow_commands(self, workflow)
|
91
31
|
end
|
92
32
|
end
|
93
33
|
end
|
data/lib/semaph/version.rb
CHANGED
data/semaph.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semaph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Ryall
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: api client and shell for api
|
70
84
|
email:
|
71
85
|
- mark@ryall.name
|
@@ -90,6 +104,7 @@ files:
|
|
90
104
|
- exe/semaph
|
91
105
|
- lib/semaph.rb
|
92
106
|
- lib/semaph/api.rb
|
107
|
+
- lib/semaph/commands.rb
|
93
108
|
- lib/semaph/commands/reload_command.rb
|
94
109
|
- lib/semaph/commands/rerun_workflow_command.rb
|
95
110
|
- lib/semaph/commands/stop_workflow_command.rb
|
@@ -129,7 +144,7 @@ metadata:
|
|
129
144
|
homepage_uri: http://github.com/markryall/semaph
|
130
145
|
source_code_uri: http://github.com/markryall/semaph
|
131
146
|
changelog_uri: http://github.com/markryall/semaph
|
132
|
-
post_install_message:
|
147
|
+
post_install_message:
|
133
148
|
rdoc_options: []
|
134
149
|
require_paths:
|
135
150
|
- lib
|
@@ -145,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
160
|
version: '0'
|
146
161
|
requirements: []
|
147
162
|
rubygems_version: 3.1.2
|
148
|
-
signing_key:
|
163
|
+
signing_key:
|
149
164
|
specification_version: 4
|
150
165
|
summary: client for semaphore 2
|
151
166
|
test_files: []
|