diff --git a/src/main/java/org/jenkinsci/plugins/unity3d/Unity3dBuilder.java b/src/main/java/org/jenkinsci/plugins/unity3d/Unity3dBuilder.java index 56096089..38e910dc 100644 --- a/src/main/java/org/jenkinsci/plugins/unity3d/Unity3dBuilder.java +++ b/src/main/java/org/jenkinsci/plugins/unity3d/Unity3dBuilder.java @@ -62,9 +62,12 @@ public class Unity3dBuilder extends Builder { private String argLine; private String unstableReturnCodes; + private String scriptableUnity3dName; + @DataBoundConstructor - public Unity3dBuilder(String unity3dName, String argLine, String unstableReturnCodes) { + public Unity3dBuilder(String unity3dName, String scriptableUnity3dName, String argLine, String unstableReturnCodes) { this.unity3dName = unity3dName; + this.scriptableUnity3dName = scriptableUnity3dName; this.argLine = argLine; this.unstableReturnCodes = unstableReturnCodes; } @@ -106,6 +109,10 @@ public String getUnity3dName() { return unity3dName; } + public String getScriptableUnity3dName() { + return scriptableUnity3dName; + } + private static class PerformException extends Exception { private static final long serialVersionUID = 1L; @@ -134,7 +141,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListene private void _perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws IOException, InterruptedException, PerformException { EnvVars env = build.getEnvironment(listener); - Unity3dInstallation ui = getAndConfigureUnity3dInstallation(listener, env); + Unity3dInstallation ui = getAndConfigureUnity3dInstallation(build, listener, env); ArgumentListBuilder args = prepareCommandlineArguments(build, launcher, ui, env); @@ -225,8 +232,9 @@ private ArgumentListBuilder prepareCommandlineArguments(AbstractBuild build return createCommandlineArgs(exe, moduleRootRemote, vars, buildParameters); } - private Unity3dInstallation getAndConfigureUnity3dInstallation(BuildListener listener, EnvVars env) throws PerformException, IOException, InterruptedException { - Unity3dInstallation ui = getUnity3dInstallation(); + private Unity3dInstallation getAndConfigureUnity3dInstallation(AbstractBuild build, BuildListener listener, EnvVars env) throws PerformException, IOException, InterruptedException { + Map buildParameters = build.getBuildVariables(); + Unity3dInstallation ui = getUnity3dInstallation(env, buildParameters); if(ui==null) { throw new PerformException(Messages.Unity3d_NoUnity3dInstallation()); @@ -259,9 +267,20 @@ ArgumentListBuilder createCommandlineArgs(String exe, String moduleRootRemote, E * @return the Unity3d to invoke, * or null to invoke the default one. */ - private Unity3dInstallation getUnity3dInstallation() { + private Unity3dInstallation getUnity3dInstallation(EnvVars env, Map buildVariables) { + String installationToUse; + if (scriptableUnity3dName != null && scriptableUnity3dName.length() > 0) { + installationToUse = scriptableUnity3dName; + installationToUse = Util.replaceMacro(installationToUse, buildVariables); + installationToUse = Util.replaceMacro(installationToUse, env); + installationToUse = Util.replaceMacro(installationToUse, buildVariables); + } + else { + installationToUse = unity3dName; + } + for( Unity3dInstallation i : getDescriptor().getInstallations() ) { - if(unity3dName!=null && unity3dName.equals(i.getName())) + if(installationToUse!=null && installationToUse.equals(i.getName())) return i; } return null; diff --git a/src/main/resources/org/jenkinsci/plugins/unity3d/Unity3dBuilder/config.jelly b/src/main/resources/org/jenkinsci/plugins/unity3d/Unity3dBuilder/config.jelly index 802dd5af..956219e3 100644 --- a/src/main/resources/org/jenkinsci/plugins/unity3d/Unity3dBuilder/config.jelly +++ b/src/main/resources/org/jenkinsci/plugins/unity3d/Unity3dBuilder/config.jelly @@ -6,6 +6,9 @@ + + + diff --git a/src/test/java/org/jenkinsci/plugins/unity3d/Unity3dBuilderTest.java b/src/test/java/org/jenkinsci/plugins/unity3d/Unity3dBuilderTest.java index 006171be..20c38e75 100644 --- a/src/test/java/org/jenkinsci/plugins/unity3d/Unity3dBuilderTest.java +++ b/src/test/java/org/jenkinsci/plugins/unity3d/Unity3dBuilderTest.java @@ -54,7 +54,7 @@ public void buildOSXPlayerAddMissingProjectPath() { } private void ensureCreateCommandlineArgs(List expectedArgs1) { - Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", argLine, ""); + Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", "", argLine, ""); ArgumentListBuilder commandlineArgs = builder.createCommandlineArgs(exe, moduleRootRemote, new EnvVars(), new Hashtable()); assertEquals(expectedArgs1, commandlineArgs.toList()); } @@ -73,7 +73,7 @@ public void environmentAndBuildVariablesParsing() { argLine = "-param1 $param1 -param2 $param2 -projectPath XXXX"; expectedArgs = asList(exe, "-param1", "value1", "-param2", param2overwrittenValue, "-projectPath", "XXXX"); - Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", argLine, ""); + Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", "", argLine, ""); ArgumentListBuilder commandlineArgs = builder.createCommandlineArgs(exe, moduleRootRemote, vars, buildParameters); assertEquals(expectedArgs, commandlineArgs.toList()); assertEquals("Serialized arg line not modified", argLine, builder.getArgLine()); @@ -90,7 +90,7 @@ public void environmentAndBuildVariablesParsingWithEnvVarsThatReferencesBuildPar argLine = "-p1 v1 $ARGS"; expectedArgs = asList(exe, "-p1", "v1", "-projectPath", "XXXX"); - Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", argLine, ""); + Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", "", argLine, ""); ArgumentListBuilder commandlineArgs = builder.createCommandlineArgs(exe, moduleRootRemote, vars, buildParameters); assertEquals(expectedArgs, commandlineArgs.toList()); assertEquals("Serialized arg line not modified", argLine, builder.getArgLine()); @@ -108,11 +108,11 @@ public void unstableErrorCodesParsing() throws Exception { } private void ensureUnstableReturnCodesParsingWorks(Integer[] expectedResultCodes, String unstableReturnCodes) throws Exception { - Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", argLine, unstableReturnCodes); + Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", "", argLine, unstableReturnCodes); assertEquals(new HashSet(asList(expectedResultCodes)), builder.toUnstableReturnCodesSet()); } private void ensureUnstableReturnCodesParsingFails(String unstableReturnCodes) { - Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", argLine, unstableReturnCodes); + Unity3dBuilder builder = new Unity3dBuilder("Unity 3.5", "", argLine, unstableReturnCodes); try { builder.toUnstableReturnCodesSet(); Assert.fail("Expected failure");