git-restart 0.0.1 → 0.0.2.pre.dev
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/bin/git-restart +3 -11
- data/lib/git-restart/runner.rb +16 -48
- data/lib/git-restart/task.rb +9 -38
- metadata +5 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3eb20ef129d1ed50ae3348dc2748756dcd1d3c71
|
4
|
+
data.tar.gz: eef358e9ba6e66df2a32f510066d5cfe26aa1895
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e725a7c1714c65cc4add13a1c852c76e72d9018dc0c4b22477c015772b8d79d658e07819495b76475fa067b1890a1c9796a97ae2acd7f92d26785808cb07c4e9
|
7
|
+
data.tar.gz: 9ac642c7ade58005e9f92ecd3110b64165bde9ad7c3f2e73afe559f3fc9e2bc7107ee86474482b6b6e54d908db0715948b73562efe8792eae0b00d00b659ea62
|
data/bin/git-restart
CHANGED
@@ -5,18 +5,10 @@ require 'git-restart/runner.rb'
|
|
5
5
|
|
6
6
|
puts "Starting runner ..."
|
7
7
|
|
8
|
-
|
9
|
-
target = ".gitrun"
|
10
|
-
ARGV.each do |t|
|
11
|
-
if(File.extname(t) == ".gitrun")
|
12
|
-
target = t;
|
13
|
-
elsif(File.extname(t) == ".gittask")
|
14
|
-
$taskfiles << t;
|
15
|
-
end
|
16
|
-
end
|
8
|
+
target = ARGV[0] | ".gitrun"
|
17
9
|
|
18
|
-
raise ArgumentError, "No valid
|
10
|
+
raise ArgumentError, "No valid task file specified!" unless File.exist? target
|
19
11
|
|
20
12
|
load target
|
21
13
|
|
22
|
-
GitRestart::Task.runner.mqtt.
|
14
|
+
GitRestart::Task.runner.mqtt.lock_and_listen
|
data/lib/git-restart/runner.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
|
2
2
|
require 'mqtt/sub_handler'
|
3
|
-
|
4
3
|
require 'git'
|
5
|
-
require 'octokit'
|
6
4
|
|
7
5
|
require_relative "task.rb"
|
8
6
|
|
@@ -11,16 +9,12 @@ module GitRestart
|
|
11
9
|
attr_accessor :name
|
12
10
|
|
13
11
|
attr_accessor :repo, :branches, :exclude_branches, :start_on
|
14
|
-
attr_accessor :allowed_tasks
|
15
12
|
|
16
13
|
attr_reader :next_tasks
|
17
14
|
attr_reader :current_task_file
|
18
15
|
|
19
|
-
attr_reader :mqtt
|
20
|
-
attr_accessor :octokit
|
21
|
-
|
22
16
|
def current_commit()
|
23
|
-
@git.object("HEAD").sha;
|
17
|
+
@git.object("HEAD^").sha;
|
24
18
|
end
|
25
19
|
def current_branch()
|
26
20
|
@git.current_branch();
|
@@ -29,15 +23,9 @@ module GitRestart
|
|
29
23
|
@current_modified;
|
30
24
|
end
|
31
25
|
|
32
|
-
def initialize(
|
33
|
-
raise ArgumentError, "File list needs to be nil or an Array!" unless (fileList.is_a? Array or fileList.nil?)
|
34
|
-
|
26
|
+
def initialize()
|
35
27
|
GitRestart::Task.runner = self;
|
36
28
|
|
37
|
-
@allowed_tasks = Array.new();
|
38
|
-
@allowed_tasks << fileList if(fileList);
|
39
|
-
@allowed_tasks << $taskfiles unless($taskfiles.empty?)
|
40
|
-
|
41
29
|
@current_tasks = Hash.new();
|
42
30
|
@next_tasks = Hash.new();
|
43
31
|
|
@@ -50,15 +38,16 @@ module GitRestart
|
|
50
38
|
|
51
39
|
yield(self);
|
52
40
|
|
53
|
-
@allowed_tasks.flatten!
|
54
|
-
|
55
41
|
@listenedSub = @mqtt.subscribe_to "GitHub/#{@repo}" do |data|
|
42
|
+
puts "Received data: #{data}"
|
56
43
|
begin
|
57
44
|
data = JSON.parse(data, symbolize_names: true);
|
58
45
|
rescue
|
59
46
|
next;
|
60
47
|
end
|
61
48
|
|
49
|
+
puts "Processing data #{data}"
|
50
|
+
|
62
51
|
next unless data[:branch];
|
63
52
|
if(not @branches.empty?)
|
64
53
|
next unless @branches.include? data[:branch];
|
@@ -66,29 +55,16 @@ module GitRestart
|
|
66
55
|
next if @exclude_branches.include? data[:branch];
|
67
56
|
end
|
68
57
|
|
58
|
+
puts "Queueing data!"
|
59
|
+
|
69
60
|
@branchQueue << data;
|
70
61
|
end
|
71
62
|
|
72
63
|
autostart();
|
73
64
|
_start_task_thread();
|
74
|
-
|
75
|
-
at_exit {
|
76
|
-
_stop_all_tasks();
|
77
|
-
}
|
78
65
|
end
|
79
66
|
|
80
67
|
def update_status(name, newStatus, message = nil)
|
81
|
-
puts "Task #{@name} assumed a new status: #{newStatus}#{message ? " MSG:#{message}" : ""}"
|
82
|
-
|
83
|
-
return unless @octokit;
|
84
|
-
|
85
|
-
begin
|
86
|
-
@octokit.create_status(@repo, current_commit(), newStatus, {
|
87
|
-
context: "#{@name}/#{name}".gsub(" ", "_"),
|
88
|
-
description: message,
|
89
|
-
})
|
90
|
-
rescue
|
91
|
-
end
|
92
68
|
end
|
93
69
|
|
94
70
|
def _start_task_thread()
|
@@ -96,6 +72,8 @@ module GitRestart
|
|
96
72
|
loop do
|
97
73
|
newData = @branchQueue.pop;
|
98
74
|
|
75
|
+
puts "Popped data: #{newData}"
|
76
|
+
|
99
77
|
@current_modified = newData[:touched];
|
100
78
|
_switch_to(newData[:branch], newData[:head_commit]);
|
101
79
|
end
|
@@ -128,28 +106,23 @@ module GitRestart
|
|
128
106
|
t.gsub!(/^\.\//,"");
|
129
107
|
@current_task_file = t;
|
130
108
|
|
131
|
-
|
132
|
-
next unless @allowed_tasks.include? @current_task_file
|
133
|
-
end
|
134
|
-
|
109
|
+
# TODO Add proper error reporting
|
135
110
|
begin
|
136
111
|
load(t);
|
137
112
|
rescue ScriptError, StandardError
|
138
|
-
update_status("File #{t}", :failure, "File could not be parsed!")
|
139
113
|
puts("File #{t} could not be loaded!");
|
140
114
|
rescue GitRestart::TaskValidityError
|
141
|
-
update_status("File #{t}", :failure, "Task-file not configured properly!")
|
142
115
|
puts("Task-File #{t} is not configured properly!");
|
143
116
|
end
|
144
117
|
end
|
145
118
|
|
146
|
-
puts "Finished loading! Next tasks: #{@next_tasks
|
119
|
+
puts "Finished loading! Next tasks are: #{@next_tasks}"
|
147
120
|
end
|
148
121
|
|
149
122
|
def _start_next_tasks()
|
150
123
|
_generate_next_tasks();
|
151
124
|
|
152
|
-
puts "
|
125
|
+
puts "Starting next tasks!"
|
153
126
|
@next_tasks.each do |name, t|
|
154
127
|
next unless t.active;
|
155
128
|
next unless t.triggered?
|
@@ -160,24 +133,19 @@ module GitRestart
|
|
160
133
|
end
|
161
134
|
|
162
135
|
def _switch_to(branch, commit = nil)
|
163
|
-
puts "
|
164
|
-
|
165
|
-
begin
|
166
|
-
@git.fetch();
|
167
|
-
rescue
|
168
|
-
end
|
136
|
+
puts "Switching to branch: #{branch}, commit: #{commit}"
|
137
|
+
@git.fetch();
|
169
138
|
|
170
139
|
if(branch != current_branch())
|
171
140
|
_stop_all_tasks();
|
172
141
|
else
|
173
142
|
_stop_triggered_tasks();
|
174
143
|
end
|
175
|
-
@git.reset_hard();
|
176
144
|
@git.checkout(branch);
|
177
|
-
@git.merge("origin/#{branch}");
|
178
|
-
|
179
145
|
@git.reset_hard(commit);
|
180
146
|
|
147
|
+
@git.merge("origin/#{branch}");
|
148
|
+
|
181
149
|
_start_next_tasks();
|
182
150
|
end
|
183
151
|
|
data/lib/git-restart/task.rb
CHANGED
@@ -17,6 +17,8 @@ module GitRestart
|
|
17
17
|
attr_reader :lastStatus
|
18
18
|
attr_reader :status_message
|
19
19
|
|
20
|
+
attr_reader :mqtt
|
21
|
+
|
20
22
|
def self.runner=(runner)
|
21
23
|
@runner = runner;
|
22
24
|
end
|
@@ -30,9 +32,6 @@ module GitRestart
|
|
30
32
|
def branch()
|
31
33
|
runner().current_branch();
|
32
34
|
end
|
33
|
-
def current_commit()
|
34
|
-
runner().current_commit();
|
35
|
-
end
|
36
35
|
def modified()
|
37
36
|
runner().current_modified();
|
38
37
|
end
|
@@ -70,8 +69,6 @@ module GitRestart
|
|
70
69
|
|
71
70
|
valid?
|
72
71
|
|
73
|
-
@status_file ||= "/tmp/TaskLog_#{@name}_#{current_commit()}";
|
74
|
-
|
75
72
|
if(runner().next_tasks[@name])
|
76
73
|
raise TaskValidityError, "A task of name #{@name} already exists!"
|
77
74
|
else
|
@@ -85,12 +82,8 @@ module GitRestart
|
|
85
82
|
|
86
83
|
@watched.each do |regEx|
|
87
84
|
modified().each do |f|
|
88
|
-
|
89
|
-
|
90
|
-
else
|
91
|
-
next unless f =~ /#{Regexp.quote(@chdir)}(.*)/
|
92
|
-
return true if $1 =~ regEx;
|
93
|
-
end
|
85
|
+
next unless f =~ /#{Regexp.quote(@chdir)}(.*)/
|
86
|
+
return true if $1 =~ regEx;
|
94
87
|
end
|
95
88
|
end
|
96
89
|
|
@@ -107,39 +100,21 @@ module GitRestart
|
|
107
100
|
end
|
108
101
|
end
|
109
102
|
|
110
|
-
def _rm_logfile()
|
111
|
-
if File.exist?("/tmp/TaskLog_#{@name}_#{current_commit()}") then
|
112
|
-
File.delete("/tmp/TaskLog_#{@name}_#{current_commit()}");
|
113
|
-
end
|
114
|
-
end
|
115
|
-
def _get_statusline()
|
116
|
-
return "No status specified" unless File.exist? @status_file
|
117
|
-
|
118
|
-
sMsg = ""
|
119
|
-
File.open(@status_file, "r") do |sFile|
|
120
|
-
sFile.each_line do |l| sMsg = l; end
|
121
|
-
end
|
122
|
-
|
123
|
-
return sMsg;
|
124
|
-
end
|
125
|
-
|
126
103
|
def _report_status(status, message = nil)
|
127
|
-
|
128
|
-
@status_message = message;
|
104
|
+
@status_message = ""
|
129
105
|
|
130
106
|
return unless @report_status
|
131
107
|
|
132
108
|
runner().update_status(@name, status, message);
|
109
|
+
puts "Task #{@name} assumed a new status: #{status}#{message ? " MSG:#{message}" : ""}"
|
133
110
|
end
|
134
111
|
private :_report_status
|
135
112
|
|
136
113
|
def start()
|
137
114
|
puts "Starting Task: #{@name}"
|
138
115
|
|
139
|
-
if @targets.empty?
|
140
|
-
|
141
|
-
return
|
142
|
-
end
|
116
|
+
return if @targets.empty?
|
117
|
+
sleep 0.01
|
143
118
|
|
144
119
|
@executionThread = Thread.new do
|
145
120
|
_report_status(:pending);
|
@@ -147,9 +122,8 @@ module GitRestart
|
|
147
122
|
@targets.each do |target|
|
148
123
|
@statuschange_mutex.synchronize {
|
149
124
|
break if @exiting
|
150
|
-
_rm_logfile();
|
151
125
|
options = {
|
152
|
-
[:out, :err] => "/
|
126
|
+
[:in, :out, :err] => "/dev/null"
|
153
127
|
}
|
154
128
|
options[:chdir] = @chdir if @chdir
|
155
129
|
|
@@ -165,14 +139,11 @@ module GitRestart
|
|
165
139
|
|
166
140
|
if(@lastStatus == 0)
|
167
141
|
_report_status(:success);
|
168
|
-
_rm_logfile();
|
169
142
|
elsif(!@exiting || @expect_clean_exit)
|
170
143
|
_report_status(:failure);
|
171
144
|
end
|
172
145
|
end
|
173
146
|
@executionThread.abort_on_exception = true;
|
174
|
-
|
175
|
-
sleep 0.01
|
176
147
|
end
|
177
148
|
|
178
149
|
def stop()
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-restart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2.pre.dev
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xasin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mqtt-sub_handler
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.4'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: octokit
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '4.0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '4.0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: minitest
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,8 +84,7 @@ description: |-
|
|
98
84
|
This gem can be used to (re)start scripts whenever a GitHub push event is recorded.
|
99
85
|
The exit status of scripts can be monitored, and a failure can be sent back, making this capable of running simple tests too!
|
100
86
|
email:
|
101
|
-
executables:
|
102
|
-
- git-restart
|
87
|
+
executables: []
|
103
88
|
extensions: []
|
104
89
|
extra_rdoc_files: []
|
105
90
|
files:
|
@@ -121,9 +106,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
121
106
|
version: '0'
|
122
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
108
|
requirements:
|
124
|
-
- - "
|
109
|
+
- - ">"
|
125
110
|
- !ruby/object:Gem::Version
|
126
|
-
version:
|
111
|
+
version: 1.3.1
|
127
112
|
requirements: []
|
128
113
|
rubyforge_project:
|
129
114
|
rubygems_version: 2.6.14.1
|