private boolean isGoodReasonToSchedule(PipelineConfig pipelineConfig, BuildCause buildCause, BuildType buildType, boolean materialConfigurationChanged) { if (buildCause == null) return false; boolean validCause = buildType.isValidBuildCause(pipelineConfig, buildCause); if (pipelineConfig.isConfigOriginSameAsOneOfMaterials()) { if (buildCause.isForced()) { // build is manual - skip scm-config consistency return validCause; } if (this.isConfigOriginSameAsUpstream(pipelineConfig, buildCause)) { // configuration is up to date - skip scm-config consistency check return validCause; } // then we need config and material revisions to be consistent if (!buildCause.pipelineConfigAndMaterialRevisionMatch(pipelineConfig)) { return false; } return validCause; } else { return materialConfigurationChanged || validCause; } }
@Test public void shouldReturnFalseIfOneOfPipelineMaterialsIsTheSameAsConfigOrigin_WhenOriginIsFile() { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("pipeline", "stage", "build"); pipelineConfig.setOrigin(new FileConfigOrigin()); assertThat(pipelineConfig.isConfigOriginSameAsOneOfMaterials(), is(false)); }
public boolean pipelineConfigAndMaterialRevisionMatch(PipelineConfig pipelineConfig){ if(!pipelineConfig.isConfigOriginSameAsOneOfMaterials()) { return true; } RepoConfigOrigin repoConfigOrigin = (RepoConfigOrigin)pipelineConfig.getOrigin(); MaterialConfig configAndCodeMaterial = repoConfigOrigin.getMaterial(); //TODO if revision in any of the pipelines match MaterialRevision revision = this.getMaterialRevisions().findRevisionForFingerPrint(configAndCodeMaterial.getFingerprint()); String revisionString = revision.getRevision().getRevision(); if(pipelineConfig.isConfigOriginFromRevision(revisionString)) { return true; } return false; }
@Test public void shouldReturnFalseWhenOneOfPipelineMaterialsIsNotTheSameAsConfigOrigin() { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("pipeline", "stage", "build"); MaterialConfig material = new GitMaterialConfig("http://git"); pipelineConfig.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(material, "plugin"), "1233")); assertThat(pipelineConfig.isConfigOriginSameAsOneOfMaterials(), is(false)); }
@Test public void shouldReturnTrueWhenOneOfPipelineMaterialsIsTheSameAsConfigOrigin() { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("pipeline", "stage", "build"); MaterialConfig material = pipelineConfig.materialConfigs().first(); pipelineConfig.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(material, "plugin"), "1233")); assertThat(pipelineConfig.isConfigOriginSameAsOneOfMaterials(), is(true)); }
public void assertPipelineConfigAndMaterialRevisionMatch(PipelineConfig pipelineConfig) { if(!pipelineConfig.isConfigOriginSameAsOneOfMaterials()) { return; } // then config and code revision must both match if(this.trigger.isForced() || this.hasDependencyMaterials()) { // we should not check when manual trigger because of re-runs // and possibility to specify revisions to run with return; } RepoConfigOrigin repoConfigOrigin = (RepoConfigOrigin)pipelineConfig.getOrigin(); MaterialConfig configAndCodeMaterial = repoConfigOrigin.getMaterial(); //TODO if revision in any of the pipelines match MaterialRevision revision = this.getMaterialRevisions().findRevisionForFingerPrint(configAndCodeMaterial.getFingerprint()); String revisionString = revision.getRevision().getRevision(); if(pipelineConfig.isConfigOriginFromRevision(revisionString)) { return; } invalidRevision(repoConfigOrigin.getRevision(),revisionString); }
@Test public void shouldReturnTrueWhenOneOfPipelineMaterialsIsTheSameAsConfigOriginButDestinationIsDifferent() { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("pipeline", "stage", "build"); pipelineConfig.materialConfigs().clear(); GitMaterialConfig pipeMaterialConfig = new GitMaterialConfig("http://git"); pipeMaterialConfig.setFolder("dest1"); pipelineConfig.materialConfigs().add(pipeMaterialConfig); GitMaterialConfig repoMaterialConfig = new GitMaterialConfig("http://git"); pipelineConfig.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(repoMaterialConfig, "plugin"), "1233")); assertThat(pipelineConfig.isConfigOriginSameAsOneOfMaterials(), is(true)); }