Background
PR #65771 adds check_flit_worktree_compatibility to dev/breeze/src/airflow_breeze/prepare_providers/provider_distributions.py. The check refuses to build provider sdists when the source tree is a git worktree, because two related things go wrong otherwise and no warning is emitted:
- flit worktree detection bug.
flit.vcs.identify_vcs only checks .git.is_dir(), missing the .git-as-file pointer that git uses for worktrees and submodules. flit silently falls back to a non-VCS sdist that omits tracked files (docs/, tests/, provider.yaml, anything declared in [tool.flit.sdist] include), and the resulting packages fail reproducibility checks against the released sdists on dist.apache.org.
- Breeze Docker-mount case. Even once flit is fixed, when Breeze runs the build inside Docker only the worktree directory is bind-mounted — the absolute
gitdir: path baked into the worktree's .git file references the main repo's .git/worktrees/<name> directory on the host, which is not reachable from the container. git ls-files then fails or misbehaves.
Upstream flit tracking:
What to do when this issue is actioned
Once both of the following hold:
…and the Docker-mount case has been addressed (either by mounting the main repo's .git/worktrees/<name> directory alongside the worktree, or by rewriting the gitdir: pointer when sources are staged into the container, or by deciding the Docker-mount path is not supported from worktrees), remove:
check_flit_worktree_compatibility in dev/breeze/src/airflow_breeze/prepare_providers/provider_distributions.py
- Its call site in
dev/breeze/src/airflow_breeze/commands/release_management_commands.py
- Its tests in
dev/breeze/tests/test_provider_distributions.py
If only the flit fix lands but the Docker-mount case is still broken, the check must stay (or be narrowed to the Docker case only) — the silent-incomplete-sdist failure is severe enough that we should not let a release train run into it unguarded.
Acceptance criteria
Related
Background
PR #65771 adds
check_flit_worktree_compatibilitytodev/breeze/src/airflow_breeze/prepare_providers/provider_distributions.py. The check refuses to build provider sdists when the source tree is a git worktree, because two related things go wrong otherwise and no warning is emitted:flit.vcs.identify_vcsonly checks.git.is_dir(), missing the.git-as-file pointer that git uses for worktrees and submodules. flit silently falls back to a non-VCS sdist that omits tracked files (docs/,tests/,provider.yaml, anything declared in[tool.flit.sdist] include), and the resulting packages fail reproducibility checks against the released sdists on dist.apache.org.gitdir:path baked into the worktree's.gitfile references the main repo's.git/worktrees/<name>directory on the host, which is not reachable from the container.git ls-filesthen fails or misbehaves.Upstream flit tracking:
What to do when this issue is actioned
Once both of the following hold:
…and the Docker-mount case has been addressed (either by mounting the main repo's
.git/worktrees/<name>directory alongside the worktree, or by rewriting thegitdir:pointer when sources are staged into the container, or by deciding the Docker-mount path is not supported from worktrees), remove:check_flit_worktree_compatibilityindev/breeze/src/airflow_breeze/prepare_providers/provider_distributions.pydev/breeze/src/airflow_breeze/commands/release_management_commands.pydev/breeze/tests/test_provider_distributions.pyIf only the flit fix lands but the Docker-mount case is still broken, the check must stay (or be narrowed to the Docker case only) — the silent-incomplete-sdist failure is severe enough that we should not let a release train run into it unguarded.
Acceptance criteria
git worktree add ...directory viabreeze release-management prepare-provider-distributions --distribution-format sdistmatch byte-for-byte with sdists built from a plaingit checkoutof the same commit.check_flit_worktree_compatibilityremoved and PR Breeze: fail fast when building provider sdists from a git worktree #65771's test coverage deleted along with it.Related