gh-events 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 816a9b68c1d37a66b90de0a48614bd57b94715faa53a5edd8245a2fe5e5a2d5b
4
- data.tar.gz: 752dc0d3e42566b280b75fc39cacf4c456b4c16e7132366516fe5dd77166b138
3
+ metadata.gz: e1cff1386c5673a98772cf99e50149162e0f010f65c8e59a6bb40779fbc10233
4
+ data.tar.gz: fede3370b5bd12f80c75a6cc4b239e324df11bbc0d970419ef4a44eab3f4a7bc
5
5
  SHA512:
6
- metadata.gz: 3ee613e1900e42bfe45554e8d4cf36800bcb6fb14524d24faf89b2d8a20213603960f5f1c7c0ad47149bf51bd3bd48f5b0da5473e9dbb75e26a88ad31efc95d3
7
- data.tar.gz: f273b92f4fe2124555e42c5c60391e75a6c7d941825047ea6ea1613b2324036f44c536763f7c9da36a93c7d3f2cea83687f4cd0ba09f16020b24801a8d41791c
6
+ metadata.gz: 70e2bd1df73c6641d6645d40804e7526de092512fd068d02924f7d8a5966d1cb2a120a6d3e38894f77ee4cb390992dfc63b3db81c6f10c401cc620fed61b9944
7
+ data.tar.gz: 8dd77aaaed11e14dccb267a86f9ce211998cd91bb45de3c8db8f53dec76d8fbc837e45d9a4a0551489ac79a14f6e50f9f9f64ebc7e9984c789b037ceed9fd489
@@ -0,0 +1,60 @@
1
+ # Ruby CircleCI 2.0 configuration file
2
+ #
3
+ # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
+ #
5
+ version: 2
6
+ jobs:
7
+ build:
8
+ docker:
9
+ # specify the version you desire here
10
+ - image: circleci/ruby:2.6.5
11
+
12
+ # Specify service dependencies here if necessary
13
+ # CircleCI maintains a library of pre-built images
14
+ # documented at https://circleci.com/docs/2.0/circleci-images/
15
+ # - image: circleci/postgres:9.4
16
+
17
+ working_directory: ~/repo
18
+
19
+ steps:
20
+ - checkout
21
+
22
+ # Download and cache dependencies
23
+ - restore_cache:
24
+ keys:
25
+ - v1-dependencies-{{ checksum "Gemfile.lock" }}
26
+ # fallback to using the latest cache if no exact match is found
27
+ - v1-dependencies-
28
+
29
+ - run:
30
+ name: install dependencies
31
+ command: |
32
+ gem install bundler:2.0.2
33
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
34
+
35
+ - save_cache:
36
+ paths:
37
+ - ./vendor/bundle
38
+ key: v1-dependencies-{{ checksum "Gemfile.lock" }}
39
+
40
+ # run tests!
41
+ - run:
42
+ name: run tests
43
+ command: |
44
+ mkdir /tmp/test-results
45
+ TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
46
+ circleci tests split --split-by=timings)"
47
+
48
+ bundle exec rspec \
49
+ --format progress \
50
+ --format RspecJunitFormatter \
51
+ --out /tmp/test-results/rspec.xml \
52
+ --format progress \
53
+ $TEST_FILES
54
+
55
+ # collect reports
56
+ - store_test_results:
57
+ path: /tmp/test-results
58
+ - store_artifacts:
59
+ path: /tmp/test-results
60
+ destination: test-results
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gh-events (0.7.0)
4
+ gh-events (0.8.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -21,6 +21,8 @@ GEM
21
21
  diff-lcs (>= 1.2.0, < 2.0)
22
22
  rspec-support (~> 3.9.0)
23
23
  rspec-support (3.9.0)
24
+ rspec_junit_formatter (0.4.1)
25
+ rspec-core (>= 2, < 4, != 2.12.0)
24
26
 
25
27
  PLATFORMS
26
28
  ruby
@@ -30,6 +32,7 @@ DEPENDENCIES
30
32
  gh-events!
31
33
  rake (~> 10.0)
32
34
  rspec (~> 3.0)
35
+ rspec_junit_formatter (~> 0.4)
33
36
 
34
37
  BUNDLED WITH
35
38
  2.0.2
@@ -5,4 +5,4 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  require 'gh/events'
7
7
 
8
- puts GH::Events::Slack.translate(ARGF.read)
8
+ puts GH::Events::Text.translate(STDIN.read, ARGV.first)
data/exe/gh-events CHANGED
@@ -6,6 +6,10 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
6
  require 'gh/events'
7
7
 
8
8
  ARGV.each do |file|
9
- type = GH::Events.typeof(File.read(file))
9
+ begin
10
+ type = GH::Events.typeof(File.read(file))
11
+ rescue
12
+ type = 'error'
13
+ end
10
14
  puts "#{file}: #{type}"
11
15
  end
data/gh-events.gemspec CHANGED
@@ -38,4 +38,5 @@ Gem::Specification.new do |spec|
38
38
  spec.add_development_dependency "bundler", "~> 2.0"
39
39
  spec.add_development_dependency "rake", "~> 10.0"
40
40
  spec.add_development_dependency "rspec", "~> 3.0"
41
+ spec.add_development_dependency "rspec_junit_formatter", "~> 0.4"
41
42
  end
@@ -3,7 +3,7 @@ require 'erb'
3
3
  require 'ostruct'
4
4
  require 'json'
5
5
 
6
- module GH::Events::Slack
6
+ module GH::Events::Text
7
7
 
8
8
  extend self
9
9
 
@@ -11,7 +11,11 @@ module GH::Events::Slack
11
11
  # be helpful when filtering events
12
12
  ASPECTS = %i[type action state]
13
13
 
14
- def translate(payload)
14
+ def translate(payload, dict)
15
+ dict ||= 'plain'
16
+
17
+ templates = YAML.load_file(templates_file(dict))
18
+
15
19
  event = JSON.parse(payload, object_class: OpenStruct)
16
20
  type = GH::Events.typeof(event).to_s
17
21
 
@@ -38,7 +42,7 @@ module GH::Events::Slack
38
42
  template = _result[:ts].compact.last
39
43
 
40
44
  # if the event was set to `false` abort
41
- exit(1) if template === false
45
+ return nil if template === false
42
46
 
43
47
  # if there is no template use a default
44
48
  template ||= templates['no_template']
@@ -46,12 +50,14 @@ module GH::Events::Slack
46
50
  render(template, event)
47
51
  end
48
52
 
49
- def templates_file
50
- File.expand_path(File.join(%w(.. .. .. .. res slack.yml)), __FILE__)
51
- end
53
+ def templates_file(dict)
54
+ preset = File.expand_path(File.join(%w(.. .. .. .. res) << "#{dict}.yml"), __FILE__)
55
+ return preset if File.exists?(preset)
56
+
57
+ return dict if File.exists?(dict.to_s)
52
58
 
53
- def templates
54
- @templates ||= YAML.load_file(templates_file)
59
+ warn "Could not find dict file: #{dict}"
60
+ exit(1)
55
61
  end
56
62
 
57
63
  class ErbBinding < OpenStruct
@@ -1,5 +1,5 @@
1
1
  module GH
2
2
  module Events
3
- VERSION = "0.7.0"
3
+ VERSION = "0.8.0"
4
4
  end
5
5
  end
data/lib/gh/events.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "gh/events/version"
2
- require "gh/events/slack"
2
+ require "gh/events/text"
3
+ require 'hash'
3
4
 
4
5
  require 'yaml'
5
6
  require 'ostruct'
@@ -16,7 +17,8 @@ module GH
16
17
  def typeof(payload)
17
18
  payload = JSON.parse(payload) if payload.is_a?(String)
18
19
  payload = payload.marshal_dump if payload.is_a?(OpenStruct)
19
- keys = payload.keys.map(&:to_s)
20
+ payload = payload.deep_stringify_keys
21
+ keys = payload.keys
20
22
  HEURISTICS.each do |type, characteristics|
21
23
  # puts ("-" * 30) + " #{type}"
22
24
 
data/lib/hash.rb ADDED
@@ -0,0 +1,9 @@
1
+ class Hash
2
+ def deep_stringify_keys
3
+ Hash.new.tap do |h|
4
+ each do |k, v|
5
+ h[k.to_s] = v.is_a?(Hash) ? v.deep_stringify_keys : v
6
+ end
7
+ end
8
+ end
9
+ end
data/res/events.yml CHANGED
@@ -8,7 +8,7 @@ watch: # 49
8
8
  - action
9
9
  - repository
10
10
  exactly:
11
- :action: started
11
+ action: started
12
12
 
13
13
  # check_run # 1
14
14
 
data/res/plain.yml ADDED
@@ -0,0 +1,118 @@
1
+ # All refs are unified. So all events have `ref` and `ref_type`.
2
+ # Additionally all events have `type` and `stype`.
3
+
4
+ push: >-
5
+ [<%= repository.full_name %>]
6
+ <%= sender.login %> <%= forced ? 'force-' : '' %>pushed
7
+ <% if ref_type == 'branch' %><%= num = size || commits.count %> commit<%= num > 1 ? 's' : '' %> to<% end %>
8
+ <%= ref_type %> `<%= ref %>`
9
+
10
+ commit_comment: >-
11
+ [<%= repository.full_name %>]
12
+ <%= sender.login %>
13
+ commented on
14
+ commit `<%= comment.commit_id %>`>: "<%= comment.body %>"
15
+
16
+ create: >-
17
+ [<%= repository.full_name %>]
18
+ <%= sender.login %>
19
+ created
20
+ <%= ref_type %> `<%= ref %>`
21
+
22
+ delete: >-
23
+ [<%= repository.full_name %>]
24
+ <%= sender.login %>
25
+ deleted
26
+ <%= ref_type %> `<%= ref %>`
27
+
28
+ issue_comment: >-
29
+ [<%= repository.full_name %>]
30
+ <%= sender.login %>
31
+ commented
32
+ on issue "<%= issue.title %>": <%= comment.body %>
33
+
34
+ issues: >-
35
+ [<%= repository.full_name %>]
36
+ <%= sender.login %>
37
+ <%= action %>
38
+ issue "<%= issue.title %>"
39
+
40
+ issues.opened: >-
41
+ [<%= repository.full_name %>]
42
+ <%= sender.login %>
43
+ create the issue
44
+ "<%= issue.title %>": <%= repository.html_url %>
45
+
46
+ issues.labeled: >-
47
+ [<%= repository.full_name %>]
48
+ <%= sender.login %>
49
+ labeled
50
+ issue "<%= issue.title %>"
51
+ as `<%= label.name %>`
52
+
53
+ pull_request: >-
54
+ [<%= repository.full_name %>]
55
+ <%= sender.login %>
56
+ <%= action %>
57
+ PR "<%= pull_request.title %>"
58
+
59
+ pull_request.opened: >-
60
+ [<%= repository.full_name %>]
61
+ <%= sender.login %>
62
+ opened
63
+ PR <%= pull_request.title %>: <%= pull_request.body %>
64
+
65
+ pull_request.labeled: >-
66
+ [<%= repository.full_name %>]
67
+ <%= sender.login %>
68
+ labeled
69
+ PR "<%= pull_request.title %>"
70
+ as `<%= label.name %>`
71
+
72
+ pull_request_review_comment: >-
73
+ [<%= repository.full_name %>]
74
+ <%= sender.login %>
75
+ reviewed: <%= comment.body %>
76
+
77
+ star: >-
78
+ [<%= repository.full_name %>]
79
+ <%= sender.login %>
80
+ <%= action == 'created' ? 'starred' : 'unstarred' %>
81
+ <%= repository.full_name %>
82
+ (<%= repository.stargazers_count %>)
83
+
84
+ # Ignore other status udpates than CircleCI failures for the moment
85
+ status: false
86
+
87
+ status.failure: >-
88
+ [<%= repository.full_name %>]
89
+ CircleCI build failed
90
+ for commit "<%= commit.commit.message %>"
91
+ by "<%= sender.login %>"
92
+
93
+ fork: >-
94
+ [<%= repository.full_name %>]
95
+ <%= sender.login %>
96
+ forked <%= repository.full_name %>
97
+ (<%= repository.forks_count %>)
98
+
99
+ deployment: An event of type `deployment` occurred.
100
+ deployment_status: An event of type `deployment_status` occurred.
101
+ gollum: An event of type `gollum` occurred.
102
+ member: An event of type `member` occurred.
103
+ membership: An event of type `membership` occurred.
104
+ page_build: An event of type `page_build` occurred.
105
+ public: An event of type `public` occurred.
106
+ release: An event of type `release` occurred.
107
+ repository: An event of type `repository` occurred.
108
+ team_add: An event of type `team_add` occurred.
109
+
110
+ # `false` will make it end with exit code 1
111
+ watch: false
112
+
113
+ # `no_template` will be used for recognized events which have no
114
+ # template assigned.
115
+ no_template: No template for event of type `<%= type %>` (`<%= stype %>`).
116
+
117
+ # `unknown` will be used for events that could not be recognized.
118
+ unknown: "An unknown event occurred (stype: `<%= stype %>`)"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gh-events
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phil Hofmann
@@ -52,15 +52,30 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec_junit_formatter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.4'
55
69
  description: Determine Github event types by their payload.
56
70
  email:
57
71
  - phil@200ok.ch
58
72
  executables:
59
- - gh-event2slack
73
+ - gh-event2text
60
74
  - gh-events
61
75
  extensions: []
62
76
  extra_rdoc_files: []
63
77
  files:
78
+ - ".circleci/config.yml"
64
79
  - ".gitignore"
65
80
  - ".rspec"
66
81
  - ".ruby-version"
@@ -70,14 +85,16 @@ files:
70
85
  - Rakefile
71
86
  - bin/console
72
87
  - bin/setup
73
- - exe/gh-event2slack
88
+ - exe/gh-event2text
74
89
  - exe/gh-events
75
90
  - gh-events.gemspec
76
91
  - lib/gh-events.rb
77
92
  - lib/gh/events.rb
78
- - lib/gh/events/slack.rb
93
+ - lib/gh/events/text.rb
79
94
  - lib/gh/events/version.rb
95
+ - lib/hash.rb
80
96
  - res/events.yml
97
+ - res/plain.yml
81
98
  - res/slack.yml
82
99
  homepage: https://github.com/200ok-ch/gh-events
83
100
  licenses: []