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

kevinjqliu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/main by this push:
     new 3d682a3b65 INFRA: Expand Trivy CVE scan to all bundle and runtime 
modules (#16291)
3d682a3b65 is described below

commit 3d682a3b65838aba29f16141b45633a6cbe51178
Author: Kevin Liu <[email protected]>
AuthorDate: Mon May 11 18:05:09 2026 -0400

    INFRA: Expand Trivy CVE scan to all bundle and runtime modules (#16291)
    
    * scan all bundle and runtime modules
    
    * remove old workflow
    
    * thanks huaxin
    
    Co-authored-by: Copilot <[email protected]>
    
    ---------
    
    Co-authored-by: Copilot <[email protected]>
---
 .github/workflows/cve-scan.yml               | 168 +++++++++++++++++++++++++++
 .github/workflows/delta-conversion-ci.yml    |   2 +-
 .github/workflows/flink-ci.yml               |   2 +-
 .github/workflows/hive-ci.yml                |   2 +-
 .github/workflows/java-ci.yml                |   2 +-
 .github/workflows/kafka-connect-ci.yml       |   2 +-
 .github/workflows/kafka-connect-cve-scan.yml | 136 ----------------------
 .github/workflows/spark-ci.yml               |   2 +-
 8 files changed, 174 insertions(+), 142 deletions(-)

diff --git a/.github/workflows/cve-scan.yml b/.github/workflows/cve-scan.yml
new file mode 100644
index 0000000000..a255104013
--- /dev/null
+++ b/.github/workflows/cve-scan.yml
@@ -0,0 +1,168 @@
+#
+# 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: "CVE Scan"
+on:
+  push:
+    branches:
+    - 'main'
+    - '0.*'
+    - '1.*'
+    - '2.*'
+    tags:
+    - 'apache-iceberg-**'
+
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: false
+
+jobs:
+
+  # ------------------------------------------------------------------
+  # Trivy CVE scan — scans bundled jars for known vulnerabilities.
+  #
+  # Runs on push to main/release branches only (not PRs). Results are
+  # uploaded as SARIF to the GitHub Security tab for ongoing tracking.
+  # The scan is informational and does not block the build.
+  # ------------------------------------------------------------------
+  cve-scan:
+    runs-on: ubuntu-24.04
+    permissions:
+      contents: read
+      security-events: write
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+        - distribution: kafka-connect-runtime
+          build-task: >-
+            -DkafkaVersions=3
+            :iceberg-kafka-connect:iceberg-kafka-connect-runtime:distZip
+          scan-path: kafka-connect/kafka-connect-runtime/build/distributions
+          unpack: true
+        - distribution: aws-bundle
+          build-task: :iceberg-aws-bundle:shadowJar
+          scan-path: aws-bundle/build/libs
+          unpack: false
+        - distribution: azure-bundle
+          build-task: :iceberg-azure-bundle:shadowJar
+          scan-path: azure-bundle/build/libs
+          unpack: false
+        - distribution: gcp-bundle
+          build-task: :iceberg-gcp-bundle:shadowJar
+          scan-path: gcp-bundle/build/libs
+          unpack: false
+        - distribution: spark-runtime-3.4_2.12
+          build-task: >-
+            -DsparkVersions=3.4
+            :iceberg-spark:iceberg-spark-runtime-3.4_2.12:shadowJar
+          scan-path: spark/v3.4/spark-runtime/build/libs
+          unpack: false
+        - distribution: spark-runtime-3.5_2.12
+          build-task: >-
+            -DsparkVersions=3.5
+            :iceberg-spark:iceberg-spark-runtime-3.5_2.12:shadowJar
+          scan-path: spark/v3.5/spark-runtime/build/libs
+          unpack: false
+        - distribution: spark-runtime-4.0_2.13
+          build-task: >-
+            -DsparkVersions=4.0
+            :iceberg-spark:iceberg-spark-runtime-4.0_2.13:shadowJar
+          scan-path: spark/v4.0/spark-runtime/build/libs
+          unpack: false
+        - distribution: spark-runtime-4.1_2.13
+          build-task: >-
+            -DsparkVersions=4.1
+            :iceberg-spark:iceberg-spark-runtime-4.1_2.13:shadowJar
+          scan-path: spark/v4.1/spark-runtime/build/libs
+          unpack: false
+        - distribution: flink-runtime-1.20
+          build-task: >-
+            -DflinkVersions=1.20
+            :iceberg-flink:iceberg-flink-runtime-1.20:shadowJar
+          scan-path: flink/v1.20/flink-runtime/build/libs
+          unpack: false
+        - distribution: flink-runtime-2.0
+          build-task: >-
+            -DflinkVersions=2.0
+            :iceberg-flink:iceberg-flink-runtime-2.0:shadowJar
+          scan-path: flink/v2.0/flink-runtime/build/libs
+          unpack: false
+        - distribution: flink-runtime-2.1
+          build-task: >-
+            -DflinkVersions=2.1
+            :iceberg-flink:iceberg-flink-runtime-2.1:shadowJar
+          scan-path: flink/v2.1/flink-runtime/build/libs
+          unpack: false
+        - distribution: open-api-test-fixtures-runtime
+          build-task: :iceberg-open-api:shadowJar
+          scan-path: open-api/build/libs
+          unpack: false
+    name: ${{ matrix.distribution }}
+    steps:
+    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+      with:
+        persist-credentials: false
+    - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # 
v5.2.0
+      with:
+        distribution: zulu
+        java-version: 21
+    - uses: 
gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 # 
zizmor: ignore[cache-poisoning] -- cache writes are restricted to the default 
branch by setup-gradle
+    - name: Build ${{ matrix.distribution }}
+      run: |
+        ./gradlew -DsparkVersions= -DflinkVersions= \
+          ${{ matrix.build-task }} \
+          -Pquick=true -x test -x javadoc
+    - name: Prepare scan directory
+      run: |
+        mkdir -p /tmp/cve-scan
+        if [ "${{ matrix.unpack }}" = "true" ]; then
+          unzip ${{ matrix.scan-path }}/*.zip -d /tmp/cve-scan
+        else
+          cp ${{ matrix.scan-path }}/iceberg-${{ matrix.distribution }}-*.jar 
/tmp/cve-scan/
+        fi
+    - name: Run Trivy vulnerability scan
+      uses: 
lhotari/sandboxed-trivy-action@f01374b6cc3bf7264ab238293e94f6db7ada6dd0 # v1.0.2
+      with:
+        scan-type: 'rootfs'
+        scan-ref: '/tmp/cve-scan'
+        scanners: 'vuln'
+        severity: 'HIGH,CRITICAL'
+        limit-severities-for-sarif: true
+        exit-code: '0'
+        format: 'sarif'
+        output: 'trivy-results.sarif'
+    - name: Print Trivy scan results
+      if: always()
+      run: |
+        if [ -f trivy-results.sarif ]; then
+          echo "## Trivy CVE Scan Results — ${{ matrix.distribution }}"
+          jq -r '.runs[].results[] | "- \(.ruleId): \(.message.text)"' 
trivy-results.sarif 2>/dev/null || echo "No findings or unable to parse SARIF."
+        else
+          echo "No SARIF file found — scan may have failed to install."
+        fi
+    - name: Upload Trivy results to GitHub Security tab
+      if: always()
+      uses: 
github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # 
v4.35.1
+      with:
+        sarif_file: 'trivy-results.sarif'
+        category: ${{ matrix.distribution }}
diff --git a/.github/workflows/delta-conversion-ci.yml 
b/.github/workflows/delta-conversion-ci.yml
index 520772f5c2..c98be4c0ea 100644
--- a/.github/workflows/delta-conversion-ci.yml
+++ b/.github/workflows/delta-conversion-ci.yml
@@ -37,7 +37,7 @@ on:
       - '.github/workflows/java-ci.yml'
       - '.github/workflows/jmh-benchmarks-ci.yml'
       - '.github/workflows/kafka-connect-ci.yml'
-      - '.github/workflows/kafka-connect-cve-scan.yml'
+      - '.github/workflows/cve-scan.yml'
       - '.github/workflows/labeler.yml'
       - '.github/workflows/license-check.yml'
       - '.github/workflows/open-api.yml'
diff --git a/.github/workflows/flink-ci.yml b/.github/workflows/flink-ci.yml
index 1a815eb5b3..6164863775 100644
--- a/.github/workflows/flink-ci.yml
+++ b/.github/workflows/flink-ci.yml
@@ -37,7 +37,7 @@ on:
     - '.github/workflows/java-ci.yml'
     - '.github/workflows/jmh-benchmarks-ci.yml'
     - '.github/workflows/kafka-connect-ci.yml'
-    - '.github/workflows/kafka-connect-cve-scan.yml'
+    - '.github/workflows/cve-scan.yml'
     - '.github/workflows/labeler.yml'
     - '.github/workflows/license-check.yml'
     - '.github/workflows/open-api.yml'
diff --git a/.github/workflows/hive-ci.yml b/.github/workflows/hive-ci.yml
index ae5ab05014..1c754691ef 100644
--- a/.github/workflows/hive-ci.yml
+++ b/.github/workflows/hive-ci.yml
@@ -37,7 +37,7 @@ on:
     - '.github/workflows/java-ci.yml'
     - '.github/workflows/jmh-benchmarks-ci.yml'
     - '.github/workflows/kafka-connect-ci.yml'
-    - '.github/workflows/kafka-connect-cve-scan.yml'
+    - '.github/workflows/cve-scan.yml'
     - '.github/workflows/labeler.yml'
     - '.github/workflows/license-check.yml'
     - '.github/workflows/open-api.yml'
diff --git a/.github/workflows/java-ci.yml b/.github/workflows/java-ci.yml
index f99d19d7d8..be97c14d0c 100644
--- a/.github/workflows/java-ci.yml
+++ b/.github/workflows/java-ci.yml
@@ -37,7 +37,7 @@ on:
     - '.github/workflows/hive-ci.yml'
     - '.github/workflows/jmh-benchmarks-ci.yml'
     - '.github/workflows/kafka-connect-ci.yml'
-    - '.github/workflows/kafka-connect-cve-scan.yml'
+    - '.github/workflows/cve-scan.yml'
     - '.github/workflows/labeler.yml'
     - '.github/workflows/license-check.yml'
     - '.github/workflows/open-api.yml'
diff --git a/.github/workflows/kafka-connect-ci.yml 
b/.github/workflows/kafka-connect-ci.yml
index 59f0190d33..a2e8c6043d 100644
--- a/.github/workflows/kafka-connect-ci.yml
+++ b/.github/workflows/kafka-connect-ci.yml
@@ -43,7 +43,7 @@ on:
     - '.github/workflows/publish-snapshot.yml'
     - '.github/workflows/recurring-jmh-benchmarks.yml'
     - '.github/workflows/site-ci.yml'
-    - '.github/workflows/kafka-connect-cve-scan.yml'
+    - '.github/workflows/cve-scan.yml'
     - '.github/workflows/spark-ci.yml'
     - '.github/workflows/stale.yml'
     - '.gitignore'
diff --git a/.github/workflows/kafka-connect-cve-scan.yml 
b/.github/workflows/kafka-connect-cve-scan.yml
deleted file mode 100644
index 5781ed6011..0000000000
--- a/.github/workflows/kafka-connect-cve-scan.yml
+++ /dev/null
@@ -1,136 +0,0 @@
-#
-# 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: "Kafka Connect CVE Scan"
-on:
-  push:
-    branches:
-    - 'main'
-    - '0.*'
-    - '1.*'
-    - '2.*'
-    tags:
-    - 'apache-iceberg-**'
-  pull_request:
-    paths-ignore:
-    - '.github/ISSUE_TEMPLATE/**'
-    - '.github/workflows/api-binary-compatibility.yml'
-    - '.github/workflows/delta-conversion-ci.yml'
-    - '.github/workflows/docs-ci.yml'
-    - '.github/workflows/flink-ci.yml'
-    - '.github/workflows/hive-ci.yml'
-    - '.github/workflows/java-ci.yml'
-    - '.github/workflows/jmh-benchmarks-ci.yml'
-    - '.github/workflows/labeler.yml'
-    - '.github/workflows/license-check.yml'
-    - '.github/workflows/open-api.yml'
-    - '.github/workflows/publish-snapshot.yml'
-    - '.github/workflows/recurring-jmh-benchmarks.yml'
-    - '.github/workflows/site-ci.yml'
-    - '.github/workflows/spark-ci.yml'
-    - '.github/workflows/kafka-connect-ci.yml'
-    - '.github/workflows/stale.yml'
-    - '.gitignore'
-    - '.asf.yaml'
-    - 'dev/**'
-    - 'docker/**'
-    - 'mr/**'
-    - 'flink/**'
-    - 'spark/**'
-    - 'docs/**'
-    - 'site/**'
-    - 'open-api/**'
-    - 'format/**'
-    - '.gitattributes'
-    - '**/README.md'
-    - 'CONTRIBUTING.md'
-    - '**/LICENSE'
-    - '**/NOTICE'
-    - 'doap.rdf'
-
-permissions:
-  contents: read
-
-concurrency:
-  group: ${{ github.workflow }}-${{ github.ref }}
-  cancel-in-progress: ${{ github.event_name == 'pull_request' }}
-
-jobs:
-
-  # ------------------------------------------------------------------
-  # Trivy CVE scan — scans bundled jars for known vulnerabilities.
-  #
-  # Behaviour:
-  #   - If a CVE is found, the step will fail. However, since this job
-  #     is not a required check, it will not block merging.
-  #   - On push to main/release branches: results are uploaded as
-  #     SARIF to the GitHub Security tab for ongoing tracking.
-  #   - On PRs: SARIF upload is skipped because GitHub's Security
-  #     tab only accepts results from default/protected branches.
-  #     CVE findings are visible in the CI log output instead.
-  # ------------------------------------------------------------------
-  kafka-connect-cve-scan:
-    runs-on: ubuntu-24.04
-    permissions:
-      contents: read
-      security-events: write
-    steps:
-    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
-      with:
-        persist-credentials: false
-    - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
-      with:
-        distribution: zulu
-        java-version: 21
-    - uses: 
gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 # 
zizmor: ignore[cache-poisoning] -- cache writes are restricted to the default 
branch by setup-gradle
-    - name: Build Kafka Connect distribution for scanning
-      run: |
-        ./gradlew -DsparkVersions= -DflinkVersions= -DkafkaVersions=3 \
-          :iceberg-kafka-connect:iceberg-kafka-connect-runtime:distZip \
-          -Pquick=true -x test -x javadoc
-    - name: Unpack distribution for scanning
-      run: |
-        mkdir -p /tmp/kafka-connect-scan
-        unzip 
kafka-connect/kafka-connect-runtime/build/distributions/iceberg-kafka-connect-runtime-*.zip
 \
-          -d /tmp/kafka-connect-scan
-    - name: Run Trivy vulnerability scan
-      uses: 
lhotari/sandboxed-trivy-action@f01374b6cc3bf7264ab238293e94f6db7ada6dd0 # v1.0.2
-      with:
-        scan-type: 'rootfs'
-        scan-ref: '/tmp/kafka-connect-scan'
-        scanners: 'vuln'
-        severity: 'HIGH,CRITICAL'
-        limit-severities-for-sarif: true
-        exit-code: '1'
-        format: 'sarif'
-        output: 'trivy-results.sarif'
-    - name: Print Trivy scan results
-      if: always()
-      run: |
-        if [ -f trivy-results.sarif ]; then
-          echo "## Trivy CVE Scan Results"
-          jq -r '.runs[].results[] | "- \(.ruleId): \(.message.text)"' 
trivy-results.sarif 2>/dev/null || echo "No findings or unable to parse SARIF."
-        else
-          echo "No SARIF file found — scan may have failed to install."
-        fi
-    - name: Upload Trivy results to GitHub Security tab
-      if: always() && github.event_name == 'push'
-      uses: 
github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # 
v4.35.1
-      with:
-        sarif_file: 'trivy-results.sarif'
diff --git a/.github/workflows/spark-ci.yml b/.github/workflows/spark-ci.yml
index 566b7524e4..f04e397dc1 100644
--- a/.github/workflows/spark-ci.yml
+++ b/.github/workflows/spark-ci.yml
@@ -38,7 +38,7 @@ on:
     - '.github/workflows/java-ci.yml'
     - '.github/workflows/jmh-benchmarks-ci.yml'
     - '.github/workflows/kafka-connect-ci.yml'
-    - '.github/workflows/kafka-connect-cve-scan.yml'
+    - '.github/workflows/cve-scan.yml'
     - '.github/workflows/labeler.yml'
     - '.github/workflows/license-check.yml'
     - '.github/workflows/open-api.yml'

Reply via email to