ci_toolkit 1.0.19 → 1.1.1

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: 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