This is an automated email from the ASF dual-hosted git repository.

johncasey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 780095939d9 Feature/automate io performance tests (#28266)
780095939d9 is described below

commit 780095939d9f3a72b5a4496158ea2cb165096cae
Author: johnjcasey <[email protected]>
AuthorDate: Tue Sep 12 15:36:31 2023 -0400

    Feature/automate io performance tests (#28266)
    
    * Update 2.50 release notes to include new Kafka topicPattern feature
    
    * Create groovy class for io performance tests
    Create gradle task and github actions config for GCS using this.
    
    * delete unnecessary class
    
    * fix env call
    
    * fix call to gradle
    
    * run on hosted runner for testing
    
    * add additional checkout
    
    * add destination for triggered tests
    
    * move env variables to correct location
    
    * try uploading against separate dataset
    
    * try without a user
    
    * update branch checkout, try to view the failure log
    
    * run on failure
    
    * update to use correct BigQuery instance
    
    * convert to matrix
    
    * add result reporting
    
    * add failure clause
    
    * remove failure clause, update to run on self-hosted
    
    * address comments, clean up build
    
    * clarify branching
---
 .../beam_PostCommit_Java_IO_Performance_Tests.yml  | 114 +++++++++++++++++++++
 .../beam/gradle/IoPerformanceTestUtilities.groovy  |  45 ++++++++
 it/build.gradle                                    |  33 ++++++
 it/google-cloud-platform/build.gradle              |   6 +-
 4 files changed, 197 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/beam_PostCommit_Java_IO_Performance_Tests.yml 
b/.github/workflows/beam_PostCommit_Java_IO_Performance_Tests.yml
new file mode 100644
index 00000000000..ffd5751fd8b
--- /dev/null
+++ b/.github/workflows/beam_PostCommit_Java_IO_Performance_Tests.yml
@@ -0,0 +1,114 @@
+# 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.
+
+name: PostCommit Java IO Performance Tests
+
+on:
+  push:
+    tags: ['v*']
+    branches: ['master', 'release-*']
+    paths: 
['it/google-cloud-platform/**','.github/workflows/beam_PostCommit_Java_IO_Performance_Tests.yml']
+  issue_comment:
+    types: [created]
+  schedule:
+  - cron: '0 */6 * * *'
+  workflow_dispatch:
+
+#Setting explicit permissions for the action to avoid the default permissions 
which are `write-all` in case of pull_request_target event
+permissions:
+  actions: write
+  pull-requests: read
+  checks: read
+  contents: read
+  deployments: read
+  id-token: none
+  issues: read
+  discussions: read
+  packages: read
+  pages: read
+  repository-projects: read
+  security-events: read
+  statuses: read
+
+# This allows a subsequently queued workflow run to interrupt previous runs
+concurrency:
+  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || 
github.sha || github.head_ref || github.ref }}-${{ github.event.sender.login 
}}-${{ github.event.schedule }}'
+  cancel-in-progress: true
+
+env:
+  GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }}
+  GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GE_CACHE_USERNAME }}
+  GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GE_CACHE_PASSWORD }}
+
+jobs:
+  beam_PostCommit_Java_IO_Performance_Tests:
+    if: |
+      github.event_name == 'push' ||
+      github.event_name == 'workflow_dispatch' ||
+      github.event_name == 'schedule' ||
+      github.event.comment.body == 'Run Java PostCommit IO Performance Tests'
+    runs-on: [self-hosted, ubuntu-20.04, main]
+    name: ${{ matrix.job_name }} (${{ matrix.job_phrase }} ${{ 
matrix.test_case }})
+    strategy:
+      matrix:
+        job_name: ["beam_PostCommit_Java_IO_Performance_Tests"]
+        job_phrase: ["Run Java PostCommit IO Performance Tests"]
+        test_case: ["GCSPerformanceTest", "BigTablePerformanceTest"]
+    steps:
+    - uses: actions/checkout@v3
+    - name: Setup repository
+      uses: ./.github/actions/setup-action
+      with:
+        comment_phrase: ${{ matrix.job_phrase }} ${{ matrix.test_case }}
+        github_token: ${{ secrets.GITHUB_TOKEN }}
+        github_job: ${{ matrix.job_name }} (${{ matrix.job_phrase }} ${{ 
matrix.test_case }})
+    - name: Checkout release branch
+      if: github.event_name == 'schedule' #This has scheduled runs run against 
the latest release
+      uses: actions/checkout@v3
+      with:
+        ref: v2.50.0 #TODO(https://github.com/apache/beam/issues/28330) 
automate updating this
+        repository: apache/beam
+    - name: Install Java
+      uses: actions/[email protected]
+      with:
+        distribution: 'zulu'
+        java-version: '8'
+    - name: Setup Gradle
+      uses: gradle/gradle-build-action@v2
+      with:
+        cache-read-only: false
+    - name: Authenticate on GCP
+      uses: google-github-actions/setup-gcloud@v0
+      with:
+        service_account_email: ${{ secrets.GCP_SA_EMAIL }}
+        service_account_key: ${{ secrets.GCP_SA_KEY }}
+        project_id: ${{ secrets.GCP_PROJECT_ID }}
+        export_default_credentials: true
+    - name: run scheduled javaPostcommitIOPerformanceTests script
+      if: github.event_name == 'schedule' #This ensures only scheduled runs 
publish metrics publicly by changing which exportTable is configured
+      uses: ./.github/actions/gradle-command-self-hosted-action
+      with:
+        gradle-command: :it:${{ matrix.test_case }}
+      env:
+        exportDataset: performance_tests
+        exportTable: io_performance_metrics
+    - name: run triggered javaPostcommitIOPerformanceTests script
+      if: github.event_name != 'schedule'
+      uses: ./.github/actions/gradle-command-self-hosted-action
+      with:
+        gradle-command: :it:${{ matrix.test_case }}
+      env:
+        exportDataset: performance_tests
+        exportTable: io_performance_metrics_test
\ No newline at end of file
diff --git 
a/buildSrc/src/main/groovy/org/apache/beam/gradle/IoPerformanceTestUtilities.groovy
 
b/buildSrc/src/main/groovy/org/apache/beam/gradle/IoPerformanceTestUtilities.groovy
new file mode 100644
index 00000000000..844afd75f00
--- /dev/null
+++ 
b/buildSrc/src/main/groovy/org/apache/beam/gradle/IoPerformanceTestUtilities.groovy
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+package org.apache.beam.gradle
+
+import org.gradle.api.Project
+import org.gradle.api.tasks.testing.Test
+
+import javax.inject.Inject
+
+class IoPerformanceTestUtilities {
+  abstract static class IoPerformanceTest extends Test {
+    @Inject
+    IoPerformanceTest(Project runningProject, String module, String testClass, 
Map<String,String> systemProperties){
+      group = "Verification"
+      description = "Runs IO Performance Test for $testClass"
+      outputs.upToDateWhen { false }
+      testClassesDirs = 
runningProject.findProject(":it:${module}").sourceSets.test.output.classesDirs
+      classpath =  runningProject.sourceSets.test.runtimeClasspath + 
runningProject.findProject(":it:${module}").sourceSets.test.runtimeClasspath
+
+      include "**/${testClass}.class"
+
+      systemProperty 'exportDataset', System.getenv('exportDataset')
+      systemProperty 'exportTable', System.getenv('exportTable')
+
+      for (entry in systemProperties){
+        systemProperty entry.key, entry.value
+      }
+    }
+  }
+}
diff --git a/it/build.gradle b/it/build.gradle
new file mode 100644
index 00000000000..35ccbba4c36
--- /dev/null
+++ b/it/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * 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' }
+applyJavaNature(
+        automaticModuleName: 'org.apache.beam.it',
+)
+
+description = "Apache Beam :: IT"
+ext.summary = "Integration test utilities suites."
+
+//These registrations exist to make our matrix Github Action simple to 
configure
+tasks.register('GCSPerformanceTest') {
+    dependsOn(":it:google-cloud-platform:GCSPerformanceTest")
+}
+
+tasks.register('BigTablePerformanceTest') {
+    dependsOn(":it:google-cloud-platform:BigTablePerformanceTest")
+}
\ No newline at end of file
diff --git a/it/google-cloud-platform/build.gradle 
b/it/google-cloud-platform/build.gradle
index f43b3f25720..0917ddd3e21 100644
--- a/it/google-cloud-platform/build.gradle
+++ b/it/google-cloud-platform/build.gradle
@@ -15,6 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import org.apache.beam.gradle.IoPerformanceTestUtilities
 
 plugins { id 'org.apache.beam.module' }
 applyJavaNature(
@@ -74,4 +75,7 @@ dependencies {
     testImplementation library.java.mockito_inline
     testRuntimeOnly project(path: ":runners:direct-java", configuration: 
"shadowTest")
     testRuntimeOnly library.java.slf4j_simple
-}
\ No newline at end of file
+}
+
+tasks.register("GCSPerformanceTest", 
IoPerformanceTestUtilities.IoPerformanceTest, project, 'google-cloud-platform', 
'FileBasedIOLT', ['configuration':'large','project':'apache-beam-testing', 
'artifactBucket':'io-performance-temp'])
+tasks.register("BigTablePerformanceTest", 
IoPerformanceTestUtilities.IoPerformanceTest, project, 'google-cloud-platform', 
'BigTableIOLT', ['configuration':'large','project':'apache-beam-testing', 
'artifactBucket':'io-performance-temp'])
\ No newline at end of file

Reply via email to