From 569590fe86525c5abd667fee9785d396b383e9a2 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Wed, 7 Aug 2024 08:52:26 +0200 Subject: [PATCH 01/25] Use SAX-PD-2.0 license instead of SAX-PD --- src/runit/LicenseCheck.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runit/LicenseCheck.java b/src/runit/LicenseCheck.java index 2f61ed0..e6912cb 100644 --- a/src/runit/LicenseCheck.java +++ b/src/runit/LicenseCheck.java @@ -40,7 +40,7 @@ public class LicenseCheck { // Very permissive licenses, close to public domain "ANTLR-PD", // "CC0-1.0", // - "SAX-PD", // + "SAX-PD-2.0", // // GPL is only allowed with classpath exception, // and only as alternative to permissive licenses "EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0", // From 9268133272f58c6915207a19878cf5a56e825d3c Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Thu, 8 Aug 2024 16:00:18 +0200 Subject: [PATCH 02/25] Try enabling colors --- javapackages.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javapackages.sh b/javapackages.sh index cdbd554..84e53da 100755 --- a/javapackages.sh +++ b/javapackages.sh @@ -22,7 +22,7 @@ command=(podman run --rm --security-opt='label=disable' command+=( --env TMT_TEST_DATA="/mnt/tmt/${test_data}" --env TMT_TREE="/mnt/tmt/tree" - "${JP_VALIDATOR_IMAGE}" org.fedoraproject.javapackages.validator.MainTmt -x + "${JP_VALIDATOR_IMAGE}" org.fedoraproject.javapackages.validator.MainTmt -r -x -f '/mnt/test-artifacts/' ) [ -n "${JP_VALIDATOR_SOURCE_PATH}" ] && command+=( From abf645f38809d7462b5d31435be35d6e8221bc61 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Thu, 8 Aug 2024 17:33:55 +0200 Subject: [PATCH 03/25] Revert "Try enabling colors" This reverts commit 9268133272f58c6915207a19878cf5a56e825d3c. --- javapackages.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javapackages.sh b/javapackages.sh index 84e53da..cdbd554 100755 --- a/javapackages.sh +++ b/javapackages.sh @@ -22,7 +22,7 @@ command=(podman run --rm --security-opt='label=disable' command+=( --env TMT_TEST_DATA="/mnt/tmt/${test_data}" --env TMT_TREE="/mnt/tmt/tree" - "${JP_VALIDATOR_IMAGE}" org.fedoraproject.javapackages.validator.MainTmt -r -x + "${JP_VALIDATOR_IMAGE}" org.fedoraproject.javapackages.validator.MainTmt -x -f '/mnt/test-artifacts/' ) [ -n "${JP_VALIDATOR_SOURCE_PATH}" ] && command+=( From b0300a3876de27bfcf7666db9b0fc4fe84924801 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 9 Aug 2024 10:25:44 +0200 Subject: [PATCH 04/25] Fix a typo in generic flavor factory --- main.fmf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.fmf b/main.fmf index 2d9e544..adee229 100644 --- a/main.fmf +++ b/main.fmf @@ -28,4 +28,4 @@ test: exec ./javapackages.sh - when: jpv_flavor == generic environment+: JP_VALIDATOR_ARGS: | - org.fedoraproject.javapackages.validator.validators.generic.ValidatorFactoryGeneric + org.fedoraproject.javapackages.validator.validators.jp.ValidatorFactoryGeneric From dd3c24887de789ffe1968a7749cca0b18d39e9f7 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Wed, 14 Aug 2024 16:20:58 +0200 Subject: [PATCH 05/25] Run tests only on x86_64 --- main.fmf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main.fmf b/main.fmf index adee229..7c11406 100644 --- a/main.fmf +++ b/main.fmf @@ -21,6 +21,10 @@ environment: io.kojan.runit.validator.RunitValidatorFactory result: custom test: exec ./javapackages.sh +enabled: false +adjust: + - when: arch == x86_64 + enabled: true /javapackages-validator: adjust: From 15f8f4398a92fb8e3ba9c319f13b0e11cec08eb8 Mon Sep 17 00:00:00 2001 From: Marian Koncek Date: Mon, 19 Aug 2024 16:26:41 +0200 Subject: [PATCH 06/25] Revert "Run tests only on x86_64" This reverts commit dd3c24887de789ffe1968a7749cca0b18d39e9f7. --- main.fmf | 4 ---- 1 file changed, 4 deletions(-) diff --git a/main.fmf b/main.fmf index 7c11406..adee229 100644 --- a/main.fmf +++ b/main.fmf @@ -21,10 +21,6 @@ environment: io.kojan.runit.validator.RunitValidatorFactory result: custom test: exec ./javapackages.sh -enabled: false -adjust: - - when: arch == x86_64 - enabled: true /javapackages-validator: adjust: From da2f3b64d67c33fb1b909f9688f0293ec6bb90f2 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Wed, 28 Aug 2024 09:55:29 +0200 Subject: [PATCH 07/25] Allow dot in package names --- src/runit/BasicCheck.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runit/BasicCheck.java b/src/runit/BasicCheck.java index 2cd66de..53c00bc 100644 --- a/src/runit/BasicCheck.java +++ b/src/runit/BasicCheck.java @@ -26,7 +26,7 @@ public class BasicCheck { @ExcludeBinary("java_cup-manual") @ExcludeBinary("antlr-C\\+\\+") public void saneName(RpmInfo rpm) { - assertThat("Package name is sane", rpm.getName(), matchesRegex("[a-z][a-z0-9-]+[a-z0-9]")); + assertThat("Package name is sane", rpm.getName(), matchesRegex("[a-z][a-z0-9.-]+[a-z0-9]")); } @PackageTest From dfe9493ee7e95774227a9e3f4f5dbff93968d9e0 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 27 Sep 2024 16:45:44 +0200 Subject: [PATCH 08/25] Bump max allowed bytecode version to 21 --- src/BytecodeVersionJarValidatorJP.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BytecodeVersionJarValidatorJP.java b/src/BytecodeVersionJarValidatorJP.java index 7bdb509..7d4f359 100644 --- a/src/BytecodeVersionJarValidatorJP.java +++ b/src/BytecodeVersionJarValidatorJP.java @@ -66,7 +66,7 @@ public class BytecodeVersionJarValidatorJP extends BytecodeVersionJarValidator { for (var entry : classVersions.entrySet()) { Path classPath = entry.getKey(); int version = entry.getValue().major(); - int maxAllowedVersion = 17; + int maxAllowedVersion = 21; int expected; if (classPath.endsWith("module-info.class") || classPath.endsWith("package-info.class")) { From f36b1f9ec667b1f4b491445d379913e5007e69bb Mon Sep 17 00:00:00 2001 From: Marian Koncek Date: Wed, 30 Oct 2024 13:38:43 +0100 Subject: [PATCH 09/25] Add ant JDK binding file --- src/FilesValidatorJP.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/FilesValidatorJP.java b/src/FilesValidatorJP.java index 8fd3453..71a282b 100644 --- a/src/FilesValidatorJP.java +++ b/src/FilesValidatorJP.java @@ -70,6 +70,7 @@ public class FilesValidatorJP extends FilesValidator { private static Map> exceptionalFiles = new TreeMap<>(); static { exceptionalFiles.put("aqute-bnd", List.of("/etc/ant.d/aqute-bnd")); + exceptionalFiles.put("ant", List.of("/etc/java/ant.conf")); exceptionalFiles.put("maven", List.of("/etc/m2.conf", "/etc/java/maven.conf")); exceptionalFiles.put("jansi", List.of("/usr/lib/jansi", "/usr/lib/jansi/libjansi.so", "/usr/lib/java/jansi")); exceptionalFiles.put("javapackages-tools", List.of("/usr/share/java-utils", "/usr/share/xmvn", "/usr/share/ivy-xmls", "/usr/share/java", "/usr/share/javadoc", "/usr/share/jvm", "/usr/share/jvm-common", "/usr/share/maven-metadata", "/usr/share/maven-poms")); From f3f789d7c8f22ca0bc4ef10542f97f32900b94c4 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Sat, 23 Nov 2024 09:29:41 +0100 Subject: [PATCH 10/25] Remove file whitelists for javapackages-tools --- src/FilesValidatorJP.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/FilesValidatorJP.java b/src/FilesValidatorJP.java index 71a282b..a8f6a41 100644 --- a/src/FilesValidatorJP.java +++ b/src/FilesValidatorJP.java @@ -56,7 +56,6 @@ public class FilesValidatorJP extends FilesValidator { prefixes.put("javacc", List.of(Prefix.USR_BIN)); prefixes.put("java_cup", List.of(Prefix.USR_BIN)); prefixes.put("javapackages-bootstrap", List.of("/usr/lib/java/javapackages-bootstrap", "/usr/lib/javapackages-bootstrap", "/usr/lib/rpm", "/etc/rpm", "/usr/libexec/javapackages-bootstrap")); - prefixes.put("javapackages-tools", List.of(Prefix.USR_BIN, "/usr/share/xmvn/conf", "/usr/lib/rpm", "/usr/share/java-utils/", "/usr/lib/eclipse", "/usr/share/eclipse", "/etc/java", "/etc/jvm", "/usr/lib/java", "/usr/lib/jvm", "/etc/ivy", "/etc/ant.d")); prefixes.put("jflex", List.of(Prefix.USR_BIN)); prefixes.put("maven", List.of(Prefix.ETC, Prefix.USR_BIN)); prefixes.put("modello", List.of(Prefix.USR_BIN)); @@ -73,7 +72,6 @@ public class FilesValidatorJP extends FilesValidator { exceptionalFiles.put("ant", List.of("/etc/java/ant.conf")); exceptionalFiles.put("maven", List.of("/etc/m2.conf", "/etc/java/maven.conf")); exceptionalFiles.put("jansi", List.of("/usr/lib/jansi", "/usr/lib/jansi/libjansi.so", "/usr/lib/java/jansi")); - exceptionalFiles.put("javapackages-tools", List.of("/usr/share/java-utils", "/usr/share/xmvn", "/usr/share/ivy-xmls", "/usr/share/java", "/usr/share/javadoc", "/usr/share/jvm", "/usr/share/jvm-common", "/usr/share/maven-metadata", "/usr/share/maven-poms")); } private static boolean namesRelated(String lhs, String rhs) { From ab6a8c544a9cdbdca4c8ac674c1a68cc135da65e Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Sat, 23 Nov 2024 09:21:46 +0100 Subject: [PATCH 11/25] Allow new binding files --- src/DuplicateFileValidatorJP.java | 7 +++++++ src/FilesValidatorJP.java | 13 +++++++------ src/runit/FileCheck.java | 2 ++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/DuplicateFileValidatorJP.java b/src/DuplicateFileValidatorJP.java index c50be84..477c163 100644 --- a/src/DuplicateFileValidatorJP.java +++ b/src/DuplicateFileValidatorJP.java @@ -16,14 +16,21 @@ public class DuplicateFileValidatorJP extends DefaultDuplicateFileValidator { @Override public boolean allowedDuplicateFile(Path path, Collection providerRpms) throws Exception { + if (path.getParent().equals(Path.of("/usr/share/jpbinding"))) { + return true; + } + + // FIXME we want to get rid of these duplicates if (path.toString().startsWith("/usr/share/licenses/")) { return providerRpms.stream().map(Common::getPackageName).distinct().count() == 1; } + // FIXME this only applies to Fedora < 42 if (providerRpms.stream().allMatch(rpm -> rpm.getName().startsWith("maven-openjdk"))) { return true; } + // FIXME this only applies to Fedora < 42 if (providerRpms.stream().allMatch(rpm -> rpm.getName().startsWith("maven-local-openjdk"))) { return true; } diff --git a/src/FilesValidatorJP.java b/src/FilesValidatorJP.java index a8f6a41..dd1f568 100644 --- a/src/FilesValidatorJP.java +++ b/src/FilesValidatorJP.java @@ -29,7 +29,9 @@ public class FilesValidatorJP extends FilesValidator { } private static class Prefix { - static final String ETC = "/etc/${package}"; + static final String JPBINDING = "/usr/share/jpbinding"; + static final String ETC_PKG = "/etc/${package}"; + static final String ETC_JAVA = "/etc/java"; static final String USR_BIN = "/usr/bin/"; static final String USR_LIB_BUILD_ID = "/usr/lib/.build-id"; } @@ -48,7 +50,7 @@ public class FilesValidatorJP extends FilesValidator { private static Map> prefixes = new TreeMap<>(); static { - prefixes.put("ant", List.of(Prefix.ETC, Prefix.USR_BIN)); + prefixes.put("ant", List.of(Prefix.ETC_PKG, Prefix.ETC_JAVA, Prefix.JPBINDING, Prefix.USR_BIN)); prefixes.put("antlr", List.of(Prefix.USR_BIN)); prefixes.put("aqute-bnd", List.of(Prefix.USR_BIN)); prefixes.put("byaccj", List.of(Prefix.USR_BIN, Prefix.USR_LIB_BUILD_ID)); @@ -57,20 +59,19 @@ public class FilesValidatorJP extends FilesValidator { prefixes.put("java_cup", List.of(Prefix.USR_BIN)); prefixes.put("javapackages-bootstrap", List.of("/usr/lib/java/javapackages-bootstrap", "/usr/lib/javapackages-bootstrap", "/usr/lib/rpm", "/etc/rpm", "/usr/libexec/javapackages-bootstrap")); prefixes.put("jflex", List.of(Prefix.USR_BIN)); - prefixes.put("maven", List.of(Prefix.ETC, Prefix.USR_BIN)); + prefixes.put("maven", List.of(Prefix.ETC_PKG, Prefix.ETC_JAVA, Prefix.JPBINDING, Prefix.USR_BIN)); prefixes.put("modello", List.of(Prefix.USR_BIN)); prefixes.put("objectweb-asm", List.of(Prefix.USR_BIN)); prefixes.put("xerces-j2", List.of(Prefix.USR_BIN)); prefixes.put("xml-commons-resolver", List.of(Prefix.USR_BIN)); - prefixes.put("xmvn", List.of(Prefix.USR_BIN)); + prefixes.put("xmvn", List.of(Prefix.JPBINDING, Prefix.USR_BIN)); prefixes.put("xmvn-generator", List.of("/usr/lib/rpm", "/etc/rpm")); } private static Map> exceptionalFiles = new TreeMap<>(); static { exceptionalFiles.put("aqute-bnd", List.of("/etc/ant.d/aqute-bnd")); - exceptionalFiles.put("ant", List.of("/etc/java/ant.conf")); - exceptionalFiles.put("maven", List.of("/etc/m2.conf", "/etc/java/maven.conf")); + exceptionalFiles.put("maven", List.of("/etc/m2.conf")); exceptionalFiles.put("jansi", List.of("/usr/lib/jansi", "/usr/lib/jansi/libjansi.so", "/usr/lib/java/jansi")); } diff --git a/src/runit/FileCheck.java b/src/runit/FileCheck.java index 40a2a4d..5e4a2e3 100644 --- a/src/runit/FileCheck.java +++ b/src/runit/FileCheck.java @@ -34,6 +34,8 @@ public class FileCheck { assertThat("ELF files must have mode 755", mode, is("755")); } else if (entry.getSize() >= 2 && data[0] == '#' && data[1] == '!') { assertThat("Files with shebang must have mode 755", mode, is("755")); + } else if (entry.getSize() == 0) { + assertThat("Empty files must have mode 644 or 0", mode, either(is("644")).or(is("0"))); } else { assertThat("Other regular files must have mode 644", mode, is("644")); } From b86f2bd711cb1356a1c64bb1ffc6d1dd461e849e Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Mon, 18 Nov 2024 13:33:09 +0100 Subject: [PATCH 12/25] Add /jpackage_script check --- src/runit/JPackageScriptCheck.java | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/runit/JPackageScriptCheck.java diff --git a/src/runit/JPackageScriptCheck.java b/src/runit/JPackageScriptCheck.java new file mode 100644 index 0000000..890326f --- /dev/null +++ b/src/runit/JPackageScriptCheck.java @@ -0,0 +1,35 @@ +package tests; + +import static io.kojan.runit.api.RUnit.*; +import static io.kojan.runit.api.matcher.RUnitMatchers.*; +import static org.hamcrest.Matchers.*; + +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.api.DisplayName; + +import io.kojan.javadeptools.rpm.RpmInfo; +import io.kojan.runit.api.ExcludeSource; +import io.kojan.runit.api.ExcludeSymlink; +import io.kojan.runit.api.FileTest; +import io.kojan.runit.api.IncludeFileName; + +@DisplayName("/jpackage_script") +public class JPackageScriptCheck { + @FileTest + @IncludeFileName("/usr/bin/.*") + @ExcludeSource + @ExcludeSymlink + public void testJPackageScript(RpmInfo rpm, byte[] bytes) { + assumeThat("The binary is a script with a shebang", bytes.length, greaterThan(1)); + assumeThat("The binary is a script with a shebang", bytes[0], is((byte)'#')); + assumeThat("The binary is a script with a shebang", bytes[1], is((byte)'!')); + String content = new String(bytes, StandardCharsets.UTF_8); + assumeThat("The script was generated with %jpackage_script", content, + containsString(". /usr/share/java-utils/java-functions\n")); + assertThat("The script explicitly sets JAVA_HOME to Java 21", content, + containsString("\nexport JAVA_HOME=\"${JAVA_HOME:-/usr/lib/jvm/jre-21-openjdk}\"\n")); + assertThat("Requires on java-21-openjdk-headless are present", rpm, requires("java-21-openjdk-headless")); + assertThat("Requires on javapackages-tools are present", rpm, requires("javapackages-tools")); + } +} From ed92ce4e3beaab56cfade082f8702e4231d8a7e2 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Sun, 24 Nov 2024 19:22:25 +0100 Subject: [PATCH 13/25] Allow duplicate files in ant-openjdk* --- src/DuplicateFileValidatorJP.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/DuplicateFileValidatorJP.java b/src/DuplicateFileValidatorJP.java index 477c163..19addc2 100644 --- a/src/DuplicateFileValidatorJP.java +++ b/src/DuplicateFileValidatorJP.java @@ -25,6 +25,11 @@ public class DuplicateFileValidatorJP extends DefaultDuplicateFileValidator { return providerRpms.stream().map(Common::getPackageName).distinct().count() == 1; } + // FIXME this only applies to Fedora < 42 + if (providerRpms.stream().allMatch(rpm -> rpm.getName().startsWith("ant-openjdk"))) { + return true; + } + // FIXME this only applies to Fedora < 42 if (providerRpms.stream().allMatch(rpm -> rpm.getName().startsWith("maven-openjdk"))) { return true; From d63363452808dd25990c1a899484cbc74dcc4b3d Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 29 Nov 2024 07:07:02 +0100 Subject: [PATCH 14/25] Fix jpackage_script check --- src/runit/JPackageScriptCheck.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/runit/JPackageScriptCheck.java b/src/runit/JPackageScriptCheck.java index 890326f..376e596 100644 --- a/src/runit/JPackageScriptCheck.java +++ b/src/runit/JPackageScriptCheck.java @@ -9,6 +9,7 @@ import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.DisplayName; import io.kojan.javadeptools.rpm.RpmInfo; +import io.kojan.runit.api.ExcludeFileName; import io.kojan.runit.api.ExcludeSource; import io.kojan.runit.api.ExcludeSymlink; import io.kojan.runit.api.FileTest; @@ -20,6 +21,7 @@ public class JPackageScriptCheck { @IncludeFileName("/usr/bin/.*") @ExcludeSource @ExcludeSymlink + @ExcludeFileName("/usr/bin/ant") public void testJPackageScript(RpmInfo rpm, byte[] bytes) { assumeThat("The binary is a script with a shebang", bytes.length, greaterThan(1)); assumeThat("The binary is a script with a shebang", bytes[0], is((byte)'#')); @@ -28,7 +30,7 @@ public class JPackageScriptCheck { assumeThat("The script was generated with %jpackage_script", content, containsString(". /usr/share/java-utils/java-functions\n")); assertThat("The script explicitly sets JAVA_HOME to Java 21", content, - containsString("\nexport JAVA_HOME=\"${JAVA_HOME:-/usr/lib/jvm/jre-21-openjdk}\"\n")); + containsString("\nJAVA_HOME=\"${JAVA_HOME:-/usr/lib/jvm/jre-21-openjdk}\"\n")); assertThat("Requires on java-21-openjdk-headless are present", rpm, requires("java-21-openjdk-headless")); assertThat("Requires on javapackages-tools are present", rpm, requires("javapackages-tools")); } From cfa4787b3bda4d343c0ef89945e2349ae36a467e Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 29 Nov 2024 07:17:24 +0100 Subject: [PATCH 15/25] Remove duplitcate checks irrelevant for Fedora 42+ --- src/DuplicateFileValidatorJP.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/DuplicateFileValidatorJP.java b/src/DuplicateFileValidatorJP.java index 19addc2..cd8f923 100644 --- a/src/DuplicateFileValidatorJP.java +++ b/src/DuplicateFileValidatorJP.java @@ -25,21 +25,6 @@ public class DuplicateFileValidatorJP extends DefaultDuplicateFileValidator { return providerRpms.stream().map(Common::getPackageName).distinct().count() == 1; } - // FIXME this only applies to Fedora < 42 - if (providerRpms.stream().allMatch(rpm -> rpm.getName().startsWith("ant-openjdk"))) { - return true; - } - - // FIXME this only applies to Fedora < 42 - if (providerRpms.stream().allMatch(rpm -> rpm.getName().startsWith("maven-openjdk"))) { - return true; - } - - // FIXME this only applies to Fedora < 42 - if (providerRpms.stream().allMatch(rpm -> rpm.getName().startsWith("maven-local-openjdk"))) { - return true; - } - return false; } } From 5f09737c339e941228d939625e28a163cc9b316b Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 29 Nov 2024 07:28:19 +0100 Subject: [PATCH 16/25] Add check for Conflicts --- src/runit/BasicCheck.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/runit/BasicCheck.java b/src/runit/BasicCheck.java index 53c00bc..8875b72 100644 --- a/src/runit/BasicCheck.java +++ b/src/runit/BasicCheck.java @@ -1,6 +1,7 @@ package tests; import static io.kojan.runit.api.RUnit.*; +import static io.kojan.runit.api.matcher.RUnitMatchers.*; import static org.hamcrest.Matchers.*; import java.util.regex.Matcher; @@ -48,4 +49,10 @@ public class BasicCheck { assertThat("Binary package Release matches SRPM Release", rpm.getRelease(), is(matcher.group(3))); } + @PackageTest + @IncludeBinary + public void noConflicts(RpmInfo rpm) { + assertThat("Packages have no explicit Conflicts", rpm, not(conflicts(".*"))); + } + } From 4d05ece41c595491f4d1e369cbe13de0310aebb6 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 29 Nov 2024 07:28:59 +0100 Subject: [PATCH 17/25] Use RUnitMatchers for matching bundled provides --- src/runit/BasicCheck.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/runit/BasicCheck.java b/src/runit/BasicCheck.java index 8875b72..6058c81 100644 --- a/src/runit/BasicCheck.java +++ b/src/runit/BasicCheck.java @@ -35,8 +35,7 @@ public class BasicCheck { @ExcludeBinary("sisu") @ExcludeBinary("javapackages-bootstrap") public void bundledProvides(RpmInfo rpm) { - assertThat("No bundled(*) provides", () -> rpm.getProvides().stream().map(RpmDependency::getName).iterator(), - everyItem(not(startsWith("bundled(")))); + assertThat("No bundled(*) provides", rpm, not(provides("bundled\\(.*\\)"))); } @PackageTest From 1433c52224c8677ab0230035324ba5716189c3f0 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 29 Nov 2024 07:33:03 +0100 Subject: [PATCH 18/25] Enable apache-commons JPMS provides check --- src/runit/ApacheCommonsCheck.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/runit/ApacheCommonsCheck.java b/src/runit/ApacheCommonsCheck.java index 51b5b96..9d73653 100644 --- a/src/runit/ApacheCommonsCheck.java +++ b/src/runit/ApacheCommonsCheck.java @@ -6,7 +6,6 @@ import static org.hamcrest.Matchers.*; import java.util.List; import java.util.stream.Collectors; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import io.kojan.javadeptools.rpm.*; @@ -26,7 +25,6 @@ public class ApacheCommonsCheck { @PackageTest @IncludeBinary("apache-commons-[a-z][a-z0-9]+") @ExcludeBinary("apache-commons-parent") // Parent POM, no Java code - @Disabled("JPMS provides are not generated for now") public void jpmsProvides(RpmInfo rpm) { String id = rpm.getName().substring("apache-commons-".length()); List prov = rpm.getProvides().stream().map(RpmDependency::getName).collect(Collectors.toList()); From 27b31452b99eaf3ae0f3c1fc9b87fca19be45f2b Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 29 Nov 2024 09:24:43 +0100 Subject: [PATCH 19/25] Use RUnitMatchers for matching apache-commons JPMS provides --- src/runit/ApacheCommonsCheck.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/runit/ApacheCommonsCheck.java b/src/runit/ApacheCommonsCheck.java index 9d73653..a2fe4d7 100644 --- a/src/runit/ApacheCommonsCheck.java +++ b/src/runit/ApacheCommonsCheck.java @@ -1,6 +1,7 @@ package tests; import static io.kojan.runit.api.RUnit.*; +import static io.kojan.runit.api.matcher.RUnitMatchers.*; import static org.hamcrest.Matchers.*; import java.util.List; @@ -27,9 +28,8 @@ public class ApacheCommonsCheck { @ExcludeBinary("apache-commons-parent") // Parent POM, no Java code public void jpmsProvides(RpmInfo rpm) { String id = rpm.getName().substring("apache-commons-".length()); - List prov = rpm.getProvides().stream().map(RpmDependency::getName).collect(Collectors.toList()); - assertThat("Apache Commons packages should have jpms provides", prov, - hasItem("jpms(org.apache.commons." + id + ")")); + assertThat("Apache Commons packages should have jpms provides", rpm, + provides("jpms\\(org.apache.commons." + id + "\\)")); } @PackageTest From c9fe403c5ebeca967109201ca11543e1bb01c640 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 29 Nov 2024 09:38:17 +0100 Subject: [PATCH 20/25] Allow versioned apache-commons JPMS provides --- src/runit/ApacheCommonsCheck.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runit/ApacheCommonsCheck.java b/src/runit/ApacheCommonsCheck.java index a2fe4d7..8947cfe 100644 --- a/src/runit/ApacheCommonsCheck.java +++ b/src/runit/ApacheCommonsCheck.java @@ -29,7 +29,7 @@ public class ApacheCommonsCheck { public void jpmsProvides(RpmInfo rpm) { String id = rpm.getName().substring("apache-commons-".length()); assertThat("Apache Commons packages should have jpms provides", rpm, - provides("jpms\\(org.apache.commons." + id + "\\)")); + provides("jpms\\(org.apache.commons." + id + "\\)( = .*)?")); } @PackageTest From 50e2e10695a1427aca249ac651a24365d91131bb Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Fri, 29 Nov 2024 09:50:19 +0100 Subject: [PATCH 21/25] Drop unneeded imports --- src/runit/ApacheCommonsCheck.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/runit/ApacheCommonsCheck.java b/src/runit/ApacheCommonsCheck.java index 8947cfe..8a079c8 100644 --- a/src/runit/ApacheCommonsCheck.java +++ b/src/runit/ApacheCommonsCheck.java @@ -4,9 +4,6 @@ import static io.kojan.runit.api.RUnit.*; import static io.kojan.runit.api.matcher.RUnitMatchers.*; import static org.hamcrest.Matchers.*; -import java.util.List; -import java.util.stream.Collectors; - import org.junit.jupiter.api.DisplayName; import io.kojan.javadeptools.rpm.*; From 745343f757a9b463e5526a1cdeb270def1aebb12 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Sat, 30 Nov 2024 10:22:23 +0100 Subject: [PATCH 22/25] Update to RUnit version 1.0.0 The Sonatype snapshot repository is no longer needed as RUnit 1.0.0 is available on Maven Central, but keep it commented out in case we want to start using RUnit snapshots again. The list of dependencies was generated with Maven and jq: mvn -f ~/.m2/repository/io/kojan/runit-validator/1.0.0/runit-validator-1.0.0.pom \ dependency:tree -Dscope=runtime -DoutputType=json -DoutputFile=/dev/fd/3 3>&1 1>&2 | jq -r 'recurse(.children[]?) | (" " + .groupId + ":" + .artifactId + ":" + .version + " \\")' | sort --- src/javapackages-validator.properties | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/javapackages-validator.properties b/src/javapackages-validator.properties index 2a50b1b..4ad3076 100644 --- a/src/javapackages-validator.properties +++ b/src/javapackages-validator.properties @@ -1,13 +1,13 @@ compiler.release=22 -repositories=https://s01.oss.sonatype.org/content/repositories/snapshots +#repositories=https://s01.oss.sonatype.org/content/repositories/snapshots dependencies=\ - io.kojan:runit-api:1.0.0-SNAPSHOT \ - io.kojan:runit-validator:1.0.0-SNAPSHOT \ + io.kojan:runit-api:1.0.0 \ + io.kojan:runit-validator:1.0.0 \ org.apiguardian:apiguardian-api:1.1.2 \ - org.hamcrest:hamcrest:2.2 \ - org.junit.jupiter:junit-jupiter-api:5.10.0 \ - org.junit.jupiter:junit-jupiter-engine:5.10.0 \ - org.junit.platform:junit-platform-commons:1.10.0 \ - org.junit.platform:junit-platform-engine:1.10.0 \ - org.junit.platform:junit-platform-launcher:1.10.0 \ + org.hamcrest:hamcrest:3.0 \ + org.junit.jupiter:junit-jupiter-api:5.11.3 \ + org.junit.jupiter:junit-jupiter-engine:5.11.3 \ + org.junit.platform:junit-platform-commons:1.11.3 \ + org.junit.platform:junit-platform-engine:1.11.3 \ + org.junit.platform:junit-platform-launcher:1.11.3 \ org.opentest4j:opentest4j:1.3.0 \ From 0cd13708686fbf7b9c35531a408c21ce9904cca8 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Mon, 2 Dec 2024 17:44:02 +0100 Subject: [PATCH 23/25] Skip file check for javapackages-tools and javapackages-bootstrap --- src/FilesValidatorJP.java | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/FilesValidatorJP.java b/src/FilesValidatorJP.java index dd1f568..7425337 100644 --- a/src/FilesValidatorJP.java +++ b/src/FilesValidatorJP.java @@ -2,16 +2,20 @@ package org.fedoraproject.javapackages.validator.validators.jp; import java.nio.file.Path; import java.util.Collections; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.fedoraproject.javapackages.validator.spi.Decorated; import org.fedoraproject.javapackages.validator.util.Common; import org.fedoraproject.javapackages.validator.util.FilesValidator; import io.kojan.javadeptools.rpm.RpmInfo; +import io.kojan.javadeptools.rpm.RpmPackage; public class FilesValidatorJP extends FilesValidator { @Override @@ -36,6 +40,12 @@ public class FilesValidatorJP extends FilesValidator { static final String USR_LIB_BUILD_ID = "/usr/lib/.build-id"; } + private static Set ignoredComponents = new LinkedHashSet<>(); + static { + ignoredComponents.add("javapackages-bootstrap"); + ignoredComponents.add("javapackages-tools"); + } + private static Map> nameAliases = new TreeMap<>(); static { nameAliases.put("maven-resolver", List.of("aether")); @@ -57,7 +67,6 @@ public class FilesValidatorJP extends FilesValidator { prefixes.put("jansi", List.of(Prefix.USR_LIB_BUILD_ID)); prefixes.put("javacc", List.of(Prefix.USR_BIN)); prefixes.put("java_cup", List.of(Prefix.USR_BIN)); - prefixes.put("javapackages-bootstrap", List.of("/usr/lib/java/javapackages-bootstrap", "/usr/lib/javapackages-bootstrap", "/usr/lib/rpm", "/etc/rpm", "/usr/libexec/javapackages-bootstrap")); prefixes.put("jflex", List.of(Prefix.USR_BIN)); prefixes.put("maven", List.of(Prefix.ETC_PKG, Prefix.ETC_JAVA, Prefix.JPBINDING, Prefix.USR_BIN)); prefixes.put("modello", List.of(Prefix.USR_BIN)); @@ -317,6 +326,16 @@ public class FilesValidatorJP extends FilesValidator { return false; } + @Override + public void validate(RpmPackage rpm) throws Exception { + if (ignoredComponents.contains(rpm.getInfo().getSourceName())) { + skip("{0}: the component {1} is ignored", Decorated.rpm(rpm), + Decorated.actual(rpm.getInfo().getSourceName())); + } else { + super.validate(rpm); + } + } + @Override public boolean allowedFile(RpmInfo rpm, Path path) { if (rpm.isSourcePackage()) { @@ -324,11 +343,6 @@ public class FilesValidatorJP extends FilesValidator { return true; } - // if (Common.getPackageName(rpm).equals("javapackages-bootstrap")) { - // // TODO - // return true; - // } - String filename = path.toString(); if (rpm.getName().equals(Common.getPackageName(rpm) + "-javadoc") || rpm.getName().equals(Common.getPackageName(rpm) + "-javadocs")) { From 75adec844b7300cd767b8fda98007b0c1576121f Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Wed, 11 Dec 2024 07:10:11 +0100 Subject: [PATCH 24/25] Use unnamed variables (JEP 456) See https://openjdk.org/jeps/456 --- src/FilesValidatorJP.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FilesValidatorJP.java b/src/FilesValidatorJP.java index 7425337..133860c 100644 --- a/src/FilesValidatorJP.java +++ b/src/FilesValidatorJP.java @@ -164,7 +164,7 @@ public class FilesValidatorJP extends FilesValidator { } if (patternsCache.computeIfAbsent(Common.getPackageName(rpm) + "/javadoc", - p -> Pattern.compile("/usr/share/javadoc/" + Common.getPackageName(rpm) + "(:?/.*)?")) + _ -> Pattern.compile("/usr/share/javadoc/" + Common.getPackageName(rpm) + "(:?/.*)?")) .matcher(filename).matches()) { return true; } From af194b66419bf528a6491f2d278a0ffa38782c76 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Wed, 11 Dec 2024 07:19:27 +0100 Subject: [PATCH 25/25] Skip ExclusiveArch validation for known non-Java packages --- src/JavaExclusiveArchValidatorJP.java | 27 +++++++++++++++++++++++++++ src/ValidatorFactoryGeneric.java | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/JavaExclusiveArchValidatorJP.java diff --git a/src/JavaExclusiveArchValidatorJP.java b/src/JavaExclusiveArchValidatorJP.java new file mode 100644 index 0000000..7d3de00 --- /dev/null +++ b/src/JavaExclusiveArchValidatorJP.java @@ -0,0 +1,27 @@ +package org.fedoraproject.javapackages.validator.validators.jp; + +import java.util.Set; + +import org.fedoraproject.javapackages.validator.spi.Decorated; +import org.fedoraproject.javapackages.validator.validators.JavaExclusiveArchValidator; + +import io.kojan.javadeptools.rpm.RpmPackage; + +public class JavaExclusiveArchValidatorJP extends JavaExclusiveArchValidator { + @Override + public String getTestName() { + return "/java/jp/exclusive_arch"; + } + + private static final Set SKIPPED = Set.of("javapackages-tools", "byaccj", "jurand"); + + @Override + public void validate(RpmPackage rpm) throws Exception { + String component = rpm.getInfo().getSourceName(); + if (SKIPPED.contains(component)) { + skip("Skipping rpm {0}", Decorated.rpm(rpm)); + return; + } + super.validate(rpm); + } +} diff --git a/src/ValidatorFactoryGeneric.java b/src/ValidatorFactoryGeneric.java index afb2d34..ae33eb4 100644 --- a/src/ValidatorFactoryGeneric.java +++ b/src/ValidatorFactoryGeneric.java @@ -12,7 +12,7 @@ public class ValidatorFactoryGeneric implements ValidatorFactory { return List.of(new Validator[] { new AttributeProvidesValidator(), new JavadocNoarchValidator(), - new JavaExclusiveArchValidator(), + new JavaExclusiveArchValidatorJP(), new MavenMetadataValidator(), new NoBootstrapValidator(), });