1// +build go1.13 2 3// Copyright (c) Microsoft Corporation. All rights reserved. 4// Licensed under the MIT License. See License.txt in the project root for license information. 5// Code generated by Microsoft (R) AutoRest Code Generator. 6// Changes may cause incorrect behavior and will be lost if the code is regenerated. 7 8package azartifacts 9 10import ( 11 "context" 12 "errors" 13 "fmt" 14 "github.com/Azure/azure-sdk-for-go/sdk/azcore" 15 "net/http" 16 "net/url" 17 "strconv" 18 "strings" 19 "time" 20) 21 22// PipelineClient contains the methods for the Pipeline group. 23// Don't use this type directly, use NewPipelineClient() instead. 24type PipelineClient struct { 25 con *Connection 26} 27 28// NewPipelineClient creates a new instance of PipelineClient with the specified values. 29func NewPipelineClient(con *Connection) *PipelineClient { 30 return &PipelineClient{con: con} 31} 32 33// BeginCreateOrUpdatePipeline - Creates or updates a pipeline. 34// If the operation fails it returns the *CloudError error type. 35func (client *PipelineClient) BeginCreateOrUpdatePipeline(ctx context.Context, pipelineName string, pipeline PipelineResource, options *PipelineBeginCreateOrUpdatePipelineOptions) (PipelineResourcePollerResponse, error) { 36 resp, err := client.createOrUpdatePipeline(ctx, pipelineName, pipeline, options) 37 if err != nil { 38 return PipelineResourcePollerResponse{}, err 39 } 40 result := PipelineResourcePollerResponse{ 41 RawResponse: resp.Response, 42 } 43 pt, err := azcore.NewLROPoller("PipelineClient.CreateOrUpdatePipeline", resp, client.con.Pipeline(), client.createOrUpdatePipelineHandleError) 44 if err != nil { 45 return PipelineResourcePollerResponse{}, err 46 } 47 poller := &pipelineResourcePoller{ 48 pt: pt, 49 } 50 result.Poller = poller 51 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (PipelineResourceResponse, error) { 52 return poller.pollUntilDone(ctx, frequency) 53 } 54 return result, nil 55} 56 57// ResumeCreateOrUpdatePipeline creates a new PipelineResourcePoller from the specified resume token. 58// token - The value must come from a previous call to PipelineResourcePoller.ResumeToken(). 59func (client *PipelineClient) ResumeCreateOrUpdatePipeline(ctx context.Context, token string) (PipelineResourcePollerResponse, error) { 60 pt, err := azcore.NewLROPollerFromResumeToken("PipelineClient.CreateOrUpdatePipeline", token, client.con.Pipeline(), client.createOrUpdatePipelineHandleError) 61 if err != nil { 62 return PipelineResourcePollerResponse{}, err 63 } 64 poller := &pipelineResourcePoller{ 65 pt: pt, 66 } 67 resp, err := poller.Poll(ctx) 68 if err != nil { 69 return PipelineResourcePollerResponse{}, err 70 } 71 result := PipelineResourcePollerResponse{ 72 RawResponse: resp, 73 } 74 result.Poller = poller 75 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (PipelineResourceResponse, error) { 76 return poller.pollUntilDone(ctx, frequency) 77 } 78 return result, nil 79} 80 81// CreateOrUpdatePipeline - Creates or updates a pipeline. 82// If the operation fails it returns the *CloudError error type. 83func (client *PipelineClient) createOrUpdatePipeline(ctx context.Context, pipelineName string, pipeline PipelineResource, options *PipelineBeginCreateOrUpdatePipelineOptions) (*azcore.Response, error) { 84 req, err := client.createOrUpdatePipelineCreateRequest(ctx, pipelineName, pipeline, options) 85 if err != nil { 86 return nil, err 87 } 88 resp, err := client.con.Pipeline().Do(req) 89 if err != nil { 90 return nil, err 91 } 92 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 93 return nil, client.createOrUpdatePipelineHandleError(resp) 94 } 95 return resp, nil 96} 97 98// createOrUpdatePipelineCreateRequest creates the CreateOrUpdatePipeline request. 99func (client *PipelineClient) createOrUpdatePipelineCreateRequest(ctx context.Context, pipelineName string, pipeline PipelineResource, options *PipelineBeginCreateOrUpdatePipelineOptions) (*azcore.Request, error) { 100 urlPath := "/pipelines/{pipelineName}" 101 if pipelineName == "" { 102 return nil, errors.New("parameter pipelineName cannot be empty") 103 } 104 urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName)) 105 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 106 if err != nil { 107 return nil, err 108 } 109 req.Telemetry(telemetryInfo) 110 reqQP := req.URL.Query() 111 reqQP.Set("api-version", "2019-06-01-preview") 112 req.URL.RawQuery = reqQP.Encode() 113 if options != nil && options.IfMatch != nil { 114 req.Header.Set("If-Match", *options.IfMatch) 115 } 116 req.Header.Set("Accept", "application/json") 117 return req, req.MarshalAsJSON(pipeline) 118} 119 120// createOrUpdatePipelineHandleError handles the CreateOrUpdatePipeline error response. 121func (client *PipelineClient) createOrUpdatePipelineHandleError(resp *azcore.Response) error { 122 body, err := resp.Payload() 123 if err != nil { 124 return azcore.NewResponseError(err, resp.Response) 125 } 126 errType := CloudError{raw: string(body)} 127 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 128 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 129 } 130 return azcore.NewResponseError(&errType, resp.Response) 131} 132 133// CreatePipelineRun - Creates a run of a pipeline. 134// If the operation fails it returns the *CloudError error type. 135func (client *PipelineClient) CreatePipelineRun(ctx context.Context, pipelineName string, options *PipelineCreatePipelineRunOptions) (CreateRunResponseResponse, error) { 136 req, err := client.createPipelineRunCreateRequest(ctx, pipelineName, options) 137 if err != nil { 138 return CreateRunResponseResponse{}, err 139 } 140 resp, err := client.con.Pipeline().Do(req) 141 if err != nil { 142 return CreateRunResponseResponse{}, err 143 } 144 if !resp.HasStatusCode(http.StatusAccepted) { 145 return CreateRunResponseResponse{}, client.createPipelineRunHandleError(resp) 146 } 147 return client.createPipelineRunHandleResponse(resp) 148} 149 150// createPipelineRunCreateRequest creates the CreatePipelineRun request. 151func (client *PipelineClient) createPipelineRunCreateRequest(ctx context.Context, pipelineName string, options *PipelineCreatePipelineRunOptions) (*azcore.Request, error) { 152 urlPath := "/pipelines/{pipelineName}/createRun" 153 if pipelineName == "" { 154 return nil, errors.New("parameter pipelineName cannot be empty") 155 } 156 urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName)) 157 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 158 if err != nil { 159 return nil, err 160 } 161 req.Telemetry(telemetryInfo) 162 reqQP := req.URL.Query() 163 reqQP.Set("api-version", "2019-06-01-preview") 164 if options != nil && options.ReferencePipelineRunID != nil { 165 reqQP.Set("referencePipelineRunId", *options.ReferencePipelineRunID) 166 } 167 if options != nil && options.IsRecovery != nil { 168 reqQP.Set("isRecovery", strconv.FormatBool(*options.IsRecovery)) 169 } 170 if options != nil && options.StartActivityName != nil { 171 reqQP.Set("startActivityName", *options.StartActivityName) 172 } 173 req.URL.RawQuery = reqQP.Encode() 174 req.Header.Set("Accept", "application/json") 175 if options != nil && options.Parameters != nil { 176 return req, req.MarshalAsJSON(options.Parameters) 177 } 178 return req, nil 179} 180 181// createPipelineRunHandleResponse handles the CreatePipelineRun response. 182func (client *PipelineClient) createPipelineRunHandleResponse(resp *azcore.Response) (CreateRunResponseResponse, error) { 183 var val *CreateRunResponse 184 if err := resp.UnmarshalAsJSON(&val); err != nil { 185 return CreateRunResponseResponse{}, err 186 } 187 return CreateRunResponseResponse{RawResponse: resp.Response, CreateRunResponse: val}, nil 188} 189 190// createPipelineRunHandleError handles the CreatePipelineRun error response. 191func (client *PipelineClient) createPipelineRunHandleError(resp *azcore.Response) error { 192 body, err := resp.Payload() 193 if err != nil { 194 return azcore.NewResponseError(err, resp.Response) 195 } 196 errType := CloudError{raw: string(body)} 197 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 198 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 199 } 200 return azcore.NewResponseError(&errType, resp.Response) 201} 202 203// BeginDeletePipeline - Deletes a pipeline. 204// If the operation fails it returns the *CloudError error type. 205func (client *PipelineClient) BeginDeletePipeline(ctx context.Context, pipelineName string, options *PipelineBeginDeletePipelineOptions) (HTTPPollerResponse, error) { 206 resp, err := client.deletePipeline(ctx, pipelineName, options) 207 if err != nil { 208 return HTTPPollerResponse{}, err 209 } 210 result := HTTPPollerResponse{ 211 RawResponse: resp.Response, 212 } 213 pt, err := azcore.NewLROPoller("PipelineClient.DeletePipeline", resp, client.con.Pipeline(), client.deletePipelineHandleError) 214 if err != nil { 215 return HTTPPollerResponse{}, err 216 } 217 poller := &httpPoller{ 218 pt: pt, 219 } 220 result.Poller = poller 221 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 222 return poller.pollUntilDone(ctx, frequency) 223 } 224 return result, nil 225} 226 227// ResumeDeletePipeline creates a new HTTPPoller from the specified resume token. 228// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 229func (client *PipelineClient) ResumeDeletePipeline(ctx context.Context, token string) (HTTPPollerResponse, error) { 230 pt, err := azcore.NewLROPollerFromResumeToken("PipelineClient.DeletePipeline", token, client.con.Pipeline(), client.deletePipelineHandleError) 231 if err != nil { 232 return HTTPPollerResponse{}, err 233 } 234 poller := &httpPoller{ 235 pt: pt, 236 } 237 resp, err := poller.Poll(ctx) 238 if err != nil { 239 return HTTPPollerResponse{}, err 240 } 241 result := HTTPPollerResponse{ 242 RawResponse: resp, 243 } 244 result.Poller = poller 245 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 246 return poller.pollUntilDone(ctx, frequency) 247 } 248 return result, nil 249} 250 251// DeletePipeline - Deletes a pipeline. 252// If the operation fails it returns the *CloudError error type. 253func (client *PipelineClient) deletePipeline(ctx context.Context, pipelineName string, options *PipelineBeginDeletePipelineOptions) (*azcore.Response, error) { 254 req, err := client.deletePipelineCreateRequest(ctx, pipelineName, options) 255 if err != nil { 256 return nil, err 257 } 258 resp, err := client.con.Pipeline().Do(req) 259 if err != nil { 260 return nil, err 261 } 262 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) { 263 return nil, client.deletePipelineHandleError(resp) 264 } 265 return resp, nil 266} 267 268// deletePipelineCreateRequest creates the DeletePipeline request. 269func (client *PipelineClient) deletePipelineCreateRequest(ctx context.Context, pipelineName string, options *PipelineBeginDeletePipelineOptions) (*azcore.Request, error) { 270 urlPath := "/pipelines/{pipelineName}" 271 if pipelineName == "" { 272 return nil, errors.New("parameter pipelineName cannot be empty") 273 } 274 urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName)) 275 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 276 if err != nil { 277 return nil, err 278 } 279 req.Telemetry(telemetryInfo) 280 reqQP := req.URL.Query() 281 reqQP.Set("api-version", "2019-06-01-preview") 282 req.URL.RawQuery = reqQP.Encode() 283 req.Header.Set("Accept", "application/json") 284 return req, nil 285} 286 287// deletePipelineHandleError handles the DeletePipeline error response. 288func (client *PipelineClient) deletePipelineHandleError(resp *azcore.Response) error { 289 body, err := resp.Payload() 290 if err != nil { 291 return azcore.NewResponseError(err, resp.Response) 292 } 293 errType := CloudError{raw: string(body)} 294 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 295 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 296 } 297 return azcore.NewResponseError(&errType, resp.Response) 298} 299 300// GetPipeline - Gets a pipeline. 301// If the operation fails it returns the *CloudError error type. 302func (client *PipelineClient) GetPipeline(ctx context.Context, pipelineName string, options *PipelineGetPipelineOptions) (PipelineResourceResponse, error) { 303 req, err := client.getPipelineCreateRequest(ctx, pipelineName, options) 304 if err != nil { 305 return PipelineResourceResponse{}, err 306 } 307 resp, err := client.con.Pipeline().Do(req) 308 if err != nil { 309 return PipelineResourceResponse{}, err 310 } 311 if !resp.HasStatusCode(http.StatusOK, http.StatusNotModified) { 312 return PipelineResourceResponse{}, client.getPipelineHandleError(resp) 313 } 314 return client.getPipelineHandleResponse(resp) 315} 316 317// getPipelineCreateRequest creates the GetPipeline request. 318func (client *PipelineClient) getPipelineCreateRequest(ctx context.Context, pipelineName string, options *PipelineGetPipelineOptions) (*azcore.Request, error) { 319 urlPath := "/pipelines/{pipelineName}" 320 if pipelineName == "" { 321 return nil, errors.New("parameter pipelineName cannot be empty") 322 } 323 urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName)) 324 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 325 if err != nil { 326 return nil, err 327 } 328 req.Telemetry(telemetryInfo) 329 reqQP := req.URL.Query() 330 reqQP.Set("api-version", "2019-06-01-preview") 331 req.URL.RawQuery = reqQP.Encode() 332 if options != nil && options.IfNoneMatch != nil { 333 req.Header.Set("If-None-Match", *options.IfNoneMatch) 334 } 335 req.Header.Set("Accept", "application/json") 336 return req, nil 337} 338 339// getPipelineHandleResponse handles the GetPipeline response. 340func (client *PipelineClient) getPipelineHandleResponse(resp *azcore.Response) (PipelineResourceResponse, error) { 341 var val *PipelineResource 342 if err := resp.UnmarshalAsJSON(&val); err != nil { 343 return PipelineResourceResponse{}, err 344 } 345 return PipelineResourceResponse{RawResponse: resp.Response, PipelineResource: val}, nil 346} 347 348// getPipelineHandleError handles the GetPipeline error response. 349func (client *PipelineClient) getPipelineHandleError(resp *azcore.Response) error { 350 body, err := resp.Payload() 351 if err != nil { 352 return azcore.NewResponseError(err, resp.Response) 353 } 354 errType := CloudError{raw: string(body)} 355 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 356 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 357 } 358 return azcore.NewResponseError(&errType, resp.Response) 359} 360 361// GetPipelinesByWorkspace - Lists pipelines. 362// If the operation fails it returns the *CloudError error type. 363func (client *PipelineClient) GetPipelinesByWorkspace(options *PipelineGetPipelinesByWorkspaceOptions) PipelineListResponsePager { 364 return &pipelineListResponsePager{ 365 pipeline: client.con.Pipeline(), 366 requester: func(ctx context.Context) (*azcore.Request, error) { 367 return client.getPipelinesByWorkspaceCreateRequest(ctx, options) 368 }, 369 responder: client.getPipelinesByWorkspaceHandleResponse, 370 errorer: client.getPipelinesByWorkspaceHandleError, 371 advancer: func(ctx context.Context, resp PipelineListResponseResponse) (*azcore.Request, error) { 372 return azcore.NewRequest(ctx, http.MethodGet, *resp.PipelineListResponse.NextLink) 373 }, 374 statusCodes: []int{http.StatusOK}, 375 } 376} 377 378// getPipelinesByWorkspaceCreateRequest creates the GetPipelinesByWorkspace request. 379func (client *PipelineClient) getPipelinesByWorkspaceCreateRequest(ctx context.Context, options *PipelineGetPipelinesByWorkspaceOptions) (*azcore.Request, error) { 380 urlPath := "/pipelines" 381 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 382 if err != nil { 383 return nil, err 384 } 385 req.Telemetry(telemetryInfo) 386 reqQP := req.URL.Query() 387 reqQP.Set("api-version", "2019-06-01-preview") 388 req.URL.RawQuery = reqQP.Encode() 389 req.Header.Set("Accept", "application/json") 390 return req, nil 391} 392 393// getPipelinesByWorkspaceHandleResponse handles the GetPipelinesByWorkspace response. 394func (client *PipelineClient) getPipelinesByWorkspaceHandleResponse(resp *azcore.Response) (PipelineListResponseResponse, error) { 395 var val *PipelineListResponse 396 if err := resp.UnmarshalAsJSON(&val); err != nil { 397 return PipelineListResponseResponse{}, err 398 } 399 return PipelineListResponseResponse{RawResponse: resp.Response, PipelineListResponse: val}, nil 400} 401 402// getPipelinesByWorkspaceHandleError handles the GetPipelinesByWorkspace error response. 403func (client *PipelineClient) getPipelinesByWorkspaceHandleError(resp *azcore.Response) error { 404 body, err := resp.Payload() 405 if err != nil { 406 return azcore.NewResponseError(err, resp.Response) 407 } 408 errType := CloudError{raw: string(body)} 409 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 410 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 411 } 412 return azcore.NewResponseError(&errType, resp.Response) 413} 414 415// BeginRenamePipeline - Renames a pipeline. 416// If the operation fails it returns the *CloudError error type. 417func (client *PipelineClient) BeginRenamePipeline(ctx context.Context, pipelineName string, request ArtifactRenameRequest, options *PipelineBeginRenamePipelineOptions) (HTTPPollerResponse, error) { 418 resp, err := client.renamePipeline(ctx, pipelineName, request, options) 419 if err != nil { 420 return HTTPPollerResponse{}, err 421 } 422 result := HTTPPollerResponse{ 423 RawResponse: resp.Response, 424 } 425 pt, err := azcore.NewLROPoller("PipelineClient.RenamePipeline", resp, client.con.Pipeline(), client.renamePipelineHandleError) 426 if err != nil { 427 return HTTPPollerResponse{}, err 428 } 429 poller := &httpPoller{ 430 pt: pt, 431 } 432 result.Poller = poller 433 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 434 return poller.pollUntilDone(ctx, frequency) 435 } 436 return result, nil 437} 438 439// ResumeRenamePipeline creates a new HTTPPoller from the specified resume token. 440// token - The value must come from a previous call to HTTPPoller.ResumeToken(). 441func (client *PipelineClient) ResumeRenamePipeline(ctx context.Context, token string) (HTTPPollerResponse, error) { 442 pt, err := azcore.NewLROPollerFromResumeToken("PipelineClient.RenamePipeline", token, client.con.Pipeline(), client.renamePipelineHandleError) 443 if err != nil { 444 return HTTPPollerResponse{}, err 445 } 446 poller := &httpPoller{ 447 pt: pt, 448 } 449 resp, err := poller.Poll(ctx) 450 if err != nil { 451 return HTTPPollerResponse{}, err 452 } 453 result := HTTPPollerResponse{ 454 RawResponse: resp, 455 } 456 result.Poller = poller 457 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) { 458 return poller.pollUntilDone(ctx, frequency) 459 } 460 return result, nil 461} 462 463// RenamePipeline - Renames a pipeline. 464// If the operation fails it returns the *CloudError error type. 465func (client *PipelineClient) renamePipeline(ctx context.Context, pipelineName string, request ArtifactRenameRequest, options *PipelineBeginRenamePipelineOptions) (*azcore.Response, error) { 466 req, err := client.renamePipelineCreateRequest(ctx, pipelineName, request, options) 467 if err != nil { 468 return nil, err 469 } 470 resp, err := client.con.Pipeline().Do(req) 471 if err != nil { 472 return nil, err 473 } 474 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) { 475 return nil, client.renamePipelineHandleError(resp) 476 } 477 return resp, nil 478} 479 480// renamePipelineCreateRequest creates the RenamePipeline request. 481func (client *PipelineClient) renamePipelineCreateRequest(ctx context.Context, pipelineName string, request ArtifactRenameRequest, options *PipelineBeginRenamePipelineOptions) (*azcore.Request, error) { 482 urlPath := "/pipelines/{pipelineName}/rename" 483 if pipelineName == "" { 484 return nil, errors.New("parameter pipelineName cannot be empty") 485 } 486 urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName)) 487 req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 488 if err != nil { 489 return nil, err 490 } 491 req.Telemetry(telemetryInfo) 492 reqQP := req.URL.Query() 493 reqQP.Set("api-version", "2019-06-01-preview") 494 req.URL.RawQuery = reqQP.Encode() 495 req.Header.Set("Accept", "application/json") 496 return req, req.MarshalAsJSON(request) 497} 498 499// renamePipelineHandleError handles the RenamePipeline error response. 500func (client *PipelineClient) renamePipelineHandleError(resp *azcore.Response) error { 501 body, err := resp.Payload() 502 if err != nil { 503 return azcore.NewResponseError(err, resp.Response) 504 } 505 errType := CloudError{raw: string(body)} 506 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 507 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 508 } 509 return azcore.NewResponseError(&errType, resp.Response) 510} 511