Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #113 from Greybird/master
[JENKINS-40803] provide a config file resolution context for promotions
  • Loading branch information
dwnusbaum committed Mar 12, 2018
2 parents 0385250 + d61798e commit 9d05301
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 1 deletion.
13 changes: 12 additions & 1 deletion pom.xml
Expand Up @@ -97,6 +97,11 @@
<version>1.25</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>structs</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
Expand All @@ -112,7 +117,7 @@
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>token-macro</artifactId>
<version>1.12.1</version>
<version>2.0</version>
<optional>true</optional>
</dependency>
<dependency>
Expand All @@ -138,6 +143,12 @@
<version>1.4.7-jenkins-1</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>config-file-provider</artifactId>
<version>2.18</version>
<optional>true</optional>
</dependency>
<dependency>
<!-- TODO: it is something insane, no? -->
<groupId>org.jenkins-ci.plugins</groupId>
Expand Down
@@ -0,0 +1,20 @@
package hudson.plugins.promoted_builds;

import hudson.Extension;
import hudson.model.ItemGroup;
import org.jenkinsci.plugins.configfiles.ConfigContextResolver;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;

@Extension(optional = true)
@Restricted(NoExternalUse.class)
public class JobPropertyImplConfigContextResolver extends ConfigContextResolver {

@Override
public ItemGroup getConfigContext(ItemGroup itemGroup) {
if (itemGroup instanceof JobPropertyImpl) {
return JobPropertyImpl.class.cast(itemGroup).getOwner().getParent();
}
return null;
}
}
@@ -0,0 +1,55 @@
package hudson.plugins.promoted_builds;

import hudson.model.FreeStyleProject;
import hudson.model.Result;
import hudson.plugins.promoted_builds.conditions.SelfPromotionCondition;
import org.jenkinsci.plugins.configfiles.GlobalConfigFiles;
import org.jenkinsci.plugins.configfiles.builder.ConfigFileBuildStep;
import org.jenkinsci.plugins.configfiles.buildwrapper.ManagedFile;
import org.jenkinsci.plugins.configfiles.custom.CustomConfig;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;

import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.assertEquals;

public class PromotionConfigFilesTest {

private static final String CONFIG_ID = "ConfigFilesTestId";

@Rule
public JenkinsRule r = new JenkinsRule();

@Test
public void testPromotionConfigFilesAreRetrievedFromParentJobContext() throws Exception {
GlobalConfigFiles store = r.getInstance().getExtensionList(GlobalConfigFiles.class).get(GlobalConfigFiles.class);
Assert.assertTrue(store.getConfigs().isEmpty());

CustomConfig config = new CustomConfig(CONFIG_ID, "name", "comment", "content");
store.save(config);

FreeStyleProject p = r.createFreeStyleProject();

// promote if the downstream passes
JobPropertyImpl promotion = new JobPropertyImpl(p);
p.addProperty(promotion);

PromotionProcess promo1 = promotion.addProcess("promo1");
promo1.conditions.add(new SelfPromotionCondition(false));
List<ManagedFile> managedFiles = new ArrayList<>();
managedFiles.add(new ManagedFile(CONFIG_ID));
promo1.getBuildSteps().add(new ConfigFileBuildStep(managedFiles));

r.assertBuildStatusSuccess(p.scheduleBuild2(0));
// internally, the promotion is still an asynchronous process. It just happens
// right away after the build is complete.
Thread.sleep(1000);

Promotion pb = promo1.getBuilds().iterator().next();
assertEquals(Result.SUCCESS, pb.getResult());
}
}

0 comments on commit 9d05301

Please sign in to comment.