add options project creation and error handling
This commit is contained in:
@@ -32,6 +32,7 @@ def post_request(uri, body, access_token)
|
|||||||
request.content_type = 'application/json'
|
request.content_type = 'application/json'
|
||||||
|
|
||||||
response = http.request request
|
response = http.request request
|
||||||
|
abort_on_ado_error!(response, uri)
|
||||||
|
|
||||||
yield(response) if block_given?
|
yield(response) if block_given?
|
||||||
|
|
||||||
@@ -41,6 +42,52 @@ def post_request(uri, body, access_token)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_request(uri, access_token)
|
||||||
|
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
||||||
|
request = Net::HTTP::Get.new(uri)
|
||||||
|
request.basic_auth "", access_token
|
||||||
|
response = http.request request
|
||||||
|
|
||||||
|
yield(response) if block_given?
|
||||||
|
|
||||||
|
JSON.parse(response.body)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def abort_on_ado_error!(response, uri)
|
||||||
|
return if response.code.start_with?("20")
|
||||||
|
|
||||||
|
message = case response.code
|
||||||
|
when "401"
|
||||||
|
"Please check your Azure DevOps access token has the correct permissions."
|
||||||
|
when "404"
|
||||||
|
JSON.parse(response.body)["message"]
|
||||||
|
when "302"
|
||||||
|
"Please check your Azure DevOps access token is correctly entered."
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
JSON.parse(response.body)["message"]
|
||||||
|
rescue JSON::ParserError
|
||||||
|
response.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
abort "Error encountered on request:#{uri}\n StatusCode:#{response.code}\n Message: '#{message}'"
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def project_exists?(options)
|
||||||
|
organization = options[:organization]
|
||||||
|
project = options[:project]
|
||||||
|
access_token = options[:access_token]
|
||||||
|
|
||||||
|
uri = URI("https://dev.azure.com/#{organization}/_apis/projects/#{project}?api-version=6.0")
|
||||||
|
get_request(uri, access_token) do |response|
|
||||||
|
return response.code.start_with?("20")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
def create_project(options)
|
def create_project(options)
|
||||||
organization = options[:organization]
|
organization = options[:organization]
|
||||||
project = options[:project]
|
project = options[:project]
|
||||||
@@ -62,9 +109,7 @@ def create_project(options)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
post_request(uri, project_to_create, access_token) do |response|
|
post_request(uri, project_to_create, access_token)
|
||||||
raise "Error creating project (#{response.code}:#{response.message})" unless response.code.start_with?("20")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_repository(options)
|
def create_repository(options)
|
||||||
@@ -107,10 +152,7 @@ def create_repository(options)
|
|||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|
||||||
result = post_request(uri, repository_to_create, access_token) do |response|
|
result = post_request(uri, repository_to_create, access_token)
|
||||||
raise "Error creating repository (#{response.code}:#{response.message})" unless response.code.start_with?("20")
|
|
||||||
end
|
|
||||||
|
|
||||||
[result, tmp_dir]
|
[result, tmp_dir]
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -143,9 +185,7 @@ def create_yaml_pipelines(options, repository, tmp_dir)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
post_request(uri, pipeline_to_create, access_token) do |response|
|
post_request(uri, pipeline_to_create, access_token)
|
||||||
raise "Error creating pipeline (#{response.code}:#{response.message})" unless response.code.start_with?("20")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -170,9 +210,7 @@ def create_classic_pipelines(options, repository)
|
|||||||
pipeline_to_create["repository"]["name"] = repository_name
|
pipeline_to_create["repository"]["name"] = repository_name
|
||||||
pipeline_to_create["repository"]["id"] = repository_id
|
pipeline_to_create["repository"]["id"] = repository_id
|
||||||
|
|
||||||
post_request(uri, pipeline_to_create, access_token) do |response|
|
post_request(uri, pipeline_to_create, access_token)
|
||||||
raise "Error creating pipeline (#{response.code}:#{response.message})" unless response.code.start_with?("20")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -186,7 +224,14 @@ def update_forecast_source_file(options, tmp_dir)
|
|||||||
File.write(File.join(root_dir, jobs_data_file), jobs_data)
|
File.write(File.join(root_dir, jobs_data_file), jobs_data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
if project_exists?(options)
|
||||||
|
print "Project '#{options[:project]}' already exists. Would you like to continue? [y/N]"
|
||||||
|
abort unless gets.chomp.casecmp? "y"
|
||||||
|
else
|
||||||
create_project(options)
|
create_project(options)
|
||||||
|
end
|
||||||
|
|
||||||
repository, tmp_dir = create_repository(options)
|
repository, tmp_dir = create_repository(options)
|
||||||
create_yaml_pipelines(options, repository, tmp_dir)
|
create_yaml_pipelines(options, repository, tmp_dir)
|
||||||
create_classic_pipelines(options, repository)
|
create_classic_pipelines(options, repository)
|
||||||
|
|||||||
Reference in New Issue
Block a user