ci_toolkit 1.0.19 → 1.1.1

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: 764a0232eaf62477c0c732c391473bba9f94f6e5300917e7f10d519cee6270c5
4
- data.tar.gz: 48ec6e86b5a71d4b786c87fe20deb753441271a7746f05b3de9a4a3a1580aa6d
3
+ metadata.gz: 8a0fec524e468ec5a3ae2b94076c67927b9b7d113d182331c89dc7e852969436
4
+ data.tar.gz: 0c128f21987de61c07c5283a71709c35df383bb23dd4bf697669c3c14f672e04
5
5
  SHA512:
6
- metadata.gz: 6ffe7c0fab3c34e5ba50b8da27e14ecff1b546549b8797a1eaa28ebd747937ef92c85819737e2aee36af36026b4cffb75e58c590f4c0ebbe0b55d98734023abd
7
- data.tar.gz: f80b2a1b5cf8e5d4f611b31aace6811a8be1b956df8d7efaa3a3c5300230b2dd492c5c0c5e1b563fd354461f53e96532c8243ab1b1895a0298ccbe2287839bdf
6
+ metadata.gz: 7e39c811e40d5b330c39338b6fac6560c32809ab2ea2c2a420e9ff51b36651acf0338e3fc3dcbfb59ad90b9226478072859b7f1b11979904cee257c2ac548cd4
7
+ data.tar.gz: bb637004d4a9043eda7695285c959e445a69542bacb67f8eec41417bee706ac768191b0475133264a4289b689e5ad0644df7d8201d32efacafedc5fe0911f477
data/Gemfile.lock CHANGED
@@ -1,7 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ci_toolkit (1.0.19)
4
+ ci_toolkit (1.1.1)
5
+ faraday
6
+ faraday_middleware
5
7
  jwt
6
8
  octokit
7
9
  openssl
@@ -34,6 +36,8 @@ GEM
34
36
  faraday-net_http_persistent (1.2.0)
35
37
  faraday-patron (1.0.0)
36
38
  faraday-rack (1.0.0)
39
+ faraday_middleware (1.1.0)
40
+ faraday (~> 1.0)
37
41
  json (2.5.1)
38
42
  jwt (2.2.3)
39
43
  multipart-post (2.1.1)
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "faraday_middleware"
4
+ require "faraday"
5
+
6
+ module CiToolkit
7
+ # client to use with the Bitrise API
8
+ class BitriseClient
9
+ HOST = "https://api.bitrise.io"
10
+ API_VERSION = "v0.1"
11
+ attr_reader :connection
12
+
13
+ def initialize(token = ENV["BITRISE_TOKEN"], app_slug = ENV["BITRISE_APP_SLUG"], faraday = nil)
14
+ @token = token
15
+ @app_slug = app_slug
16
+ @connection = faraday
17
+ configure_connection
18
+ end
19
+
20
+ def configure_connection
21
+ return unless @connection.nil?
22
+
23
+ @connection = Faraday.new(
24
+ url: base_url,
25
+ headers: { "Content-Type" => "application/json", "Authorization" => @token }
26
+ )
27
+ @connection.use Faraday::Request::UrlEncoded
28
+ @connection.use Faraday::Request::Retry
29
+ @connection.use FaradayMiddleware::ParseJson
30
+ @connection.use FaradayMiddleware::EncodeJson
31
+ @connection.use FaradayMiddleware::FollowRedirects
32
+ end
33
+
34
+ def create_pull_request_build(pull_request, branch, commit, workflow)
35
+ @connection&.post("/apps/#{@app_slug}/builds", {
36
+ hook_info: { type: "bitrise" },
37
+ build_params: {
38
+ branch: branch,
39
+ branch_dest: "develop",
40
+ pull_request_id: pull_request,
41
+ workflow_id: workflow,
42
+ commit_hash: commit
43
+ }
44
+ })
45
+ end
46
+
47
+ def abort_pull_request_builds(pull_request, branch, commit)
48
+ find_pull_request_builds(pull_request, branch, commit).each do |build|
49
+ @connection&.post("/apps/#{@app_slug}/builds/#{build[:slug]}/abort", {
50
+ abort_reason: "Aborting due to other build failed for pull request #{pull_request}"
51
+ })
52
+ end
53
+ end
54
+
55
+ def find_pull_request_builds(pull_request, branch, commit)
56
+ builds = @connection&.get("/apps/#{@app_slug}/builds", {
57
+ branch: branch,
58
+ pull_request_id: pull_request.to_i,
59
+ status: 0 # status: 0 == not finished
60
+ })
61
+ builds&.select! { |build| build[:commit_hash] == commit }
62
+ builds || []
63
+ end
64
+
65
+ def base_url
66
+ "#{HOST}/#{API_VERSION}"
67
+ end
68
+ end
69
+ end
@@ -2,11 +2,13 @@
2
2
 
3
3
  module CiToolkit
4
4
  # Bitrise constants
5
+ # noinspection RubyTooManyInstanceVariablesInspection
5
6
  class BitriseEnv
6
7
  attr_reader :build_number, :build_url,
7
8
  :pull_request_number,
8
9
  :app_url,
9
- :git_branch
10
+ :git_branch,
11
+ :app_slug
10
12
 
11
13
  def initialize(options = {
12
14
  build_number: ENV["BITRISE_BUILD_NUMBER"],
@@ -16,7 +18,10 @@ module CiToolkit
16
18
  repository_owner: ENV["BITRISEIO_GIT_REPOSITORY_OWNER"] || "crvshlab",
17
19
  repository_slug: ENV["BITRISEIO_GIT_REPOSITORY_SLUG"],
18
20
  app_url: ENV["BITRISE_APP_URL"],
19
- git_branch: ENV["BITRISE_GIT_BRANCH"]
21
+ app_slug: ENV["BITRISE_APP_SLUG"],
22
+ git_branch: ENV["BITRISE_GIT_BRANCH"],
23
+ git_commit: ENV["BITRISE_GIT_COMMIT"],
24
+ api_token: ENV["BITRISE_TOKEN"]
20
25
  })
21
26
  @build_number = options[:build_number]
22
27
  @build_url = options[:build_url]
@@ -25,7 +30,9 @@ module CiToolkit
25
30
  @repository_owner = options[:repository_owner]
26
31
  @repository_slug = options[:repository_slug]
27
32
  @app_url = options[:app_url]
33
+ @app_slug = options[:app_slug]
28
34
  @git_branch = options[:git_branch]
35
+ @git_commit = options[:git_commit]
29
36
  end
30
37
 
31
38
  def build_from_pr?
@@ -19,7 +19,7 @@ module CiToolkit
19
19
  end
20
20
 
21
21
  def title
22
- client.pull_request(@repo_slug, @pr_number).[](:title)
22
+ client.pull_request(@repo_slug, @pr_number).[](:title) || ""
23
23
  end
24
24
 
25
25
  def number
@@ -39,21 +39,21 @@ module CiToolkit
39
39
  client.add_comment(@repo_slug, @pr_number, text[0...65_500]) # github comment character limit is 65536
40
40
  end
41
41
 
42
- def delete_comment_containing_text(text)
43
- comment = find_comment_containing_text(text)
44
- delete_comment(comment[:id]) unless comment.nil?
42
+ def delete_comments_including_text(text)
43
+ comments = find_comments_including_text(text)
44
+ comments.each { |comment| delete_comment(comment[:id]) unless comment.nil? }
45
45
  end
46
46
 
47
47
  def delete_comment(comment_id)
48
48
  client.delete_comment(@repo_slug, comment_id)
49
49
  end
50
50
 
51
- def find_comment_containing_text(text)
52
- comment = nil
51
+ def find_comments_including_text(text)
52
+ comments = []
53
53
  client.issue_comments(@repo_slug, @pr_number).map do |item|
54
- comment = item if item[:body]&.include? text
54
+ comments << item if item[:body]&.include? text
55
55
  end
56
- comment
56
+ comments
57
57
  end
58
58
 
59
59
  def labels
@@ -17,9 +17,14 @@ module CiToolkit
17
17
  end
18
18
 
19
19
  def send_ci_failed(reason)
20
+ delete_ci_failed
20
21
  send(@messenger_text.for_build_failure(reason))
21
22
  end
22
23
 
24
+ def delete_ci_failed
25
+ delete(@messenger_text.build_failure_title)
26
+ end
27
+
23
28
  def send_duplicate_files_report(finder)
24
29
  delete_duplicate_files_report
25
30
  report = @messenger_text.create_duplicate_files_report(finder)
@@ -72,7 +77,7 @@ module CiToolkit
72
77
  def delete(message)
73
78
  return unless @is_connected
74
79
 
75
- @github_pr.delete_comment_containing_text(message)
80
+ @github_pr.delete_comments_including_text(message)
76
81
  end
77
82
  end
78
83
  end
@@ -18,7 +18,7 @@ module CiToolkit
18
18
  end
19
19
 
20
20
  def for_build_failure(reason)
21
- "#### Build failed ⛔️\n#{body(reason.to_s)}"
21
+ "#{build_failure_title}️\n#{body(reason.to_s)}"
22
22
  end
23
23
 
24
24
  def for_duplicated_files_report(report)
@@ -29,6 +29,10 @@ module CiToolkit
29
29
  "#{lint_report_title}\n#{body(report)}"
30
30
  end
31
31
 
32
+ def build_failure_title
33
+ "#### Build failed ⛔"
34
+ end
35
+
32
36
  def duplicated_files_title
33
37
  warning_with_message("There are duplicated files found")
34
38
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CiToolkit
4
- VERSION = "1.0.19"
4
+ VERSION = "1.1.1"
5
5
  end
data/lib/ci_toolkit.rb CHANGED
@@ -11,6 +11,7 @@ require "ci_toolkit/git"
11
11
  require "ci_toolkit/jira"
12
12
  require "ci_toolkit/pr_messenger"
13
13
  require "ci_toolkit/pr_messenger_text"
14
+ require "ci_toolkit/bitrise_client"
14
15
 
15
16
  module CiToolkit
16
17
  class Error < StandardError; end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ci_toolkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.19
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gero Keller
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-30 00:00:00.000000000 Z
11
+ date: 2021-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday_middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: jwt
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +199,7 @@ files:
171
199
  - bin/setup
172
200
  - duplicate_files_whitelist.txt
173
201
  - lib/ci_toolkit.rb
202
+ - lib/ci_toolkit/bitrise_client.rb
174
203
  - lib/ci_toolkit/bitrise_env.rb
175
204
  - lib/ci_toolkit/build.rb
176
205
  - lib/ci_toolkit/duplicate_files_finder.rb