mirror of
				https://github.com/astral-sh/uv.git
				synced 2025-10-31 20:09:09 +00:00 
			
		
		
		
	 c25c800367
			
		
	
	
		c25c800367
		
			
		
	
	
	
		
			
	
		
	
	
		
			Some checks are pending
		
		
	
	CI / build binary | macos x86_64 (push) Blocked by required conditions
				
			CI / build binary | windows x86_64 (push) Blocked by required conditions
				
			CI / build binary | windows aarch64 (push) Blocked by required conditions
				
			CI / cargo build (msrv) (push) Blocked by required conditions
				
			CI / integration test | free-threaded python on github actions (push) Blocked by required conditions
				
			CI / integration test | determine publish changes (push) Blocked by required conditions
				
			CI / integration test | uv publish (push) Blocked by required conditions
				
			CI / integration test | uv_build (push) Blocked by required conditions
				
			CI / check cache | ubuntu (push) Blocked by required conditions
				
			CI / check cache | macos aarch64 (push) Blocked by required conditions
				
			CI / check system | python on debian (push) Blocked by required conditions
				
			CI / check system | python on fedora (push) Blocked by required conditions
				
			CI / check system | python on ubuntu (push) Blocked by required conditions
				
			CI / check system | python on rocky linux 8 (push) Blocked by required conditions
				
			CI / check system | python on rocky linux 9 (push) Blocked by required conditions
				
			CI / check system | graalpy on ubuntu (push) Blocked by required conditions
				
			CI / check system | pypy on ubuntu (push) Blocked by required conditions
				
			CI / check system | pyston (push) Blocked by required conditions
				
			CI / check system | python on macos aarch64 (push) Blocked by required conditions
				
			CI / Determine changes (push) Waiting to run
				
			CI / lint (push) Waiting to run
				
			CI / cargo clippy | ubuntu (push) Blocked by required conditions
				
			CI / cargo clippy | windows (push) Blocked by required conditions
				
			CI / cargo dev generate-all (push) Blocked by required conditions
				
			CI / cargo shear (push) Waiting to run
				
			CI / cargo test | ubuntu (push) Blocked by required conditions
				
			CI / cargo test | macos (push) Blocked by required conditions
				
			CI / cargo test | windows (push) Blocked by required conditions
				
			CI / check windows trampoline | aarch64 (push) Blocked by required conditions
				
			CI / check windows trampoline | i686 (push) Blocked by required conditions
				
			CI / check windows trampoline | x86_64 (push) Blocked by required conditions
				
			CI / test windows trampoline | i686 (push) Blocked by required conditions
				
			CI / test windows trampoline | x86_64 (push) Blocked by required conditions
				
			CI / typos (push) Waiting to run
				
			CI / mkdocs (push) Waiting to run
				
			CI / build binary | linux libc (push) Blocked by required conditions
				
			CI / build binary | linux musl (push) Blocked by required conditions
				
			CI / build binary | macos aarch64 (push) Blocked by required conditions
				
			CI / build binary | freebsd (push) Blocked by required conditions
				
			CI / ecosystem test | pydantic/pydantic-core (push) Blocked by required conditions
				
			CI / ecosystem test | prefecthq/prefect (push) Blocked by required conditions
				
			CI / ecosystem test | pallets/flask (push) Blocked by required conditions
				
			CI / smoke test | linux (push) Blocked by required conditions
				
			CI / check system | alpine (push) Blocked by required conditions
				
			CI / smoke test | macos (push) Blocked by required conditions
				
			CI / smoke test | windows x86_64 (push) Blocked by required conditions
				
			CI / smoke test | windows aarch64 (push) Blocked by required conditions
				
			CI / integration test | conda on ubuntu (push) Blocked by required conditions
				
			CI / integration test | deadsnakes python3.9 on ubuntu (push) Blocked by required conditions
				
			CI / integration test | free-threaded on windows (push) Blocked by required conditions
				
			CI / integration test | pypy on ubuntu (push) Blocked by required conditions
				
			CI / integration test | pypy on windows (push) Blocked by required conditions
				
			CI / integration test | graalpy on ubuntu (push) Blocked by required conditions
				
			CI / integration test | graalpy on windows (push) Blocked by required conditions
				
			CI / integration test | pyodide on ubuntu (push) Blocked by required conditions
				
			CI / integration test | github actions (push) Blocked by required conditions
				
			CI / check system | python on macos x86-64 (push) Blocked by required conditions
				
			CI / check system | homebrew python on macos aarch64 (push) Blocked by required conditions
				
			CI / check system | python3.10 on windows x86-64 (push) Blocked by required conditions
				
			CI / check system | python3.10 on windows x86 (push) Blocked by required conditions
				
			CI / check system | python3.13 on windows x86-64 (push) Blocked by required conditions
				
			CI / check system | x86-64 python3.13 on windows aarch64 (push) Blocked by required conditions
				
			CI / check system | windows registry (push) Blocked by required conditions
				
			CI / check system | python3.12 via chocolatey (push) Blocked by required conditions
				
			CI / check system | python3.9 via pyenv (push) Blocked by required conditions
				
			CI / check system | python3.13 (push) Blocked by required conditions
				
			CI / check system | conda3.11 on macos aarch64 (push) Blocked by required conditions
				
			CI / check system | conda3.8 on macos aarch64 (push) Blocked by required conditions
				
			CI / check system | conda3.11 on linux x86-64 (push) Blocked by required conditions
				
			CI / check system | conda3.8 on linux x86-64 (push) Blocked by required conditions
				
			CI / check system | conda3.11 on windows x86-64 (push) Blocked by required conditions
				
			CI / check system | conda3.8 on windows x86-64 (push) Blocked by required conditions
				
			CI / check system | amazonlinux (push) Blocked by required conditions
				
			CI / check system | embedded python3.10 on windows x86-64 (push) Blocked by required conditions
				
			CI / benchmarks | walltime aarch64 linux (push) Blocked by required conditions
				
			CI / benchmarks | instrumented (push) Blocked by required conditions
				
			
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Transform the README.md to support a specific deployment target.
 | |
| 
 | |
| By default, we assume that our README.md will be rendered on GitHub. However, different
 | |
| targets have different strategies for rendering light- and dark-mode images. This script
 | |
| adjusts the images in the README.md to support the given target.
 | |
| """
 | |
| 
 | |
| from __future__ import annotations
 | |
| 
 | |
| import argparse
 | |
| import re
 | |
| import tomllib
 | |
| import urllib.parse
 | |
| from pathlib import Path
 | |
| 
 | |
| # To be kept in sync with: `docs/index.md`
 | |
| URL = "https://github.com/astral-sh/uv/assets/1309177/{}"
 | |
| URL_LIGHT = URL.format("629e59c0-9c6e-4013-9ad4-adb2bcf5080d")
 | |
| URL_DARK = URL.format("03aa9163-1c79-4a87-a31d-7a9311ed9310")
 | |
| 
 | |
| # https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#specifying-the-theme-an-image-is-shown-to
 | |
| GITHUB = f"""
 | |
| <p align="center">
 | |
|   <picture align="center">
 | |
|     <source media="(prefers-color-scheme: dark)" srcset="{URL_DARK}">
 | |
|     <source media="(prefers-color-scheme: light)" srcset="{URL_LIGHT}">
 | |
|     <img alt="Shows a bar chart with benchmark results." src="{URL_LIGHT}">
 | |
|   </picture>
 | |
| </p>
 | |
| """
 | |
| 
 | |
| # https://github.com/pypi/warehouse/issues/11251
 | |
| PYPI = f"""
 | |
| <p align="center">
 | |
|   <img alt="Shows a bar chart with benchmark results." src="{URL_LIGHT}">
 | |
| </p>
 | |
| """
 | |
| 
 | |
| 
 | |
| def main(target: str) -> None:
 | |
|     """Modify the README.md to support the given target."""
 | |
| 
 | |
|     # Replace the benchmark images based on the target.
 | |
|     with Path("README.md").open(encoding="utf8") as fp:
 | |
|         content = fp.read()
 | |
|         if GITHUB not in content:
 | |
|             msg = "README.md is not in the expected format."
 | |
|             raise ValueError(msg)
 | |
| 
 | |
|     if target == "pypi":
 | |
|         content = content.replace(GITHUB, PYPI)
 | |
|     else:
 | |
|         msg = f"Unknown target: {target}"
 | |
|         raise ValueError(msg)
 | |
| 
 | |
|     # Read the current version from the `pyproject.toml`.
 | |
|     with Path("pyproject.toml").open(mode="rb") as fp:
 | |
|         # Parse the TOML.
 | |
|         pyproject = tomllib.load(fp)
 | |
|         if "project" in pyproject and "version" in pyproject["project"]:
 | |
|             version = pyproject["project"]["version"]
 | |
|         else:
 | |
|             raise ValueError("Version not found in pyproject.toml")
 | |
| 
 | |
|     # Replace the badges with versioned URLs.
 | |
|     for existing, replacement in [
 | |
|         (
 | |
|             "https://img.shields.io/pypi/v/uv.svg",
 | |
|             f"https://img.shields.io/pypi/v/uv/{version}.svg",
 | |
|         ),
 | |
|         (
 | |
|             "https://img.shields.io/pypi/l/uv.svg",
 | |
|             f"https://img.shields.io/pypi/l/uv/{version}.svg",
 | |
|         ),
 | |
|         (
 | |
|             "https://img.shields.io/pypi/pyversions/uv.svg",
 | |
|             f"https://img.shields.io/pypi/pyversions/uv/{version}.svg",
 | |
|         ),
 | |
|     ]:
 | |
|         if existing not in content:
 | |
|             raise ValueError(f"Badge not found in README.md: {existing}")
 | |
|         content = content.replace(existing, replacement)
 | |
| 
 | |
|     # Replace any relative URLs (e.g., `[PIP_COMPATIBILITY.md`) with absolute URLs.
 | |
|     def replace(match: re.Match) -> str:
 | |
|         url = match.group(1)
 | |
|         if not url.startswith("http"):
 | |
|             url = urllib.parse.urljoin(
 | |
|                 f"https://github.com/astral-sh/uv/blob/{version}/README.md", url
 | |
|             )
 | |
|         return f"]({url})"
 | |
| 
 | |
|     content = re.sub(r"]\(([^)]+)\)", replace, content)
 | |
| 
 | |
|     with Path("README.md").open("w", encoding="utf8") as fp:
 | |
|         fp.write(content)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     parser = argparse.ArgumentParser(
 | |
|         description="Modify the README.md to support a specific deployment target.",
 | |
|     )
 | |
|     parser.add_argument(
 | |
|         "--target",
 | |
|         type=str,
 | |
|         required=True,
 | |
|         choices=("pypi", "mkdocs"),
 | |
|     )
 | |
|     args = parser.parse_args()
 | |
| 
 | |
|     main(target=args.target)
 |