in metrics/internal/pipelines/observer.go [134:183]
func (o *observer) fetchPipelinesPage(page int, pipelines *[]*gitlab.PipelineInfo) (nextPage int, e error) {
reqCtx, cancel := context.WithTimeout(o.ctx, clientTimeout)
defer cancel()
opts := &gitlab.ListProjectPipelinesOptions{
Source: gitlab.Ptr("api"),
Username: gitlab.Ptr("gitlab-release-tools-bot"),
ListOptions: gitlab.ListOptions{
Page: page,
PerPage: limit,
},
}
batch, response, err := o.ops.ListProjectPipelines(
releaseToolsProject,
opts,
gitlab.WithContext(reqCtx))
if err != nil {
o.log.WithError(err).Error("api failure")
return 0, err
}
for _, pipeline := range batch {
pipelineLogger := o.log.WithFields(logrus.Fields{
"name": pipeline.Name,
"status": pipeline.Status,
"source": pipeline.Source,
})
if !deployPipelineName.MatchString(pipeline.Name) {
pipelineLogger.Trace("skip pipeline - not a deployment pipeline")
continue
}
if pipeline.Status == string(gitlab.Success) {
pipelineLogger.WithFields(logrus.Fields{
"url": pipeline.WebURL,
"created_at": pipeline.CreatedAt,
}).Info("Last successful pipeline")
return 0, nil
}
pipelineLogger.Trace("appending")
*pipelines = append(*pipelines, pipeline)
}
return response.NextPage, nil
}