All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.whitesource.gradle.WhitesourcePlugin.groovy Maven / Gradle / Ivy

package org.whitesource.gradle

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.ExternalDependency
import org.gradle.api.artifacts.FileCollectionDependency
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.specs.Spec
import org.whitesource.gradle.tasks.CollectProjectInfoTask
import org.whitesource.gradle.tasks.UpdateWhitesourceInventoryTask

/**
 * @author Itai Marko
 */
class WhitesourcePlugin implements Plugin {

    @Override
    void apply(Project project) {
        project.configure(project) {
            project.ext {
                projectInfos = []
                includeAllDependencies =
                        new Spec(){
                            @Override
                            boolean isSatisfiedBy(Dependency dep) {
                                return true
                            }
                        }
                defaultDependencyFilter =
                        new Spec(){
                            @Override
                            boolean isSatisfiedBy(Dependency dep) {
                                return dep instanceof ExternalDependency
                            }
                        }
                includeExternalOrFileDependencies =
                        new Spec(){
                            @Override
                            boolean isSatisfiedBy(Dependency dep) {
                                return dep instanceof ExternalDependency || dep instanceof FileCollectionDependency
                            }
                        }
            }

            // create extension objects
            def wssConfig = project.extensions.create('whitesource', WhitesourceConfiguration)
            project.whitesource.extensions.create('proxy', ProxyConfiguration)

            afterEvaluate {
                //set defaults
                wssConfig.productName = wssConfig.productName ?: rootProject.name
                wssConfig.includedProjects = wssConfig.includedProjects ?: allprojects
                if (!(wssConfig.includedConfigurations || wssConfig.includedConfigurationNames)) {
                    wssConfig.includedConfigurationNames << 'runtime'
                }
                wssConfig.dependencyFilter = wssConfig.dependencyFilter ?: project.defaultDependencyFilter
                if (wssConfig.checkPolicies) {

                    if (!wssConfig.reportsDirectory) {
                        wssConfig.reportsDirectory = ((ProjectInternal)project).fileResolver.withBaseDir(project.buildDir).resolve('reports')
                    }
                }

                // create a collectProjectInfo task for each of the included projects
                def collectProjectInfoTaskName = 'collectProjectInfo'
                configure (wssConfig.includedProjects) {
                    tasks.create(name: collectProjectInfoTaskName, type: CollectProjectInfoTask) {
                        group = 'whitesource'
                    }
                }

                // create an updateWhitesource task for the root project
                Task uwi = tasks.create(name: 'updateWhitesource', type: UpdateWhitesourceInventoryTask) {
                    group = 'whitesource'
                }

                // set the updateWhitesource task to depend on each collectProjectInfo task created
                uwi.dependsOn wssConfig.includedProjects.collect {
                    it.tasks.findByName(collectProjectInfoTaskName)
                }
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy