Search in sources :

Example 1 with CreateReviewRequestCollector

use of org.eclipse.dash.licenses.review.CreateReviewRequestCollector in project dash-licenses by eclipse.

the class Main method main.

public static void main(String[] args) {
    CommandLineSettings settings = CommandLineSettings.getSettings(args);
    if (!settings.isValid()) {
        CommandLineSettings.printUsage(System.out);
        System.exit(1);
    }
    if (settings.isShowHelp()) {
        CommandLineSettings.printHelp(System.out);
        System.exit(0);
    }
    Injector injector = Guice.createInjector(new LicenseToolModule(settings));
    LicenseChecker checker = injector.getInstance(LicenseChecker.class);
    List<IResultsCollector> collectors = new ArrayList<>();
    // TODO Set up collectors based on command line parameters
    IResultsCollector primaryCollector = new NeedsReviewCollector();
    collectors.add(primaryCollector);
    String summaryPath = settings.getSummaryFilePath();
    if (summaryPath != null) {
        try {
            collectors.add(new CSVCollector(getWriter(summaryPath)));
        } catch (FileNotFoundException e1) {
            System.out.println("Can't write to " + summaryPath);
            System.exit(1);
        }
    }
    if (settings.isReview()) {
        collectors.add(new CreateReviewRequestCollector(injector.getInstance(GitLabSupport.class), (id, url) -> {
        }));
    }
    Arrays.stream(settings.getFileNames()).forEach(name -> {
        IDependencyListReader reader = null;
        try {
            reader = getReader(name);
        } catch (FileNotFoundException e) {
            System.out.println(String.format("The file \"%s\" does not exist.", name));
            CommandLineSettings.printUsage(System.out);
            System.exit(1);
        }
        if (reader != null) {
            Collection<IContentId> dependencies = reader.getContentIds();
            checker.getLicenseData(dependencies).forEach((id, licenseData) -> {
                collectors.forEach(collector -> collector.accept(licenseData));
            });
        }
    });
    collectors.forEach(IResultsCollector::close);
    System.exit(primaryCollector.getStatus());
}
Also used : OutputStream(java.io.OutputStream) GitLabSupport(org.eclipse.dash.licenses.review.GitLabSupport) Arrays(java.util.Arrays) Collection(java.util.Collection) FileOutputStream(java.io.FileOutputStream) IContentId(org.eclipse.dash.licenses.IContentId) FileInputStream(java.io.FileInputStream) InputStreamReader(java.io.InputStreamReader) File(java.io.File) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) Injector(com.google.inject.Injector) List(java.util.List) CreateReviewRequestCollector(org.eclipse.dash.licenses.review.CreateReviewRequestCollector) LicenseToolModule(org.eclipse.dash.licenses.context.LicenseToolModule) Guice(com.google.inject.Guice) FileReader(java.io.FileReader) LicenseChecker(org.eclipse.dash.licenses.LicenseChecker) ArrayList(java.util.ArrayList) FileNotFoundException(java.io.FileNotFoundException) LicenseChecker(org.eclipse.dash.licenses.LicenseChecker) LicenseToolModule(org.eclipse.dash.licenses.context.LicenseToolModule) IContentId(org.eclipse.dash.licenses.IContentId) Injector(com.google.inject.Injector) CreateReviewRequestCollector(org.eclipse.dash.licenses.review.CreateReviewRequestCollector)

Example 2 with CreateReviewRequestCollector

use of org.eclipse.dash.licenses.review.CreateReviewRequestCollector in project dash-licenses by eclipse.

the class LicenseCheckMojo method execute.

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
    // top-level reactor project and avoids duplicate invokations
    if (!mavenSession.getCurrentProject().equals(mavenSession.getTopLevelProject())) {
        return;
    }
    if (skip) {
        getLog().info("Skipping dependency license check");
        return;
    }
    // Validate the user-given dash license tool settings
    ISettings settings;
    try {
        settings = new MavenSettings(batch, foundationApi, clearlyDefinedApi, licenses, confidence, projectId, iplabToken);
    } catch (IllegalArgumentException e) {
        throw new MojoExecutionException("Invalid setting: " + e.getMessage());
    }
    // Get filtered list of project dependencies for all modules in the reactor
    Set<Artifact> filteredArtifacts = new HashSet<>();
    for (MavenProject project : reactorProjects) {
        filteredArtifacts.addAll(filterArtifacts(project.getArtifacts()));
    }
    if (getLog().isDebugEnabled()) {
        getLog().debug("Filtered dependency artifact list:");
        filteredArtifacts.stream().sorted().map(a -> "  " + a).forEach(getLog()::debug);
    }
    // Adapt dependency artifacts to dash content IDs
    List<IContentId> deps = new ArrayList<>();
    filteredArtifacts.stream().sorted().forEach(a -> {
        String type = a.getGroupId().startsWith(TychoConstants.P2_GROUPID_PREFIX) ? "p2" : "maven";
        // TODO deps are not necessarily from orbit or maven central
        String source = a.getGroupId().startsWith(TychoConstants.P2_GROUPID_PREFIX) ? "orbit" : "mavencentral";
        // TODO could get duplicates here if two artifact coords differ only by
        // classifier
        deps.add(ContentId.getContentId(type, source, a.getGroupId(), a.getArtifactId(), a.getVersion()));
    });
    List<IResultsCollector> collectors = new ArrayList<>();
    // This collector generates feedback for the user that the command line tool
    // would always print to stdout, so we collect the output in memory for printing
    // to the maven log later
    ByteArrayOutputStream primaryOut = new ByteArrayOutputStream();
    NeedsReviewCollector needsReviewCollector = new NeedsReviewCollector();
    collectors.add(needsReviewCollector);
    Injector injector = Guice.createInjector(new LicenseToolModule(settings, createProxySettings()));
    LicenseChecker checker = injector.getInstance(LicenseChecker.class);
    summary.getParentFile().mkdirs();
    reviewSummary.getParentFile().mkdirs();
    try (OutputStream summaryOut = new FileOutputStream(summary);
        PrintWriter reviewSummaryOut = new PrintWriter(new FileWriter(reviewSummary))) {
        collectors.add(new CSVCollector(summaryOut));
        if (iplabToken != null && projectId != null) {
            collectors.add(new CreateReviewRequestCollector(injector.getInstance(GitLabSupport.class), (id, url) -> reviewSummaryOut.println("[" + id + "](" + url + ")")));
        } else if (iplabToken != null) {
            getLog().info("Provide both an authentication token and a project id to automatically create review tickets.");
        }
        for (LicenseData licenseData : checker.getLicenseData(deps).values()) {
            collectors.forEach(c -> c.accept(licenseData));
        }
        collectors.forEach(IResultsCollector::close);
    } catch (IOException e) {
        throw new MojoExecutionException("Can't write dependency summary file", e);
    }
    // Pass the output from the collectors to the maven log
    primaryOut.toString(StandardCharsets.UTF_8).lines().forEach(getLog()::info);
    getLog().info("Summary file was written to: " + summary);
    if (failWhenReviewNeeded && needsReviewCollector.getStatus() > 0) {
        getLog().error("Dependency license check failed. Some dependencies need to be vetted.");
        throw new MojoFailureException("Some dependencies must be vetted.");
    }
}
Also used : ByteArrayOutputStream(java.io.ByteArrayOutputStream) SecDispatcher(org.sonatype.plexus.components.sec.dispatcher.SecDispatcher) Component(org.apache.maven.plugins.annotations.Component) IContentId(org.eclipse.dash.licenses.IContentId) Parameter(org.apache.maven.plugins.annotations.Parameter) MessageFormat(java.text.MessageFormat) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Mojo(org.apache.maven.plugins.annotations.Mojo) Proxy(org.apache.maven.settings.Proxy) MavenProject(org.apache.maven.project.MavenProject) TychoConstants(org.eclipse.tycho.TychoConstants) CSVCollector(org.eclipse.dash.licenses.cli.CSVCollector) LicenseToolModule(org.eclipse.dash.licenses.context.LicenseToolModule) Artifact(org.apache.maven.artifact.Artifact) LifecyclePhase(org.apache.maven.plugins.annotations.LifecyclePhase) ResolutionScope(org.apache.maven.plugins.annotations.ResolutionScope) ContentId(org.eclipse.dash.licenses.ContentId) OutputStream(java.io.OutputStream) PrintWriter(java.io.PrintWriter) GitLabSupport(org.eclipse.dash.licenses.review.GitLabSupport) IProxySettings(org.eclipse.dash.licenses.IProxySettings) MavenSession(org.apache.maven.execution.MavenSession) LicenseData(org.eclipse.dash.licenses.LicenseData) FileWriter(java.io.FileWriter) FileOutputStream(java.io.FileOutputStream) Set(java.util.Set) ISettings(org.eclipse.dash.licenses.ISettings) NeedsReviewCollector(org.eclipse.dash.licenses.cli.NeedsReviewCollector) IOException(java.io.IOException) IResultsCollector(org.eclipse.dash.licenses.cli.IResultsCollector) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) File(java.io.File) StandardCharsets(java.nio.charset.StandardCharsets) MojoFailureException(org.apache.maven.plugin.MojoFailureException) Injector(com.google.inject.Injector) List(java.util.List) CreateReviewRequestCollector(org.eclipse.dash.licenses.review.CreateReviewRequestCollector) Guice(com.google.inject.Guice) LicenseChecker(org.eclipse.dash.licenses.LicenseChecker) CSVCollector(org.eclipse.dash.licenses.cli.CSVCollector) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) FileWriter(java.io.FileWriter) LicenseData(org.eclipse.dash.licenses.LicenseData) ArrayList(java.util.ArrayList) LicenseChecker(org.eclipse.dash.licenses.LicenseChecker) NeedsReviewCollector(org.eclipse.dash.licenses.cli.NeedsReviewCollector) LicenseToolModule(org.eclipse.dash.licenses.context.LicenseToolModule) MavenProject(org.apache.maven.project.MavenProject) Injector(com.google.inject.Injector) CreateReviewRequestCollector(org.eclipse.dash.licenses.review.CreateReviewRequestCollector) HashSet(java.util.HashSet) PrintWriter(java.io.PrintWriter) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) IResultsCollector(org.eclipse.dash.licenses.cli.IResultsCollector) MojoFailureException(org.apache.maven.plugin.MojoFailureException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) ISettings(org.eclipse.dash.licenses.ISettings) Artifact(org.apache.maven.artifact.Artifact) IContentId(org.eclipse.dash.licenses.IContentId) FileOutputStream(java.io.FileOutputStream)

Aggregations

Guice (com.google.inject.Guice)2 Injector (com.google.inject.Injector)2 File (java.io.File)2 FileOutputStream (java.io.FileOutputStream)2 OutputStream (java.io.OutputStream)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 IContentId (org.eclipse.dash.licenses.IContentId)2 LicenseChecker (org.eclipse.dash.licenses.LicenseChecker)2 LicenseToolModule (org.eclipse.dash.licenses.context.LicenseToolModule)2 CreateReviewRequestCollector (org.eclipse.dash.licenses.review.CreateReviewRequestCollector)2 GitLabSupport (org.eclipse.dash.licenses.review.GitLabSupport)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 FileInputStream (java.io.FileInputStream)1 FileNotFoundException (java.io.FileNotFoundException)1 FileReader (java.io.FileReader)1 FileWriter (java.io.FileWriter)1 IOException (java.io.IOException)1 InputStreamReader (java.io.InputStreamReader)1 PrintWriter (java.io.PrintWriter)1