com.liferay.jenkins.results.parser.PortalGitWorkingDirectory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.jenkins.results.parser
Show all versions of com.liferay.jenkins.results.parser
Liferay Jenkins Results Parser
The newest version!
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.jenkins.results.parser;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.json.JSONException;
import org.json.JSONObject;
/**
* @author Michael Hashimoto
* @author Peter Yoo
*/
public class PortalGitWorkingDirectory extends GitWorkingDirectory {
public Properties getAppServerProperties() {
if (_appServerProperties != null) {
return _appServerProperties;
}
_appServerProperties = JenkinsResultsParserUtil.getProperties(
new File(getWorkingDirectory(), "app.server.properties"));
return _appServerProperties;
}
public String getMajorPortalVersion() {
return JenkinsResultsParserUtil.getProperty(
getReleaseProperties(), "lp.version.major");
}
public List getModifiedModuleDirsList() throws IOException {
return getModifiedModuleDirsList(null, null);
}
public List getModifiedModuleDirsList(
List excludesPathMatchers,
List includesPathMatchers)
throws IOException {
return JenkinsResultsParserUtil.getDirectoriesContainingFiles(
getModuleDirsList(excludesPathMatchers, includesPathMatchers),
getModifiedFilesList());
}
public List getModifiedNonposhiModules() throws IOException {
List modifiedFilesList = getModifiedFilesList();
List modifiedNonposhiFilesList = new ArrayList<>();
for (File modifiedFile : modifiedFilesList) {
if (!JenkinsResultsParserUtil.isPoshiFile(modifiedFile)) {
modifiedNonposhiFilesList.add(modifiedFile);
}
}
return JenkinsResultsParserUtil.getDirectoriesContainingFiles(
getModuleDirsList(null, null), modifiedNonposhiFilesList);
}
public List getModifiedNPMTestModuleDirsList() throws IOException {
List modifiedModuleDirsList = getModifiedModuleDirsList();
List modifiedNPMTestModuleDirsList = new ArrayList<>(
modifiedModuleDirsList.size());
for (File modifiedModuleDir : modifiedModuleDirsList) {
if (_isNPMTestModuleDir(modifiedModuleDir)) {
modifiedNPMTestModuleDirsList.add(modifiedModuleDir);
}
}
return modifiedNPMTestModuleDirsList;
}
public List getModifiedPoshiModules() throws IOException {
List modifiedFilesList = getModifiedFilesList();
List modifiedPoshiFilesList = new ArrayList<>();
for (File modifiedFile : modifiedFilesList) {
if (JenkinsResultsParserUtil.isPoshiFile(modifiedFile)) {
modifiedPoshiFilesList.add(modifiedFile);
}
}
return JenkinsResultsParserUtil.getDirectoriesContainingFiles(
getModuleDirsList(null, null), modifiedPoshiFilesList);
}
public List getModuleAppDirs() {
List moduleAppDirs = new ArrayList<>();
List moduleAppBndFiles = JenkinsResultsParserUtil.findFiles(
new File(getWorkingDirectory(), "modules"), "app\\.bnd");
for (File moduleAppBndFile : moduleAppBndFiles) {
moduleAppDirs.add(moduleAppBndFile.getParentFile());
}
return moduleAppDirs;
}
public List getModuleDirs() {
List moduleAppDirs = new ArrayList<>();
List moduleAppBndFiles = JenkinsResultsParserUtil.findFiles(
new File(getWorkingDirectory(), "modules"), "bnd\\.bnd");
for (File moduleAppBndFile : moduleAppBndFiles) {
String moduleAppBndFilePath = moduleAppBndFile.toString();
if (moduleAppBndFilePath.contains("node_modules")) {
continue;
}
moduleAppDirs.add(moduleAppBndFile.getParentFile());
}
return moduleAppDirs;
}
public List getModuleDirsList() throws IOException {
return getModuleDirsList(null, null);
}
public List getModuleDirsList(
List excludesPathMatchers,
List includesPathMatchers)
throws IOException {
File modulesDir = new File(getWorkingDirectory(), "modules");
if (!modulesDir.exists()) {
return new ArrayList<>();
}
final List excludedModulesPathMatchers =
excludesPathMatchers;
final List includedModulesPathMatchers =
includesPathMatchers;
final List moduleDirsList = new ArrayList<>();
Files.walkFileTree(
modulesDir.toPath(),
new SimpleFileVisitor() {
@Override
public FileVisitResult postVisitDirectory(
Path filePath, IOException ioException) {
if (_module == null) {
return FileVisitResult.CONTINUE;
}
Module currentModule = Module.getModule(filePath);
if (currentModule == null) {
return FileVisitResult.CONTINUE;
}
File currentFile = currentModule.getFile();
if (currentFile.equals(_module.getFile())) {
moduleDirsList.add(currentFile);
_module = null;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(
Path filePath, BasicFileAttributes basicFileAttributes) {
if (!JenkinsResultsParserUtil.isFileIncluded(
excludedModulesPathMatchers,
includedModulesPathMatchers, filePath)) {
return FileVisitResult.CONTINUE;
}
Module currentModule = Module.getModule(filePath);
if (currentModule == null) {
return FileVisitResult.CONTINUE;
}
if (_module == null) {
_module = currentModule;
return FileVisitResult.CONTINUE;
}
int currentPriority = currentModule.getPriority();
if (currentPriority < _module.getPriority()) {
_module = currentModule;
}
return FileVisitResult.CONTINUE;
}
private Module _module;
});
Collections.sort(moduleDirsList);
return moduleDirsList;
}
public List getModulePullSubrepoDirs() {
File modulesDir = new File(getWorkingDirectory(), "modules");
if (!modulesDir.exists()) {
return new ArrayList<>();
}
List moduleSubrepoDirs = new ArrayList<>();
List gitrepoFiles = JenkinsResultsParserUtil.findFiles(
modulesDir, "\\.gitrepo");
for (File gitrepoFile : gitrepoFiles) {
Properties gitrepoProperties =
JenkinsResultsParserUtil.getProperties(gitrepoFile);
String mode = gitrepoProperties.getProperty("mode", "push");
if (mode.equals("pull")) {
moduleSubrepoDirs.add(gitrepoFile.getParentFile());
}
}
return moduleSubrepoDirs;
}
public List getNPMTestModuleDirsList() throws IOException {
List npmModuleDirsList = new ArrayList<>();
for (File moduleDir : getModuleDirsList()) {
if (_isNPMTestModuleDir(moduleDir)) {
npmModuleDirsList.add(moduleDir);
}
}
return npmModuleDirsList;
}
public PluginsGitWorkingDirectory getPluginsGitWorkingDirectory() {
String lpPluginsDir = JenkinsResultsParserUtil.getProperty(
getReleaseProperties(), "lp.plugins.dir");
GitWorkingDirectory pluginsGitWorkingDirectory =
GitWorkingDirectoryFactory.newGitWorkingDirectory(
getUpstreamBranchName(), new File(lpPluginsDir),
"liferay-plugins-ee");
if (pluginsGitWorkingDirectory instanceof PluginsGitWorkingDirectory) {
return (PluginsGitWorkingDirectory)pluginsGitWorkingDirectory;
}
throw new RuntimeException(
"Unable to find a plugins Git working directory");
}
public Properties getReleaseProperties() {
if (_releaseProperties != null) {
return _releaseProperties;
}
_releaseProperties = JenkinsResultsParserUtil.getProperties(
new File(getWorkingDirectory(), "release.properties"));
return _releaseProperties;
}
public Properties getTestProperties() {
if (_testProperties != null) {
return _testProperties;
}
File testPropertiesFile = new File(
getWorkingDirectory(), "test.properties");
if (!testPropertiesFile.exists()) {
return _testProperties;
}
_testProperties = JenkinsResultsParserUtil.getProperties(
testPropertiesFile);
return _testProperties;
}
protected PortalGitWorkingDirectory(
String upstreamBranchName, String workingDirectoryPath)
throws IOException {
super(upstreamBranchName, workingDirectoryPath);
}
protected PortalGitWorkingDirectory(
String upstreamBranchName, String workingDirectoryPath,
String gitRepositoryName)
throws IOException {
super(upstreamBranchName, workingDirectoryPath, gitRepositoryName);
}
private boolean _isNPMTestModuleDir(File moduleDir) {
List packageJSONFiles = JenkinsResultsParserUtil.findFiles(
moduleDir, "package\\.json");
for (File packageJSONFile : packageJSONFiles) {
JSONObject jsonObject = null;
try {
jsonObject = JenkinsResultsParserUtil.createJSONObject(
JenkinsResultsParserUtil.read(packageJSONFile));
}
catch (IOException ioException) {
System.out.println(
"Unable to read invalid JSON " + packageJSONFile.getPath());
continue;
}
catch (JSONException jsonException) {
System.out.println(
"Invalid JSON file " + packageJSONFile.getPath());
continue;
}
if (!jsonObject.has("scripts")) {
continue;
}
JSONObject scriptsJSONObject = jsonObject.getJSONObject("scripts");
if (!scriptsJSONObject.has("test")) {
continue;
}
return true;
}
return false;
}
private Properties _appServerProperties;
private Properties _releaseProperties;
private Properties _testProperties;
private static class Module {
public static Module getModule(Path path) {
File file = path.toFile();
if (!file.isDirectory()) {
return null;
}
for (int i = 0; i < _markerFileNames.size(); i++) {
for (String markerFileName : _markerFileNames.get(i)) {
File markerFile = new File(file, markerFileName);
if (markerFile.exists()) {
return new Module(file, i);
}
}
}
return null;
}
public File getFile() {
return _file;
}
public int getPriority() {
return _priority;
}
@Override
public String toString() {
return JenkinsResultsParserUtil.combine(
String.valueOf(_priority), " ", _file.toString());
}
private Module(File file, int priority) {
_file = file;
_priority = priority;
}
private static Map _markerFileNames =
new HashMap() {
{
put(0, new String[] {".lfrbuild-release-src", ".gitrepo"});
put(1, new String[] {"app.bnd"});
put(2, new String[] {"bnd.bnd"});
put(
3,
new String[] {"build.gradle", "build.xml", "pom.xml"});
}
};
private final File _file;
private final int _priority;
}
}