Skip to content

Commit 20e71b7

Browse files
whitewhite
authored andcommitted
Fix bugs and refactor based on code review
- HelpMojo: add missing venvOutputDir parameter in properties goal help - Gradle plugin build.gradle: add java plugin, withSourcesJar(), toolchain(Java 17) - Extract common TestLog inner class to shared file in Maven plugin tests - Refactor detectTargetTriple: move switch logic to PythonResolver, delegate from PythonDownloader and VenvTask - Fix Linux aarch64 detection in PythonResolver.detectTargetTriple() - publish-gradle-plugin.yml: add --no-configuration-cache, fix release condition, remove hardcoded VERSION fallback
1 parent e965c4e commit 20e71b7

10 files changed

Lines changed: 72 additions & 125 deletions

File tree

.github/workflows/publish-gradle-plugin.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,19 @@ jobs:
3434
run: |
3535
if [[ "$GITHUB_REF" == refs/tags/plugin-v* ]]; then
3636
echo "VERSION=${GITHUB_REF_NAME#plugin-v}" >> $GITHUB_OUTPUT
37-
else
38-
echo "VERSION=1.0.2" >> $GITHUB_OUTPUT
3937
fi
4038
4139
- name: Build
42-
run: ./gradlew build -PreleaseVersion=${{ steps.version.outputs.VERSION }}
40+
run: ./gradlew build${{ steps.version.outputs.VERSION && format(' -PreleaseVersion={0}', steps.version.outputs.VERSION) || '' }}
4341

4442
- name: Publish to Gradle Plugin Portal
45-
run: ./gradlew publishPlugins -PreleaseVersion=${{ steps.version.outputs.VERSION }}
43+
run: ./gradlew publishPlugins --no-configuration-cache${{ steps.version.outputs.VERSION && format(' -PreleaseVersion={0}', steps.version.outputs.VERSION) || '' }}
4644
env:
4745
GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }}
4846
GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }}
4947

5048
- name: Create GitHub Release
51-
if: startsWith(github.ref, 'refs/tags/')
49+
if: steps.version.outputs.VERSION != ''
5250
uses: softprops/action-gh-release@v2
5351
with:
5452
name: "python-embed-gradle-plugin v${{ steps.version.outputs.VERSION }}"

python-embed-build-common/src/main/java/io/github/howtis/pythonembed/build/PythonDownloader.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -117,21 +117,7 @@ public static Path download(String version, String targetOs, Path cacheDir,
117117

118118
private static String detectTargetTriple(String targetOs) {
119119
String arch = System.getProperty("os.arch", "").toLowerCase();
120-
return switch (targetOs) {
121-
case "windows" -> "x86_64-pc-windows-msvc";
122-
case "macos" -> {
123-
if (arch.contains("aarch64") || arch.contains("arm")) {
124-
yield "aarch64-apple-darwin";
125-
}
126-
yield "x86_64-apple-darwin";
127-
}
128-
default -> {
129-
if (arch.contains("aarch64") || arch.contains("arm64")) {
130-
yield "aarch64-unknown-linux-gnu";
131-
}
132-
yield "x86_64-unknown-linux-gnu";
133-
}
134-
};
120+
return PythonResolver.detectTargetTriple(targetOs, arch);
135121
}
136122

137123
private static String fetchLatestReleaseTag(Consumer<String> logger) throws IOException {

python-embed-build-common/src/main/java/io/github/howtis/pythonembed/build/PythonResolver.java

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,18 +101,33 @@ public static Path resolveVenvPython(Path venvDir) {
101101
* "x86_64-apple-darwin", or "aarch64-apple-darwin"
102102
*/
103103
public static String detectTargetTriple() {
104-
String osName = System.getProperty("os.name", "").toLowerCase();
105104
String osArch = System.getProperty("os.arch", "").toLowerCase();
105+
return detectTargetTriple(detectTargetOs(), osArch);
106+
}
106107

107-
if (osName.contains("win")) {
108-
return "x86_64-pc-windows-msvc";
109-
} else if (osName.contains("mac")) {
110-
return osArch.contains("aarch64")
111-
? "aarch64-apple-darwin"
112-
: "x86_64-apple-darwin";
113-
} else {
114-
return "x86_64-unknown-linux-gnu";
115-
}
108+
/**
109+
* Detects the target triple for python-build-standalone downloads.
110+
*
111+
* @param targetOs "windows", "linux", or "macos"
112+
* @param arch "x86_64", "amd64", "aarch64", "arm64", etc.
113+
* @return target triple string for python-build-standalone
114+
*/
115+
public static String detectTargetTriple(String targetOs, String arch) {
116+
return switch (targetOs) {
117+
case "windows" -> "x86_64-pc-windows-msvc";
118+
case "macos" -> {
119+
if (arch.contains("aarch64") || arch.contains("arm")) {
120+
yield "aarch64-apple-darwin";
121+
}
122+
yield "x86_64-apple-darwin";
123+
}
124+
default -> {
125+
if (arch.contains("aarch64") || arch.contains("arm64")) {
126+
yield "aarch64-unknown-linux-gnu";
127+
}
128+
yield "x86_64-unknown-linux-gnu";
129+
}
130+
};
116131
}
117132

118133
/**

python-embed-gradle-plugin/build.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
plugins {
2+
id 'java'
23
id 'com.gradle.plugin-publish' version '2.1.1'
34
}
45

56
group = 'io.github.howtis'
67
version = project.findProperty('releaseVersion') ?: '1.0.2'
78

9+
java {
10+
withSourcesJar()
11+
toolchain {
12+
languageVersion = JavaLanguageVersion.of(17)
13+
}
14+
}
15+
816
repositories {
917
mavenCentral()
1018
}

python-embed-gradle-plugin/src/main/java/io/github/howtis/pythonembed/gradle/VenvTask.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -167,21 +167,7 @@ Path findPythonInDir(Path dir) {
167167
String detectTargetTriple() {
168168
String targetOs = resolveTargetOs();
169169
String arch = System.getProperty("os.arch", "").toLowerCase();
170-
return switch (targetOs) {
171-
case "windows" -> "x86_64-pc-windows-msvc";
172-
case "macos" -> {
173-
if (arch.contains("aarch64") || arch.contains("arm")) {
174-
yield "aarch64-apple-darwin";
175-
}
176-
yield "x86_64-apple-darwin";
177-
}
178-
default -> {
179-
if (arch.contains("aarch64") || arch.contains("arm64")) {
180-
yield "aarch64-unknown-linux-gnu";
181-
}
182-
yield "x86_64-unknown-linux-gnu";
183-
}
184-
};
170+
return PythonResolver.detectTargetTriple(targetOs, arch);
185171
}
186172

187173
void extractTarGz(Path tarGzFile, Path targetDir) throws IOException {

python-embed-maven-plugin/src/main/java/io/github/howtis/pythonembed/maven/HelpMojo.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ private String buildDetailHelp(String version, String goal) {
108108
sb.append(indent("skip", "Skip plugin execution (default: false)", indentSize));
109109
sb.append(indent("targetOs", "Target OS: windows, linux, macos (auto-detect if not set)", indentSize));
110110
} else if ("properties".equals(goal)) {
111+
sb.append(indent("venvOutputDir", "Venv output directory (default: ${project.build.directory}/python-venv)", indentSize));
111112
sb.append(indent("skip", "Skip plugin execution (default: false)", indentSize));
112113
} else if ("help".equals(goal)) {
113114
sb.append(indent("detail", "Display all settable properties (default: false)", indentSize));

python-embed-maven-plugin/src/test/java/io/github/howtis/pythonembed/maven/HelpMojoTest.java

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.github.howtis.pythonembed.maven;
22

33
import org.apache.maven.plugin.MojoExecutionException;
4-
import org.apache.maven.plugin.logging.Log;
54
import org.junit.jupiter.api.Test;
65

76
import static org.junit.jupiter.api.Assertions.*;
@@ -88,33 +87,4 @@ void shouldHandleUnknownGoal() throws Exception {
8887
"Should still show goal header even for unknown goal");
8988
}
9089

91-
/**
92-
* Minimal in-memory Log implementation for testing.
93-
*/
94-
private static class TestLog implements Log {
95-
private final StringBuilder info = new StringBuilder();
96-
private final StringBuilder warn = new StringBuilder();
97-
private final StringBuilder error = new StringBuilder();
98-
99-
boolean containsInfo(String text) {
100-
return info.toString().contains(text);
101-
}
102-
103-
@Override public boolean isDebugEnabled() { return false; }
104-
@Override public void debug(CharSequence content) {}
105-
@Override public void debug(CharSequence content, Throwable error) {}
106-
@Override public void debug(Throwable error) {}
107-
@Override public void info(CharSequence content) { info.append(content).append('\n'); }
108-
@Override public void info(CharSequence content, Throwable t) { info.append(content).append('\n'); }
109-
@Override public void info(Throwable t) { info.append(t.getMessage()).append('\n'); }
110-
@Override public void warn(CharSequence content) { warn.append(content).append('\n'); }
111-
@Override public void warn(CharSequence content, Throwable t) { warn.append(content).append('\n'); }
112-
@Override public void warn(Throwable t) { warn.append(t.getMessage()).append('\n'); }
113-
@Override public void error(CharSequence content) { this.error.append(content).append('\n'); }
114-
@Override public void error(CharSequence content, Throwable t) { this.error.append(content).append('\n'); }
115-
@Override public void error(Throwable t) { this.error.append(t.getMessage()).append('\n'); }
116-
@Override public boolean isInfoEnabled() { return true; }
117-
@Override public boolean isWarnEnabled() { return true; }
118-
@Override public boolean isErrorEnabled() { return true; }
119-
}
12090
}

python-embed-maven-plugin/src/test/java/io/github/howtis/pythonembed/maven/PropertiesMojoTest.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import org.apache.maven.model.Build;
44
import org.apache.maven.plugin.MojoExecutionException;
5-
import org.apache.maven.plugin.logging.Log;
65
import org.apache.maven.project.MavenProject;
76
import org.junit.jupiter.api.Test;
87
import org.junit.jupiter.api.io.TempDir;
@@ -129,28 +128,4 @@ private static void setField(Object target, String fieldName, Object value) thro
129128
field.set(target, value);
130129
}
131130

132-
private static class TestLog implements Log {
133-
private final StringBuilder info = new StringBuilder();
134-
135-
boolean containsInfo(String text) {
136-
return info.toString().contains(text);
137-
}
138-
139-
@Override public boolean isDebugEnabled() { return false; }
140-
@Override public void debug(CharSequence content) {}
141-
@Override public void debug(CharSequence content, Throwable error) {}
142-
@Override public void debug(Throwable error) {}
143-
@Override public void info(CharSequence content) { info.append(content).append('\n'); }
144-
@Override public void info(CharSequence content, Throwable t) { info.append(content).append('\n'); }
145-
@Override public void info(Throwable t) { info.append(t.getMessage()).append('\n'); }
146-
@Override public void warn(CharSequence content) {}
147-
@Override public void warn(CharSequence content, Throwable t) {}
148-
@Override public void warn(Throwable t) {}
149-
@Override public void error(CharSequence content) {}
150-
@Override public void error(CharSequence content, Throwable t) {}
151-
@Override public void error(Throwable t) {}
152-
@Override public boolean isInfoEnabled() { return true; }
153-
@Override public boolean isWarnEnabled() { return true; }
154-
@Override public boolean isErrorEnabled() { return true; }
155-
}
156131
}

python-embed-maven-plugin/src/test/java/io/github/howtis/pythonembed/maven/SetupMojoTest.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import org.apache.maven.execution.MavenSession;
44
import org.apache.maven.plugin.MojoExecutionException;
5-
import org.apache.maven.plugin.logging.Log;
65
import org.apache.maven.project.MavenProject;
76
import org.junit.jupiter.api.Test;
87
import org.junit.jupiter.api.io.TempDir;
@@ -125,28 +124,4 @@ private static void setField(Object target, String fieldName, Object value) thro
125124
field.set(target, value);
126125
}
127126

128-
private static class TestLog implements Log {
129-
private final StringBuilder info = new StringBuilder();
130-
131-
boolean containsInfo(String text) {
132-
return info.toString().contains(text);
133-
}
134-
135-
@Override public boolean isDebugEnabled() { return false; }
136-
@Override public void debug(CharSequence content) {}
137-
@Override public void debug(CharSequence content, Throwable error) {}
138-
@Override public void debug(Throwable error) {}
139-
@Override public void info(CharSequence content) { info.append(content).append('\n'); }
140-
@Override public void info(CharSequence content, Throwable t) { info.append(content).append('\n'); }
141-
@Override public void info(Throwable t) { info.append(t.getMessage()).append('\n'); }
142-
@Override public void warn(CharSequence content) {}
143-
@Override public void warn(CharSequence content, Throwable t) {}
144-
@Override public void warn(Throwable t) {}
145-
@Override public void error(CharSequence content) {}
146-
@Override public void error(CharSequence content, Throwable t) {}
147-
@Override public void error(Throwable t) {}
148-
@Override public boolean isInfoEnabled() { return true; }
149-
@Override public boolean isWarnEnabled() { return true; }
150-
@Override public boolean isErrorEnabled() { return true; }
151-
}
152127
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.github.howtis.pythonembed.maven;
2+
3+
import org.apache.maven.plugin.logging.Log;
4+
5+
/**
6+
* Minimal in-memory {@link Log} implementation for testing.
7+
*/
8+
final class TestLog implements Log {
9+
private final StringBuilder info = new StringBuilder();
10+
private final StringBuilder warn = new StringBuilder();
11+
private final StringBuilder error = new StringBuilder();
12+
13+
boolean containsInfo(String text) {
14+
return info.toString().contains(text);
15+
}
16+
17+
@Override public boolean isDebugEnabled() { return false; }
18+
@Override public void debug(CharSequence content) {}
19+
@Override public void debug(CharSequence content, Throwable error) {}
20+
@Override public void debug(Throwable error) {}
21+
@Override public void info(CharSequence content) { info.append(content).append('\n'); }
22+
@Override public void info(CharSequence content, Throwable t) { info.append(content).append('\n'); }
23+
@Override public void info(Throwable t) { info.append(t.getMessage()).append('\n'); }
24+
@Override public void warn(CharSequence content) { warn.append(content).append('\n'); }
25+
@Override public void warn(CharSequence content, Throwable t) { warn.append(content).append('\n'); }
26+
@Override public void warn(Throwable t) { warn.append(t.getMessage()).append('\n'); }
27+
@Override public void error(CharSequence content) { error.append(content).append('\n'); }
28+
@Override public void error(CharSequence content, Throwable t) { error.append(content).append('\n'); }
29+
@Override public void error(Throwable t) { error.append(t.getMessage()).append('\n'); }
30+
@Override public boolean isInfoEnabled() { return true; }
31+
@Override public boolean isWarnEnabled() { return true; }
32+
@Override public boolean isErrorEnabled() { return true; }
33+
}

0 commit comments

Comments
 (0)