semamore 0.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f100dde20e6743280ba73c80efa762df572a934c462fdc20379a1be985857a25
4
+ data.tar.gz: 99528c7b1c77895f3c59bed8f3184d43fffdda2c923fc598c372d283c5b91c15
5
+ SHA512:
6
+ metadata.gz: 44a745707e1fb16ddf5012bc5bad335448e4f9662e8b866b8e2cafce8ba591dd216893704f3716c9fea657e14e71769e0c4018e23d0de3cfdfa85e0097c01158
7
+ data.tar.gz: 1fe68d261e0c6ef547d9fdc05b3d5a5b0660b4355bacf8ce9e61626225bd8b58bc8a03ce0305b2ea5f238916b8c0e646bb1435d9e97b438210d8d9f77c12e448
data/bin/semamore ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'semamore'
4
+
5
+ command = ARGV[0]
6
+ pattern = ARGV[1]
7
+
8
+ semamore = Semamore.new(token: ENV['GITHUB_TOKEN'])
9
+
10
+ semamore.changed_files_guard(repo: ENV['SEMAPHORE_REPO_SLUG'], branch: ENV['BRANCH_NAME'], command: command, pattern: pattern)
data/lib/semamore.rb ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'semamore_octo_client'
4
+
5
+ class Semamore
6
+ def initialize(token:, client_options: {})
7
+ @client = ::SemamoreOctoClient.new(token, options: client_options)
8
+ end
9
+
10
+ def changed_files_guard(repo:, branch:, command:, pattern:)
11
+ files = client.current_pr_files(repo, branch)
12
+
13
+ if has_matching_files?(pattern, files)
14
+ exec command
15
+ else
16
+ exit 0
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :client
23
+
24
+ def has_matching_files?(pattern, files)
25
+ files.any? { |file| matches_pattern?(pattern, file[:filename]) }
26
+ end
27
+
28
+ def matches_pattern?(pattern, string)
29
+ Regexp.new(pattern).match?(string)
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ require 'octokit'
2
+
3
+ class SemamoreOctoClient
4
+ def initialize(token, options: { auto_paginate: true })
5
+ @client = Octokit::Client.new(options.merge(access_token: token))
6
+ end
7
+
8
+ def current_pr_files(repo, branch)
9
+ client.pull_request_files(repo, current_pr(repo, branch)[:number])
10
+ end
11
+
12
+ def current_pr(repo, branch)
13
+ open_prs(repo).select {|pr| pr[:head][:ref] == branch}.first
14
+ end
15
+
16
+ def open_prs(repo)
17
+ client.pull_requests(repo, :state => "open")
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :repo, :branch, :client
23
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: semamore
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Luke Bennett
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: octokit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 4.14.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 4.14.0
27
+ description: Run commands conditionally depending on github PR changed files
28
+ email: contact@luke.run
29
+ executables:
30
+ - semamore
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/semamore
35
+ - lib/semamore.rb
36
+ - lib/semamore_octo_client.rb
37
+ homepage: https://gitlab.com/LukeeeeBennett/semamore
38
+ licenses:
39
+ - MIT
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubygems_version: 3.0.4
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: Run commands depending on changed files
60
+ test_files: []