paramsWorkflowJobToParamsJob returns a params.Job from a params.WorkflowJob, and aditionally determines if the runner belongs to this pool or not. It will always return a valid params.Job, even if it errs out. This allows us to still update the job in the database, even if we determined that it wasn
(job params.WorkflowJob)
| 1162 | // decissions based on the status of saved jobs. A "queued" job will prompt garm to search for an appropriate pool |
| 1163 | // and spin up a runner there if no other idle runner exists to pick it up. |
| 1164 | func (r *basePoolManager) paramsWorkflowJobToParamsJob(job params.WorkflowJob) (params.Job, error) { |
| 1165 | asUUID, err := uuid.Parse(r.ID()) |
| 1166 | if err != nil { |
| 1167 | return params.Job{}, fmt.Errorf("error parsing pool ID as UUID: %w", err) |
| 1168 | } |
| 1169 | |
| 1170 | jobParams := params.Job{ |
| 1171 | WorkflowJobID: job.WorkflowJob.ID, |
| 1172 | Action: job.Action, |
| 1173 | RunID: job.WorkflowJob.RunID, |
| 1174 | Status: job.WorkflowJob.Status, |
| 1175 | Conclusion: job.WorkflowJob.Conclusion, |
| 1176 | StartedAt: job.WorkflowJob.StartedAt, |
| 1177 | CompletedAt: job.WorkflowJob.CompletedAt, |
| 1178 | Name: job.WorkflowJob.Name, |
| 1179 | GithubRunnerID: job.WorkflowJob.RunnerID, |
| 1180 | RunnerName: job.WorkflowJob.RunnerName, |
| 1181 | RunnerGroupID: job.WorkflowJob.RunnerGroupID, |
| 1182 | RunnerGroupName: job.WorkflowJob.RunnerGroupName, |
| 1183 | RepositoryName: job.Repository.Name, |
| 1184 | RepositoryOwner: job.Repository.Owner.Login, |
| 1185 | Labels: job.WorkflowJob.Labels, |
| 1186 | } |
| 1187 | |
| 1188 | if job.Repository.HTMLURL != "" && job.WorkflowJob.RunID != 0 { |
| 1189 | jobParams.WorkflowRunURL = fmt.Sprintf("%s/actions/runs/%d", strings.TrimRight(job.Repository.HTMLURL, "/"), job.WorkflowJob.RunID) |
| 1190 | } |
| 1191 | |
| 1192 | switch r.entity.EntityType { |
| 1193 | case params.ForgeEntityTypeEnterprise: |
| 1194 | jobParams.EnterpriseID = &asUUID |
| 1195 | case params.ForgeEntityTypeRepository: |
| 1196 | jobParams.RepoID = &asUUID |
| 1197 | case params.ForgeEntityTypeOrganization: |
| 1198 | jobParams.OrgID = &asUUID |
| 1199 | default: |
| 1200 | return jobParams, fmt.Errorf("unknown pool type: %s", r.entity.EntityType) |
| 1201 | } |
| 1202 | |
| 1203 | return jobParams, nil |
| 1204 | } |
| 1205 | |
| 1206 | func (r *basePoolManager) poolLabel(poolID string) string { |
| 1207 | return fmt.Sprintf("%s=%s", poolIDLabelprefix, poolID) |