We created a plugin with step that has a few fields to run scripts from a file.
This gives us a nice editor to edit files with syntax coloring and also stored them in version control.
The step has to be have a checkout step before it to get the scripts from vcs.
Feel free to use this code:
package com.pmease.quickbuild.plugin.scriptfile;
import java.io.File;
import java.util.Stack;
import org.hibernate.validator.constraints.NotEmpty;
import com.pmease.quickbuild.Context;
import com.pmease.quickbuild.Quickbuild;
import com.pmease.quickbuild.ScriptEngine;
import com.pmease.quickbuild.annotation.Editable;
import com.pmease.quickbuild.annotation.ScriptApi;
import com.pmease.quickbuild.annotation.Scriptable;
import com.pmease.quickbuild.migration.VersionedDocument;
import com.pmease.quickbuild.stepsupport.Step;
import com.pmease.quickbuild.util.FileUtils;
import com.pmease.quickbuild.util.Util;
@Editable(name = "Execute Script From File", category = "Misc", description = "Execute specified script from file")
@ScriptApi("Execute specified script from file.")
public class ScriptFileStep extends Step {
private static final long serialVersionUID = 1L;
private String scriptPath;
private String language = "groovy";
@Editable(order = 1100, name = "Script Language", description = "Specify the language the script file is written in, MVEL , Groovy, OGNL")
@NotEmpty
@ScriptApi("Get Script Language")
@Scriptable
public String getLanguage() {
return language;
}
@Editable(order = 1200, name = "Script File", description = "Specify the path to the script file. A non-absolute path is considered to be "
+ "relative to the workspace directory.")
@NotEmpty
@ScriptApi("Get script file path.")
@Scriptable
public String getScriptPath() {
return scriptPath;
}
@SuppressWarnings("unused")
private void migrate1(VersionedDocument dom, Stack<Integer> versions) {
if (versions.empty()) {
versions.push(0);
versions.push(0);
}
}
@Override
public void run() {
File buildScriptFile = FileUtils.resolvePath(Context.getConfiguration().getWorkspaceDir(), getScriptPath());
String script = new Util().readFileAsString(buildScriptFile);
String lng = this.getLanguage();
if (lng != null)
{
if (!lng.trim().endsWith(":"))
{
lng = lng.trim() + ":\n";
}
script = lng + script;
}
Quickbuild.getInstance(ScriptEngine.class).evaluate(script, Context.buildEvalContext(this, null));
}
public void setLanguage(String language) {
this.language = language;
}
public void setScriptPath(String scriptPath) {
this.scriptPath = scriptPath;
}
}