func()

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
}