Skip to content

Commit 7b2601d

Browse files
authored
Update injector to work with Maven Central Publisher Portal endpoint (#553)
see junit-team/junit-framework#4531
1 parent 3982154 commit 7b2601d

File tree

3 files changed

+75
-38
lines changed

3 files changed

+75
-38
lines changed

junit5-modular-world/BUILDING

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import java.net.*
12
import java.nio.file.*
23
import java.util.function.*
34
import java.util.spi.*
@@ -98,7 +99,12 @@ Path get(String directory, URI uri) throws Exception {
9899
}
99100
System.out.printf("[get] %s%n", target);
100101
Files.createDirectories(folder);
101-
try (InputStream sourceStream = uri.toURL().openStream(); OutputStream targetStream = Files.newOutputStream(target)) {
102+
var connection = (HttpURLConnection) uri.toURL().openConnection();
103+
if ("central.sonatype.com".equals(uri.getHost())) {
104+
var mavenCentralUserToken = Objects.requireNonNull(System.getenv("MAVEN_CENTRAL_USER_TOKEN"), "The MAVEN_CENTRAL_USER_TOKEN environment variable must be set");
105+
connection.setRequestProperty("Authorization", "Bearer " + mavenCentralUserToken);
106+
}
107+
try (InputStream sourceStream = connection.getInputStream(); OutputStream targetStream = Files.newOutputStream(target)) {
102108
sourceStream.transferTo(targetStream);
103109
}
104110
return target;

src/StagingRepoInjector.java

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,62 +18,70 @@
1818
public class StagingRepoInjector {
1919

2020
public static void main(String[] args) throws Exception {
21-
new StagingRepoInjector(args[0]).appendAfter();
21+
new StagingRepoInjector(args[0]).inject();
2222
}
2323

2424
private final String stagingRepoUrl;
2525

26-
public StagingRepoInjector(String stagingRepoUrl) {
26+
private StagingRepoInjector(String stagingRepoUrl) {
2727
this.stagingRepoUrl = stagingRepoUrl;
2828
}
2929

30-
private void appendAfter() throws Exception {
30+
private void inject() throws Exception {
3131

32-
appendAfter("junit5-jupiter-extensions/build.gradle", "mavenCentral()",
33-
"%n\tmaven { url = '%s' }".formatted(stagingRepoUrl));
32+
var gradleGroovyDslSnippet = """
33+
34+
maven {
35+
url = '%s'
36+
credentials(HttpHeaderCredentials) {
37+
name = 'Authorization'
38+
value = "Bearer ${System.getenv('MAVEN_CENTRAL_USER_TOKEN')}"
39+
}
40+
authentication {
41+
header(HttpHeaderAuthentication)
42+
}
43+
}
44+
"""
45+
.formatted(stagingRepoUrl);
46+
47+
var gradleKotlinDslSnippet = """
48+
49+
maven {
50+
url = uri("%s")
51+
credentials(HttpHeaderCredentials::class) {
52+
name = "Authorization"
53+
value = "Bearer ${System.getenv("MAVEN_CENTRAL_USER_TOKEN")}"
54+
}
55+
authentication {
56+
create<HttpHeaderAuthentication>("header")
57+
}
58+
}
59+
"""
60+
.formatted(stagingRepoUrl);
3461

35-
replace("junit5-jupiter-starter-ant/build.sh", "https://repo1.maven.org/maven2", stagingRepoUrl);
62+
appendAfter("junit5-jupiter-extensions/build.gradle", "mavenCentral()",
63+
gradleGroovyDslSnippet);
3664

37-
appendAfter("junit5-jupiter-starter-bazel/MODULE.bazel", "\"https://repo1.maven.org/maven2\",",
38-
"%n \"%s\",".formatted(stagingRepoUrl));
65+
replace("junit5-jupiter-starter-ant/build.sh", "\"https://repo1.maven.org/maven2",
66+
"--header \"Authorization: Bearer $MAVEN_CENTRAL_USER_TOKEN\" \"%s".formatted(stagingRepoUrl));
3967

4068
appendAfter("junit5-jupiter-starter-gradle/build.gradle", "mavenCentral()",
41-
"%n\tmaven { url = '%s' }".formatted(stagingRepoUrl));
69+
gradleGroovyDslSnippet);
4270

4371
appendAfter("junit5-jupiter-starter-gradle-groovy/build.gradle", "mavenCentral()",
44-
"%n\tmaven { url = '%s' }".formatted(stagingRepoUrl));
72+
gradleGroovyDslSnippet);
4573

4674
appendAfter("junit5-jupiter-starter-gradle-kotlin/build.gradle.kts", "mavenCentral()",
47-
"%n\tmaven(url = \"%s\")".formatted(stagingRepoUrl));
48-
49-
var mavenPomRepo = """
50-
51-
52-
\t<repositories>
53-
\t\t<repository>
54-
\t\t\t<id>central-staging</id>
55-
\t\t\t<url>%s</url>
56-
\t\t</repository>
57-
\t</repositories>
58-
""".stripIndent().stripTrailing().formatted(stagingRepoUrl);
59-
60-
appendAfter("junit5-jupiter-starter-maven/pom.xml", "</build>", mavenPomRepo);
61-
62-
appendAfter("junit5-jupiter-starter-maven-kotlin/pom.xml", "</build>", mavenPomRepo);
63-
64-
appendAtEnd("junit5-jupiter-starter-sbt/build.sbt",
65-
"%nresolvers += \"central-staging\" at \"%s\"%n".formatted(stagingRepoUrl));
75+
gradleKotlinDslSnippet);
6676

6777
appendAfter("junit5-migration-gradle/build.gradle", "mavenCentral()",
68-
"%n\tmaven { url = '%s' }".formatted(stagingRepoUrl));
69-
70-
appendAfter("junit5-migration-maven/pom.xml", "</build>", mavenPomRepo);
78+
gradleGroovyDslSnippet);
7179

7280
replace("junit5-modular-world/BUILDING", "\"https://repo1.maven.org/maven2\"",
7381
"group.startsWith(\"org.junit\") ? \"%s\" : \"https://repo1.maven.org/maven2\"".formatted(stagingRepoUrl));
7482

7583
appendAfter("junit5-multiple-engines/build.gradle.kts", "mavenCentral()",
76-
"%n\tmaven(url = \"%s\")".formatted(stagingRepoUrl));
84+
gradleKotlinDslSnippet);
7785
}
7886

7987
void appendAfter(String path, String token, String addedContent) throws IOException {
@@ -94,10 +102,6 @@ void replace(String path, String token, String replacement) throws IOException {
94102
});
95103
}
96104

97-
void appendAtEnd(String path, String addedContent) throws IOException {
98-
process(path, content -> content.append(addedContent));
99-
}
100-
101105
void process(String path, Consumer<StringBuilder> modification) throws IOException {
102106
System.out.printf("Processing %s...", path);
103107
System.out.flush();
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
3+
<servers>
4+
<server>
5+
<id>central-staging</id>
6+
<configuration>
7+
<httpHeaders>
8+
<property>
9+
<name>Authorization</name>
10+
<value>Bearer ${env.MAVEN_CENTRAL_USER_TOKEN}</value>
11+
</property>
12+
</httpHeaders>
13+
</configuration>
14+
</server>
15+
</servers>
16+
<profiles>
17+
<profile>
18+
<id>central-staging</id>
19+
<repositories>
20+
<repository>
21+
<id>central-staging</id>
22+
<url>${env.STAGING_REPO_URL}</url>
23+
</repository>
24+
</repositories>
25+
</profile>
26+
</profiles>
27+
</settings>

0 commit comments

Comments
 (0)