Subversion Repositories DevTools

Rev

Rev 5307 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

//
//  Create a global expando class to hold global variables
def JatsGlobals = new Expando( noAndroidProjectSeen:0)

//
//  Create a hook before any of the projects are evaluated
gradle.projectsLoaded { g ->
    println 'Gradle Version          : ' + gradle.gradleVersion;
    println 'Gradle Home Dir         : ' + gradle.gradleHomeDir;
    println 'Gradle UserHome Dir     : ' + gradle.gradleUserHomeDir;
    println 'GBE_VERSION_NAME        : ' + gradle.rootProject.GBE_VERSION_NAME
    println 'GBE_VERSION_CODE        : ' + gradle.rootProject.GBE_VERSION_CODE


//  gradle.rootProject.properties.sort{it.key}.each { k,v->
//      println "   Root Property: $k = $v"
//  }

//  System.properties.sort{it.key}.each { k,v->
//      println "   System Property: $k = $v"
//  }
//
//  gradle.properties.sort{it.key}.each { k,v->
//      println "   Gradle Property: $k = $v"
//  }
}

//
//  Create a hook after all the projects have been evaluted
gradle.projectsEvaluated { g ->
//  JatsGlobals.properties.sort{it.key}.each { k,v->
//      println "JatsGlobals Property: $k = $v"
//  }

    //  Ensure that we have seen an android project with injected version information
    //
    if (JatsGlobals.noAndroidProjectSeen < 1)
    {
        logger.error ("ERROR: No android projects found")
        throw new GradleException('JATS Version Check failed')
    }
    logger.warn ('JATS version injection checked OK')
}

allprojects {

        afterEvaluate { project ->
        //logger.info "-------- allprojects::afterEvaluate"
        logger.info 'Project : ' + project.name
        JatsGlobals.setProperty('Project_' + project.name, 1);

        //---------------------------------------------------------------------
        // Configure RoboElectric for offline operation
        // Force here for all builds done under JATS
        project.tasks.withType(Test) {
            systemProperties.put('robolectric.offline', 'true')
        }

        //---------------------------------------------------------------------
        //  Remove network based repositories from the projects repositories
        //
        project.repositories
        {
            all 
            { 
                ArtifactRepository repo ->
                    def repoUrl = 'Repo has no URL'
                    def repoDir = ''
                    if (repo.hasProperty('url'))
                    {
                        repoUrl = repo.url.toString()
                        if (repoUrl.startsWith('file:/'))
                        {
                            repoDir = repoUrl
                        }
                    }
                    if (repo.name.startsWith('flatDir') && repo.hasProperty('dirs'))
                    {
                        repoDir = repo.dirs.toString()
                        repoUrl = repoDir
                    }

                    logger.info 'Repo:' + repo.name + "["+ repoUrl +"]" 

                    //  Allow
                    //      flatDir* - these are used for JATS dependencies
                    //      Repos that have a URL that starts with file:/ - these a local repos
                    if (repoDir.length() == 0)
                    {
                        logger.warn "WARNING: Repository: ${repo.name}. Url: ${repoUrl} removed. Only local repositories allowed"
                        remove repo
                    }
            }
        }


        //---------------------------------------------------------------------
        //  Ensure that the JATS generated Version information is being used by 
        //  the android projects to version the generated XML
        //
        logger.info "Global Version information"
        logger.info "  project.GBE_VERSION_NAME:" + project.GBE_VERSION_NAME
        logger.info "  project.GBE_VERSION_CODE:" + project.GBE_VERSION_CODE

        if (project.hasProperty('android'))
        {
            logger.info "defaultConfig Properties"
            logger.info "project.android.defaultConfig.versionName:" + project.android.defaultConfig.versionName
            logger.info "project.android.defaultConfig.versionCode:" + project.android.defaultConfig.versionCode

            if (project.GBE_VERSION_NAME != project.android.defaultConfig.versionName)
            {
                logger.error ("ERROR: Android defaultConfig. VersionName is not controlled by JATS")
                logger.error (" Project Version Name:" + project.GBE_VERSION_NAME)
                logger.error (" Default Version Name:" + project.android.defaultConfig.versionName)
                throw new GradleException('JATS Version Check failed')
            }

            if (Integer.parseInt(project.GBE_VERSION_CODE) != project.android.defaultConfig.versionCode)
            {
                logger.error ("ERROR: Android defaultConfig. VersionCode is not controlled by JATS")
                logger.error (" Project Version Code:" + project.GBE_VERSION_CODE)
                logger.error (" Default Version Code:" + project.android.defaultConfig.versionCode)
                throw new GradleException('JATS Version Check failed')
            }

            logger.warn (':' + project.name + ':JATS version injecting checked OK')
            JatsGlobals.noAndroidProjectSeen += 1
        }

        //
        //  Insert a dummy task so that we can perform testing from within JATS
        //  Tasks have stuff to do
        //      doFirst adds stuff to the beginning of the action chain
        //      doLast adds stuff to the end of the action chain
        task('JatsInfo') 
        {
            description 'A task used by jats for sanity testing'

            doFirst {
                logger.info "Global Version information"
                logger.info "  project.GBE_VERSION_NAME:" + getProject().GBE_VERSION_NAME
                logger.info "  project.GBE_VERSION_CODE:" + getProject().GBE_VERSION_CODE
            }
        }
    }
}