Skip to content

Commit

Permalink
Merge pull request #996 from jenkinsci/remove-env-inject
Browse files Browse the repository at this point in the history
Remove env-inject plugin dependency
  • Loading branch information
uhafner committed Jul 18, 2021
2 parents aa48b05 + c299101 commit feb41b2
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 156 deletions.
7 changes: 0 additions & 7 deletions plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@
<httpcomponents-client.version>4.5.13-1.0</httpcomponents-client.version>
<configuration-as-code.version>1.51</configuration-as-code.version>
<job-dsl.version>1.77</job-dsl.version>
<envinject.version>2.3.0</envinject.version>
<flexible-publish.version>0.15.2</flexible-publish.version>
<pipeline-stage-step.version>2.5</pipeline-stage-step.version>
<docker-fixtures.version>1.11</docker-fixtures.version>
Expand Down Expand Up @@ -421,12 +420,6 @@
<version>${flexible-publish.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>envinject</artifactId>
<version>${envinject.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>timestamper</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ private Report scan(final Run<?, ?> run, final FilePath workspace, final LogHand
}
}

// FIXME: Pattern expansion will not work in pipelines since the run does not provide all available variables
private String expandPattern(final Run<?, ?> run, final String actualPattern) {
try {
EnvironmentResolver environmentResolver = new EnvironmentResolver();
Expand Down Expand Up @@ -308,7 +309,7 @@ public FormValidation doCheckPattern(@AncestorInPath final AbstractProject<?, ?>
* Indicates whether or not this scanning tool has a default pattern. If it
* does, it means it can never scan the console, but also means that we don't
* require a user-specified pattern as we have a usable default.
*
*
* @return true if {@link #getPattern()} returns a non-empty string.
*/
public boolean hasDefaultPattern() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,8 @@ protected String createScanForIssuesStep(final AnalysisModelParser tool, final S
* @return the pipeline step
*/
protected String createRecordIssuesStep(final AnalysisModelParser tool) {
return String.format("recordIssues(tools: [%s(pattern: '**/*issues.txt', reportEncoding:'UTF-8')])", tool.getSymbolName());
return String.format("recordIssues(tools: [%s(pattern: '**/*issues.txt', reportEncoding:'UTF-8')])",
tool.getSymbolName());
}

/**
Expand Down Expand Up @@ -905,7 +906,6 @@ protected void assertSuccessfulBuild(final Run<?, ?> run) {
}
}


/**
* Schedules a build for the specified job and waits for the job to finish. After the build has been finished the
* builds result is checked to be equals to {@code expectedResult}.
Expand Down Expand Up @@ -1427,6 +1427,38 @@ protected String getConsoleLog(final Run<?, ?> build) {
}
}

/**
* Sets the specified environment variables in Jenkins global configuration.
*
* @param vars
* the variables to set
* @see #env(String, String)
*/
protected void setEnvironmentVariables(final Entry... vars) {
try {
getJenkins().getInstance().getNodeProperties().replaceBy(
Collections.singleton(new EnvironmentVariablesNodeProperty(vars)));
}
catch (IOException exception) {
throw new AssertionError(exception);
}
}

/**
* Creates a new environment variable.
*
* @param key
* the key
* @param value
* the value
*
* @return the environment variable
* @see #setEnvironmentVariables(Entry...)
*/
protected Entry env(final String key, final String value) {
return new Entry(key, value);
}

@SuppressWarnings({"PMD.AvoidPrintStackTrace", "PMD.SystemPrintln"})
private static class IntegrationTestJavaScriptErrorListener implements JavaScriptErrorListener {
/**
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import io.jenkins.plugins.analysis.warnings.CheckStyle;
import io.jenkins.plugins.analysis.warnings.Eclipse;
import io.jenkins.plugins.analysis.warnings.FindBugs;
import io.jenkins.plugins.analysis.warnings.Java;
import io.jenkins.plugins.analysis.warnings.Pmd;
import io.jenkins.plugins.analysis.warnings.RegisteredParser;
import io.jenkins.plugins.analysis.warnings.tasks.OpenTasks;
Expand All @@ -48,7 +49,7 @@
* @author Martin Weibel
* @author Ullrich Hafner
*/
@SuppressWarnings({"PMD.ExcessiveImports", "ClassDataAbstractionCoupling"})
@SuppressWarnings({"PMD.ExcessiveImports", "checkstyle:ClassFanOutComplexity"})
public class MiscIssuesRecorderITest extends IntegrationTestWithJenkinsPerSuite {
private static final Pattern TAG_REGEX = Pattern.compile(">(.+?)</", Pattern.DOTALL);

Expand Down Expand Up @@ -648,6 +649,89 @@ public void shouldParseCheckstyleIfIsEnabledForFailureAndResultIsSuccess() {
assertThatFailureFlagIsNotUsed(false);
}

/**
* Make sure that a file pattern containing environment variables correctly matches the expected files.
*/
@Test
public void shouldResolveEnvVariablesInPattern() {
FreeStyleProject project = createJavaWarningsFreestyleProject("**/*.${FILE_EXT}");

setEnvironmentVariables(env("FILE_EXT", "txt"));

createFileWithJavaWarnings("javac.txt", project, 1, 2, 3);
createFileWithJavaWarnings("javac.csv", project, 1, 2);

AnalysisResult analysisResult = scheduleBuildAndAssertStatus(project, Result.SUCCESS);

assertThat(analysisResult).hasTotalSize(3);
assertThat(analysisResult.getInfoMessages()).contains(String.format(
"Searching for all files in '%s' that match the pattern '**/*.txt'", getWorkspace(project)));
assertThat(analysisResult.getInfoMessages()).contains("-> found 1 file");
}

/**
* Make sure that a file pattern containing environment variables which in turn contain environment variables again
* can be correctly resolved. The Environment variables should be injected with the EnvInject plugin.
*/
@Test
public void shouldResolveNestedEnvVariablesInPattern() {
FreeStyleProject project = createJavaWarningsFreestyleProject("${FILE_PATTERN}");

setEnvironmentVariables(
env("FILE_PATTERN", "${FILE_NAME}.${FILE_EXT}"),
env("FILE_NAME", "*_javac"),
env("FILE_EXT", "txt"));

createFileWithJavaWarnings("A_javac.txt", project, 1, 2);
createFileWithJavaWarnings("B_javac.txt", project, 3, 4);
createFileWithJavaWarnings("C_javac.csv", project, 11, 12, 13);
createFileWithJavaWarnings("D_tmp.csv", project, 21, 22, 23);
createFileWithJavaWarnings("E_tmp.txt", project, 31, 32, 33);

AnalysisResult analysisResult = scheduleBuildAndAssertStatus(project, Result.SUCCESS);

assertThat(analysisResult).hasTotalSize(4);
assertThat(analysisResult.getInfoMessages()).contains(String.format(
"Searching for all files in '%s' that match the pattern '*_javac.txt'", getWorkspace(project)));
assertThat(analysisResult.getInfoMessages()).contains("-> found 2 files");
}

/**
* Create a Freestyle Project with enabled Java warnings.
*
* @param pattern
* The pattern that is set for the warning files.
*
* @return The created Freestyle Project.
*/
private FreeStyleProject createJavaWarningsFreestyleProject(final String pattern) {
FreeStyleProject project = createFreeStyleProject();
Java java = new Java();
java.setPattern(pattern);
enableWarnings(project, java);
return project;
}

/**
* Create a file with some java warnings in the workspace of the project.
*
* @param fileName
* of the file to which the warnings will be written
* @param project
* in which the file will be placed
* @param linesWithWarning
* all lines in which a mocked warning should be placed
*/
private void createFileWithJavaWarnings(final String fileName, final FreeStyleProject project,
final int... linesWithWarning) {
StringBuilder warningText = new StringBuilder();
for (int lineNumber : linesWithWarning) {
warningText.append(createJavaWarning("C:\\Path\\SourceFile.java", lineNumber)).append("\n");
}

createFileInWorkspace(project, fileName, warningText.toString());
}

private void assertThatFailureFlagIsNotUsed(final boolean isEnabledForFailure) {
FreeStyleProject project = createCheckStyleProject(isEnabledForFailure);

Expand Down

0 comments on commit feb41b2

Please sign in to comment.