private static Consumer<OutputListWriter> getStages(PipelineInstanceModel model) { return writer -> { model.getStageHistory().forEach(stage -> { writer.addChild(childWriter -> { StageRepresenter.toJSON(childWriter, stage, model.getName(), String.valueOf(model.getCounter())); }); }); }; } }
private List historyAsJson(BaseCollection<PipelineInstanceModel> pipelineHistory) { List json = new ArrayList(); for (PipelineInstanceModel item : pipelineHistory) { Map<String, Object> jsonMap = new LinkedHashMap<>(); jsonMap.put("pipelineId", item.getId()); jsonMap.put("label", item.getLabel()); jsonMap.put("counterOrLabel", item.getPipelineIdentifier().instanceIdentifier()); jsonMap.put("scheduled_date", timeConverter.getHumanReadableStringWithTimeZone(item.getScheduledDate())); jsonMap.put("scheduled_timestamp", item.getScheduledDate() != null ? item.getScheduledDate().getTime() : null); jsonMap.put("buildCauseBy", item.getApprovedByForDisplay()); jsonMap.put("modification_date", getModificationDate(item)); jsonMap.put("materialRevisions", materialRevisionsJson(item)); jsonMap.put("stages", stageHistoryAsJson(item, item.getStageHistory())); jsonMap.put("revision", item.getRevisionOfLatestModification()); jsonMap.put("comment", item.getComment()); json.add(jsonMap); } return json; }
private void populatePreviousStageState(PipelineInstanceModel activePipeline) { if (activePipeline.isAnyStageActive()) { StageInstanceModel activeStage = activePipeline.activeStage(); StageInstanceModel latestActive = null; long id = activePipeline.getId(); do { PipelineTimelineEntry timelineEntry = pipelineTimeline.runBefore(id, new CaseInsensitiveString(activePipeline.getName())); if (timelineEntry == null) { break; } id = timelineEntry.getId(); PipelineInstanceModel instanceModel = pipelineDao.loadHistory(id); if (instanceModel != null && instanceModel.hasStageBeenRun(activeStage.getName())) { latestActive = instanceModel.getStageHistory().byName(activeStage.getName()); } } while (latestActive == null); activeStage.setPreviousStage(latestActive); } }
public Map<String, TreeSet<PipelineInstanceModel>> groupedDependencies(){ Map<String, TreeSet<PipelineInstanceModel>> pipelineInstanceModelses = new LinkedHashMap<>(); for (PipelineInstanceModel dependency : dependencies) { if (!pipelineInstanceModelses.containsKey(dependency.getName())) { pipelineInstanceModelses.put(dependency.getName(), new TreeSet<>((me, her) -> her.getCounter().compareTo(me.getCounter()))); } pipelineInstanceModelses.get(dependency.getName()).add(dependency); } return pipelineInstanceModelses; }
private void populatePlaceHolderStages(PipelineInstanceModel pipeline) { StageInstanceModels stageHistory = pipeline.getStageHistory(); String pipelineName = pipeline.getName(); appendFollowingStagesFromConfig(pipelineName, stageHistory); }
public Document toXml(XmlWriterContext writerContext) { DOMElement root = new DOMElement("pipeline"); root.addAttribute("name", pipeline.getName()).addAttribute("counter", String.valueOf(pipeline.getCounter())).addAttribute("label", pipeline.getLabel()); Document document = new DOMDocument(root); String baseUrl = writerContext.getBaseUrl(); root.addElement("link").addAttribute("rel", "self").addAttribute("href", httpUrl(baseUrl)); root.addElement("id").addCDATA(pipeline.getPipelineIdentifier().asURN()); PipelineTimelineEntry pipelineAfter = pipeline.getPipelineAfter(); if (pipelineAfter != null) { addTimelineLink(root, baseUrl, "insertedBefore", pipelineAfter); } PipelineTimelineEntry pipelineBefore = pipeline.getPipelineBefore(); if (pipelineBefore != null) { addTimelineLink(root, baseUrl, "insertedAfter", pipelineBefore); } root.addElement("scheduleTime").addText(DateUtils.formatISO8601(pipeline.getScheduledDate())); Element materials = root.addElement("materials"); for (MaterialRevision materialRevision : pipeline.getCurrentRevisions()) { populateXml(materials, materialRevision, writerContext); } Element stages = root.addElement("stages"); for (StageInstanceModel stage : pipeline.getStageHistory()) { if (! (stage instanceof NullStageHistoryItem)) { stages.addElement("stage").addAttribute("href", StageXmlViewModel.httpUrlFor(writerContext.getBaseUrl(), stage.getId())); } } root.addElement("approvedBy").addCDATA(pipeline.getApprovedBy()); return document; }
public static void toJSON(OutputWriter jsonOutputWriter, PipelineInstanceModel model) { jsonOutputWriter .addLinks(addLinks(model)) .add("label", model.getLabel()) .add("counter", model.getCounter()) .add("triggered_by", model.getApprovedByForDisplay()) .add("scheduled_at", model.getScheduledDate()) .addChild("_embedded", childWriter -> { childWriter.addChildList("stages", getStages(model)); }); }
private void populatePipelineState(PipelineInstanceModel instance, Username username) { populatePlaceHolderStages(instance); populateCanRunStatus(username, instance); populateStageOperatePermission(instance, username); populateLockStatus(instance.getName(), username, instance); long id = pipelineTimeline.pipelineBefore(instance.getId()); if (id != -1) { PipelineInstanceModel prevPipeline = pipelineDao.loadHistory(id); instance.setPreviousPipelineLabel(prevPipeline.getLabel()); instance.setPreviousPipelineCounter(prevPipeline.getCounter()); } }
public PipelineInstanceModels findAll(String pipelineName) { PipelineInstanceModels found = PipelineInstanceModels.createPipelineInstanceModels(); for (PipelineInstanceModel pipelineInstanceModel : this) { if(pipelineInstanceModel.getName().equalsIgnoreCase(pipelineName)){ found.add(pipelineInstanceModel); } } return found; }
String pipelineName = pipelineInstance.getName(); int pipelineCounter = pipelineInstance.getCounter(); String pipelineLabel = pipelineInstance.getLabel(); if (!pipelineInstance.isAnyStageActive()) { continue; StageInstanceModel runningStage = pipelineInstance.activeStage(); for (JobHistoryItem job : runningStage.getBuildHistory()) { String stageName = runningStage.getName();
private void populatePipelineInstanceModel(PipelineConfig pipelineConfig, PipelineInstanceModel pipelineInstanceModel) { if (pipelineInstanceModel.getId() > 0) { CaseInsensitiveString pipelineName = new CaseInsensitiveString(pipelineInstanceModel.getName()); pipelineInstanceModel.setPipelineAfter(pipelineTimeline.runAfter(pipelineInstanceModel.getId(), pipelineName)); pipelineInstanceModel.setPipelineBefore(pipelineTimeline.runBefore(pipelineInstanceModel.getId(), pipelineName)); } populatePlaceHolderStages(pipelineInstanceModel); populateMaterialRevisionsOnBuildCause(pipelineInstanceModel); pipelineInstanceModel.setMaterialConfigs(pipelineConfig.materialConfigs()); pipelineInstanceModel.setLatestRevisions(materialRepository.findLatestRevisions(pipelineConfig.materialConfigs())); }
@Test public void shouldUnderstandIfHasNewRevisions() throws Exception { PipelineInstanceModel instanceModel = PipelineInstanceModel.createPipeline("pipelineName", -1, "1", BuildCause.createManualForced(), new StageInstanceModels()); MaterialRevisions latest = ModificationsMother.createHgMaterialRevisions(); instanceModel.setMaterialConfigs(new MaterialConfigs(latest.getMaterialRevision(0).getMaterial().config())); instanceModel.setLatestRevisions(latest); PipelineModel pipelineModel = new PipelineModel(instanceModel.getName(), true, true, PipelinePauseInfo.notPaused()); pipelineModel.addPipelineInstance(instanceModel); instanceModel.setMaterialRevisionsOnBuildCause(MaterialRevisions.EMPTY); assertThat(pipelineModel.hasNewRevisions(), is(true)); instanceModel.setMaterialRevisionsOnBuildCause(latest); assertThat(pipelineModel.hasNewRevisions(), is(false)); }
public static void toJSON(OutputWriter writer, TriggerOptions triggerOptions) { PipelineInstanceModel pipelineInstanceModel = triggerOptions.getPipelineInstanceModel(); writer .addLinks(outputLinkWriter -> outputLinkWriter.addAbsoluteLink("doc", Routes.Pipeline.DOC_TRIGGER_OPTIONS) .addLink("self", Routes.Pipeline.triggerOptions(pipelineInstanceModel.getName())) .addLink("schedule", Routes.Pipeline.schedule(pipelineInstanceModel.getName()))) .addChildList("variables", outputListWriter -> triggerOptions.getVariables().forEach(env -> outputListWriter.addChild(envWriter -> { envWriter .add("name", env.getName()) .add("secure", env.isSecure()); if (!env.isSecure()) { envWriter.add("value", env.getValue()); } }) )) .addChildList("materials", outputListWriter -> pipelineInstanceModel.getMaterials() .forEach(material -> outputListWriter.addChild(material(material, pipelineInstanceModel.findCurrentMaterialRevisionForUI(material))))); }
public StageInstanceModel stage(String stageName) { return getStageHistory().byName(stageName); }
public Revision getCurrentRevision(String requestedMaterialName) { for (MaterialRevision materialRevision : getCurrentRevisions()) { String materialName = CaseInsensitiveString.str(materialRevision.getMaterial().getName()); if(materialName != null && materialName.equals(requestedMaterialName)) { return materialRevision.getRevision(); } } throw new RuntimeException("material not known for pipeline " + getName()); }
private void populateDownstreamPipelineState(Username username, PipelineInstanceModel pipelineInstanceModel) { populatePlaceHolderStages(pipelineInstanceModel); populatePipelineCanRunStatus(username, pipelineInstanceModel); populateCanRunStatus(username, pipelineInstanceModel); populateStageOperatePermission(pipelineInstanceModel, username); pipelineInstanceModel.setMaterialConfigs(goConfigService.materialConfigsFor(new CaseInsensitiveString(pipelineInstanceModel.getName()))); }
public static PipelineInstanceModel custom(StageInstanceModel... stages) { PipelineInstanceModel pipelineInstanceModel = PipelineInstanceModel.createEmptyModel(); pipelineInstanceModel.setStageHistory(new StageInstanceModels()); for (StageInstanceModel stage : stages) { pipelineInstanceModel.getStageHistory().add(stage); } return pipelineInstanceModel; } }
public DependencyMaterialConfig dependencyMaterialFor(PipelineInstanceModel downStream) { return downStream.findDependencyMaterial(new CaseInsensitiveString(pipeline().getName())); }