Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
4b18a8d
2334 (#2427)
MonkeyCanCode Aug 22, 2025
a29f800
Fix TableIdentifier in TaskFileIOSupplier (#2304)
XN137 Aug 22, 2025
05db610
Fix NPE in CreateCatalog (#2435)
HonahX Aug 23, 2025
fb61a11
Doc fix: Access control page update (#2424)
MonkeyCanCode Aug 24, 2025
d326962
fix(deps): update dependency software.amazon.awssdk:bom to v2.32.29 (…
renovate-bot Aug 25, 2025
eceaadd
Optimize PolicyCatalog.listPolicies (#2370)
XN137 Aug 26, 2025
ad450d4
Add PolarisDiagnostics field to BaseMetaStoreManager (#2381)
XN137 Aug 26, 2025
92ead05
Add feature flag to disallow custom S3 endpoints (#2442)
dimas-b Aug 26, 2025
76a5073
Deprecate ActiveRolesProvider for removal (#2404)
adutra Aug 26, 2025
f0ee460
Client: fix openapi verbose output, remove doc generate, and skip tes…
MonkeyCanCode Aug 26, 2025
3f1dfb3
Add user principal tag in metrics (#2445)
fivetran-kostaszoumpatianos Aug 26, 2025
6631c51
fix(deps): update dependency io.opentelemetry.semconv:opentelemetry-s…
renovate-bot Aug 27, 2025
e25c5b1
fix(deps): update dependency com.google.cloud:google-cloud-storage-bo…
renovate-bot Aug 27, 2025
e3dc36a
fix(deps): update dependency gradle.plugin.org.jetbrains.gradle.plugi…
renovate-bot Aug 27, 2025
b6e247d
Build: Make jandex dependency used for index generation managed (#2431)
snazy Aug 27, 2025
00ca832
Built: improve reproducible archive files (#2432)
snazy Aug 27, 2025
95ebdd3
Remove commons-lang3 dependency (#2456)
XN137 Aug 28, 2025
9e6d929
add refresh credentials property to loadTableResult (#2341)
jasonf20 Aug 28, 2025
de79f18
fix(deps): update dependency io.opentelemetry.semconv:opentelemetry-s…
renovate-bot Aug 28, 2025
b33c321
Add Delegator to all API Implementations (#2434)
adnanhemani Aug 28, 2025
f8ad77a
Prefer java.util.Base64 over commons-codec (#2463)
XN137 Aug 28, 2025
3bc92b4
Service: Move tests to the right package (#2469)
flyrain Aug 28, 2025
680f974
Update versions in runtime LICENSE and NOTICE (#2468)
jbonofre Aug 29, 2025
b1b5591
fix(deps): update dependency com.adobe.testing:s3mock-testcontainers …
renovate-bot Aug 29, 2025
14d4496
fix(deps): update dependency com.gradleup.shadow:shadow-gradle-plugin…
renovate-bot Aug 29, 2025
85defa9
Add Events for PolarisServiceImpl APIs
adnanhemani Aug 27, 2025
516c492
spotlessapply
adnanhemani Aug 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ request adding CHANGELOG notes for breaking (!) changes and possibly other secti
### New Features

- Added Catalog configuration for S3 and STS endpoints. This also allows using non-AWS S3 implementations.
The realm-level feature flag `ALLOW_SETTING_S3_ENDPOINTS` (default: true) may be used to disable this
functionality.

- The `IMPLICIT` authentication type enables users to create federated catalogs without explicitly
providing authentication parameters to Polaris. When the authentication type is set to `IMPLICIT`,
Expand Down Expand Up @@ -81,6 +83,11 @@ at locations that better optimize for object storage.

- Introduced bootstrap command options to specify custom schema files for database initialization.

- Added refresh credentials endpoint configuration to LoadTableResponse for AWS, Azure, and GCP. Enabling
automatic storage credential refresh per table on the client side. Java client version >= 1.8.0 is required.
The endpoint path is always returned when using vended credentials, but clients must enable the
refresh-credentials flag for the desired storage provider.

### Changes

- Polaris Management API clients must be prepared to deal with new attributes in `AwsStorageConfigInfo` objects.
Expand All @@ -89,9 +96,8 @@ at locations that better optimize for object storage.

### Deprecations

* The property `polaris.active-roles-provider.type` is deprecated in favor of
`polaris.authentication.active-roles-provider.type`. The old property is still supported, but will be removed in a
future release.
- The property `polaris.active-roles-provider.type` is deprecated for removal.
- The `ActiveRolesProvider` interface is deprecated for removal.

### Fixes

Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ client-lint: client-setup-env ## Run linting checks for Polaris client
.PHONY: client-regenerate
client-regenerate: client-setup-env ## Regenerate the client code
@echo "--- Regenerating client code ---"
@$(ACTIVATE_AND_CD) && python3 generate_clients.py
@$(ACTIVATE_AND_CD) && python3 -B generate_clients.py
@echo "--- Client code regeneration complete ---"

.PHONY: client-unit-test
Expand Down
2 changes: 1 addition & 1 deletion api/iceberg-service/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import org.openapitools.generator.gradle.plugin.tasks.GenerateTask
plugins {
alias(libs.plugins.openapi.generator)
id("polaris-client")
alias(libs.plugins.jandex)
id("org.kordamp.gradle.jandex")
}

dependencies {
Expand Down
2 changes: 1 addition & 1 deletion api/management-model/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import org.openapitools.generator.gradle.plugin.tasks.GenerateTask
plugins {
alias(libs.plugins.openapi.generator)
id("polaris-client")
alias(libs.plugins.jandex)
id("org.kordamp.gradle.jandex")
}

dependencies {
Expand Down
2 changes: 1 addition & 1 deletion api/management-service/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import org.openapitools.generator.gradle.plugin.tasks.GenerateTask
plugins {
alias(libs.plugins.openapi.generator)
id("polaris-client")
alias(libs.plugins.jandex)
id("org.kordamp.gradle.jandex")
}

dependencies {
Expand Down
2 changes: 1 addition & 1 deletion api/polaris-catalog-service/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import org.openapitools.generator.gradle.plugin.tasks.GenerateTask
plugins {
alias(libs.plugins.openapi.generator)
id("polaris-client")
alias(libs.plugins.jandex)
id("org.kordamp.gradle.jandex")
}

val genericTableModels =
Expand Down
1 change: 1 addition & 0 deletions build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ dependencies {
implementation(gradleKotlinDsl())
implementation(baselibs.errorprone)
implementation(baselibs.idea.ext)
implementation(baselibs.jandex)
implementation(baselibs.license.report)
implementation(baselibs.nexus.publish)
implementation(baselibs.shadow)
Expand Down
43 changes: 43 additions & 0 deletions build-logic/src/main/kotlin/Utilities.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
* limitations under the License.
*/

import java.io.File
import java.io.FileOutputStream
import java.nio.file.attribute.FileTime
import java.util.zip.ZipFile
import java.util.zip.ZipOutputStream
import org.gradle.api.Project
import org.gradle.process.JavaForkOptions

Expand Down Expand Up @@ -61,3 +66,41 @@ fun JavaForkOptions.addSparkJvmOptions() {
"-Djdk.reflect.useDirectMethodHandle=false",
)
}

/**
* Rewrites the given ZIP file.
*
* The timestamps of all entries are set to `1980-02-01 00:00`, zip entries appear in a
* deterministic order.
*/
fun makeZipReproducible(source: File) {
val t = FileTime.fromMillis(318211200_000) // 1980-02-01 00:00 GMT

val outFile = File(source.absolutePath + ".tmp.out")

val names = mutableListOf<String>()
ZipFile(source).use { zip -> zip.stream().forEach { e -> names.add(e.name) } }
names.sort()

ZipOutputStream(FileOutputStream(outFile)).use { dst ->
ZipFile(source).use { zip ->
names.forEach { n ->
val e = zip.getEntry(n)
zip.getInputStream(e).use { src ->
e.setCreationTime(t)
e.setLastAccessTime(t)
e.setLastModifiedTime(t)
dst.putNextEntry(e)
src.copyTo(dst)
dst.closeEntry()
src.close()
}
}
}
}

val origFile = File(source.absolutePath + ".tmp.orig")
source.renameTo(origFile)
outFile.renameTo(source)
origFile.delete()
}
38 changes: 33 additions & 5 deletions build-logic/src/main/kotlin/polaris-java.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import net.ltgt.gradle.errorprone.errorprone
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.named
import org.kordamp.gradle.plugin.jandex.JandexExtension
import org.kordamp.gradle.plugin.jandex.JandexPlugin
import publishing.PublishingHelperPlugin

plugins {
Expand All @@ -32,12 +34,27 @@ plugins {
`jvm-test-suite`
checkstyle
id("polaris-spotless")
id("polaris-reproducible")
id("jacoco-report-aggregation")
id("net.ltgt.errorprone")
}

apply<PublishingHelperPlugin>()

plugins.withType<JandexPlugin>().configureEach {
extensions.getByType(JandexExtension::class).run {
version =
versionCatalogs
.named("libs")
.findLibrary("jandex")
.orElseThrow { GradleException("jandex version not found in libs.versions.toml") }
.get()
.version
// https://smallrye.io/jandex/jandex/3.4.0/index.html#persistent_index_format_versions
indexVersion = 12
}
}

checkstyle {
val checkstyleVersion =
versionCatalogs
Expand Down Expand Up @@ -237,9 +254,20 @@ configurations.all {
}
}

// ensure jars conform to reproducible builds
// (https://docs.gradle.org/current/userguide/working_with_files.html#sec:reproducible_archives)
tasks.withType<AbstractArchiveTask>().configureEach {
isPreserveFileTimestamps = false
isReproducibleFileOrder = true
if (plugins.hasPlugin("io.quarkus")) {
tasks.named("quarkusBuild") {
actions.addLast {
listOf(
"quarkus-app/quarkus-run.jar",
"quarkus-app/quarkus/generated-bytecode.jar",
"quarkus-app/quarkus/transformed-bytecode.jar",
)
.forEach { name ->
val file = project.layout.buildDirectory.get().file(name).asFile
if (file.exists()) {
makeZipReproducible(file)
}
}
}
}
}
25 changes: 25 additions & 0 deletions build-logic/src/main/kotlin/polaris-reproducible.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* 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.
*/

// ensure jars conform to reproducible builds
// (https://docs.gradle.org/current/userguide/working_with_files.html#sec:reproducible_archives)
tasks.withType<AbstractArchiveTask>().configureEach {
isPreserveFileTimestamps = false
isReproducibleFileOrder = true
}
9 changes: 1 addition & 8 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,14 @@
import java.net.URI
import org.nosphere.apache.rat.RatTask

buildscript {
repositories { maven { url = java.net.URI("https://plugins.gradle.org/m2/") } }
dependencies {
classpath("org.kordamp.gradle:jandex-gradle-plugin:${libs.plugins.jandex.get().version}")
}
}
buildscript { repositories { maven { url = java.net.URI("https://plugins.gradle.org/m2/") } } }

plugins {
id("idea")
id("eclipse")
id("polaris-root")
alias(libs.plugins.rat)
alias(libs.plugins.jetbrains.changelog)
// workaround for https://github.com/kordamp/jandex-gradle-plugin/issues/25
alias(libs.plugins.jandex) apply false
}

val projectName = rootProject.file("ide-name.txt").readText().trim()
Expand Down
3 changes: 3 additions & 0 deletions client/python/.openapi-generator-ignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,6 @@ setup.cfg
tox.ini
README.md
pyproject.toml
docs/
**/catalog_README.md
**/management_README.md
Empty file removed client/python/docs/.keep
Empty file.
Loading