Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 23 additions & 16 deletions dsf-bpe/dsf-bpe-test-plugin-v1/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,21 +49,28 @@
</dependencies>

<build>
<plugins>
<plugin>
<groupId>dev.dsf</groupId>
<artifactId>dsf-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate-config-doc</goal>
</goals>
</execution>
</executions>
<configuration>
<configDocPackages>dev.dsf.bpe.test.spring.config</configDocPackages>
</configuration>
</plugin>
</plugins>
<plugins>
<plugin>
<groupId>dev.dsf</groupId>
<artifactId>dsf-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-config-doc</id>
<goals>
<goal>generate-config-doc</goal>
</goals>
</execution>
<execution>
<id>lint-plugin</id>
<goals>
<goal>lint</goal>
</goals>
</execution>
</executions>
<configuration>
<configDocPackages>dev.dsf.bpe.test.spring.config</configDocPackages>
</configuration>
</plugin>
</plugins>
</build>
</project>
35 changes: 21 additions & 14 deletions dsf-bpe/dsf-bpe-test-plugin-v2/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,20 +45,27 @@

<build>
<plugins>
<plugin>
<groupId>dev.dsf</groupId>
<artifactId>dsf-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate-config-doc</goal>
</goals>
</execution>
</executions>
<configuration>
<configDocPackages>dev.dsf.bpe.test.spring.config</configDocPackages>
</configuration>
</plugin>
<plugin>
<groupId>dev.dsf</groupId>
<artifactId>dsf-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-config-doc</id>
<goals>
<goal>generate-config-doc</goal>
</goals>
</execution>
<execution>
<id>lint-plugin</id>
<goals>
<goal>lint</goal>
</goals>
</execution>
</executions>
<configuration>
<configDocPackages>dev.dsf.bpe.test.spring.config</configDocPackages>
</configuration>
</plugin>
</plugins>
</build>
</project>
7 changes: 6 additions & 1 deletion dsf-maven/dsf-maven-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,12 @@
<scope>provided</scope>
</dependency>

<dependency>
<dependency>
<groupId>dev.dsf.utils.linter</groupId>
<artifactId>linter-core</artifactId>
</dependency>

<dependency>
<groupId>dev.dsf</groupId>
<artifactId>dsf-bpe-process-api-v1</artifactId>
<exclusions>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
/*
* Copyright 2018-2025 Heilbronn University of Applied Sciences
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dev.dsf.maven.linter;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;

import dev.dsf.linter.DsfLinter;
import dev.dsf.linter.DsfLinter.OverallLinterResult;
import dev.dsf.linter.input.InputResolver;
import dev.dsf.linter.input.InputResolver.ResolutionResult;
import dev.dsf.linter.logger.Logger;

/**
* Lints DSF process plugin JAR files by validating BPMN processes, FHIR resources and plugin configurations.
* <p>
* Runs after the JAR has been built (default phase: verify) and delegates to the
* <a href="https://github.com/datasharingframework/dsf-linter">DSF Linter</a> core library.
*/
@Mojo(name = "lint", defaultPhase = LifecyclePhase.VERIFY, requiresDependencyResolution = ResolutionScope.NONE, threadSafe = true)
public class LintPluginMojo extends AbstractMojo
{
@Parameter(defaultValue = "${project.build.directory}", readonly = true, required = true)
private File projectBuildDirectory;

@Parameter(defaultValue = "${project.build.finalName}", readonly = true, required = true)
private String finalName;

@Parameter(property = "dsf.lint.reportPath")
private File reportPath;

@Parameter(property = "dsf.lint.html", defaultValue = "true")
private boolean generateHtmlReport;

@Parameter(property = "dsf.lint.json", defaultValue = "true")
private boolean generateJsonReport;

@Parameter(property = "dsf.lint.failOnErrors", defaultValue = "true")
private boolean failOnErrors;

@Parameter(property = "dsf.lint.skip", defaultValue = "false")
private boolean skip;

@Parameter(property = "dsf.lint.verbose", defaultValue = "false")
private boolean verbose;

@Override
public void execute() throws MojoExecutionException, MojoFailureException
{
if (skip)
{
getLog().info("DSF Linter: skipped");
return;
}

Path jarPath = projectBuildDirectory.toPath().resolve(finalName + ".jar");

if (!Files.exists(jarPath))
{
getLog().warn("DSF Linter: JAR not found at " + jarPath + ", skipping");
return;
}

Logger logger = new MavenLinterLogger(getLog(), verbose);

InputResolver resolver = new InputResolver(logger);
Optional<ResolutionResult> resolutionResult = resolver.resolve(jarPath.toString());

if (resolutionResult.isEmpty())
{
throw new MojoExecutionException("DSF Linter: failed to resolve JAR file: " + jarPath);
}

ResolutionResult resolution = resolutionResult.get();

try
{
Path lintReportPath = reportPath != null ? reportPath.toPath()
: projectBuildDirectory.toPath().resolve("dsf-linter-report");

Files.createDirectories(lintReportPath);

DsfLinter.Config config = new DsfLinter.Config(resolution.resolvedPath().toAbsolutePath(),
lintReportPath.toAbsolutePath(), generateHtmlReport, generateJsonReport, failOnErrors, logger);

OverallLinterResult result = new DsfLinter(config).lint();

if (!result.success())
{
String msg = "DSF Linter: " + result.getTotalErrors() + " error(s), " + result.getPluginWarnings()
+ " warning(s)";

if (failOnErrors)
{
throw new MojoFailureException(msg);
}

getLog().warn(msg);
}
else
{
getLog().info("DSF Linter: passed - no errors found");
}
}
catch (IOException e)
{
throw new MojoExecutionException("DSF Linter failed", e);
}
finally
{
if (resolution.requiresCleanup())
{
resolver.cleanup(resolution);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* Copyright 2018-2025 Heilbronn University of Applied Sciences
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dev.dsf.maven.linter;

import org.apache.maven.plugin.logging.Log;

import dev.dsf.linter.logger.Logger;

public class MavenLinterLogger implements Logger
{
private final Log mavenLog;
private final boolean verboseMode;

public MavenLinterLogger(Log mavenLog, boolean verboseMode)
{
this.mavenLog = mavenLog;
this.verboseMode = verboseMode;
}

@Override
public void info(String message)
{
mavenLog.info(message);
}

@Override
public void warn(String message)
{
mavenLog.warn(message);
}

@Override
public void error(String message)
{
mavenLog.error(message);
}

@Override
public void error(String message, Throwable throwable)
{
mavenLog.error(message, throwable);
}

@Override
public void debug(String message)
{
mavenLog.debug(message);
}

@Override
public boolean verbose()
{
return verboseMode;
}

@Override
public boolean isVerbose()
{
return verboseMode;
}
}
10 changes: 9 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@
<crypto-utils.version.v1>3.8.0</crypto-utils.version.v1>
<crypto-utils.version.v2>5.2.1</crypto-utils.version.v2>
<crypto-utils.version>5.2.1</crypto-utils.version>
</properties>
<dsf-linter.version>0.1.2</dsf-linter.version>
</properties>

<name>DSF Parent POM</name>
<description>Data Sharing Framework (DSF)</description>
Expand Down Expand Up @@ -507,6 +508,13 @@
<version>3.2.3</version>
</dependency>

<!-- dsf linter -->
<dependency>
<groupId>dev.dsf.utils.linter</groupId>
<artifactId>linter-core</artifactId>
<version>${dsf-linter.version}</version>
</dependency>

<!-- maven plugin -->
<dependency>
<groupId>org.apache.maven</groupId>
Expand Down