This is an automated email from the ASF dual-hosted git repository.
adutra pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git
The following commit(s) were added to refs/heads/main by this push:
new a93c55320 Add CI workflow to test against Iceberg unreleased versions
(#3630)
a93c55320 is described below
commit a93c5532035270e285ab28735360615860730bfa
Author: Alexandre Dutra <[email protected]>
AuthorDate: Wed Feb 4 14:09:23 2026 +0100
Add CI workflow to test against Iceberg unreleased versions (#3630)
---
.github/workflows/nightly-iceberg.yml | 120 ++++++++++++++++++++++++++++++++++
settings.gradle.kts | 9 +++
2 files changed, 129 insertions(+)
diff --git a/.github/workflows/nightly-iceberg.yml
b/.github/workflows/nightly-iceberg.yml
new file mode 100644
index 000000000..e4481f517
--- /dev/null
+++ b/.github/workflows/nightly-iceberg.yml
@@ -0,0 +1,120 @@
+#
+# 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.
+#
+
+# Runs smoke tests against Apache Iceberg nightly builds to detect
compatibility issues early.
+
+name: Iceberg Nightly Smoke Tests
+
+on:
+ schedule:
+ # Run daily at 3:00 AM UTC
+ - cron: '0 3 * * *'
+ workflow_dispatch:
+ inputs:
+ iceberg_version:
+ description: 'Iceberg version to test (e.g., 1.11.0-SNAPSHOT). Leave
empty to auto-detect latest snapshot.'
+ required: false
+ type: string
+ branch:
+ description: 'Branch to build'
+ required: false
+ default: 'main'
+ type: string
+
+# Setting explicit permissions for the action
+permissions:
+ actions: read
+ contents: read
+ issues: read
+
+env:
+ GRADLE_TOS_ACCEPTED: ${{ vars.GRADLE_TOS_ACCEPTED }}
+ DEVELOCITY_SERVER: ${{ vars.DEVELOCITY_SERVER }}
+ DEVELOCITY_PROJECT_ID: ${{ vars.DEVELOCITY_PROJECT_ID }}
+
+jobs:
+ smoke-tests:
+ name: Smoke Tests (Iceberg Nightly)
+ runs-on: ubuntu-latest
+ if: github.repository == 'apache/polaris'
+ steps:
+ - name: Detect latest Iceberg snapshot version
+ id: detect
+ run: |
+ if [ -n "${{ inputs.iceberg_version }}" ]; then
+ echo "Using provided Iceberg version: ${{ inputs.iceberg_version
}}"
+ echo "iceberg_version=${{ inputs.iceberg_version }}" >>
$GITHUB_OUTPUT
+ else
+ echo "Detecting latest Iceberg snapshot version from Apache Maven
repository..."
+ # Fetch the maven-metadata.xml to find the latest snapshot version
+
METADATA_URL="https://repository.apache.org/content/repositories/snapshots/org/apache/iceberg/iceberg-api/maven-metadata.xml"
+ LATEST_VERSION=$(curl -s "$METADATA_URL" | grep -oP
'(?<=<latest>)[^<]+' | head -1)
+ if [ -z "$LATEST_VERSION" ]; then
+ echo "Failed to detect Iceberg snapshot version"
+ exit 1
+ fi
+ echo "Detected Iceberg snapshot version: $LATEST_VERSION"
+ echo "iceberg_version=$LATEST_VERSION" >> $GITHUB_OUTPUT
+ fi
+
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+ with:
+ ref: ${{ inputs.branch || 'main' }}
+
+ - name: Set up JDK 21
+ uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+ with:
+ java-version: '21'
+ distribution: 'temurin'
+
+ - name: Setup test environment
+ uses: ./.github/actions/setup-test-env
+
+ - name: Prepare Gradle build cache
+ uses: ./.github/actions/ci-incr-build-cache-prepare
+
+ - name: Override Iceberg version in version catalog
+ run: |
+ ICEBERG_VERSION="${{ steps.detect.outputs.iceberg_version }}"
+ echo "Overriding Iceberg version to: $ICEBERG_VERSION"
+ sed -i "s/^iceberg = .*/iceberg = \"$ICEBERG_VERSION\"/"
gradle/libs.versions.toml
+ echo "Updated gradle/libs.versions.toml:"
+ grep "^iceberg = " gradle/libs.versions.toml
+
+ - name: Run smoke tests with Iceberg nightly
+ env:
+ DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
+ run: |
+ echo "Running smoke tests with Iceberg version: ${{
steps.detect.outputs.iceberg_version }}"
+ ./gradlew \
+ :polaris-core:test \
+ :polaris-api-iceberg-service:test \
+ :polaris-runtime-service:test \
+ -PuseApacheSnapshots=true \
+ --continue
+
+ - name: Archive test results
+ uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
# v6
+ if: failure()
+ with:
+ name: iceberg-nightly-test-results
+ path: |
+ **/build/test-results/**
+ **/build/reports/tests/**
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 290416f98..bec990713 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -125,6 +125,15 @@ dependencyResolutionManagement {
url = uri("https://jitpack.io")
content { includeModule("com.github.RoaringBitmap.RoaringBitmap",
"roaringbitmap") }
}
+ val useApacheSnapshots =
+ providers.gradleProperty("useApacheSnapshots").orNull?.toBoolean() ==
true
+ if (useApacheSnapshots) {
+ maven {
+ name = "ApacheSnapshots"
+ url =
uri("https://repository.apache.org/content/repositories/snapshots/")
+ mavenContent { snapshotsOnly() }
+ }
+ }
gradlePluginPortal()
}
}