Skip to content

Commit

Permalink
Merge pull request #22131 from famod/maven-ci-friendly-illegal-placeh…
Browse files Browse the repository at this point in the history
…older

Reject illegal placeholder in Maven CI friendly version property
  • Loading branch information
gsmet committed Dec 13, 2021
2 parents 95ee484 + fd40b5f commit f65d72f
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
Expand Up @@ -239,6 +239,11 @@ public static String resolveVersion(String rawVersion, Model rawModel) {
if (resolved == null) {
return null;
}
if (resolved.contains("${")) {
throw new IllegalArgumentException("Illegal placeholder in Maven CI friendly version property \""
+ matcher.group(1) + "\": " + resolved
+ "\n\tPlease consult https://maven.apache.org/maven-ci-friendly.html#single-project-setup");
}
matcher.appendReplacement(sb, resolved);
}
matcher.appendTail(sb);
Expand Down
@@ -0,0 +1,53 @@
package io.quarkus.bootstrap.resolver.maven.workspace;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

import org.apache.maven.model.Model;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class ModelUtilsTest {

@Test
void resolveVersion_literal() {
assertThat(ModelUtils.resolveVersion("1.0.0", new Model())).isEqualTo("1.0.0");
}

@ParameterizedTest
@ValueSource(strings = { "${revision}", "${sha1}", "${changelist}" })
void resolveVersion_notResolvable(String rawVersion) {
assertThat(ModelUtils.resolveVersion(rawVersion, new Model())).isNull();
}

@ParameterizedTest
@ValueSource(strings = { "revision", "sha1", "changelist" })
void resolveVersion_resolvable(String ciFriendlyPropertyName) {
var model = new Model();
model.getProperties().put(ciFriendlyPropertyName, "1.0.0");

assertThat(ModelUtils.resolveVersion("${" + ciFriendlyPropertyName + "}", model)).isEqualTo("1.0.0");
}

@Test
void resolveVersion_allCiFriendlyPropertyNames() {
var model = new Model();
model.getProperties().put("revision", "1");
model.getProperties().put("sha1", "2");
model.getProperties().put("changelist", "3");

assertThat(ModelUtils.resolveVersion("${revision}.${sha1}.${changelist}", model)).isEqualTo("1.2.3");
}

@Test
void resolveVersion_illegalPlaceholder() {
var model = new Model();
model.getProperties().put("revision", "${main.project.version}");
model.getProperties().put("main.project.version", "1.6.0-SNAPSHOT");

assertThatThrownBy(() -> ModelUtils.resolveVersion("${revision}", model))
.isExactlyInstanceOf(IllegalArgumentException.class)
.hasMessageContainingAll("revision", "main.project.version");
}
}

0 comments on commit f65d72f

Please sign in to comment.