| /* |
| * 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 'org.apache.beam.module' |
| // https://github.com/avast/gradle-docker-compose-plugin |
| id 'com.avast.gradle.docker-compose' |
| id 'org.ajoberstar.grgit' |
| } |
| applyGroovyNature() |
| |
| repositories { mavenCentral() } |
| |
| dependencies { |
| testCompile library.groovy.groovy_all |
| testCompile library.java.junit |
| } |
| |
| task testMetricsStack { |
| doLast { |
| // TODO(BEAM-5837): Add some actual validation of the metrics stack |
| println "Hello world!" } |
| } |
| |
| // Create an empty file and set DOCKER_CONFIG to ignore bad config file on Jenkins nodes. BEAM-7405 |
| task createEmptyConfig(type: Exec) { |
| outputs.file("${project.rootProject.buildDir}/config.json") |
| commandLine '/bin/sh', '-c', "echo '{}' > ${project.rootProject.buildDir}/config.json" |
| } |
| composeUp { |
| dependsOn "createEmptyConfig" |
| } |
| dockerCompose { |
| environment.put 'DOCKER_CONFIG', project.rootProject.buildDir |
| } |
| |
| dockerCompose.isRequiredBy(testMetricsStack) |
| |
| task validateConfiguration(type: Exec) { |
| commandLine 'sh', '-c', 'kubectl apply --dry-run=true -Rf kubernetes' |
| } |
| |
| task preCommit { |
| dependsOn validateConfiguration |
| dependsOn testMetricsStack |
| } |
| |
| task checkLastCommitId { |
| doLast { |
| assert grgit : 'Cannot use outside of git repository' |
| |
| def git = grgit.open(currentDir: project.rootDir) |
| def lastCommit = git.log(paths: ['.test-infra/metrics'], maxCommits: 1)[0] |
| project.ext.lastCommitId = lastCommit.abbreviatedId |
| } |
| } |
| |
| // Checks if Grafana deployment needs to be updated and deploys changes, if necessary. |
| // Grafana's images tags keep track of the last commit ID in `.test-infra/metrics` path. |
| // The deployment needs to be updated if new commit appears. |
| task deploy { |
| dependsOn checkLastCommitId |
| doLast { |
| def stdout = new ByteArrayOutputStream() |
| exec { |
| executable 'sh' |
| args '-c', 'kubectl get deployment beamgrafana -o jsonpath="{..image}"' |
| standardOutput = stdout |
| } |
| |
| // All images have the same tag, it doesn't matter which we choose. |
| String image = (stdout.toString().split(' ') as List)[0] |
| String currentImageTag = (image.split(':') as List)[1] |
| println "Current image tag: ${currentImageTag}" |
| println "Last commit ID: ${lastCommitId}" |
| |
| Boolean updateRequired = lastCommitId != currentImageTag |
| |
| if (updateRequired) { |
| // Build new images and force Kubernetes to re-pull images for Grafana deployment. |
| exec { |
| commandLine './build_and_publish_containers.sh', 'true', "${project.lastCommitId}" |
| } |
| |
| exec { |
| executable 'sh' |
| args '-c', "kubectl set image deployment/beamgrafana \ |
| beamgrafana=gcr.io/apache-beam-testing/beamgrafana:${project.lastCommitId} \ |
| beammetricssyncjenkins=gcr.io/apache-beam-testing/beammetricssyncjenkins:${project.lastCommitId} \ |
| beammetricssyncjira=gcr.io/apache-beam-testing/beammetricssyncjira:${project.lastCommitId} \ |
| beammetricssyncgithub=gcr.io/apache-beam-testing/beammetricssyncgithub:${project.lastCommitId}" |
| } |
| } else { |
| println 'Nothing to do, exiting.' |
| } |
| } |
| } |
| |
| task checkProber(type: Test) { |
| include "**/ProberTests.class" |
| } |
| |
| project.test { |
| exclude "**/ProberTests.class" |
| } |