/*
 * 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.
 */

rootProject.name = "beam"

include ":release"

include ":examples:java"
include ":examples:kotlin"
include ":model:fn-execution"
include ":model:job-management"
include ":model:pipeline"
include ":runners:apex"
include ":runners:core-construction-java"
include ":runners:core-java"
include ":runners:direct-java"
include ":runners:extensions-java:metrics"
/* Begin Flink Runner related settings */
// Flink 1.7
include ":runners:flink:1.7"
include ":runners:flink:1.7:job-server"
include ":runners:flink:1.7:job-server-container"
// Flink 1.8
include ":runners:flink:1.8"
include ":runners:flink:1.8:job-server"
include ":runners:flink:1.8:job-server-container"
/* End Flink Runner related settings */
include ":runners:gearpump"
include ":runners:google-cloud-dataflow-java"
include ":runners:google-cloud-dataflow-java:examples"
include ":runners:google-cloud-dataflow-java:examples-streaming"
include ":runners:java-fn-execution"
include ":runners:jet"
include ":runners:local-java"
include ":runners:reference:java"
include ":runners:spark"
include ":runners:spark:job-server"
include ":runners:samza"
include ":runners:samza:job-server"
include ":sdks:go"
include ":sdks:go:container"
include ":sdks:go:examples"
include ":sdks:go:test"
include ":sdks:java:bom"
include ":sdks:java:build-tools"
include ":sdks:java:container"
include ":sdks:java:core"
include ":sdks:java:extensions:euphoria"
include ":sdks:java:extensions:kryo"
include ":sdks:java:extensions:google-cloud-platform-core"
include ":sdks:java:extensions:jackson"
include ":sdks:java:extensions:join-library"
include ":sdks:java:extensions:protobuf"
include ":sdks:java:extensions:sketching"
include ":sdks:java:extensions:sorter"
include ":sdks:java:extensions:sql"
include ":sdks:java:extensions:sql:jdbc"
include ":sdks:java:extensions:sql:shell"
include ":sdks:java:extensions:sql:hcatalog"
include ":sdks:java:extensions:sql:datacatalog"
include ":sdks:java:extensions:zetasketch"
include ":sdks:java:fn-execution"
include ":sdks:java:harness"
include ":sdks:java:io:amazon-web-services"
include ":sdks:java:io:amazon-web-services2"
include ":sdks:java:io:amqp"
include ":sdks:java:io:cassandra"
include ":sdks:java:io:clickhouse"
include ":sdks:java:io:common"
include ":sdks:java:io:elasticsearch"
include ":sdks:java:io:elasticsearch-tests:elasticsearch-tests-2"
include ":sdks:java:io:elasticsearch-tests:elasticsearch-tests-5"
include ":sdks:java:io:elasticsearch-tests:elasticsearch-tests-6"
include ":sdks:java:io:elasticsearch-tests:elasticsearch-tests-common"
include ":sdks:java:io:file-based-io-tests"
include ':sdks:java:io:bigquery-io-perf-tests'
include ":sdks:java:io:google-cloud-platform"
include ":sdks:java:io:hadoop-common"
include ":sdks:java:io:hadoop-file-system"
include ":sdks:java:io:hadoop-format"
include ":sdks:java:io:hbase"
include ":sdks:java:io:hcatalog"
include ":sdks:java:io:jdbc"
include ":sdks:java:io:jms"
include ":sdks:java:io:kafka"
include ":sdks:java:io:kinesis"
include ":sdks:java:io:kudu"
include ":sdks:java:io:mongodb"
include ":sdks:java:io:mqtt"
include ":sdks:java:io:parquet"
include ":sdks:java:io:rabbitmq"
include ":sdks:java:io:redis"
include ":sdks:java:io:solr"
include ":sdks:java:io:tika"
include ":sdks:java:io:xml"
include ":sdks:java:io:synthetic"
include ":sdks:java:javadoc"
include ":sdks:java:testing:load-tests"
include ":sdks:java:testing:test-utils"
include ":sdks:java:maven-archetypes:examples"
include ":sdks:java:maven-archetypes:starter"
include ":sdks:java:testing:nexmark"
include ":sdks:java:testing:expansion-service"
include ":sdks:python"
include ":sdks:python:apache_beam:testing:load_tests"
include ":sdks:python:container"
include ":sdks:python:container:py2"
include ":sdks:python:container:py35"
include ":sdks:python:container:py36"
include ":sdks:python:container:py37"
include ":sdks:python:test-suites:dataflow:py2"
include ":sdks:python:test-suites:dataflow:py35"
include ":sdks:python:test-suites:dataflow:py36"
include ":sdks:python:test-suites:dataflow:py37"
include ":sdks:python:test-suites:direct:py2"
include ":sdks:python:test-suites:direct:py35"
include ":sdks:python:test-suites:direct:py36"
include ":sdks:python:test-suites:direct:py37"
include ":sdks:python:test-suites:portable:py2"
include ":sdks:python:test-suites:portable:py35"
include ":sdks:python:test-suites:portable:py36"
include ":sdks:python:test-suites:portable:py37"
include ":sdks:python:test-suites:tox:py2"
include ":sdks:python:test-suites:tox:py35"
include ":sdks:python:test-suites:tox:py36"
include ":sdks:python:test-suites:tox:py37"
include ":vendor:grpc-1_21_0"
include ":vendor:bytebuddy-1_9_3"
include ":vendor:calcite-1_20_0"
include ":vendor:guava-26_0-jre"
include ":vendor:sdks-java-extensions-protobuf"
include ":website"
include ":runners:google-cloud-dataflow-java:worker:legacy-worker"
include ":runners:google-cloud-dataflow-java:worker"
include ":runners:google-cloud-dataflow-java:worker:windmill"
// no dots allowed for project paths
include "beam-test-infra-metrics"
project(":beam-test-infra-metrics").dir = file(".test-infra/metrics")
include "beam-test-tools"
project(":beam-test-tools").dir = file(".test-infra/tools")
