gh-events 0.7.0 → 0.8.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 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: []