Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Run uv build builds in the source distribution bucket #8220

Merged
merged 4 commits into from
Oct 15, 2024

Conversation

konstin
Copy link
Member

@konstin konstin commented Oct 15, 2024

When building a source distribution to a wheels, we perform the build inside a temporary directory inside the output directory. By default, the output directory is dist/ in the repository root. This temp dir placement allows us to move the final wheel to the output directory instead of copying it (a temp dir might be on another device, which means we need to copy instead of moving).

Some build backends such as hatchling traverse upwards from the current directory (the source dist build location) looking for gitignore files to consider. By adding a gitignore in dist/ with *, we caused hatchling to ignore all files in our temporary build directory below it, causing empty wheels. To prevent this, we add a .git file as a phony git root. We are already using this trick successfully in the cache. Hatchling sees this .git file, considers it a boundary and does not traverse up to dist/.gitignore.

Fixes #8200

When building a source distribution to a wheels, we perform the build inside a temporary directory inside the output directory. By default, the output directory is `dist/` in the repository root. This temp dir placement allows us to move the final wheel to the output directory instead of copying it (a temp dir might be on another device, which means we need to copy instead of moving).

Some build backends such as hatchling traverse upwards from the current directory (the source dist build location) looking for gitignore files to consider. By adding a gitignore in `dist/` with `*`, we caused hatchling to ignore all files in our temporary build directory below it, causing empty wheels. To prevent this, we add a `.git` file as a phony git root. We are already using this trick successfully in the cache. Hatchling sees this `.git` file, considers it a boundary and does not traverse up to `dist/.gitignore`.

I'd appreciate an eye on potential side effects of adding a `.git` here that I've missed.

Fixes #8200
@charliermarsh
Copy link
Member

Could we instead perform the builds in CacheBucket::Builds? I think it exists for this purpose.

@charliermarsh charliermarsh enabled auto-merge (squash) October 15, 2024 17:20
@charliermarsh charliermarsh changed the title Add a fake git root for dist Run uv build builds in the source distribution bucket Oct 15, 2024
@charliermarsh charliermarsh enabled auto-merge (squash) October 15, 2024 17:22
@charliermarsh charliermarsh merged commit 3d27b48 into main Oct 15, 2024
60 of 61 checks passed
@charliermarsh charliermarsh deleted the konsti/git-root-for-dist branch October 15, 2024 17:29
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Oct 16, 2024
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.4.21` -> `0.4.22` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>astral-sh/uv (astral-sh/uv)</summary>

### [`v0.4.22`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0422)

[Compare Source](astral-sh/uv@0.4.21...0.4.22)

##### Enhancements

-   Respect `[tool.uv.sources]` in build requirements ([#&#8203;7172](astral-sh/uv#7172))

##### Preview features

-   Add a dedicated `uv publish` error message for missing usernames ([#&#8203;8045](astral-sh/uv#8045))
-   Support interactive input in `uv publish` ([#&#8203;8158](astral-sh/uv#8158))
-   Use raw filenames in `uv publish` ([#&#8203;8204](astral-sh/uv#8204))

##### Performance

-   Reuse the result of `which git` ([#&#8203;8224](astral-sh/uv#8224))

##### Bug fixes

-   Avoid environment check optimization for `uv pip install --exact` ([#&#8203;8219](astral-sh/uv#8219))
-   Do not use free-threaded interpreters without a free-threaded request ([#&#8203;8191](astral-sh/uv#8191))
-   Don't recommend `--prerelease=allow` during build requirement resolution errors ([#&#8203;8192](astral-sh/uv#8192))
-   Prefer optimized builds for free-threaded Python downloads ([#&#8203;8196](astral-sh/uv#8196))
-   Retain old `python-build-standalone` releases ([#&#8203;8216](astral-sh/uv#8216))
-   Run `uv build` builds in the source distribution bucket ([#&#8203;8220](astral-sh/uv#8220))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

regression: uv build silently produces empty wheels with hatchling if .gitignore is missing
3 participants