Class: Dependabot::Clients::Azure
- Inherits:
-
Object
- Object
- Dependabot::Clients::Azure
- Defined in:
- lib/dependabot/clients/azure.rb
Defined Under Namespace
Classes: NotFound
Constant Summary collapse
- MAX_PR_DESCRIPTION_LENGTH =
3999
Class Method Summary collapse
-
.for_source(source:, credentials:) ⇒ Object
Constructor methods #.
Instance Method Summary collapse
- #branch(branch_name) ⇒ Object
- #commits(branch_name = nil) ⇒ Object
- #create_commit(branch_name, base_commit, commit_message, files, author_details) ⇒ Object
-
#create_pull_request(pr_name, source_branch, target_branch, pr_description, labels, work_item = nil) ⇒ Object
rubocop:disable Metrics/ParameterLists.
- #fetch_commit(_repo, branch) ⇒ Object
- #fetch_default_branch(_repo) ⇒ Object
- #fetch_file_contents(commit, path) ⇒ Object
- #fetch_repo_contents(commit = nil, path = nil) ⇒ Object
- #fetch_repo_contents_treeroot(commit = nil, path = nil) ⇒ Object
-
#get(url) ⇒ Object
rubocop:enable Metrics/ParameterLists.
-
#initialize(source, credentials) ⇒ Azure
constructor
Client #.
- #post(url, json) ⇒ Object
- #pull_requests(source_branch, target_branch) ⇒ Object
Constructor Details
#initialize(source, credentials) ⇒ Azure
Client #
30 31 32 33 34 |
# File 'lib/dependabot/clients/azure.rb', line 30 def initialize(source, credentials) @source = source @credentials = credentials @auth_header = auth_header_for(credentials&.fetch("token", nil)) end |
Class Method Details
.for_source(source:, credentials:) ⇒ Object
Constructor methods #
17 18 19 20 21 22 23 24 |
# File 'lib/dependabot/clients/azure.rb', line 17 def self.for_source(source:, credentials:) credential = credentials. select { |cred| cred["type"] == "git_source" }. find { |cred| cred["host"] == source.hostname } new(source, credential) end |
Instance Method Details
#branch(branch_name) ⇒ Object
107 108 109 110 111 112 113 114 |
# File 'lib/dependabot/clients/azure.rb', line 107 def branch(branch_name) response = get(source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/refs?filter=heads/" + branch_name) JSON.parse(response.body).fetch("value").first end |
#commits(branch_name = nil) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/dependabot/clients/azure.rb', line 94 def commits(branch_name = nil) commits_url = source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/commits" commits_url += "?searchCriteria.itemVersion.version=" + branch_name unless branch_name.to_s.empty? response = get(commits_url) JSON.parse(response.body).fetch("value") end |
#create_commit(branch_name, base_commit, commit_message, files, author_details) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/dependabot/clients/azure.rb', line 127 def create_commit(branch_name, base_commit, , files, ) content = { refUpdates: [ { name: "refs/heads/" + branch_name, oldObjectId: base_commit } ], commits: [ { comment: , author: , changes: files.map do |file| { changeType: "edit", item: { path: file.path }, newContent: { content: Base64.encode64(file.content), contentType: "base64encoded" } } end }.compact ] } post(source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/pushes?api-version=5.0", content.to_json) end |
#create_pull_request(pr_name, source_branch, target_branch, pr_description, labels, work_item = nil) ⇒ Object
rubocop:disable Metrics/ParameterLists
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/dependabot/clients/azure.rb', line 157 def create_pull_request(pr_name, source_branch, target_branch, pr_description, labels, work_item = nil) pr_description = truncate_pr_description(pr_description) content = { sourceRefName: "refs/heads/" + source_branch, targetRefName: "refs/heads/" + target_branch, title: pr_name, description: pr_description, labels: labels.map { |label| { name: label } }, workItemRefs: [{ id: work_item }] } post(source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/pullrequests?api-version=5.0", content.to_json) end |
#fetch_commit(_repo, branch) ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/dependabot/clients/azure.rb', line 36 def fetch_commit(_repo, branch) response = get(source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/stats/branches?name=" + branch) JSON.parse(response.body).fetch("commit").fetch("commitId") end |
#fetch_default_branch(_repo) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/dependabot/clients/azure.rb', line 45 def fetch_default_branch(_repo) response = get(source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo) JSON.parse(response.body).fetch("defaultBranch").gsub("refs/heads/", "") end |
#fetch_file_contents(commit, path) ⇒ Object
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/dependabot/clients/azure.rb', line 83 def fetch_file_contents(commit, path) response = get(source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/items?path=" + path + "&versionDescriptor.versionType=commit" \ "&versionDescriptor.version=" + commit) response.body end |
#fetch_repo_contents(commit = nil, path = nil) ⇒ Object
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/dependabot/clients/azure.rb', line 53 def fetch_repo_contents(commit = nil, path = nil) tree = fetch_repo_contents_treeroot(commit, path) response = get(source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/trees/" + tree + "?recursive=false") JSON.parse(response.body).fetch("treeEntries") end |
#fetch_repo_contents_treeroot(commit = nil, path = nil) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/dependabot/clients/azure.rb', line 64 def fetch_repo_contents_treeroot(commit = nil, path = nil) actual_path = path actual_path = "/" if path.to_s.empty? tree_url = source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/items?path=" + actual_path unless commit.to_s.empty? tree_url += "&versionDescriptor.versionType=commit" \ "&versionDescriptor.version=" + commit end tree_response = get(tree_url) JSON.parse(tree_response.body).fetch("objectId") end |
#get(url) ⇒ Object
rubocop:enable Metrics/ParameterLists
177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/dependabot/clients/azure.rb', line 177 def get(url) response = Excon.get( url, user: credentials&.fetch("username", nil), password: credentials&.fetch("password", nil), idempotent: true, **SharedHelpers.excon_defaults( headers: auth_header ) ) raise NotFound if response.status == 404 response end |
#post(url, json) ⇒ Object
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/dependabot/clients/azure.rb', line 192 def post(url, json) response = Excon.post( url, body: json, user: credentials&.fetch("username", nil), password: credentials&.fetch("password", nil), idempotent: true, **SharedHelpers.excon_defaults( headers: auth_header.merge( { "Content-Type" => "application/json" } ) ) ) raise NotFound if response.status == 404 response end |
#pull_requests(source_branch, target_branch) ⇒ Object
116 117 118 119 120 121 122 123 124 125 |
# File 'lib/dependabot/clients/azure.rb', line 116 def pull_requests(source_branch, target_branch) response = get(source.api_endpoint + source.organization + "/" + source.project + "/_apis/git/repositories/" + source.unscoped_repo + "/pullrequests?searchCriteria.status=all" \ "&searchCriteria.sourceRefName=refs/heads/" + source_branch + "&searchCriteria.targetRefName=refs/heads/" + target_branch) JSON.parse(response.body).fetch("value") end |