Skip to content

chore: Merge changes from 0.10.x to main - #3227

Draft
dannycjones wants to merge 9 commits into
apache:mainfrom
dannycjones:merge-0.11.0
Draft

dannycjones wants to merge 9 commits into
apache:mainfrom
dannycjones:merge-0.11.0

Conversation

@dannycjones

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Related to #3034.

What changes are included in this PR?

Simply merging changes from 0.11.x into main, such that it would be ready for a future release branch being cut from it. No other changes are introduced unless absolutely necessary.

The exact steps for making these changes still needs documenting in the release guide.

Are these changes tested?

N/A

AI Disclosure

LLM used to draft merge commit changes.

dannycjones and others added 9 commits September 4, 2026 10:55
* chore: Bump version to 0.11.0, update changelog

* Update changelog
fix: Fix CI failure due to integration test's Hive install (apache#3174)

Install Hive directly


(cherry picked from commit 4687d26)

Signed-off-by: Jannik Steinmann <jannik.steinmann@datadoghq.com>
Co-authored-by: Jannik Steinmann <jannik.steinmann@datadoghq.com>
* chore: exclude repo-only files from the source archive (apache#3189)

The release tarball is built with git archive and ships .asf.yaml,
.devcontainer, .github, .gitignore, .gitattributes, and .idea, none of
which are needed to build, test, or verify from source. Ryan raised this
in the 0.2.0 vote and Kurtis called out .idea in the 0.9.1 vote.

Files the verification scripts rely on (.licenserc.yaml, lint configs,
dev/) stay in.

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit d6c2eb4)

* fix(ci): keep .github/actions in the source archive (apache#3193)

`.github export-ignore` (apache#3189) hides `.github/actions` from repository
archives. GitHub resolves the `uses: ./...` self-repository references by
fetching such an archive, so every workflow that uses a local composite
action fails at action resolution:

  Can't find 'action.yml', 'action.yaml' or 'Dockerfile' for action
  'apache/iceberg-rust/.github/actions/setup-builder@<sha>'

List the .github entries individually instead, so the repo-only files
apache#3189 targeted stay out of the release tarball while `.github/actions`
remains resolvable. A `-export-ignore` negation on the subdirectory does
not work: git does not descend into an export-ignored directory.

(cherry picked from commit 6f062aa)

---------

Co-authored-by: Kevin Liu <kevinjqliu@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Xander <zander181@googlemail.com>
…rty-macro (apache#3199)

fix: break dev-dependency cycle that blocks publishing iceberg-property-macro (apache#3184)

* fix: break dev-dependency cycle that blocks publishing iceberg-property-macro

`iceberg` depends on `iceberg-property-macro`, and the macro crate had a
versioned dev-dependency on `iceberg` via `workspace = true`. When cargo
packages the macro crate for publishing it must resolve `iceberg ^0.11.0`
from crates.io, which does not exist until the next step, so
`cargo publish --workspace` fails with "failed to select a version". This
is the same failure that broke the 0.5.0 publish and it reproduces on the
v0.11.0-rc.1 tag.

Make the dev-dependency path-only so cargo strips it when packaging. Mark
the macro crate as internal to `iceberg` in its description and README,
and add a `cargo publish --workspace --dry-run` step to CI so an
unpublishable crate fails on the PR instead of after the release vote.



* ci: split publish dry-run between PR CI, RC tags, and RC creation

The full `cargo publish --dry-run` compiles every packaged crate and took
13 minutes per PR. PR CI now runs it with `--no-verify`, which still
catches dependency cycles, unresolvable versions, and missing metadata in
seconds.

The compiled dry-run moves to where it matters for a release:

- `create_rc.sh` runs it before creating any artifact or the RC tag, so a
  crate that cannot be published fails RC creation. Opt out with
  `--check_publish 0`.
- `publish.yml` runs it on RC tag pushes, which previously did nothing, so
  the exact tag is also checked on the MSRV toolchain the real publish uses.



* docs: drop RC tag workflow verification note from release guide

The RC creation script now blocks on the publish dry-run, so the workflow
run on the tag is a secondary check that does not need a manual step.



* docs: note requirements for create_rc.sh --check_publish



* Apply suggestion from @dannycjones



---------



(cherry picked from commit 0aeccb8)

Co-authored-by: Kevin Liu <kevinjqliu@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Docker Hub no longer serves the MinIO server and client repositories, preventing integration test containers from starting. Use the corresponding Quay images with the existing release tags.

Generated-by: Codex


(cherry picked from commit 9e1670d)

Co-authored-by: Sreesh Maheshwar <maheshwarsreesh@gmail.com>
Co-authored-by: Kevin Liu <kevinjqliu@users.noreply.github.com>
) (apache#3218)

* ci: check new crates are reserved on crates.io before merge

Trusted publishing can't create a crate, and the release workflow publishes
the whole workspace in one `cargo publish --workspace` run, which cargo
aborts if any crate already exists at the release version. So the existing
"publish the new crate by hand after the workflow fails" instructions no
longer work.

Add a lint step that fails if a publishable crate is missing from
crates.io, and rewrite the release guide appendix around reserving the
crate with a placeholder version when it is added.



* docs: reserve the crate name with a standalone placeholder crate

Overriding the version inside the workspace fails because iceberg depends
on the new crate at the workspace version. Verified with cargo publish
--dry-run.



* ci: match the existing publishable-crate filter; document partial publish recovery



* docs: clarify that reserving a crate needs a token with the publish-new scope

Owning the existing crates does not imply the token in ~/.cargo/credentials.toml
has publish-new, and crates.io reports a missing scope as a generic
authentication failure. Say so, and point at where to create the token.



* docs: fix stale first-publish note, empty placeholder, and owner invitations

- The release steps still said the publish workflow is expected to fail on
  new crates and linked to a heading that no longer exists.
- `cargo new --lib` generates a non-empty lib.rs; use mkdir and touch.
- `cargo owner --add <user>` sends an invitation that must be accepted.



* ci: fail the crates.io check if the crate list is empty

A failed `cargo metadata` inside `for pkg in $(...)` never trips
`bash -e`, so the loop ran zero times and the step passed without
checking anything. Capture the list first and fail if it is empty.



---------


(cherry picked from commit cb912c9)

Co-authored-by: Kevin Liu <kevinjqliu@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* chore: Update changelog for 0.11.0 RC2

* chore: Add apache#3202 MinIO Quay backport to changelog
Brings the 0.11.0 release metadata back to `main`. Only `CHANGELOG.md`,
`Cargo.toml`, and `Cargo.lock` change; everything else on `0.11.x` is
either already on `main` or was deliberately superseded there.

`CHANGELOG.md` and `Cargo.toml` are three-way merged, not copied from the
release branch. `main` has moved its dependencies on since the 0.11.x cut
(arrow 58.4 -> 59.2, DataFusion 54 -> 55, pyo3 0.28 -> 0.29, and
datafusion-ffi dropped in apache#3149), and a merge keeps those while taking
the release branch's version bumps. The result is
`workspace.package.version` 0.10.1 -> 0.11.0, the nine workspace path
dependencies 0.10.0 -> 0.11.0, and the `## [v0.11.0]` changelog section.
No third-party dependency version changes.

`Cargo.lock` is regenerated from `main`'s lock with
`cargo update --workspace`, not merged. Only the 17 workspace-member
versions change.

All other paths are resolved to `main`, including the two that conflict:
`dev/hms/Dockerfile` (`main` is on the Hive 4.2.1 image) and
`.gitattributes` (apache#3193). `dev/release/` and `deny.toml` also differ,
because `main` is ahead (apache#3194) or removed things on purpose (apache#3200,
apache#3149). Fixes land on `main` first and are backported, so nothing needs
to travel in this direction.

`DEPENDENCIES.rust.tsv` is not merged. Those files are generated during
release prep on the release branch and describe the released dependency
graph, which is older than `main`'s, so carrying them across would
replace stale data with data that is wrong for `main`. Per apache#2706
generating them is a release-manager task and is not enforced by CI, so
`main`'s copies are refreshed at the next release, on the next release
branch. apache#3074 excluded them likewise.
@dannycjones

Copy link
Copy Markdown
Contributor Author

Leaving in draft until 0.11.0 is released.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant