Skip to content
代码片段 群组 项目
build.gradle 8.4 KB
更新 更旧
  • 了解如何忽略特定修订
  • /*
     * Licensed to the Apache Software Foundation (ASF) under one
     * or more contributor license agreements.  See the NOTICE file
     * distributed with this work for additional information
     * regarding copyright ownership.  The ASF licenses this file
     * to you 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.
     */
    
    plugins {
      id 'base'
      // Enable publishing build scans
    
      id 'com.gradle.build-scan' version '2.1' apply false
    
      // This plugin provides a task to determine which dependencies have updates.
      // Additionally, the plugin checks for updates to Gradle itself.
      //
      // See https://github.com/ben-manes/gradle-versions-plugin for further details.
      id 'com.github.ben-manes.versions' version '0.17.0'
      // Apply one top level rat plugin to perform any required license enforcement analysis
    
      id 'org.nosphere.apache.rat' version '0.4.0'
    
      // Enable gradle-based release management
      id 'net.researchgate.release' version '2.6.0'
      id 'org.apache.beam.module'
    
      id "org.sonarqube" version "2.7"
    
    // Add performanceTest task to this build.gradle file
    // so that running Performance tests using PerfKitBenchmarker is possible.
    createPerformanceTestHarness()
    
    
    /*************************************************************************************************/
    // Configure the root project
    
    
    // Plugins which require online access should not be enabled when running in offline mode.
    if (!gradle.startParameter.isOffline()) {
      apply plugin: "com.gradle.build-scan"
    }
    
    
    // JENKINS_HOME and BUILD_ID set automatically during Jenkins execution
    def isCIBuild = ['JENKINS_HOME', 'BUILD_ID'].every System.&getenv
    if (isCIBuild) {
      buildScan {
    
        // Build Scan enabled and TOS accepted for Jenkins lab build. This does not apply to builds on
        // non-Jenkins machines. Developers need to separately enable and accept TOS to use build scans.
    
        termsOfServiceUrl = 'https://gradle.com/terms-of-service'
        termsOfServiceAgree = 'yes'
        publishAlways()
      }
    }
    
    
      // Set input directory to that of the root project instead of the CWD. This
      // makes .gitignore rules (added below) work properly.
      inputDir = project.rootDir
    
    
        // Ignore files we track but do not distribute
    
        "**/.github/**/*",
    
    
        "**/package-list",
    
        "**/user.avsc",
        "**/test/resources/**/*.txt",
        "**/test/**/.placeholder",
    
        // Default eclipse excludes neglect subprojects
    
        // Proto/grpc generated wrappers
        "**/apache_beam/portability/api/*_pb2*.py",
    
        "**/go/pkg/beam/**/*.pb.go",
    
        // Ignore Go test data files
        "**/go/data/**",
    
    
        // VCF test files
        "**/apache_beam/testing/data/vcf/*",
    
    Andrew Pilloud's avatar
    Andrew Pilloud 已提交
    
        // JDBC package config files
        "**/META-INF/services/java.sql.Driver",
    
        // Ruby build files
        "**/Gemfile.lock",
        "**/Rakefile",
        "**/.htaccess",
        "website/src/_sass/_bootstrap.scss",
        "website/src/_sass/bootstrap/**/*",
        "website/src/js/bootstrap*.js",
        "website/src/js/bootstrap/**/*",
    
    
        // Ignore ownership files
        "ownership/**/*",
    
    Udi Meiri's avatar
    Udi Meiri 已提交
        "**/OWNERS",
    
        // FIXME add license header
    
        "project-mappings",
        "deprecation-warning.txt",
    
    
    Mikhail Gryzykhin's avatar
    Mikhail Gryzykhin 已提交
        // Json doesn't support comments.
        "**/*.json",
    
          
        // Katas files
        "learning/katas/*/IO/**/*.txt"
    
      // Add .gitignore excludes to the Apache Rat exclusion list. We re-create the behavior
      // of the Apache Maven Rat plugin since the Apache Ant Rat plugin doesn't do this
      // automatically.
      def gitIgnore = project(':').file('.gitignore')
    
      if (gitIgnore.exists()) {
        def gitIgnoreExcludes = gitIgnore.readLines().findAll { !it.isEmpty() && !it.startsWith('#') }
        exclusions.addAll(gitIgnoreExcludes)
      }
    
      failOnError = true
    
    // Define root pre/post commit tasks simplifying what is needed
    
    // to be specified on the commandline when executing locally.
    
    // This indirection also makes Jenkins use the branch of the PR
    // for the test definitions.
    
    task javaPreCommit() {
    
      // We need to list the model/* builds since sdks/java/core doesn't
      // depend on any of the model.
    
      dependsOn ":model:pipeline:build"
      dependsOn ":model:job-management:build"
      dependsOn ":model:fn-execution:build"
      dependsOn ":runners:google-cloud-dataflow-java:worker:legacy-worker:build"
      dependsOn ":sdks:java:core:buildNeeded"
      dependsOn ":sdks:java:core:buildDependents"
      dependsOn ":examples:java:preCommit"
      dependsOn ":sdks:java:extensions:sql:jdbc:preCommit"
      dependsOn ":sdks:java:javadoc:allJavadoc"
      dependsOn ":runners:direct-java:needsRunnerTests"
    
    task javaPreCommitPortabilityApi() {
    
      dependsOn ":runners:google-cloud-dataflow-java:worker:build"
      dependsOn ":runners:google-cloud-dataflow-java:examples:verifyPortabilityApi"
    
      dependsOn ":runners:google-cloud-dataflow-java:postCommit"
      dependsOn ":sdks:java:extensions:google-cloud-platform-core:postCommit"
      dependsOn ":sdks:java:io:google-cloud-platform:postCommit"
    
      dependsOn ":sdks:java:extensions:sql:postCommit"
      dependsOn ":sdks:java:extensions:sql:jdbc:postCommit"
    
    task javaPostCommitPortabilityApi () {
    
      dependsOn ":runners:google-cloud-dataflow-java:postCommitPortabilityApi"
    
    task goPreCommit() {
    
      dependsOn ":sdks:go:examples:build"
      dependsOn ":sdks:go:test:build"
    
    
      // Ensure all container Go boot code builds as well.
    
      dependsOn ":sdks:java:container:build"
      dependsOn ":sdks:python:container:build"
      dependsOn ":sdks:go:container:build"
    
    task goPostCommit() {
    
      dependsOn ":goIntegrationTests"
    }
    
    task goIntegrationTests() {
      doLast {
        exec {
          executable 'sh'
          args '-c', './sdks/go/test/run_integration_tests.sh'
        }
      }
    
      dependsOn ":sdks:go:test:build"
      dependsOn ":runners:google-cloud-dataflow-java:worker:shadowJar"
    
    task pythonPreCommit() {
    
      dependsOn ":sdks:python:preCommitPy2"
      dependsOn ":sdks:python:test-suites:tox:py35:preCommitPy35"
      dependsOn ":sdks:python:test-suites:tox:py36:preCommitPy36"
      dependsOn ":sdks:python:test-suites:tox:py37:preCommitPy37"
      dependsOn ":sdks:python:test-suites:dataflow:preCommitIT"
    
      dependsOn ":sdks:python:test-suites:dataflow:py37:preCommitIT"
      // We don't include Py35, Py36 precommit ITs to reduce quota footprint.
      // We can reconsider if we ever see an issue that these suites would
      // have caught. Note that the same tests will still run in postcommit.
    
    task python2PostCommit() {
    
      dependsOn ":sdks:python:postCommit"
    
    task python35PostCommit() {
    
      dependsOn ":sdks:python:test-suites:dataflow:py35:postCommitIT"
      dependsOn ":sdks:python:test-suites:direct:py35:postCommitIT"
    
    }
    
    task python36PostCommit() {
      dependsOn ":sdks:python:test-suites:dataflow:py36:postCommitIT"
    
      dependsOn ":sdks:python:test-suites:direct:py36:postCommitIT"
    
    }
    
    task python37PostCommit() {
      dependsOn ":sdks:python:test-suites:dataflow:py37:postCommitIT"
    
      dependsOn ":sdks:python:test-suites:direct:py37:postCommitIT"
    
      dependsOn ":sdks:python:test-suites:direct:py37:hdfsIntegrationTest"
    
    task portablePythonPreCommit() {
    
      dependsOn "sdks:python:portablePreCommitPy2"
      dependsOn "sdks:python:test-suites:portable:py35:portablePreCommitPy35"
    
    task websitePreCommit() {
    
    task communityMetricsPreCommit() {
      dependsOn ":beam-test-infra-metrics:preCommit"
    }
    
    task communityMetricsProber() {
      dependsOn ":beam-test-infra-metrics:checkProber"
    }
    
    
    task javaExamplesDataflowPrecommit() {
    
      dependsOn ":runners:google-cloud-dataflow-java:examples:preCommit"
      dependsOn ":runners:google-cloud-dataflow-java:examples-streaming:preCommit"
    
    task runBeamDependencyCheck() {
      dependsOn ":dependencyUpdates"
    
      dependsOn ":sdks:python:dependencyUpdates"
    
    // Configure the release plugin to do only local work; the release manager determines what, if
    // anything, to push. On failure, the release manager can reset the branch without pushing.
    
      tagTemplate = 'v${version}'
      git {
        requireBranch = 'release-.*|master'