func()

in controller/merge_request/controller.go [219:296]


func (c *Controller) triggerJobProvisioner(
	ctx context.Context,
	instance *gerritService.GerritMergeRequest,
	cb *codebaseSvc.Codebase,
) error {
	if instance.Status.Value != gerritService.StatusMerged {
		return nil
	}

	js, ok := instance.Annotations[registry.MRAnnotationActions]
	if !ok {
		return nil
	}

	var actions []string
	if err := json.Unmarshal([]byte(js), &actions); err != nil {
		return fmt.Errorf("unable to unmarshal actions")
	}

	backupSchedule := false
	for _, a := range actions {
		if a == registry.MRActionBackupSchedule {
			backupSchedule = true
		}
	}

	if !backupSchedule {
		return nil
	}

	if cb.Spec.JobProvisioning == nil {
		return fmt.Errorf("project has no job provisioning")
	}

	gitServer, err := c.gitServerService.Get(cb.Spec.GitServer)
	if err != nil {
		return fmt.Errorf("failed to get gitService CR: %w", err)
	}

	if err := c.jenkinsService.CreateJobBuildRun(
		ctx,
		fmt.Sprintf("backup-schedule-%d", time.Now().Unix()),
		fmt.Sprintf("/job-provisions/job/ci/job/%s", *cb.Spec.JobProvisioning),
		map[string]string{
			"NAME":                     cb.Name,
			"TYPE":                     cb.Spec.Type,
			"BUILD_TOOL":               cb.Spec.BuildTool,
			"BRANCH":                   cb.Spec.DefaultBranch,
			"GIT_SERVER_CR_NAME":       cb.Spec.GitServer,
			"GIT_SERVER_CR_VERSION":    "v2",
			"GIT_CREDENTIALS_ID":       "gerrit-ciuser-sshkey",
			"REPOSITORY_PATH":          fmt.Sprintf("ssh://%s@gerrit:31000/%s", gitServer.Spec.GitUser, cb.Name),
			"JIRA_INTEGRATION_ENABLED": "false",
		},
	); err != nil {
		return fmt.Errorf("unable to create job build run")
	}

	var replaceActions []string
	for _, a := range actions {
		if a != registry.MRActionBackupSchedule {
			replaceActions = append(replaceActions, a)
		}
	}

	bts, err := json.Marshal(replaceActions)
	if err != nil {
		return fmt.Errorf("unable to marshal json, %w", err)
	}

	instance.Annotations[registry.MRAnnotationActions] = string(bts)
	if err := c.k8sClient.Update(ctx, instance); err != nil {
		return fmt.Errorf("unable to update MR instance, %w", err)

	}

	return nil
}