agile_notifier 2.1.4 → 3.0.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/README.md +19 -3
- data/agile_notifier.gemspec +1 -1
- data/lib/agile_notifier.rb +1 -1
- data/lib/agile_notifier/ci.rb +11 -29
- data/lib/agile_notifier/commander.rb +21 -0
- data/lib/agile_notifier/configuration.rb +7 -5
- data/lib/agile_notifier/github.rb +1 -0
- data/lib/agile_notifier/jenkins.rb +12 -15
- data/lib/agile_notifier/judger.rb +3 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4d765e04744af371120ff8963b4435a5cded507
|
4
|
+
data.tar.gz: 3070c25de18589db4dde7e1154553c7911ebc036
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3848b5b30accf802fcd4e8ae8d93431852ffa3a9eeb87e671e04d5cef3af9b42a185bc3dca5d2c590a7e988410b9a7298521ffe1d4369ea15cb99b6588d001a3
|
7
|
+
data.tar.gz: 5570e0b772767c7c74a995b61e36089bb3c906283c6f294a0aa991b63717d988421eacf9c8860d239e5f79d3823e3e9266cfeea9041734f799a75d26bcd35598
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ The joy of this tool is that, whenever a build fails, it can blame whoever submi
|
|
13
13
|
|
14
14
|
Have fun with it!
|
15
15
|
|
16
|
-
## Examples of Usage
|
16
|
+
## Examples of Usage
|
17
17
|
```ruby
|
18
18
|
AgileNotifier::Configuration.set do
|
19
19
|
ci_url 'http://x.x.x.x:8080'
|
@@ -29,7 +29,7 @@ AgileNotifier::Configuration.set do
|
|
29
29
|
scm_get 'Github', enterprise: true
|
30
30
|
|
31
31
|
# for non-enterprise version
|
32
|
-
# scm_url 'https://
|
32
|
+
# scm_url 'https://github.com'
|
33
33
|
# scm_repo user: 'your_user_name', repo: 'your_repository_name'
|
34
34
|
# scm_get 'Github'
|
35
35
|
|
@@ -49,7 +49,23 @@ AgileNotifier::Configuration.set do
|
|
49
49
|
end
|
50
50
|
```
|
51
51
|
|
52
|
-
##
|
52
|
+
## Deploy to CI
|
53
|
+
First create a config file based on above DSL syntax. (let's say the file name is [*your_own_config*].rb)
|
54
|
+
### Jenkins
|
55
|
+
* The **easy** way:
|
56
|
+
* Create [*The_Notification_Job*]
|
57
|
+
* Configure -> Build -> Execute shell:
|
58
|
+
* ```ruby [your_own_config].rb```
|
59
|
+
* Your Main Job
|
60
|
+
* Configure -> Add post-build action -> Build other projects -> Projects to build -> [*The_Notification_Job*]
|
61
|
+
* The **hard** but **precise** way: (imagine there are a few developers pushing all the time, which makes your CI build one after one without rest)
|
62
|
+
* Create [The_Notification_Job]
|
63
|
+
* Configure -> Build -> Execute shell:
|
64
|
+
* ```ruby [your_own_config].rb -b $UPSTREAM_BUILD_NUMBER```
|
65
|
+
* Your Main Job
|
66
|
+
* Configure -> Add post-build action -> Trigger parameterized build on other projects -> Projects to build -> [*The_Notification_Job*] -> Add Parameters -> Predefined parameters -> ```UPSTREAM_BUILD_NUMBER=${BUILD_NUMBER}```
|
67
|
+
|
68
|
+
## Notes
|
53
69
|
* TTS (Text To Speech) on Linux used here has two dependencies:
|
54
70
|
|
55
71
|
* TTS service benefits from online MARY TTS Web Client: http://mary.dfki.de:59125/ While it has limited languages support, please check before use.
|
data/agile_notifier.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.name = 'agile_notifier'
|
8
8
|
s.version = AgileNotifier::VERSION
|
9
9
|
s.license = 'MIT'
|
10
|
-
s.date = '2015-
|
10
|
+
s.date = '2015-09-16'
|
11
11
|
s.summary = %q{agile_notifier alerts you via making wonderful noises when your Continuous Integration status changes.}
|
12
12
|
s.description = %q{agile_notifier alerts you via making wonderful noises when your Continuous Integration status changes. It totally makes software development more agile and more fun.}
|
13
13
|
s.authors = ['Jing Li']
|
data/lib/agile_notifier.rb
CHANGED
data/lib/agile_notifier/ci.rb
CHANGED
@@ -6,12 +6,7 @@ module AgileNotifier
|
|
6
6
|
include Servable
|
7
7
|
alias_method :original_is_available?, :is_available?
|
8
8
|
|
9
|
-
attr_accessor :
|
10
|
-
|
11
|
-
def initialize(url, *jobs)
|
12
|
-
@url = url
|
13
|
-
jobs.empty? ? @jobs = get_all_jobs : @jobs = jobs
|
14
|
-
end
|
9
|
+
attr_accessor :job
|
15
10
|
|
16
11
|
def is_available?
|
17
12
|
original_is_available?(@url)
|
@@ -21,41 +16,24 @@ module AgileNotifier
|
|
21
16
|
raise(NotImplementedError, "Abstract method [#{__method__}] is called, please implement", caller)
|
22
17
|
end
|
23
18
|
|
24
|
-
def job
|
25
|
-
if @jobs.size == 1
|
26
|
-
return @jobs.first
|
27
|
-
else
|
28
|
-
raise('There are more than one job, please use method [jobs] instead of [job]')
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
19
|
class Job
|
33
20
|
attr_accessor :name, :url
|
34
|
-
attr_reader :
|
21
|
+
attr_reader :current_build
|
35
22
|
|
36
|
-
def initialize(name, url)
|
23
|
+
def initialize(name, url, build_number = nil)
|
37
24
|
@name = name
|
38
25
|
@url = url
|
39
|
-
@
|
40
|
-
@penultimate_build = get_penultimate_build
|
26
|
+
@current_build = build_number.nil? ? get_last_build : get_specific_build(build_number.to_i)
|
41
27
|
end
|
42
|
-
|
43
|
-
def
|
28
|
+
|
29
|
+
def get_specific_build(build_number)
|
44
30
|
raise(NotImplementedError, "Abstract method [#{__method__}] is called, please implement", caller)
|
45
31
|
end
|
46
32
|
|
47
|
-
def
|
33
|
+
def get_last_build
|
48
34
|
raise(NotImplementedError, "Abstract method [#{__method__}] is called, please implement", caller)
|
49
35
|
end
|
50
36
|
|
51
|
-
def update_last_build
|
52
|
-
@last_build = get_last_build
|
53
|
-
end
|
54
|
-
|
55
|
-
def update_penultimate_build
|
56
|
-
@penultimate_build = get_penultimate_build
|
57
|
-
end
|
58
|
-
|
59
37
|
class Build
|
60
38
|
include Trackable
|
61
39
|
|
@@ -67,6 +45,10 @@ module AgileNotifier
|
|
67
45
|
@result = get_result
|
68
46
|
@revision = get_revision
|
69
47
|
end
|
48
|
+
|
49
|
+
def is_building?
|
50
|
+
raise(NotImplementedError, "Abstract method [#{__method__}] is called, please implement", caller)
|
51
|
+
end
|
70
52
|
|
71
53
|
def get_result
|
72
54
|
raise(NotImplementedError, "Abstract method [#{__method__}] is called, please implement", caller)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module AgileNotifier
|
4
|
+
class Commander
|
5
|
+
class << self
|
6
|
+
def order(args)
|
7
|
+
options = {}
|
8
|
+
OptionParser.new do |opts|
|
9
|
+
opts.banner = "Usage: #{caller[-1].match(/\S+\.rb/)} [options]"
|
10
|
+
|
11
|
+
opts.on('-b', '--build-number [BUILD_NUMBER]', OptionParser::DecimalInteger, 'Trigger by specific build') do |build_number|
|
12
|
+
options[:build_number] = build_number
|
13
|
+
end
|
14
|
+
end.parse!
|
15
|
+
options
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private_class_method :new
|
20
|
+
end
|
21
|
+
end
|
@@ -5,6 +5,8 @@ module AgileNotifier
|
|
5
5
|
def initialize(&blk)
|
6
6
|
@current_module = Object.const_get(self.class.to_s.split('::').first)
|
7
7
|
@its_args = Hash.new
|
8
|
+
options = Commander.order(ARGV)
|
9
|
+
@build_number = options[:build_number]
|
8
10
|
instance_eval(&blk)
|
9
11
|
end
|
10
12
|
|
@@ -19,12 +21,11 @@ module AgileNotifier
|
|
19
21
|
end
|
20
22
|
|
21
23
|
def ci_job(job)
|
22
|
-
@
|
23
|
-
@ci_jobs.push(job)
|
24
|
+
@ci_job = job
|
24
25
|
end
|
25
26
|
|
26
27
|
def ci_get(ci_type)
|
27
|
-
@ci = @current_module.const_get(ci_type).new(@ci_url,
|
28
|
+
@ci = @current_module.const_get(ci_type).new(@ci_url, @ci_job, @build_number)
|
28
29
|
end
|
29
30
|
|
30
31
|
def scm_url(url)
|
@@ -100,8 +101,9 @@ module AgileNotifier
|
|
100
101
|
judger_type = judger_type.to_s.downcase
|
101
102
|
composer_method = "#{composer_type}_committer_of_a_commit".intern
|
102
103
|
judger_method = "on_#{judger_type}".intern
|
103
|
-
|
104
|
-
|
104
|
+
build = @ci.job.current_build
|
105
|
+
text = Composer.send(composer_method, repo: @scm.repository, revision: build.revision, language: @language)
|
106
|
+
Judger.send(judger_method, build, text, organize_args)
|
105
107
|
end
|
106
108
|
|
107
109
|
def alert_on_wip
|
@@ -14,18 +14,11 @@ module AgileNotifier
|
|
14
14
|
def self.get_value(key, url)
|
15
15
|
get_value_of_key(key, url.gsub(/\/$/, '') + JSON_API)
|
16
16
|
end
|
17
|
-
|
18
|
-
def initialize(url,
|
17
|
+
|
18
|
+
def initialize(url, job_name, build_number = nil)
|
19
19
|
@url = url
|
20
|
-
|
21
|
-
|
22
|
-
else
|
23
|
-
@jobs = []
|
24
|
-
names.each do |name|
|
25
|
-
job_url = URI.encode("#{@url}/job/#{name}/")
|
26
|
-
@jobs.push(Job.new(name, job_url))
|
27
|
-
end
|
28
|
-
end
|
20
|
+
job_url = URI.encode("#{@url}/job/#{job_name}/")
|
21
|
+
@job = Job.new(job_name, job_url, build_number)
|
29
22
|
end
|
30
23
|
|
31
24
|
def get_all_jobs
|
@@ -40,17 +33,21 @@ module AgileNotifier
|
|
40
33
|
end
|
41
34
|
|
42
35
|
class Job < CI::Job
|
36
|
+
def get_specific_build(build_number)
|
37
|
+
Build.new(build_number, @url + build_number.to_s + '/')
|
38
|
+
end
|
39
|
+
|
43
40
|
def get_last_build
|
44
41
|
last_build = Jenkins.get_value('lastBuild', @url)
|
45
42
|
last_build.nil? ? nil : Build.new(last_build['number'], last_build['url'])
|
46
43
|
end
|
47
44
|
|
48
|
-
def get_penultimate_build
|
49
|
-
last_build.get_previous_build
|
50
|
-
end
|
51
|
-
|
52
45
|
class Build < CI::Job::Build
|
53
46
|
include Servable
|
47
|
+
|
48
|
+
def is_building?
|
49
|
+
Jenkins.get_value('building', @url)
|
50
|
+
end
|
54
51
|
|
55
52
|
def get_result
|
56
53
|
result = Jenkins.get_value('result', @url)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: agile_notifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jing Li
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -87,6 +87,7 @@ files:
|
|
87
87
|
- agile_notifier.gemspec
|
88
88
|
- lib/agile_notifier.rb
|
89
89
|
- lib/agile_notifier/ci.rb
|
90
|
+
- lib/agile_notifier/commander.rb
|
90
91
|
- lib/agile_notifier/composer.rb
|
91
92
|
- lib/agile_notifier/configuration.rb
|
92
93
|
- lib/agile_notifier/git.rb
|