Skip to content

Commit d7cc1f2

Browse files
authored
feat: Add BUILD_USER macro which returns the user who caused the build (#145)
1 parent 93c7f7f commit d7cc1f2

File tree

4 files changed

+90
-0
lines changed

4 files changed

+90
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.jenkinsci.plugins.tokenmacro.impl;
2+
3+
import com.google.common.collect.ListMultimap;
4+
import hudson.Extension;
5+
import hudson.FilePath;
6+
import hudson.model.AbstractBuild;
7+
import hudson.model.Cause;
8+
import hudson.model.Run;
9+
import hudson.model.TaskListener;
10+
import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException;
11+
import org.jenkinsci.plugins.tokenmacro.TokenMacro;
12+
13+
import java.io.IOException;
14+
import java.util.Collections;
15+
import java.util.List;
16+
import java.util.Map;
17+
18+
@Extension
19+
public class BuildUserMacro extends TokenMacro {
20+
public static final String MACRO_NAME = "BUILD_USER";
21+
22+
@Override
23+
public boolean acceptsMacroName(String macroName) {
24+
return macroName.equals(MACRO_NAME);
25+
}
26+
27+
@Override
28+
public List<String> getAcceptedMacroNames() {
29+
return Collections.singletonList(MACRO_NAME);
30+
}
31+
32+
@Override
33+
public String evaluate(AbstractBuild<?, ?> context, TaskListener listener, String macroName, Map<String, String> arguments, ListMultimap<String, String> argumentMultimap) throws MacroEvaluationException, IOException, InterruptedException {
34+
return evaluate(context,null,listener,macroName,arguments,argumentMultimap);
35+
}
36+
37+
@Override
38+
public String evaluate(Run<?, ?> run, FilePath workspace, TaskListener listener, String macroName, Map<String, String> arguments, ListMultimap<String, String> argumentMultimap) throws MacroEvaluationException, IOException, InterruptedException {
39+
Cause.UserIdCause userIdCause = run.getCause(Cause.UserIdCause.class);
40+
if(userIdCause != null) {
41+
return userIdCause.getUserId();
42+
}
43+
return Messages.TokenMacro_Unknown();
44+
}
45+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dt("\${BUILD_USER}")
2+
dd(_("Displays the user who caused the current build."))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
TokenMacro.Unknown=<Unknown>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.jenkinsci.plugins.tokenmacro.impl;
2+
3+
import hudson.model.AbstractBuild;
4+
import hudson.model.Cause;
5+
import hudson.model.Result;
6+
import hudson.util.StreamTaskListener;
7+
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
8+
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
9+
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
10+
import org.junit.Rule;
11+
import org.junit.Test;
12+
import org.jvnet.hudson.test.Issue;
13+
import org.jvnet.hudson.test.JenkinsRule;
14+
import org.jvnet.hudson.test.WithoutJenkins;
15+
16+
import java.io.StringWriter;
17+
18+
import static org.junit.Assert.assertEquals;
19+
import static org.junit.Assert.assertTrue;
20+
import static org.mockito.Mockito.mock;
21+
import static org.mockito.Mockito.when;
22+
23+
@SuppressWarnings({"unchecked"})
24+
public class BuildUserMacroTest {
25+
26+
@Rule
27+
public JenkinsRule j = new JenkinsRule();
28+
29+
@Test
30+
@WithoutJenkins
31+
public void testGetContent_BuildUser()
32+
throws Exception {
33+
AbstractBuild build = mock(AbstractBuild.class);
34+
Cause.UserIdCause cause = mock(Cause.UserIdCause.class);
35+
when(cause.getUserId()).thenReturn("johndoe");
36+
when(build.getCause(Cause.UserIdCause.class)).thenReturn(cause);
37+
38+
String content = new BuildUserMacro().evaluate(build, StreamTaskListener.fromStdout(), BuildUserMacro.MACRO_NAME, null, null);
39+
40+
assertEquals("johndoe", content);
41+
}
42+
}

0 commit comments

Comments
 (0)