Commit Graph

492 Commits

Author SHA1 Message Date
Zanie Blue d2108bf360
Separate CI test runs from the matrix (#4518)
So we can skip them when there are not code changes and still enforce
our required checks (xref #4438)

Otherwise, the names are dynamic and they are forever expected (see
#4426 for example)
2024-06-25 10:29:30 -05:00
renovate[bot] 8a0a3b47db
Update docker/build-push-action action to v6 (#4462) 2024-06-24 00:14:16 +00:00
Zanie Blue 7e574f5e20
Avoid running most of CI for non-code changes (#4438)
Running these test suites is both expensive and wasteful when there
aren't relevant changes.
2024-06-21 16:42:01 +00:00
Zanie Blue b412a53e85
Add mdbook to docs workflow (#4437)
Based on
https://github.com/rust-lang/mdBook/wiki/Automated-Deployment%3A-GitHub-Actions
2024-06-21 16:33:55 +00:00
Zanie Blue baa86f2edf
Fix the documentation branch target (#4428)
Doh.
2024-06-20 17:35:56 +00:00
Zanie Blue 30eedb35c6
Add documentation publishing workflow (#4427)
Exploring publishing documentation to GitHub Pages. Not intended for
public consumption yet.
2024-06-20 12:24:20 -05:00
Zanie Blue 76c26db444
Move virtual environment test context into main context (#4370)
It was becoming problematic that the virtual environment test context
diverged from the other one i.e. we had to implement filtering twice.
This combines the contexts and tweaks the `TestContext` API and
filtering mechanisms for Python versions. Combined with my previous
changes to the test context at #4364 and
https://github.com/astral-sh/uv/pull/4368 this finally unblocks the
snapshots for test cases in #4360 and
https://github.com/astral-sh/uv/pull/4362.
2024-06-18 09:11:47 -05:00
Zanie Blue 631994c485
Remove `cargo dev fetch-python` (#4337)
This has been fully replaced by `uv toolchain install`
2024-06-17 18:49:06 +00:00
Charlie Marsh 1f2ad8faa2
Re-add `aarch64-unknown-linux-gnu` binary to release assets (#4254)
This PR re-adds the `aarch64-unknown-linux-gnu` binary, which will also
add the `manylinux_2_28` wheel for `aarch64` (in addition to the now
dual-tagged `musllinux_1_1` and `manylinux_2_217` wheel for `aarch64`).
We can consider dropping that _wheel_, but in my assessment removing a
release asset should now be treated as a breaking change -- so removing
it in a patch release was incorrect.

Closes https://github.com/astral-sh/uv/issues/4122.
2024-06-11 19:46:09 -04:00
konsti bbd961c251
Fix python3.13 on windows CI job by pinning older version (#4192)
See https://github.com/actions/setup-python/issues/888

---------

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
2024-06-10 11:49:24 +00:00
Charlie Marsh e7c573cfcb
Fix existing typos and enable `typos` in CI (#4184) 2024-06-10 01:50:54 +00:00
konsti f92447772e
Support x86 windows (#3873)
Add trampolines for x86 windows.

Closes https://github.com/astral-sh/uv/issues/3660.
2024-05-28 16:07:39 +00:00
Zanie Blue 30e780e1dd
Add persistent storage of installed toolchains (#3797)
Extends #3726 

Moves toolchain storage out of `UV_BOOTSTRAP_DIR` (`./bin`) into the
proper user data directory as defined by #3726.

Replaces `UV_BOOTSTRAP_DIR` with `UV_TOOLCHAIN_DIR` for customization.
Installed toolchains will be discovered without opt-in, but the idea is
still that these are not yet user-facing.
2024-05-27 03:54:49 +00:00
Zanie Blue c2a58cd303
Add integration test for GitHub Actions CI patterns (#3805) 2024-05-23 23:25:06 -05:00
Ibraheem Ahmed 0d2f3fc4e4
Add airflow benchmark (#3643)
## Summary

This seems to be one of the most consistent benchmark cases we have in
terms of standard deviation:
```
➜  hyperfine "target/profiling/main pip compile scripts/requirements/airflow.in" --runs 200
Benchmark 1: target/profiling/main pip compile scripts/requirements/airflow.in
  Time (mean ± σ):     292.6 ms ±   6.6 ms    [User: 414.1 ms, System: 194.2 ms]
  Range (min … max):   282.7 ms … 320.1 ms    200 runs
```

For smaller benchmarks, scispacy and dtlssocket seem to be a bit more
consistent than our current jupyter benchmark, but it hasn't given us
any problems so I'll leave it for now.
2024-05-23 13:25:54 -04:00
Charlie Marsh bb61c2d534
Revert "Revert "ci: drop native manylinux wheel for dual-tagged one (#3685)" (#3762)" (#3778)
Now that we have https://github.com/astral-sh/uv/pull/3761, it should be
safe to drop these.
2024-05-22 20:02:30 -04:00
Zanie Blue 17ec349437
Add test case for Conda CI (#3773)
Integration test coverage for #3769 

Failure against `main` on
https://github.com/astral-sh/uv/actions/runs/9198224186/job/25300510016?pr=3773

Rebased against #3771 to check for fix
2024-05-22 21:37:26 +00:00
Charlie Marsh dc4f63d2e5
Revert "ci: drop native manylinux wheel for dual-tagged one (#3685)" (#3762)
## Summary

Reverts https://github.com/astral-sh/uv/pull/3685. We need to figure out
how to update the installer to handle this correctly.
2024-05-22 15:53:17 -04:00
Zanie Blue 845d788c91
Drop Python patch test flag from default features (#3746) 2024-05-22 17:19:25 +00:00
Charlie Marsh 472ab144d5
Remove `maturin_editable` test (#3718)
## Summary

I personally think this isn't worth continuing to maintain.
2024-05-22 11:10:04 +02:00
Zanie Blue d540d0f28b
Rewrite Python interpreter discovery (#3266)
Updates our Python interpreter discovery to conform to the rules
described in #2386, please see that issue for a full description of the
behavior. Briefly, we now will search for interpreters that satisfy a
requested version without stopping at the first Python executable.
Additionally, if retrieving information about an interpreter fails we
will continue to search for a working interpreter. We also add the
plumbing necessary to request Python implementations other than CPython,
though we do not add support for other implementations at this time.

A major internal goal of this work is to prepare for user-facing managed
toolchains i.e. fetching a requested version during `uv run`. These APIs
are not introduced, but there is some managed toolchain handling as
required for our test suite.

Some noteworthy implementation changes:

- The `uv_interpreter::find_python` module has been removed in favor of
a `uv_interpreter::discovery` module.
- There are new types to help structure interpreter requests and track
sources
- Executable discovery is implemented as a big lazy iterator and is a
central authority for source precedence
- `uv_interpreter::Error` variants were split into scoped types in each
module
- There's much more unit test coverage, but not for Windows yet

Remaining work:

- [x] Write new test cases
- [x] Determine correct behavior around executables in the current
directory
- _Future_: Combine `PythonVersion` and `VersionRequest`
- _Future_: Consider splitting `ManagedToolchain` into local and remote
variants
- _Future_: Add Windows unit test coverage
- _Future_: Explore behavior around implementation precedence (i.e.
CPython over PyPy)

Refactors split into:

- #3329 
- #3330 
- #3331
- #3332

Closes #2386
2024-05-21 14:37:23 -05:00
Zanie Blue dfd6ccf0f9
Move maturin test coverage into CI (#3714)
This test can take over 60s to run, which is too much for a unit test.
We'll run it in a separate CI job to retain coverage.
2024-05-21 19:17:48 +00:00
Henry Schreiner 906f653062
ci: drop native manylinux wheel for dual-tagged one (#3685)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

<!-- What's the purpose of the change? What does it do, and why? -->

Followup to #3624. Drops the native manylinux wheel in favor of the
statically linked musl one with a manylinux2014 tag.

<!-- How was it tested? -->

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-05-21 11:55:08 +02:00
Ben Beasley 53c2551fac
Pin the zip crate to 0.6 (#3645)
## Summary

Restore API-compatibility with pre-1.1.0 versions of the `zip` crate,
and pin the dependency to the 0.6 series, due to concerns discussed in
https://github.com/astral-sh/uv/issues/3642.

## Test Plan

```
cargo run -p uv-dev -- fetch-python
cargo test
```
2024-05-18 17:31:53 +00:00
Henry Schreiner a0c5948a0b
ci: retag the musl aarch64 for manylinux2014 (#3624)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

Fix #3439 by retagging the statically linked musl binary for
manylinux2014. This is the most conservative option;
the regular manylinux one could be removed as well, and I expect other
archs could probably do this as well.

<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan

Testing on manylinux.

<!-- How was it tested? -->

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-05-17 10:54:43 +02:00
samypr100 d88bef9704
feat: move to cargo-xwin for clippy (#3600)
## Summary

Move to cargo-xwin for clippy

Closes #3507
2024-05-16 21:15:03 -05:00
Henry Schreiner f7b9ca9533
ci: add musl ppc64le (#3537)
## Summary

Working on followup to #3523. I expect some changes will be required to
match the glibc versions above.
2024-05-14 23:39:37 -04:00
Zanie Blue 759d40ceb9
Revert "Use manylinux: auto for aarch64 builds (#3444)" (#3576)
This reverts #3444 which appears to be the cause of SSL failures when
building aarch64 Linux images on macOS hosts (see
https://github.com/astral-sh/uv/issues/3570)

Closes https://github.com/astral-sh/uv/issues/3570
2024-05-14 08:51:07 -05:00
samypr100 790206beb1
feat: speed up windows jobs using ReFS (#3522)
## Summary

Switch to using Virtual HD + ReFS to speed up windows jobs.

Closes #3508
2024-05-13 11:15:54 -05:00
Charlie Marsh aa6b853d78
Run `cargo shear` in CI (#3534) 2024-05-12 21:44:58 -04:00
Henry Schreiner df43dc9e70
ci: build musllinux_1_1 wheels (#3523)
This is needed to include uv in manylinux, which has both the
musllinux_1_1 and musllinux_1_2 images.

## Summary

We are looking into including uv in the `pypa/manylinux` docker images,
so that cibuildwheel will be able to use it. But to do so, we need all
actively supported images to be able to take it, including
musllinux_1_1.

## Test Plan

The test was updated to make sure Alpine 3.12, which musllinux was based
on, can run uv.

The binary build does need to be triggered on this PR to make sure it
works. Ah,
5b6040184d/.github/workflows/build-binaries.yml (L15-L20)
is a good idea, nice.

Will need a followup to fill out the other platforms `pypa/manylinux`
supports for musllinux.

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-05-11 12:35:40 -04:00
Charlie Marsh 8bcb2365bf
Use manylinux: auto for aarch64 builds (#3444)
See: https://github.com/astral-sh/uv/issues/3439
2024-05-08 23:58:03 -04:00
Alex Waygood 3830e90770
Tell renovate not to try to update GitHub runners (#3427) 2024-05-07 16:09:21 +00:00
Charlie Marsh e9490b92b5
Upgrade cargo-dist to v0.14.0 (#3414) 2024-05-06 13:48:41 -04:00
konsti 714adebbd7
Avoid stack overflows on more windows tests (#3344)
Fix windows CI by increasing the debug stack size on windows:
*
https://github.com/astral-sh/uv/actions/runs/8938560618/job/24553000399?pr=3340
*
https://github.com/astral-sh/uv/actions/runs/8937835055/job/24550949991
*
https://github.com/astral-sh/uv/actions/runs/8937835055/job/24550949261
*
https://github.com/astral-sh/uv/actions/runs/8937835055/job/24550810405
2024-05-03 12:21:00 +00:00
Ibraheem Ahmed 1d2c57a259
Run resolve/install benchmarks in ci (#3281)
## Summary

Runs resolver benchmarks in CI with CodSpeed.
2024-04-30 13:39:42 -04:00
Charlie Marsh 71ffb2eabc
Build a separate ARM wheel for macOS (#3268)
## Summary

See: https://github.com/astral-sh/ruff/pull/11149
2024-04-25 19:13:27 -04:00
Charlie Marsh 23bef9a691
Use `macos-12` to build release wheels (#3264)
## Summary

GitHub has started to change `macos-latest` to `macos-14`. But
executables built on `macos-14` don't work on macOS 11 (see:
https://github.com/astral-sh/uv/issues/3261). This PR explicitly uses
`macos-12` instead (which is what we _intended_ to be using anyway).

Closes https://github.com/astral-sh/uv/issues/3261.
2024-04-25 12:07:30 -04:00
samypr100 430ac7c45c
ci: add system test for rocky 9 (#3224)
## Summary

Adding rockylinux:9 per discussion in
https://github.com/astral-sh/uv/pull/3178

## Test Plan

More CI system tests.
2024-04-23 18:12:27 -04:00
Charlie Marsh 2c52111006
Fix failing `system-test-macos-x86_64` test (#3218)
## Summary

GitHub recently changed `macos-latest` to `macos-12`, so the x86 test
started failing. I've migrated the tests to use dedicated labels, rather
than the aliases.

See:
https://github.blog/changelog/2024-01-30-github-actions-macos-14-sonoma-is-now-available/
2024-04-23 14:37:26 -04:00
Zanie Blue 2a9cbdb11f
Upgrade to cargo-dist 0.13.3 (#3217) 2024-04-23 18:18:21 +00:00
Zanie Blue ccf4a85f89
Fix Docker publish permissions in release pipeline (#3195) 2024-04-22 19:05:21 -04:00
Zanie Blue 11c6a07bb5
Regenerate with cargo-dist 0.13.2 (#3194) 2024-04-22 19:15:14 +00:00
Charlie Marsh 41b29b2dc4
Add support for embedded Python on Windows (#3161)
## Summary

References:
-
cad550030a/src/virtualenv/create/via_global_ref/builtin/cpython/cpython3.py (L58-L68)
- https://github.com/pypa/virtualenv/pull/2353
- https://github.com/pypa/virtualenv/issues/2368

Closes https://github.com/astral-sh/uv/issues/1656.
2024-04-22 13:34:27 -04:00
Charlie Marsh 1bf9d879ab
Re-add Docker image to release pipeline (#3155)
## Summary

I already re-created and pushed the image, and set its visibility to
public (it defaults to private) -- see:
https://github.com/astral-sh/uv/pkgs/container/uv.

Closes https://github.com/astral-sh/uv/issues/2774.
2024-04-21 12:02:48 -04:00
Zanie Blue 52472cef6e
Run Windows tests with a subset of features (#3040)
Separates Windows tests from the rest because it's a pain and drops the
`python-patch` feature from testing so we can use the GitHub Actions
Python versions which bootstrap in 0 seconds instead of 2 minutes.
2024-04-16 08:14:19 -05:00
Zanie Blue 4ea909bfc2
Use the larger runner for Windows clippy runs (#3044)
Running clippy can apparently be longer than the tests in
https://github.com/astral-sh/uv/pull/3040
2024-04-15 21:16:40 -05:00
Alex Waygood 74eab0f227
Minor improvements to renovate config (#3038) 2024-04-15 17:50:52 +00:00
Charlie Marsh ab9cc78b7a
Deduplicate symbolic links between `purelib` and `platlib` (#3002)
## Summary

This PR adds system install tests to verify the behavior described in
#2798. It turns out this behavior _also_ affects Fedora and Amazon
Linux, we just didn't have the right conditions enabled (specifically,
you need to create the virtualenv with `python -m venv` to get these
symlinks), so the test suite was expanded to capture that.

The issue itself is also fixed by way of deduplicating the
`site-packages` entries.

Closes: https://github.com/astral-sh/uv/issues/2798
2024-04-12 17:08:56 -04:00
samypr100 98fd9d7d14
ci: re-enable centos compatible testing (#3005)
## Summary

Closes #2915

## Test Plan

Rocky Linux is a viable and more stable alternative to test
compatibility with Centos and RHEL systems.
2024-04-12 03:52:03 +00:00
Zanie Blue 520cd4689b
Add ecosystem test for flask (#2971)
Alternative to:

- https://github.com/astral-sh/uv/pull/2967
- #2946 

Both of those are big and fail.

I'd like to generalize this coverage though.
2024-04-10 16:51:40 +00:00
Zanie Blue 44e39bdca3
Replace Python bootstrapping script with Rust implementation (#2842)
See https://github.com/astral-sh/uv/issues/2617

Note this also includes:
- #2918 
- #2931 (pending)

A first step towards Python toolchain management in Rust.

First, we add a new crate to manage Python download metadata:

- Adds a new `uv-toolchain` crate
- Adds Rust structs for Python version download metadata
- Duplicates the script which downloads Python version metadata
- Adds a script to generate Rust code from the JSON metadata
- Adds a utility to download and extract the Python version

I explored some alternatives like a build script using things like
`serde` and `uneval` to automatically construct the code from our
structs but deemed it to heavy. Unlike Rye, I don't generate the Rust
directly from the web requests and have an intermediate JSON layer to
speed up iteration on the Rust types.

Next, we add add a `uv-dev` command `fetch-python` to download Python
versions per the bootstrapping script.

- Downloads a requested version or reads from `.python-versions`
- Extracts to `UV_BOOTSTRAP_DIR`
- Links executables for path extension

This command is not really intended to be user facing, but it's a good
PoC for the `uv-toolchain` API. Hash checking (via the sha256) isn't
implemented yet, we can do that in a follow-up.

Finally, we remove the `scripts/bootstrap` directory, update CI to use
the new command, and update the CONTRIBUTING docs.

<img width="1023" alt="Screenshot 2024-04-08 at 17 12 15"
src="https://github.com/astral-sh/uv/assets/2586601/57bd3cf1-7477-4bb8-a8e9-802a00d772cb">
2024-04-10 11:22:41 -05:00
Zanie Blue ee9059978a
Add ecosystem test for Prefect (#2942)
Reproduced https://github.com/astral-sh/uv/issues/2941 and confirmed
fix.

We probably ought to have some ecosystem test coverage — this seems like
a good starting point we can extend to other projects in the future.
2024-04-09 21:29:39 -05:00
Charlie Marsh 90735660cb
Upgrade cargo-dist (#2936) 2024-04-09 16:19:22 +00:00
Zanie Blue 31860565f6
Disable CentOS system check (#2916)
This is broken (see https://github.com/astral-sh/uv/issues/2915) and not
a priority since we have Amazon Linux coverage
2024-04-08 21:33:31 +00:00
Zanie Blue 538c88130e
Group `pyo3` dependency updates (#2889)
Seems needed for https://github.com/astral-sh/uv/pull/2879
2024-04-08 16:06:55 -05:00
renovate[bot] e3ebd4de10
Update debian Docker tag to v12 (#2896) 2024-04-08 09:34:48 -04:00
Zanie Blue e5ea1785ff
Renovate: Group updates to development dependencies (#2888)
I don't think we need to audit these individually since they're not
user-facing.
2024-04-08 07:21:50 +01:00
renovate[bot] 356a26646c
Update fedora Docker tag to v41 (#2898) 2024-04-07 23:41:49 -05:00
renovate[bot] aa7760534f
Update dependency ubuntu to v22 (#2897) 2024-04-07 23:41:22 -05:00
Alex Waygood 345b767874
Improve renovate config (#2802) 2024-04-03 11:48:39 +00:00
Zander 4b2e67955f
fixed uv can't create .venv for cpython-x86 on Windows (#2707)
Adaptation to the win32 platform is added.

https://docs.python.org/3/library/sysconfig.html#sysconfig.get_platform


## Summary

fixed uv can't create .venv for cpython-x86 on Windows 

[uv can't create .venv for cpython-x86 on Windows
](https://github.com/astral-sh/rye/issues/952)

---------

Co-authored-by: Nashan <34827878+zhuang1234@users.noreply.github.com>
2024-04-02 20:45:53 -05:00
Charlie Marsh 0382abee70
Bump `cargo-dist` to 0.13.0-prerelease.3 (#2783)
Closes #2770.
2024-04-02 21:23:55 +00:00
Zanie Blue ba1e9ef182
Add Homebrew system check test (#2736)
Following #2735 adds a system check that uses Homebrew. I think we were
never were actually using Homebrew's Python in the past, we were mislead
or something changed in the runners recently that broke it.
2024-04-01 14:50:45 +00:00
Zanie Blue 472d302ef0
Fix extra CI checks on macOS (#2735)
Alternative to https://github.com/astral-sh/uv/pull/2729 since we're
having problems with the Homebrew Python.
2024-03-30 14:55:34 +00:00
Zanie Blue 0ae285d4b8
Use standard pip instead of pipx (#2733)
An attempt to solve macOS CI failures e.g.
https://github.com/astral-sh/uv/actions/runs/8488022849/job/23256538175
2024-03-30 14:12:17 +00:00
Zanie Blue b36f5d8d48
Test cache against latest release in CI (#2714)
Detect cache incompatibility issues like #2711 by testing against the
last version of uv continuously
2024-03-28 18:49:54 +00:00
Alex Waygood 4de38204d3
Renovate: only look for cargo dependencies in the `crates/` directory (#2659) 2024-03-25 19:44:12 +00:00
Alex Waygood f97f47a67b
Switch from dependabot to renovate (#2653) 2024-03-25 19:26:57 +00:00
Charlie Marsh 01b7a27be4
Add top-level benchmark to the README (#2622)
## Summary

Steps involved in creating this:

- Open the raw data in
[Vega-Lite](https://vega.github.io/editor/#/url/vega-lite/N4IgJAzgxgFgpgWwIYgFwhgF0wBwqgegIDc4BzJAOjIEtMYBXAI0poHsDp5kTykBaADZ04JAKyUAVhDYA7EABoQAEySYUqUMSSCGcCGgDaoTGzaC0IHAwBmNmvKVQksOJYDuSAE4JFIJnCysMheANaWXvrmpH6YNAhuqAAMlEkAjADMACwA7GIAbBn5AJw5ABxiYlkATGn5SnEJAGJsPmqWKekGAL4KJmYW6NZ2Dn7Orh7evkoBQTAh4egOEOqCFg3xiZ1iOfnVZcXFSWUbza3ImB2p+T19IKbmlsP2jiDj8JZQ5sp+s8HeixAkRkghipy2lDESSSWQyOSSxXye3BLTal3QKSht36jyGbDgmC8AE8xi4PuhPD5foF-mEIlFQW5wWgUvkktVyvDqvkcllodDqijzu0MZQ2dj7gMnrYXqSJugvoIfjMafMAZZlqt1vdNizKDkjjk0pk0sU6vz0kK0VcDRKHoMrPjCSSnGTEiBKdN-KqFhrZCsdNrGhDimUcrUykUxEcLWkrRcroc7VKhjQcPwvggcDRBEy3m7JlSVXNfehgdE88G0GlIQU6vkxGUEVl4yKQDWCsncVZlF73u7PdSS+qlv6tbFdagawcSvk0tUsmbDsviq30e3KEcuw6cE7iXLyW9vkPaYDNYGJwk0NVKPOF-kso3o-UdWdregb-Pt09ewf3YrlW9Yc6VHAM1kvRIbyyMMkiKNI+SSF9g1RBMP0oRdvyGX9XXlD0phPNUQKBBkwVfRIMkoOE+SyWEMmOBDoQyNdLAouFMMdAl9xww8AII0tiJBUiq1QLJKGqYoCgqaFigyQUyJQttRLo9js3TTNs1zP9PmPYtT3pQTK0nUTKjEDJSjSMosnnZj0GMm4QF6HEdzTfgICJIItIpfDdMIs8xwvZkRLFDJMmgjIym5GyQFEwoVJctyPO4-8dKAvTQPHQKclSapGJhNkyjZaE43k4V1yy9kVOw-NcN4nz+PLRkILQLLahycKihhJdlyilrqh6ABdXp7i8JB-Rsc4jFAexBEwOAvEsVRMAYBBKH7AACABeDa1oAck9HaHLuabZvm9BFuWyg-l8zbtp2881gO7p+qcOR7DINBQBwJBlGUBx3uSJQvpGhADFQYwQFkJArzOuAbCQBgZpaWRLiUbRdHdfgkBwHBc1cokVkQBQACFhFkUIAFkXAAZXx2aECRzAFAAHRAKnyHxNaAFUAEkWYUAAJOBGTiZwFAAQS8GgdAUCBRogVy5poGxmZAMXsdzNaAGFzFaNaAFEEDYSQaD5lm2bIDmef1w3jZZw7QEh6GdUwXNtcEVo-DRvRLAAYgyf2A-tiGofdQQkACQQ3Y91GdG99A-YD-2HOejA4G+uaPpAMOI4ZzO4AADxwU6VFh+HEbkS4hriF24FzzQQALouFtLhHMFzqu6FzBmAHU4BoMgsDQKEkirgv0Smiu88L4vlBb8vkcOo93dO0BG+L7Ohaj+buiG0sJ4X+u1+buHW-bl7l6npv0A3yOde3jua8z8aD9X6fj7LtvJ6GiBmGrrvJ8Pm-GGJ956VyUM-TAvd+6D1QMPIaSB840FBqAG+W9L7r3DpvO+i8b511flfEuIDP4Lwfv-F+DcgGEI-mfZ2ZDIF9wHuiYeGwa5oMAQQv+cA0GkNrhXKmNAABeiR5xDVzGQQIPx66cJ7gwmBzDaFcOwew4unDuEsLofwoR1Y5KoKUfgjBEc1FZ0wYIPBFCCGzyITQ6RAD9Hv1Pl-IaxAaBwHcJnFYXg2ChESLIBGgghpMBcKEMgniGCyEkcNOWQNAhgJABAL6UA-poCKDMIJIS2BhIiYSKJ3gYl+DhlAAkmdPFuPrvYIWESrq+iUDILw65Z7QAkUk9RPi-FKHgOnU6vi1g7yUA1GI9doA6ESKAfOfpZ44AkXkpQJJRwTKmSQ7+kyoB5yCGwX6sh-qgFmVNFxSpLD2liESSZlhZBsAQA4HQfgEFIMziEmgki4aCAgHAFpaBumCCULgvhgjhFyRFqEUGTyXlfJMQABW+hs-6aQkhKGUOcpAoxUDArgN-Vo6IPlDTGfXJAZAQl8FmpYH+Xpyn7PQFWBoxz3QAEcGCjWrmoGgpEbnIIUe8tpxiI560oedFaXs4BrQANS7QgAdDYUBQjazCeiJiOoJWaK2KCiOEKfpJNQC+G+YthBkHkAqGJGclVCwZgq7R4rJVKKBGQQJAAKecOQFB2odRyBQKRqhiAAJR+HucoNhlqbWOoDc611Hq-DwuQEilFO8hrwGgeiI4Sh3APPoGgBCoKiQZzBqAfigT5pKBpOstVoAIC-Mzvy6sGQhqKg9vXL44S6DsF1SYfQ9S1AXXtDdXazwHBipAGW+OhQ+Ri01ovPtIAfYDqSEOhyvSTAjTGhNTNIBjoZpUK2la7aACEW1O0ym7cnJQe97hUoOWPa52rdVZ1hijfwSAXmk3dBcn6mk4XYpfBAk1U45LTQdAnROi981QszrNfO48l17KyZsBSlcZ2RPnVSRdy6Z5rsoO2rat0u2yEeinQ9mBj3ktPUoHQ-cL25hsNewJd6HAPoecoZ9KhX3gJ+Voz9jHkZQMYZYJgx4hoAcLfcU9ZTwMHMg6VRe37M61t+nEOQQHm0LWQ6h9Du7MOe1ju6X9gcnFqd9onJOUbBrdCAA).
- Download as SVG.
- Manually edit to: (1) remove all class names, (2) change the width and
height to match the view box, (3) change puffin to uv, (4) make uv bold.
- Copy to create the dark-mode variant, and replace `#333333` with
`#C9D1D9`.
2024-03-22 16:07:31 -04:00
Charlie Marsh 9986710a53
Make self-update an opt-in Cargo feature (#2606)
## Summary

Ensures that (e.g.) installs from conda-forge, Homebrew, and other
distributions don't expose `uv self update` at all.

We'll still show `uv self update` for `pip install uv`, but it will fail
with a good error. Removing the `uv self update` from `pip`-installed
`uv` is more complicated, since we'd need to build separately for the
installer vs. for PyPI.

Closes #2588.
2024-03-22 00:23:09 -04:00
konsti 2375008cc1
Use c-string literals and update trampolines (#2590)
Rust 1.77 has stabilized c-string literals (`c"<string>"`):
https://doc.rust-lang.org/nightly/edition-guide/rust-2021/c-string-literals.html.
This PR replaces the usages of the custom c-string literal macro in the
trampoline with the new syntax.
2024-03-21 15:36:00 +00:00
konsti 79fbac7af5
Fast lint CI job: Rustfmt, Prettier, Ruff (#2406)
Add a single job for for fast lint tools. Rustfmt for rust, ruff for
python formatting and linting, prettier avoids inconsistent formatter
changes between pycharm and vscode.
2024-03-20 00:16:46 +00:00
Charlie Marsh a80d317e6b
Add a system install test for Fedora (#2531) 2024-03-19 02:22:25 +00:00
Charlie Marsh 2c98154934
Fix wheel builds and uploads for musl ARM (#2518)
If you look at https://pypi.org/project/uv/0.1.22/#files...

- We didn't upload the ARMv6 wheel (I thought I had removed the `# Skip
for `arm`, which is not supported by PyPI.`), it must've gotten re-added
in a rebase or something.
- We lost the musllinux builds for ARM. I think this is because I built
them as manylinux.
2024-03-18 14:47:20 -04:00
konsti 15f1d65751
Add numpy to system import tests (#2380)
Installing and importing numpy tests for two cases:

* The python architecture and the package architecture don't match
(https://github.com/astral-sh/uv/issues/2326)
* The libc of python and that of the package don't match on linux
(musllinux vs manylinux, picking a compatible manylinux version)

All pylint deps are py3-none-any, so they don't catch those cases.
2024-03-18 09:09:32 -04:00
Charlie Marsh c296da34bf
Add additional ARM targets to release (#2417)
Closes https://github.com/astral-sh/uv/issues/2415.
Closes https://github.com/astral-sh/uv/issues/2416.
2024-03-15 13:49:29 +00:00
Zanie Blue b50cb3e79e
Add system install test for macOS x86_64 (#2459)
Adds binary builds for x86_64 macOS and a corresponding test
2024-03-14 12:26:46 -05:00
Zanie Blue 94f94ba916
Add system install test for CentOS (#2402)
Similar to #2403
2024-03-13 10:37:26 -05:00
Charlie Marsh cca9de13e2
Treat non-existent site-packages as empty (#2413)
## Summary

It turns out this doesn't need to exist until something has been
installed into it. See, e.g., https://github.com/astral-sh/uv/pull/2402.

Closes https://github.com/astral-sh/uv/issues/2404.
2024-03-13 15:10:34 +00:00
Zanie Blue 659f412964
Add system install test for alpine (#2371) 2024-03-12 14:26:05 +00:00
Zanie Blue 96290bf1a7
Use musl for system test builds (#2370) 2024-03-12 10:11:35 +01:00
Zanie Blue f3495d7cad
Move system install tests into normal CI (#2312)
Giving this a try... just making all of these a normal part of CI.

This is probably slightly slower than our normal CI, but not by much (it
depends how bad of a roll we get on the Windows network performance).
Includes #2309 to reduce the overhead of adding more platforms.

Alternatively, we could gate these with a label and just run on main by
default (i.e. #2308)
2024-03-12 00:30:42 -05:00
Charlie Marsh e321a2767d
Remove Maturin pin (#2291)
## Summary

As of
https://github.com/pypa/gh-action-pypi-publish/releases/tag/v1.8.13, all
relevant dependencies have been updated to support Metadata 2.2, so we
can remove our Maturin pin.
2024-03-07 19:42:24 -05:00
Charlie Marsh b3ac0e30ec
Add Conda tests to `system-install.yml` (#2281)
Closes https://github.com/astral-sh/uv/issues/2280.
2024-03-07 11:44:19 -05:00
samypr100 2b2de0d09e
ci: maturin version uses env var (#2225)
## Summary

Adjust maturing version to use env var for reusability in the workflow.


## Test Plan

CI `Build binaries` workflow uses correct version and passes
2024-03-05 23:23:51 -05:00
Charlie Marsh 9e41f73e41
Respect non-`sysconfig`-based system Pythons (#2193)
## Summary

`pip` uses `sysconfig` for Python 3.10 and later by default; however, it
falls back to `distutils` for earlier Python versions, and distros can
actually tell `pip` to continue falling back to `distutils` via the
`_PIP_USE_SYSCONFIG` variable.

By _always_ using `sysconfig`, we're doing the wrong then when
installing into some system Pythons, e.g., on Debian prior to Python
3.10.

This PR modifies our logic to mirror `pip` exactly, which is what's been
recommended to me as the right thing to do.

Closes https://github.com/astral-sh/uv/issues/2113.

## Test Plan

Most notably, the new Debian tests pass here (which fail on main:
https://github.com/astral-sh/uv/pull/2144).

I also added Pyston as a second stress-test.
2024-03-05 21:23:35 +00:00
Charlie Marsh a8ac7b1eb4
Pin maturin version in CI for now (#2219)
## Summary

In v1.5.0, Maturin now produces Metadata 2.3.0, which isn't supported in
the GitHub Action:
https://github.com/pypa/gh-action-pypi-publish/pull/219.
2024-03-05 15:49:07 -05:00
Charlie Marsh 60a78812f9
Extend `system-install.yml` to include virtualenv operations (#2190)
Just basic stuff like: we can create a virtualenv, we can install into
it (and not affect the system Python).
2024-03-05 01:46:00 +00:00
Charlie Marsh 7e1f361bb3
Add system install test for PyPy (#2189) 2024-03-04 19:44:18 -05:00
Charlie Marsh a3c24e7bea
Add system install test for choco (#2185)
Test installing Python via `choco`.
2024-03-04 19:37:07 -05:00
Charlie Marsh 70143b8626
Run Windows against Python 3.13 (#2171)
## Summary

In Python 3.13, at least in the current builds, there's no `python.exe`,
but there is `venvlauncher.exe`.

I've asked here about whether it's intended:
https://discuss.python.org/t/when-should-venv-scripts-nt-python-exe-be-present/47620.
But there's at least some evidence in CPython
[here](d457345bbc/Lib/venv/__init__.py (L270))
that we should fall back to these, and the tests pass.

Closes https://github.com/astral-sh/uv/issues/1636.
2024-03-04 21:49:17 +00:00
Charlie Marsh b983ff4fa7
Prioritize `PATH` over `py --list-paths` in Windows selection (#2057)
`uv --system` is failing in GitHub Actions, because `py --list-paths`
returns all the pre-cached Pythons:

```
-V:3.12 *        C:\hostedtoolcache\windows\Python\3.12.2\x64\python.exe
-V:3.12-32       C:\hostedtoolcache\windows\Python\3.12.2\x86\python.exe
-V:3.11          C:\hostedtoolcache\windows\Python\3.11.8\x64\python.exe
-V:3.11-32       C:\hostedtoolcache\windows\Python\3.11.8\x86\python.exe
-V:3.10          C:\hostedtoolcache\windows\Python\3.10.11\x64\python.exe
-V:3.10-32       C:\hostedtoolcache\windows\Python\3.10.11\x86\python.exe
-V:3.9           C:\hostedtoolcache\windows\Python\3.9.13\x64\python.exe
-V:3.9-32        C:\hostedtoolcache\windows\Python\3.9.13\x86\python.exe
-V:3.8           C:\hostedtoolcache\windows\Python\3.8.10\x64\python.exe
-V:3.8-32        C:\hostedtoolcache\windows\Python\3.8.10\x86\python.exe
-V:3.7           C:\hostedtoolcache\windows\Python\3.7.9\x64\python.exe
-V:3.7-32        C:\hostedtoolcache\windows\Python\3.7.9\x86\python.exe
```

So, our default selector returns the first entry here. But none of these
are actually in `PATH` except the one that the user installed via
`actions/setup-python@v5` -- that's the point of the action, that it
puts the correct versions in `PATH`.

It seems to me like we should prioritize `PATH` over `py --list-paths`.
Is there a good reason not to do this?

Closes: https://github.com/astral-sh/uv/issues/2056
2024-02-29 15:06:29 +00:00
Charlie Marsh 9328b3c2ab
Add a `--system` flag for opt-in non-virtualenv installs (#2046)
## Summary

This is essentially a wrapper around something like `--python $(which
python3)`, but gives users a portable and streamlined way to solve the
common pain point of using `uv` in GitHub Actions or a Docker container.

See: https://github.com/astral-sh/uv/issues/1526.
2024-02-28 19:48:32 +00:00
samypr100 df812a181e
feat: bump actions/{download,upload}-artifact (#1947)
## Summary

Closes #1943

Makes sure `build-binaries` and `publish-pypi` workflows are compatible
with `actions/{download,upload}-artifact@v4`. In nature, this PR is very
similar to the changes in https://github.com/astral-sh/ruff/pull/10105.
This PR also updates cargo-dist.

## Test Plan

I ran a small non-dry-run [smoke
test](https://github.com/samypr100/uv/actions/runs/8027864059) on my own
fork CI with only linux builds (for speed) and those jobs seem to work
at a glance.
2024-02-25 20:09:04 -05:00
Zanie Blue ba9c788680
Add dependabot config (#1926) 2024-02-23 13:44:52 -06:00
konsti 5a50a753bd
Update `cargo dist` (#1929)
Pull in the fixes in the last few releases.
2024-02-23 18:56:34 +00:00
Zanie Blue 3542a65fd0
Disable fail-fast during CI jobs (#1887)
Rarely is this important, its good to see the status of all the builds
2024-02-22 18:09:11 -05:00
Zanie Blue 8382f711bb
Allow skipping binary builds with `no-build` label (#1882)
It feels expensive to build binaries on changes where it's not critical.
2024-02-22 15:06:54 -06:00
Micha Reiser 12a96ad422
Win Trampoline: Use Python executable path encoded in binary (#1803) 2024-02-22 16:10:02 +01:00
Zanie Blue 3b70b42f16
Add smoke test to CI (#1611)
Similar idea to #1356 

Attempting to reproduce
https://github.com/astral-sh/uv/issues/1521#issuecomment-1949299848
2024-02-18 15:45:07 -06:00
Jacob Coffee 73fdad6ea2
infra: source github templates (#1425)
## What

- Adds PR and Issue templates.


## Meta
What do you think about vendoring some of the general things from ruff
and other repos into a `.github` repo. This way one change against a
"generalized template" or config would propagate to all repos in the
org.



Mainly thinking about issue/pr templates and other common [community
health
files](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/creating-a-default-community-health-file)
([example](https://github.com/litestar-org/.github))
2024-02-17 00:27:36 +00:00
Charlie Marsh 458b4f2dde
Remove Docker (#1323)
I will revisit this later.
2024-02-15 18:30:18 +00:00
Charlie Marsh 360fa2626a
Revert to non-Apple Silicon runners (#1321)
We rolled this back in Ruff too due to compatibility issues.
2024-02-15 18:22:40 +00:00
Charlie Marsh 06f2b6eee2
Bump version and update pyproject.toml metadata (#1316)
Also ensures that we no longer clear the README when uploading to PyPI
:)
2024-02-15 18:03:35 +00:00
Zanie Blue 2586f655bb
Rename to `uv` (#1302)
First, replace all usages in files in-place. I used my editor for this.
If someone wants to add a one-liner that'd be fun.

Then, update directory and file names:

```
# Run twice for nested directories
find . -type d -print0 | xargs -0 rename s/puffin/uv/g
find . -type d -print0 | xargs -0 rename s/puffin/uv/g

# Update files
find . -type f -print0 | xargs -0 rename s/puffin/uv/g
```

Then add all the files again

```
# Add all the files again
git add crates
git add python/uv

# This one needs a force-add
git add -f crates/uv-trampoline
```
2024-02-15 11:19:46 -06:00
Zanie Blue 36783743ba
Include slow tests in CI summary (#1295)
Show me the slow tests! ref
https://github.com/astral-sh/puffin/issues/878
2024-02-13 13:52:56 -06:00
konsti 1dc9904f8c
Run the test suite on windows in CI (#1262)
Run `cargo test` on windows in CI, pulling the switch on tier 1 windows
support.

These changes make the bootstrap script virtually required for running
the tests. This gives us consistency between and CI, but it also locks
our tests to python-build-standalone and an articificial `PATH`.

I've deleted the shell bootstrap script in favor of only the python one,
which also runs on windows. I've left the (sym)link creation of the
bootstrap in place, even though it is not used by the tests anymore.

I've reactivated the three tests that would previously stack overflow by
doubling their stack sizes. The stack overflows only happen in debug
mode, so this is neither a user facing problem nor an actual problem
with our code and this workaround seems better than optimizing our code
for case that the (release) compiler can optimize much better for.

The handling of patch versions will be fixed in a follow-up PR.

Closes #1160 
Closes #1161

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2024-02-08 22:09:55 +01:00
Charlie Marsh 631ab51d6e
Use publicly available Apple Silicon runners (#1216) 2024-01-31 23:41:51 -05:00
Charlie Marsh 35113c1d06
Enable macOS checks on CI (#1193)
## Summary

Enables tests for macOS in CI, using the M1 runners (which are free in
public, but count against our quota in private
repos). For now, I'm just running them on `main` to save quota.

I did the math, and the M1 runners are the best value:

![Screenshot 2024-01-30 at 9 33
36 PM](https://github.com/astral-sh/puffin/assets/1309177/bd5a14b6-740c-487f-bcad-81c0fce5b62e)

Closes #1053.
2024-01-31 15:27:04 +00:00
Charlie Marsh 8f9258fae3
Invert default feature for testing (#1200)
## Summary

We have some flags in Puffin that enable us to opt-in to certain tests.
To date, they've been opt-in, so we've run our tests with
`--all-features`. This PR makes them opt-out, and we now run tests with
default features.

The main motivation here is that I want to get tests working for macOS
on CI, but for unknown reasons, macOS can't compile the PyO3 features at
the same time as everything else due to strange linker issues. By
avoiding `--all-features` for tests, we thus avoid unnecessarily
including features that we don't actually use in Puffin.

I verified that the exact same number of tests (439) are run before and
after this change. For users, the primary difference is that you now
need to specify `--no-default-features --features pypi --features
python` to avoid (e.g.) including the Git tests.
2024-01-31 09:44:26 -05:00
Charlie Marsh b88b9e1f3d
Remove dedicated `flate2` features from Puffin (#1199)
We should be able to enable and disable these without crate-internal
features.
2024-01-30 19:41:08 -05:00
Zanie Blue ebd8cd425d
Use large Windows runner (#1134) 2024-01-29 08:34:40 +01:00
Zanie Blue c0e7668dfa
Add bootstrapped installation in Python for Windows (#1130)
A 1:1 port of the Bash script to Python for use on Windows.

Pulls some parts of #1068 but much more minimal. Avoids an additional
dependency on `requests`. Because we require `zstandard` to unzip the
distributions we unfortunately cannot be dependency free and cannot have
`bootstrap.sh` download the Python version needed to run this script
without it doing a non-trivial amount of work.

Retains the Bash script for now so you can bootstrap without Python
available. I may drop it in the future?
2024-01-28 10:24:49 -06:00
Charlie Marsh abe1867a0d
Enable Windows wheel builds in CI (#1129)
Closes https://github.com/astral-sh/puffin/issues/990.
2024-01-27 01:12:25 +00:00
Zanie Blue 0cdde8949f
Use `.env` file instead of `.envrc` (#1132)
#1131 shows that `direnv` installation is _most_ of the CI overhead
introduced by #1105.

Instead of using `direnv`, let's just use a simple `.env` file that can
be loaded with `source` or [`direnv`'s `dotenv`
directive](https://direnv.net/man/direnv-stdlib.1.html#codedotenv-ltdotenvpathgtcode).
2024-01-26 14:00:05 -06:00
Zanie Blue 21577ad002
Add bootstrapping and isolation of development Python versions (#1105)
Replaces https://github.com/astral-sh/puffin/pull/1068 and #1070 which
were more complicated than I wanted.

- Introduces a `.python-versions` file which defines the Python versions
needed for development
- Adds a Bash script at `scripts/bootstrap/install` which installs the
required Python versions from `python-build-standalone` to `./bin`
- Checks in a `versions.json` file with metadata about available
versions on each platform and a `fetch-version` Python script derived
from `rye` for updating the versions
- Updates CI to use these Python builds instead of the `setup-python`
action
- Updates to the latest packse scenarios which require Python 3.8+
instead of 3.7+ since we cannot use 3.7 anymore and includes new test
coverage of patch Python version requests
- Adds a `PUFFIN_PYTHON_PATH` variable to prevent lookup of system
Python versions for isolation during development

Tested on Linux (via CI) and macOS (locally) — presumably it will be a
bit more complicated to do proper Windows support.
2024-01-26 12:12:48 -06:00
konsti 39021263dd
Windows launchers using posy trampolines (#1092)
## Background

In virtual environments, we want to install python programs as console
commands, e.g. `black .` over `python -m black .`. They may be called
[entrypoints](https://packaging.python.org/en/latest/specifications/entry-points/)
or scripts. For entrypoints, we're given a module name and function to
call in that module.

On Unix, we generate a minimal python script launcher. Text files are
runnable on unix by adding a shebang at their top, e.g.

```python
#!/usr/bin/env python
```

will make the operating system run the file with the current python
interpreter. A venv launcher for black in `/home/ferris/colorize/.venv`
(module name: `black`, function to call: `patched_main`) would look like
this:

```python
#!/home/ferris/colorize/.venv/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from black import patched_main
if __name__ == "__main__":
    sys.argv[0] = re.sub(r"(-script\.pyw|\.exe)?$", "", sys.argv[0])
    sys.exit(patched_main())
```

On windows, this doesn't work, we can only rely on launching `.exe`
files.

## Summary

We use posy's rust implementation of a trampoline, which is based on
distlib's c++ implementation. We pre-build a minimal exe and append the
launcher script as stored zip archive behind it. The exe will look for
the venv python interpreter next to it and use it to execute the
appended script.

The changes in this PR make the `black` entrypoint work:

```powershell
cargo run -- venv .venv
cargo run -q -- pip install black
.\.venv\Scripts\black --version
```

Integration with our existing tests will be done in follow-up PRs.

## Implementation and Details

I've vendored the posy trampoline crate. It is a formatted, renamed and
slightly changed for embedding version of
https://github.com/njsmith/posy/pull/28.

The posy launchers are smaller than the distlib launchers, 16K vs 106K
for black. Currently only `x86_64-pc-windows-msvc` is supported. The
crate requires a nightly compiler for its no-std binary size tricks.

On windows, an application can be launched with a console or without (to
create windows instead), which needs two different launchers. The gui
launcher will subsequently use `pythonw.exe` while the console launcher
uses `python.exe`.
2024-01-26 13:54:11 +00:00
konsti b5cfd3616f
Add basic windows CI (clippy only) (#1080)
Add basic windows (clippy only), until cargo test passes and we can
merge it with the cargo-test job above.
2024-01-25 09:38:16 +01:00
Charlie Marsh b3954f2449
Enable PowerPC builds (#1017)
Closes #1015.
2024-01-19 17:29:11 -05:00
Charlie Marsh 72924935f8
Upgrade cargo-dist (#1016) 2024-01-19 20:19:02 +00:00
Charlie Marsh c66395977d
Rename `pep440-rs` to `Readme.md` (#1014)
This is due to a bug in Maturin
(https://github.com/PyO3/maturin/pull/1915), so I'll just fix our setup
to work with existing versions.

Closes https://github.com/astral-sh/puffin/issues/991.
2024-01-19 15:16:12 -05:00
Charlie Marsh 7b365195cb
Add support for ARM Linux builds in release (#1012)
Closes #992.
2024-01-19 15:13:07 -05:00
Charlie Marsh 980e1f6d79
Set explicit Docker permissions (#997) 2024-01-19 05:29:29 +00:00
Charlie Marsh 6af4eb7a45
Remove `[puffin]` prefix (#989)
And disable the plan job on CI now.
2024-01-19 01:59:06 +00:00
Charlie Marsh 732ef7adb7
Bump version to v0.0.2 (#987)
Bumping the version so that I can test the release process again
(including PyPI publish).
2024-01-18 20:56:09 -05:00
Charlie Marsh 3a1cd44fc6
Add Puffin Docker image (#985)
Missing piece for the release.

## Test Plan

Built the image locally:

```shell
❯ docker run 99956098e1f8f04e209dcfc4a0afcee67df1fe8a726c164884e67f035b1a0f42
Usage: puffin [OPTIONS] <COMMAND>

Commands:
  pip    Resolve and install Python packages
  venv   Create a virtual environment
  clean  Clear the cache
  help   Print this message or the help of the given subcommand(s)

Options:
  -q, --quiet                  Do not print any output
  -v, --verbose                Use verbose output
  -n, --no-cache               Avoid reading from or writing to the cache
      --cache-dir <CACHE_DIR>  Path to the cache directory [env: PUFFIN_CACHE_DIR=]
  -h, --help                   Print help
  -V, --version                Print version
```
2024-01-18 20:21:31 -05:00
Charlie Marsh 968de30420
Run cargo-dist generate (#972) 2024-01-18 21:22:38 +00:00
Charlie Marsh f9154e8297
Add release workflow (#961)
## Summary

This PR adds a release workflow powered by `cargo-dist`. It's similar to
the version that's PR'd in Ruff
(https://github.com/astral-sh/ruff/pull/9559), with the exception that
it doesn't include the Docker build or the "update dependents" step for
pre-commit.
2024-01-18 15:44:11 -05:00
Charlie Marsh fb22680311
Remove legacy release files (#960)
I added these long ago, and they're going to make the release diff a lot
more confusing.
2024-01-18 05:07:55 +00:00
konsti 174200519f
Don't install cargo insta on CI (#902)
We don't use it anymore on CI.
2024-01-12 17:45:37 +00:00
Zanie Blue 65c600b666
Use a larger runner for tests (#889)
Alternative to #875. Instead of partitioning tests across multiple
runners via nextest, we use a larger GitHub Actions runner.
Additionally, we explore using nextest to take advantage of the
increased number of cores.

On the 8-core machine, nextest is 22% faster than insta. In combination
with the vastly more readable output, I think this means we should
switch over. As noted in #875 we lose the ability to detect unreferenced
snapshot files but since we inline all of our snapshots this shouldn't
matter.

### Benchmarks

The following are the runtime of _just_ the test portion of the test job
in GitHub Actions except the partitioned case from #875 which requires a
separate build step making runner overhead relevant.

The compile times are noted as a reference as a possible lower bound of
test times. The compile time **is included** in all of the test times
shown.

Where the nextest thread count is not noted, it is inferred from the CPU
count.

```
test                                  time        diff
------------------------------------------------------
2-core (main)                         4m 53s
2-core-nextest-partioned (#875)       3m 56s      -19%
4-core-compilation                       32s      
4-core-insta                          1m 47s      -63%
4-core-nextest                        1m 40s      -66%
8-core-compilation                       18s      
8-core-insta                          1m  9s      -76%
8-core-nextest                        1m  5s      -78%
8-core-nextest-12-threads                54s      -82%
8-core-nextest-16-threads                55s      -82%
```


### Cost

We must pay per-minute costs for these runners:

> Larger runners are not eligible for the use of included minutes on
private repositories. For both private and public repositories, when
larger runners are in use, they will always be billed at the per-minute
rate.
>
> Compared to standard GitHub-hosted runners, larger runners are billed
differently. Larger runners are only billed at the per-minute rate for
the amount of time workflows are executed on them.


[[source]](https://docs.github.com/en/actions/using-github-hosted-runners/about-larger-runners/about-larger-runners#understanding-billing)

The per-minute rates are as follows:

> Linux	2	$0.008  (main)
> Linux	4	$0.016
> Linux	8	$0.032  (pull request)


[[source]](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#per-minute-rates)

The per-minute cost increases by 4x but the workflow is 5.2x faster
since we are making use of the extra compute. We will not get any free
minutes executing these runners once the repository is public.
Additionally, we will not make use of our [3,000 minutes /
month](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#included-storage-and-minutes)
of included minutes. Using the 8-core machines, the included 3,000
minutes should account for approximately ~$100.

Here's a brief analysis of costs from the last few
```

Minutes used
------------
November 1090 + 3000 = 4090
December 1357 + 3000 = 4357
January  2655 in 7 days
         ~3x more expected
                     = 11000 estimated

Costs
-----
November  1090 * 0.008   = $ 8.72
December  1357 * 0.008   = $10.86
January   8000 * 0.008   = $64 projected using 3000 included minutes and 2-core machines
          (11000 - (0.82 * 11000)) * 0.032
                         = $63 projected without included minutes and 4-core machines with perf improvement
          (11000 - (0.70 * 11000)) * 0.032
                         = $100 projected with a more conservative 70% reduction in total runtime

```

We can reduce costs (once public) by disabling larger runners for
non-organization users e.g.
https://github.com/PrefectHQ/prefect/pull/9519
2024-01-11 16:14:21 -06:00
Zanie Blue 90edfa8fe7
Use `mold` for linking in CI tests (#887)
Derived from https://github.com/astral-sh/puffin/pull/875

This gets us a significant speedup.

I would not read the commits individually. I can squash them but they
were used for testing various scenarios.

### Test compile times

Ranges are the lowest and highest I've seen. Huge variability in GitHub
Actions runners.

**Before:**
7m 21s - 8m 22s (cold cache)
110s - 120s (warm cache)

**After:**
6m 15s - 7m 05s (cold cache)
57s - 70s (warm cache)

**Improvement:**
4% - 25% (cold cache)
36% - 52% (warm cache)
2024-01-11 12:28:53 -06:00
Zanie Blue d47eeccca8
Only write to rust cache in CI from main branch (#874)
Each cache entry is ~1 GB of our allotted 10 GB for the repository which
is quite a bit. We're probably losing cache entries all the time since
we add an entry per commit per pull request.

Saving the cache takes ~3 minutes
([example](https://github.com/astral-sh/puffin/actions/runs/7479909295/job/20358124969)),
it's probably just slowing down CI. It's ~25% of our test runtime and
~50% of our clippy runtime.
2024-01-10 15:04:27 -06:00
Zanie Blue c3d37db85b
Check locked dependencies in CI (#837) 2024-01-08 18:18:40 +00:00
Zanie Blue 3d6ea7809a
Update scenario tests to include `requires-python` coverage (#769)
Includes creating a virtual env with the relevant environment python
version.

Scenarios added in https://github.com/zanieb/packse/pull/55
2024-01-04 14:15:13 -06:00
konsti 76a41066ac
Filter out incompatible dists (#398)
Filter out source dists and wheels whose `requires-python` from the
simple api is incompatible with the current python version.

This change showed an important problem: When we use a fake python
version for resolving, building source distributions breaks down because
we can only build with versions we actually have.

This change became surprisingly big. The tests now require python 3.7 to
be installed, but changing that would mean an even bigger change.

Fixes #388
2023-11-13 17:14:07 +01:00
Charlie Marsh b665f1489a
Add tests for `puffin sync` (#161)
Closes #158.
2023-10-22 03:25:00 +00:00
Charlie Marsh eefa04f13f
Simplify CI pipeline for now (#118)
Removes Windows at least, to avoid unneeded builds.
2023-10-18 10:56:45 -04:00
Charlie Marsh 2d4a8c361b
Change puffin-cli binary to puffin (#80) 2023-10-09 17:19:33 -04:00
Charlie Marsh ba2b200fce
Enable release builds via `cargo-dist` (#79) 2023-10-09 20:48:55 +00:00
Charlie Marsh b059c590c4
Add basic CI via GitHub Actions (#10)
Closes https://github.com/astral-sh/puffin/issues/1.
2023-10-05 13:42:58 -04:00