From 64a093756c026d24375be59e5608e07b231df128 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Thu, 3 Dec 2020 17:16:51 -0500 Subject: [PATCH 01/20] docs: repo table with stars --- README.md | 93 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 71 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 4be85a33..ff9357c7 100644 --- a/README.md +++ b/README.md @@ -127,28 +127,77 @@ Working examples Here are some repos that use cibuildwheel. -- [Matplotlib](https://github.com/matplotlib/matplotlib) - The venerable Matplotlib, a Python library with C++ portions, built for Linux, Mac, and Windows on Github Actions. -- [pyinstrument_cext](https://github.com/joerick/pyinstrument_cext) - A simple C extension, without external dependencies, built on Travis CI/Appveyor. -- [websockets](https://github.com/aaugustin/websockets) -- [Parselmouth](https://github.com/YannickJadoul/Parselmouth) - A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels; all platforms built on Github Actions. -- [python-admesh](https://github.com/admesh/python-admesh) -- [pybase64](https://github.com/mayeut/pybase64) -- [KDEpy](https://github.com/tommyod/KDEpy) -- [AutoPy](https://github.com/autopilot-rs/autopy) -- [apriltags2-ethz](https://github.com/safijari/apriltags2_ethz) -- [TgCrypto](https://github.com/pyrogram/tgcrypto) -- [twisted-iocpsupport](https://github.com/twisted/twisted-iocpsupport) - A submodule of Twisted that hooks into native C APIs using Cython. Built on Github CI for Windows. -- [gmic-py](https://github.com/dtschump/gmic-py) -- [creme](https://github.com/creme-ml/creme) -- [PyAV](https://github.com/PyAV-Org/PyAV) -- [aiortc](https://github.com/aiortc/aiortc) -- [aioquic](https://github.com/aiortc/aioquic) -- [pikepdf](https://github.com/pikepdf/pikepdf) -- [fathon](https://github.com/stfbnc/fathon) -- [etebase-py](https://github.com/etesync/etebase-py) - Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed, built on Travis CI. -- [xmlstarlet](https://github.com/dimitern/xmlstarlet) - Python 3.6+ CFFI bindings with true MSVC build and GitHub Actions. -- [bx-python](https://github.com/bxlab/bx-python) - A library that includes Cython extensions, built on Travis CI for Mac and Linux. -- [coverage.py](https://github.com/nedbat/coveragepy) - The coverage tool for Python. +| Name | Stars | Notes | +|-------------------------|--------------------------------|:------| +| [Matplotlib][] | ![Matplotlib stars][] | The venerable Matplotlib, a Python library with C++ portions, built for Linux, Mac, and Windows on Github Actions. | +| [pyinstrument_cext][] | ![pyinstrument_cext stars][] | A simple C extension, without external dependencies, built on Travis CI/Appveyor. | +| [websockets][] | ![websockets stars][] | | +| [Parselmouth][] | ![Parselmouth stars][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels; all platforms built on Github Actions. | +| [python-admesh][] | ![python-admesh stars][] | | +| [pybase64][] | ![pybase64 stars][] | +| [KDEpy][] | ![KDEpy stars][] | +| [AutoPy][] | ![AutoPy stars][] | +| [apriltags2-ethz][] | ![apriltags2-ethz stars][] | | +| [TgCrypto][] | ![TgCrypto stars][] | | +| [twisted-iocpsupport][] | ![twisted-iocpsupport stars][] | A submodule of Twisted that hooks into native C APIs using Cython. Built on Github CI for Windows. | +| [gmic-py][] | ![gmic-py stars][] | | +| [creme][] | ![creme stars][] | | +| [PyAV][] | ![PyAV stars][] | | +| [aiortc][] | ![aiortc stars][] | | +| [aioquic][] | ![aioquic stars][] | | +| [pikepdf][] | ![pikepdf stars][] | | +| [fathon][] | ![fathon stars][] | | +| [etebase-py][] | ![etebase-py stars][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed, built on Travis CI. | +| [xmlstarlet][] | ![xmlstarlet stars][] | Python 3.6+ CFFI bindings with true MSVC build and GitHub Actions. | +| [bx-python][] | ![bx-python stars][] | A library that includes Cython extensions, built on Travis CI for Mac and Linux. | +| [coverage.py][] | ![coverage.py stars][] | The coverage tool for Python. | + +[Matplotlib]: https://github.com/matplotlib/matplotlib +[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext +[websockets]: https://github.com/aaugustin/websockets +[Parselmouth]: https://github.com/YannickJadoul/Parselmouth +[python-admesh]: https://github.com/admesh/python-admesh +[pybase64]: https://github.com/mayeut/pybase64 +[KDEpy]: https://github.com/tommyod/KDEpy +[AutoPy]: https://github.com/autopilot-rs/autopy +[apriltags2-ethz]: https://github.com/safijari/apriltags2_ethz +[TgCrypto]: https://github.com/pyrogram/tgcrypto +[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport +[gmic-py]: https://github.com/dtschump/gmic-py +[creme]: https://github.com/creme-ml/creme +[PyAV]: https://github.com/PyAV-Org/PyAV +[aiortc]: https://github.com/aiortc/aiortc +[aioquic]: https://github.com/aiortc/aioquic +[pikepdf]: https://github.com/pikepdf/pikepdf +[fathon]: https://github.com/stfbnc/fathon +[etebase-py]: https://github.com/etesync/etebase-py +[xmlstarlet]: https://github.com/dimitern/xmlstarlet +[bx-python]: https://github.com/bxlab/bx-python +[coverage.py]: https://github.com/nedbat/coveragepy + +[Matplotlib stars]: https://img.shields.io/github/stars/matplotlib/matplotlib?label=%20&style=social +[pyinstrument_cext stars]: https://img.shields.io/github/stars/joerick/pyinstrument_cext?label=%20&style=social +[websockets stars]: https://img.shields.io/github/stars/aaugustin/websockets?label=%20&style=social +[Parselmouth stars]: https://img.shields.io/github/stars/YannickJadoul/Parselmouth?label=%20&style=social +[python-admesh stars]: https://img.shields.io/github/stars/admesh/python-admesh?label=%20&style=social +[pybase64 stars]: https://img.shields.io/github/stars/mayeut/pybase64?label=%20&style=social +[KDEpy stars]: https://img.shields.io/github/stars/tommyod/KDEpy?label=%20&style=social +[AutoPy stars]: https://img.shields.io/github/stars/autopilot-rs/autopy?label=%20&style=social +[apriltags2-ethz stars]: https://img.shields.io/github/stars/safijari/apriltags2_ethz?label=%20&style=social +[TgCrypto stars]: https://img.shields.io/github/stars/pyrogram/tgcrypto?label=%20&style=social +[twisted-iocpsupport stars]: https://img.shields.io/github/stars/twisted/twisted?label=%20&style=social +[gmic-py stars]: https://img.shields.io/github/stars/dtschump/gmic-py?label=%20&style=social +[creme stars]: https://img.shields.io/github/stars/creme-ml/creme?label=%20&style=social +[PyAV stars]: https://img.shields.io/github/stars/PyAV-Org/PyAV?label=%20&style=social +[aiortc stars]: https://img.shields.io/github/stars/aiortc/aiortc?label=%20&style=social +[aioquic stars]: https://img.shields.io/github/stars/aiortc/aioquic?label=%20&style=social +[pikepdf stars]: https://img.shields.io/github/stars/pikepdf/pikepdf?label=%20&style=social +[fathon stars]: https://img.shields.io/github/stars/stfbnc/fathon?label=%20&style=social +[etebase-py stars]: https://img.shields.io/github/stars/etesync/etebase-py?label=%20&style=social +[xmlstarlet stars]: https://img.shields.io/github/stars/dimitern/xmlstarlet?label=%20&style=social +[bx-python stars]: https://img.shields.io/github/stars/bxlab/bx-python?label=%20&style=social +[coverage.py stars]: https://img.shields.io/github/stars/nedbat/coveragepy?label=%20&style=social + > Add your repo here! Send a PR. > From d1ba5b8419e9142137a585de454d67523da214cf Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Thu, 3 Dec 2020 17:34:14 -0500 Subject: [PATCH 02/20] docs: sort by stars --- README.md | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index ff9357c7..236cfe8d 100644 --- a/README.md +++ b/README.md @@ -127,30 +127,32 @@ Working examples Here are some repos that use cibuildwheel. + | Name | Stars | Notes | |-------------------------|--------------------------------|:------| | [Matplotlib][] | ![Matplotlib stars][] | The venerable Matplotlib, a Python library with C++ portions, built for Linux, Mac, and Windows on Github Actions. | -| [pyinstrument_cext][] | ![pyinstrument_cext stars][] | A simple C extension, without external dependencies, built on Travis CI/Appveyor. | -| [websockets][] | ![websockets stars][] | | -| [Parselmouth][] | ![Parselmouth stars][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels; all platforms built on Github Actions. | -| [python-admesh][] | ![python-admesh stars][] | | -| [pybase64][] | ![pybase64 stars][] | -| [KDEpy][] | ![KDEpy stars][] | -| [AutoPy][] | ![AutoPy stars][] | -| [apriltags2-ethz][] | ![apriltags2-ethz stars][] | | -| [TgCrypto][] | ![TgCrypto stars][] | | | [twisted-iocpsupport][] | ![twisted-iocpsupport stars][] | A submodule of Twisted that hooks into native C APIs using Cython. Built on Github CI for Windows. | -| [gmic-py][] | ![gmic-py stars][] | | -| [creme][] | ![creme stars][] | | -| [PyAV][] | ![PyAV stars][] | | +| [websockets][] | ![websockets stars][] | | | [aiortc][] | ![aiortc stars][] | | | [aioquic][] | ![aioquic stars][] | | -| [pikepdf][] | ![pikepdf stars][] | | -| [fathon][] | ![fathon stars][] | | -| [etebase-py][] | ![etebase-py stars][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed, built on Travis CI. | -| [xmlstarlet][] | ![xmlstarlet stars][] | Python 3.6+ CFFI bindings with true MSVC build and GitHub Actions. | -| [bx-python][] | ![bx-python stars][] | A library that includes Cython extensions, built on Travis CI for Mac and Linux. | | [coverage.py][] | ![coverage.py stars][] | The coverage tool for Python. | +| [PyAV][] | ![PyAV stars][] | | +| [creme][] | ![creme stars][] | | +| [AutoPy][] | ![AutoPy stars][] | | +| [pikepdf][] | ![pikepdf stars][] | | +| [Parselmouth][] | ![Parselmouth stars][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels; all platforms built on Github Actions. | +| [KDEpy][] | ![KDEpy stars][] | | +| [bx-python][] | ![bx-python stars][] | A library that includes Cython extensions, built on Travis CI for Mac and Linux. | +| [pybase64][] | ![pybase64 stars][] | | +| [TgCrypto][] | ![TgCrypto stars][] | | +| [etebase-py][] | ![etebase-py stars][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed, built on Travis CI. | +| [gmic-py][] | ![gmic-py stars][] | | +| [fathon][] | ![fathon stars][] | | +| [pyinstrument_cext][] | ![pyinstrument_cext stars][] | A simple C extension, without external dependencies, built on Travis CI/Appveyor. | +| [python-admesh][] | ![python-admesh stars][] | | +| [xmlstarlet][] | ![xmlstarlet stars][] | Python 3.6+ CFFI bindings with true MSVC build and GitHub Actions. | +| [apriltags2-ethz][] | ![apriltags2-ethz stars][] | | + [Matplotlib]: https://github.com/matplotlib/matplotlib [pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext From abbe91cf86e4ef38118fb2f7277299ba260442db Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Fri, 4 Dec 2020 12:08:23 -0500 Subject: [PATCH 03/20] feat: generator --- bin/projects.py | 101 +++++++++++++++++++++++++++++++++++++++++++ bin/projects.yml | 93 +++++++++++++++++++++++++++++++++++++++ requirements-dev.txt | 1 + 3 files changed, 195 insertions(+) create mode 100755 bin/projects.py create mode 100644 bin/projects.yml diff --git a/bin/projects.py b/bin/projects.py new file mode 100755 index 00000000..8be4f4ce --- /dev/null +++ b/bin/projects.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 + +import json +from typing import Dict, Any, List + +import click +import requests +import yaml + + +def get_info(gh: str) -> Dict[str, Any]: + url = f"https://api.github.com/repos/{gh}" + req = requests.get(url) + return json.loads(req.content) + + +class Project: + NAME: int = 0 + STARS: int = 0 + NOTES: int = 5 + + def __init__(self, config: Dict[str, Any]): + self.name: str = config["name"] + self.gh: str = config["gh"] + self.stars_repo: str = config.get("stars", self.gh) + self.notes: str = config.get("notes", "") + self.ci: List[str] = config.get("ci", []) + self.os: List[str] = config.get("os", []) + + info = get_info(self.stars_repo) + self.num_stars = info["stargazers_count"] + + name_len = len(self.name) + 4 + stars_len = name_len + 6 + + self.__class__.NAME = max(self.__class__.NAME, name_len) + self.__class__.STARS = max(self.__class__.STARS, stars_len) + + def __lt__(self, other: "Project") -> bool: + return self.num_stars < other.num_stars + + @classmethod + def header(cls): + return ( + f"| {'Name':{cls.NAME}} | {'Stars':{cls.STARS}} | {'Notes':{cls.NOTES}} |\n" + f"|{'':-^{cls.NAME+2}}|{'':-^{cls.STARS+2}}|:{'':-^{cls.NOTES+1}}|" + ) + + @property + def namelink(self) -> str: + return f"[{self.name}][]" + + @property + def starslink(self) -> str: + return f"[{self.name} stars][]" + + @property + def url(self) -> str: + return f"https://github.com/{self.gh}" + + @property + def starsimg(self) -> str: + return f"https://img.shields.io/github/stars/{self.gh}label=%20&style=social" + + def table_row(self) -> str: + return f"| {self.namelink: <{self.NAME}} | {self.starslink: <{self.STARS}} | {self.notes: <{self.NOTES}} |" + + def links(self) -> str: + return f"[{self.name}]: {self.url}\n" f"[{self.name} stars]: {self.starsimg}" + + def info(self) -> str: + return f"" + + +def print_projects(config: List[Dict[str, Any]], *, debug: bool = False) -> None: + projects = sorted((Project(item) for item in config), reverse=True) + + print(Project.header()) + for project in projects: + print(project.table_row()) + + print() + for project in projects: + print(project.links()) + + if debug: + print() + for project in projects: + print(project.info()) + + +@click.command() +@click.argument("input", type=click.File("r")) +@click.option("--debug/--no-debug") +def projects(input, debug): + config = yaml.safe_load(input) + print_projects(config, debug=debug) + + +if __name__ == "__main__": + projects() diff --git a/bin/projects.yml b/bin/projects.yml new file mode 100644 index 00000000..73127f93 --- /dev/null +++ b/bin/projects.yml @@ -0,0 +1,93 @@ +# Fields: +# name: required, printed name +# gh: Github repo (eventually a url: could be added for non-github projects) +# stars: Github repo (optional, if different from package, such as for Twisted) +# os: Operating system list, [windows, macos, linux] (optional) +# ci: [appveyor, github, azure-pipelines, circleci, gitlab, travisci] (optional) +# notes: (text, optional) + +- name: Matplotlib + gh: matplotlib/matplotlib + notes: The venerable Matplotlib, a Python library with C++ portions + ci: [github] + os: [windows, macos, linux] + +- name: pyinstrument_cext + gh: joerick/pyinstrument_cext + ci: [travisci, appveyor] + notes: A simple C extension, without external dependencies + +- name: websockets + gh: aaugustin/websockets + +- name: Parselmouth + gh: YannickJadoul/Parselmouth + notes: A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. + ci: [github] + os: [windows, macos, linux] + +- name: python-admesh + gh: admesh/python-admesh + +- name: pybase64 + gh: mayeut/pybase64 + +- name: KDEpy + gh: tommyod/KDEpy + +- name: AutoPy + gh: autopilot-rs/autopy + +- name: apriltags2-ethz + gh: safijari/apriltags2_ethz + +- name: TgCrypto + gh: pyrogram/tgcrypto + +- name: twisted-iocpsupport + gh: twisted/twisted-iocpsupport + stars: twisted/twisted + notes: A submodule of Twisted that hooks into native C APIs using Cython. + ci: [github] + os: [windows] + +- name: gmic-py + gh: dtschump/gmic-py + +- name: creme + gh: creme-ml/creme + +- name: PyAV + gh: PyAV-Org/PyAV + +- name: aiortc + gh: aiortc/aiortc + +- name: aioquic + gh: aiortc/aioquic + +- name: pikepdf + gh: pikepdf/pikepdf + +- name: fathon + gh: stfbnc/fathon + +- name: etebase-py + gh: etesync/etebase-py + notes: Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. + ci: [travisci] + +- name: xmlstarlet + gh: dimitern/xmlstarlet + notes: Python 3.6+ CFFI bindings with true MSVC build. + ci: [github] + +- name: bx-python + gh: bxlab/bx-python + notes: A library that includes Cython extensions. + ci: [travisci] + os: [macos, linux] + +- name: coverage.py + gh: nedbat/coveragepy + notes: The coverage tool for Python diff --git a/requirements-dev.txt b/requirements-dev.txt index e6129684..a4417881 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -7,4 +7,5 @@ pip-tools requests click mypy +pyyaml typing-extensions From bf011b51f97c45b2b8c3867da90623169d441f29 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Fri, 4 Dec 2020 12:58:27 -0500 Subject: [PATCH 04/20] feat: CI info --- README.md | 187 +++++++++++++++++++++++++---------------------- bin/projects.py | 56 +++++++++----- bin/projects.yml | 8 +- 3 files changed, 141 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index 236cfe8d..51b643c6 100644 --- a/README.md +++ b/README.md @@ -105,103 +105,114 @@ For more information, including how to build on GitHub Actions, Appveyor, Azure Options ------- -| | Option | Description | -|---|--------|-------------| -| **Build selection** | [`CIBW_PLATFORM`](https://cibuildwheel.readthedocs.io/en/stable/options/#platform) | Override the auto-detected target platform | -| | [`CIBW_BUILD`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip)
[`CIBW_SKIP`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip) | Choose the Python versions to build | -| **Build customization** | [`CIBW_ENVIRONMENT`](https://cibuildwheel.readthedocs.io/en/stable/options/#environment) | Set environment variables needed during the build | -| | [`CIBW_BEFORE_ALL`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-all) | Execute a shell command on the build system before any wheels are built. | -| | [`CIBW_BEFORE_BUILD`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-build) | Execute a shell command preparing each wheel's build | -| | [`CIBW_REPAIR_WHEEL_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#repair-wheel-command) | Execute a shell command to repair each (non-pure Python) built wheel | -| | [`CIBW_MANYLINUX_X86_64_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_I686_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_PYPY_X86_64_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_AARCH64_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_PPC64LE_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_S390X_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) | Specify alternative manylinux docker images | -| | [`CIBW_DEPENDENCY_VERSIONS`](https://cibuildwheel.readthedocs.io/en/stable/options/#dependency-versions) | Specify how cibuildwheel controls the versions of the tools it uses | -| **Testing** | [`CIBW_TEST_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-command) | Execute a shell command to test each built wheel | -| | [`CIBW_BEFORE_TEST`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-test) | Execute a shell command before testing each wheel | -| | [`CIBW_TEST_REQUIRES`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-requires) | Install Python dependencies before running the tests | -| | [`CIBW_TEST_EXTRAS`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-extras) | Install your wheel for testing using extras_require | -| **Other** | [`CIBW_BUILD_VERBOSITY`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-verbosity) | Increase/decrease the output of pip wheel | - - -Working examples ----------------- - -Here are some repos that use cibuildwheel. - - -| Name | Stars | Notes | -|-------------------------|--------------------------------|:------| -| [Matplotlib][] | ![Matplotlib stars][] | The venerable Matplotlib, a Python library with C++ portions, built for Linux, Mac, and Windows on Github Actions. | -| [twisted-iocpsupport][] | ![twisted-iocpsupport stars][] | A submodule of Twisted that hooks into native C APIs using Cython. Built on Github CI for Windows. | -| [websockets][] | ![websockets stars][] | | -| [aiortc][] | ![aiortc stars][] | | -| [aioquic][] | ![aioquic stars][] | | -| [coverage.py][] | ![coverage.py stars][] | The coverage tool for Python. | -| [PyAV][] | ![PyAV stars][] | | -| [creme][] | ![creme stars][] | | -| [AutoPy][] | ![AutoPy stars][] | | -| [pikepdf][] | ![pikepdf stars][] | | -| [Parselmouth][] | ![Parselmouth stars][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels; all platforms built on Github Actions. | -| [KDEpy][] | ![KDEpy stars][] | | -| [bx-python][] | ![bx-python stars][] | A library that includes Cython extensions, built on Travis CI for Mac and Linux. | -| [pybase64][] | ![pybase64 stars][] | | -| [TgCrypto][] | ![TgCrypto stars][] | | -| [etebase-py][] | ![etebase-py stars][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed, built on Travis CI. | -| [gmic-py][] | ![gmic-py stars][] | | -| [fathon][] | ![fathon stars][] | | -| [pyinstrument_cext][] | ![pyinstrument_cext stars][] | A simple C extension, without external dependencies, built on Travis CI/Appveyor. | -| [python-admesh][] | ![python-admesh stars][] | | -| [xmlstarlet][] | ![xmlstarlet stars][] | Python 3.6+ CFFI bindings with true MSVC build and GitHub Actions. | -| [apriltags2-ethz][] | ![apriltags2-ethz stars][] | | + +| Name | Stars  | CI | OS | Notes | +|-------------------------|-------|----|----|:------| +| [Matplotlib][] | ![Matplotlib stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions | +| [twisted-iocpsupport][] | ![twisted-iocpsupport stars][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. | +| [websockets][] | ![websockets stars][] | | | | +| [aiortc][] | ![aiortc stars][] | | | | +| [coverage.py][] | ![coverage.py stars][] | | | The coverage tool for Python | +| [creme][] | ![creme stars][] | | | | +| [PyAV][] | ![PyAV stars][] | | | | +| [aioquic][] | ![aioquic stars][] | | | | +| [AutoPy][] | ![AutoPy stars][] | | | | +| [pikepdf][] | ![pikepdf stars][] | | | | +| [Parselmouth][] | ![Parselmouth stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. | +| [KDEpy][] | ![KDEpy stars][] | | | | +| [bx-python][] | ![bx-python stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | +| [pybase64][] | ![pybase64 stars][] | | | | +| [TgCrypto][] | ![TgCrypto stars][] | | | | +| [etebase-py][] | ![etebase-py stars][] | ![travisci icon][] | | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | +| [gmic-py][] | ![gmic-py stars][] | | | | +| [fathon][] | ![fathon stars][] | | | | +| [pyinstrument_cext][] | ![pyinstrument_cext stars][] | ![travisci icon][] ![appveyor icon][] | | A simple C extension, without external dependencies | +| [python-admesh][] | ![python-admesh stars][] | | | | +| [xmlstarlet][] | ![xmlstarlet stars][] | ![github icon][] | | Python 3.6+ CFFI bindings with true MSVC build. | +| [apriltags2-ethz][] | ![apriltags2-ethz stars][] | | | | [Matplotlib]: https://github.com/matplotlib/matplotlib -[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext -[websockets]: https://github.com/aaugustin/websockets -[Parselmouth]: https://github.com/YannickJadoul/Parselmouth -[python-admesh]: https://github.com/admesh/python-admesh -[pybase64]: https://github.com/mayeut/pybase64 -[KDEpy]: https://github.com/tommyod/KDEpy -[AutoPy]: https://github.com/autopilot-rs/autopy -[apriltags2-ethz]: https://github.com/safijari/apriltags2_ethz -[TgCrypto]: https://github.com/pyrogram/tgcrypto +[Matplotlib stars]: https://img.shields.io/github/stars/matplotlib/matplotlib?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport -[gmic-py]: https://github.com/dtschump/gmic-py -[creme]: https://github.com/creme-ml/creme -[PyAV]: https://github.com/PyAV-Org/PyAV +[twisted-iocpsupport stars]: https://img.shields.io/github/stars/twisted/twisted?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[websockets]: https://github.com/aaugustin/websockets +[websockets stars]: https://img.shields.io/github/stars/aaugustin/websockets?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [aiortc]: https://github.com/aiortc/aiortc -[aioquic]: https://github.com/aiortc/aioquic -[pikepdf]: https://github.com/pikepdf/pikepdf -[fathon]: https://github.com/stfbnc/fathon -[etebase-py]: https://github.com/etesync/etebase-py -[xmlstarlet]: https://github.com/dimitern/xmlstarlet -[bx-python]: https://github.com/bxlab/bx-python +[aiortc stars]: https://img.shields.io/github/stars/aiortc/aiortc?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [coverage.py]: https://github.com/nedbat/coveragepy +[coverage.py stars]: https://img.shields.io/github/stars/nedbat/coveragepy?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[creme]: https://github.com/creme-ml/creme +[creme stars]: https://img.shields.io/github/stars/creme-ml/creme?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[PyAV]: https://github.com/PyAV-Org/PyAV +[PyAV stars]: https://img.shields.io/github/stars/PyAV-Org/PyAV?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[aioquic]: https://github.com/aiortc/aioquic +[aioquic stars]: https://img.shields.io/github/stars/aiortc/aioquic?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[AutoPy]: https://github.com/autopilot-rs/autopy +[AutoPy stars]: https://img.shields.io/github/stars/autopilot-rs/autopy?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[pikepdf]: https://github.com/pikepdf/pikepdf +[pikepdf stars]: https://img.shields.io/github/stars/pikepdf/pikepdf?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[Parselmouth]: https://github.com/YannickJadoul/Parselmouth +[Parselmouth stars]: https://img.shields.io/github/stars/YannickJadoul/Parselmouth?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[KDEpy]: https://github.com/tommyod/KDEpy +[KDEpy stars]: https://img.shields.io/github/stars/tommyod/KDEpy?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[bx-python]: https://github.com/bxlab/bx-python +[bx-python stars]: https://img.shields.io/github/stars/bxlab/bx-python?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[pybase64]: https://github.com/mayeut/pybase64 +[pybase64 stars]: https://img.shields.io/github/stars/mayeut/pybase64?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[TgCrypto]: https://github.com/pyrogram/tgcrypto +[TgCrypto stars]: https://img.shields.io/github/stars/pyrogram/tgcrypto?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[etebase-py]: https://github.com/etesync/etebase-py +[etebase-py stars]: https://img.shields.io/github/stars/etesync/etebase-py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[gmic-py]: https://github.com/dtschump/gmic-py +[gmic-py stars]: https://img.shields.io/github/stars/dtschump/gmic-py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[fathon]: https://github.com/stfbnc/fathon +[fathon stars]: https://img.shields.io/github/stars/stfbnc/fathon?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext +[pyinstrument_cext stars]: https://img.shields.io/github/stars/joerick/pyinstrument_cext?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[python-admesh]: https://github.com/admesh/python-admesh +[python-admesh stars]: https://img.shields.io/github/stars/admesh/python-admesh?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[xmlstarlet]: https://github.com/dimitern/xmlstarlet +[xmlstarlet stars]: https://img.shields.io/github/stars/dimitern/xmlstarlet?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[apriltags2-ethz]: https://github.com/safijari/apriltags2_ethz +[apriltags2-ethz stars]: https://img.shields.io/github/stars/safijari/apriltags2_ethz?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square -[Matplotlib stars]: https://img.shields.io/github/stars/matplotlib/matplotlib?label=%20&style=social -[pyinstrument_cext stars]: https://img.shields.io/github/stars/joerick/pyinstrument_cext?label=%20&style=social -[websockets stars]: https://img.shields.io/github/stars/aaugustin/websockets?label=%20&style=social -[Parselmouth stars]: https://img.shields.io/github/stars/YannickJadoul/Parselmouth?label=%20&style=social -[python-admesh stars]: https://img.shields.io/github/stars/admesh/python-admesh?label=%20&style=social -[pybase64 stars]: https://img.shields.io/github/stars/mayeut/pybase64?label=%20&style=social -[KDEpy stars]: https://img.shields.io/github/stars/tommyod/KDEpy?label=%20&style=social -[AutoPy stars]: https://img.shields.io/github/stars/autopilot-rs/autopy?label=%20&style=social -[apriltags2-ethz stars]: https://img.shields.io/github/stars/safijari/apriltags2_ethz?label=%20&style=social -[TgCrypto stars]: https://img.shields.io/github/stars/pyrogram/tgcrypto?label=%20&style=social -[twisted-iocpsupport stars]: https://img.shields.io/github/stars/twisted/twisted?label=%20&style=social -[gmic-py stars]: https://img.shields.io/github/stars/dtschump/gmic-py?label=%20&style=social -[creme stars]: https://img.shields.io/github/stars/creme-ml/creme?label=%20&style=social -[PyAV stars]: https://img.shields.io/github/stars/PyAV-Org/PyAV?label=%20&style=social -[aiortc stars]: https://img.shields.io/github/stars/aiortc/aiortc?label=%20&style=social -[aioquic stars]: https://img.shields.io/github/stars/aiortc/aioquic?label=%20&style=social -[pikepdf stars]: https://img.shields.io/github/stars/pikepdf/pikepdf?label=%20&style=social -[fathon stars]: https://img.shields.io/github/stars/stfbnc/fathon?label=%20&style=social -[etebase-py stars]: https://img.shields.io/github/stars/etesync/etebase-py?label=%20&style=social -[xmlstarlet stars]: https://img.shields.io/github/stars/dimitern/xmlstarlet?label=%20&style=social -[bx-python stars]: https://img.shields.io/github/stars/bxlab/bx-python?label=%20&style=social -[coverage.py stars]: https://img.shields.io/github/stars/nedbat/coveragepy?label=%20&style=social +[apple icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/apple.svg +[linux icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/linux.svg +[windows icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/windows.svg +[travisci icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/travisci.svg +[appveyor icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/appveyor.svg +[circleci icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/circleci.svg +[github icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/github.svg +[azure-pipelines icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/azure-pipelines.svg +[gitlab icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/gitlab.svg + + + + + + + + + + + + + + + + + + + + + + -> Add your repo here! Send a PR. + + +> Add your repo here! Send a PR, adding your information to `bin/projects.yml`. > > I'd like to include notes here to indicate why an example might be interesting to cibuildwheel users - the styles/technologies/techniques used in each. Please include that in future additions! diff --git a/bin/projects.py b/bin/projects.py index 8be4f4ce..7e3a0167 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -2,6 +2,7 @@ import json from typing import Dict, Any, List +from datetime import datetime import click import requests @@ -16,8 +17,7 @@ def get_info(gh: str) -> Dict[str, Any]: class Project: NAME: int = 0 - STARS: int = 0 - NOTES: int = 5 + ONLINE: bool = True def __init__(self, config: Dict[str, Any]): self.name: str = config["name"] @@ -27,23 +27,28 @@ class Project: self.ci: List[str] = config.get("ci", []) self.os: List[str] = config.get("os", []) - info = get_info(self.stars_repo) - self.num_stars = info["stargazers_count"] + if self.ONLINE: + info = get_info(self.stars_repo) + self.num_stars = info["stargazers_count"] + self.pushed_at = datetime.strptime(info["pushed_at"], "%Y-%m-%dT%H:%M:%SZ") + else: + self.num_stars = 0 + self.pushed_at = datetime.utcnow() name_len = len(self.name) + 4 - stars_len = name_len + 6 - self.__class__.NAME = max(self.__class__.NAME, name_len) - self.__class__.STARS = max(self.__class__.STARS, stars_len) def __lt__(self, other: "Project") -> bool: - return self.num_stars < other.num_stars + if self.ONLINE: + return self.num_stars < other.num_stars + else: + return self.name < other.name @classmethod def header(cls): return ( - f"| {'Name':{cls.NAME}} | {'Stars':{cls.STARS}} | {'Notes':{cls.NOTES}} |\n" - f"|{'':-^{cls.NAME+2}}|{'':-^{cls.STARS+2}}|:{'':-^{cls.NOTES+1}}|" + f"| {'Name':{cls.NAME}} | Stars  | CI | OS | Notes |\n" + f"|{'':-^{cls.NAME+2 }}|-------|----|----|:------|" ) @property @@ -52,28 +57,38 @@ class Project: @property def starslink(self) -> str: - return f"[{self.name} stars][]" + return f"![{self.name} stars][]" @property def url(self) -> str: return f"https://github.com/{self.gh}" + @property + def ci_icons(self) -> str: + return " ".join(f"![{icon} icon][]" for icon in self.ci) + + @property + def os_icons(self) -> str: + return " ".join(f"![{icon} icon][]" for icon in self.os) + @property def starsimg(self) -> str: - return f"https://img.shields.io/github/stars/{self.gh}label=%20&style=social" + return f"https://img.shields.io/github/stars/{self.stars_repo}?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square" def table_row(self) -> str: - return f"| {self.namelink: <{self.NAME}} | {self.starslink: <{self.STARS}} | {self.notes: <{self.NOTES}} |" + return f"| {self.namelink: <{self.NAME}} | {self.starslink} | {self.ci_icons} | {self.os_icons} | {self.notes} |" def links(self) -> str: return f"[{self.name}]: {self.url}\n" f"[{self.name} stars]: {self.starsimg}" def info(self) -> str: - return f"" + days = (datetime.utcnow() - self.pushed_at).days + return f"" -def print_projects(config: List[Dict[str, Any]], *, debug: bool = False) -> None: - projects = sorted((Project(item) for item in config), reverse=True) +def print_projects(config: List[Dict[str, Any]], *, debug: bool = False, online: bool = True) -> None: + Project.ONLINE = online + projects = sorted((Project(item) for item in config), reverse=online) print(Project.header()) for project in projects: @@ -83,6 +98,10 @@ def print_projects(config: List[Dict[str, Any]], *, debug: bool = False) -> None for project in projects: print(project.links()) + print() + for icon in {"appveyor", "github", "azure-pipelines", "circleci", "gitlab", "travisci", "windows", "apple", "linux"}: + print(f"[{icon} icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/{icon}.svg") + if debug: print() for project in projects: @@ -92,9 +111,10 @@ def print_projects(config: List[Dict[str, Any]], *, debug: bool = False) -> None @click.command() @click.argument("input", type=click.File("r")) @click.option("--debug/--no-debug") -def projects(input, debug): +@click.option("--online/--no-online", default=True) +def projects(input: click.File, debug: bool, online: bool) -> None: config = yaml.safe_load(input) - print_projects(config, debug=debug) + print_projects(config, debug=debug, online=online) if __name__ == "__main__": diff --git a/bin/projects.yml b/bin/projects.yml index 73127f93..bd3ed957 100644 --- a/bin/projects.yml +++ b/bin/projects.yml @@ -2,7 +2,7 @@ # name: required, printed name # gh: Github repo (eventually a url: could be added for non-github projects) # stars: Github repo (optional, if different from package, such as for Twisted) -# os: Operating system list, [windows, macos, linux] (optional) +# os: Operating system list, [windows, apple, linux] (optional) # ci: [appveyor, github, azure-pipelines, circleci, gitlab, travisci] (optional) # notes: (text, optional) @@ -10,7 +10,7 @@ gh: matplotlib/matplotlib notes: The venerable Matplotlib, a Python library with C++ portions ci: [github] - os: [windows, macos, linux] + os: [windows, apple, linux] - name: pyinstrument_cext gh: joerick/pyinstrument_cext @@ -24,7 +24,7 @@ gh: YannickJadoul/Parselmouth notes: A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. ci: [github] - os: [windows, macos, linux] + os: [windows, apple, linux] - name: python-admesh gh: admesh/python-admesh @@ -86,7 +86,7 @@ gh: bxlab/bx-python notes: A library that includes Cython extensions. ci: [travisci] - os: [macos, linux] + os: [apple, linux] - name: coverage.py gh: nedbat/coveragepy From c166426b50e8eee68c1371297033af44f49aa5c4 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Fri, 4 Dec 2020 15:46:22 -0500 Subject: [PATCH 05/20] chore: update repos to add CI and plat, more --- bin/projects.py | 21 ++++++++-- bin/projects.yml | 106 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 121 insertions(+), 6 deletions(-) diff --git a/bin/projects.py b/bin/projects.py index 7e3a0167..e0deb0eb 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -20,8 +20,13 @@ class Project: ONLINE: bool = True def __init__(self, config: Dict[str, Any]): - self.name: str = config["name"] - self.gh: str = config["gh"] + try: + self.name: str = config["name"] + self.gh: str = config["gh"] + except KeyError: + print("Invalid config, needs at least gh and name!", config) + raise + self.stars_repo: str = config.get("stars", self.gh) self.notes: str = config.get("notes", "") self.ci: List[str] = config.get("ci", []) @@ -29,8 +34,16 @@ class Project: if self.ONLINE: info = get_info(self.stars_repo) - self.num_stars = info["stargazers_count"] - self.pushed_at = datetime.strptime(info["pushed_at"], "%Y-%m-%dT%H:%M:%SZ") + try: + self.num_stars = info["stargazers_count"] + self.pushed_at = datetime.strptime(info["pushed_at"], "%Y-%m-%dT%H:%M:%SZ") + if not self.notes: + notes = info["description"] + if notes: + self.notes = f":closed_book: {notes}" + except KeyError: + print("Invalid response from Github:", info) + raise else: self.num_stars = 0 self.pushed_at = datetime.utcnow() diff --git a/bin/projects.yml b/bin/projects.yml index bd3ed957..ed0cb416 100644 --- a/bin/projects.yml +++ b/bin/projects.yml @@ -15,10 +15,13 @@ - name: pyinstrument_cext gh: joerick/pyinstrument_cext ci: [travisci, appveyor] + os: [windows, apple, linux] notes: A simple C extension, without external dependencies - name: websockets gh: aaugustin/websockets + ci: [travicci] + os: [apple, linux] - name: Parselmouth gh: YannickJadoul/Parselmouth @@ -31,18 +34,30 @@ - name: pybase64 gh: mayeut/pybase64 + ci: [travicci, appveyor] + os: [windows, apple, linux] + - name: KDEpy gh: tommyod/KDEpy + ci: [github] + os: [windows, apple, linux] - name: AutoPy gh: autopilot-rs/autopy + ci: [travicci] + os: [windows, apple, linux] + notes: Includes a Windows Travis build. -- name: apriltags2-ethz - gh: safijari/apriltags2_ethz +# Seems to be defunct +# - name: apriltags2-ethz +# gh: safijari/apriltags2_ethz - name: TgCrypto gh: pyrogram/tgcrypto + ci: [travicci] + os: [windows, apple, linux] + notes: Includes a Windows Travis build. - name: twisted-iocpsupport gh: twisted/twisted-iocpsupport @@ -59,28 +74,42 @@ - name: PyAV gh: PyAV-Org/PyAV + ci: [github] + os: [windows, apple, linux] + notes: Pythonic bindings for FFmpeg's libraries. - name: aiortc gh: aiortc/aiortc + ci: [github] + os: [apple, linux] + notes: WebRTC and ORTC implementation for Python using asyncio. - name: aioquic gh: aiortc/aioquic + ci: [github] + os: [windows, apple, linux] - name: pikepdf gh: pikepdf/pikepdf + ci: [azure-pipelines] + os: [windows, apple, linux] - name: fathon gh: stfbnc/fathon + ci: [travisci] + os: [apple, linux] - name: etebase-py gh: etesync/etebase-py notes: Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. ci: [travisci] + os: [linux] - name: xmlstarlet gh: dimitern/xmlstarlet notes: Python 3.6+ CFFI bindings with true MSVC build. ci: [github] + os: [windows, apple, linux] - name: bx-python gh: bxlab/bx-python @@ -90,4 +119,77 @@ - name: coverage.py gh: nedbat/coveragepy + ci: [github] + os: [windows, apple, linux] notes: The coverage tool for Python + +- name: scikit-learn + gh: scikit-learn/scikit-learn + ci: [github] + os: [windows, apple, linux] + +- name: scikit-image + gh: scikit-image/scikit-image + ci: [github] + os: [windows, apple, linux] + +- name: google/neuroglancer + gh: google/neuroglancer + ci: [github] + os: [windows, apple, linux] + +- name: h5py + gh: h5py/h5py + ci: [azure-pipelines] + os: [windows, apple, linux] + +- name: pyzmq + gh: zeromq/pyzmq + ci: [github] + os: [windows, apple, linux] + +- name: python-rapidjson + gh: python-rapidjson/python-rapidjson + ci: [travisci, gitlab, appveyor] + os: [windows, linux] + +- name: jq.py + gh: mwilliamson/jq.py + ci: [travisci] + os: [apple, linux] + +- name: pybind11:python_example + gh: pybind/python_example + ci: [github] + os: [windows, apple, linux] + +- name: pybind11:cmake_example + gh: pybind/cmake_example + ci: [github] + os: [windows, apple, linux] + +- name: pybind11:scikit_build_example + gh: pybind/scikit_build_example + ci: [github] + os: [windows, apple, linux] + +- name: iminuit + gh: scikit-hep/iminuit + ci: [github] + os: [windows, apple, linux] + +- name: pyjet + gh: scikit-hep/pyjet + ci: [github] + os: [windows, apple, linux] + +- name: numpythia + gh: scikit-hep/numpythia + ci: [github] + os: [apple, linux] + +- name: boost-histogram + gh: scikit-hep/boost-histogram + ci: [github, travisci] + os: [windows, apple, linux] + notes: Supports full range of wheels, including PyPy and alternate archs. From b3bb527584eff1757c9e4fa090aa44ad8114a0f2 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Fri, 4 Dec 2020 16:21:09 -0500 Subject: [PATCH 06/20] feat: PyGithub and direct writing --- .pre-commit-config.yaml | 2 +- README.md | 5 +- bin/projects.py | 111 +++++++++++++++++++++++++++------------- bin/projects.yml | 5 +- requirements-dev.txt | 1 + 5 files changed, 83 insertions(+), 41 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a01336bf..1af3a9cc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,5 +21,5 @@ repos: rev: v0.782 hooks: - id: mypy - files: cibuildwheel/|test/ + files: ^(cibuildwheel/|test/|bin/projects.py) pass_filenames: false diff --git a/README.md b/README.md index 51b643c6..50d0e5ab 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ For more information, including how to build on GitHub Actions, Appveyor, Azure Options ------- - + | Name | Stars  | CI | OS | Notes | |-------------------------|-------|----|----|:------| @@ -210,7 +210,8 @@ Options - + + > Add your repo here! Send a PR, adding your information to `bin/projects.yml`. > diff --git a/bin/projects.py b/bin/projects.py index e0deb0eb..7b2fb7dc 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -1,25 +1,42 @@ #!/usr/bin/env python3 -import json -from typing import Dict, Any, List +""" +Convert a yaml project list into a nice table. + +Suggested usage: + + ./bin/projects.py bin/projects.yml --online --auth $GITHUB_API_TOKEN --readme README.md + git diff +""" + +import builtins +import functools from datetime import datetime +from io import StringIO +from typing import Dict, Any, List, Optional, TextIO import click -import requests import yaml +from github import Github -def get_info(gh: str) -> Dict[str, Any]: - url = f"https://api.github.com/repos/{gh}" - req = requests.get(url) - return json.loads(req.content) +ICONS = ( + "appveyor", + "github", + "azure-pipelines", + "circleci", + "gitlab", + "travisci", + "windows", + "apple", + "linux", +) class Project: NAME: int = 0 - ONLINE: bool = True - def __init__(self, config: Dict[str, Any]): + def __init__(self, config: Dict[str, Any], github: Optional[Github] = None): try: self.name: str = config["name"] self.gh: str = config["gh"] @@ -32,18 +49,15 @@ class Project: self.ci: List[str] = config.get("ci", []) self.os: List[str] = config.get("os", []) - if self.ONLINE: - info = get_info(self.stars_repo) - try: - self.num_stars = info["stargazers_count"] - self.pushed_at = datetime.strptime(info["pushed_at"], "%Y-%m-%dT%H:%M:%SZ") - if not self.notes: - notes = info["description"] - if notes: - self.notes = f":closed_book: {notes}" - except KeyError: - print("Invalid response from Github:", info) - raise + self.online = github is not None + if github is not None: + repo = github.get_repo(self.stars_repo) + self.num_stars = repo.stargazers_count + self.pushed_at = repo.pushed_at + if not self.notes: + notes = repo.description + if notes: + self.notes = f":closed_book: {notes}" else: self.num_stars = 0 self.pushed_at = datetime.utcnow() @@ -52,13 +66,13 @@ class Project: self.__class__.NAME = max(self.__class__.NAME, name_len) def __lt__(self, other: "Project") -> bool: - if self.ONLINE: + if self.online: return self.num_stars < other.num_stars else: return self.name < other.name @classmethod - def header(cls): + def header(cls) -> str: return ( f"| {'Name':{cls.NAME}} | Stars  | CI | OS | Notes |\n" f"|{'':-^{cls.NAME+2 }}|-------|----|----|:------|" @@ -99,9 +113,15 @@ class Project: return f"" -def print_projects(config: List[Dict[str, Any]], *, debug: bool = False, online: bool = True) -> None: - Project.ONLINE = online - projects = sorted((Project(item) for item in config), reverse=online) +def str_projects( + config: List[Dict[str, Any]], *, online: bool = True, auth: Optional[str] = None +) -> str: + io = StringIO() + print = functools.partial(builtins.print, file=io) + + github = Github(auth) if online else None + + projects = sorted((Project(item, github) for item in config), reverse=online) print(Project.header()) for project in projects: @@ -112,22 +132,41 @@ def print_projects(config: List[Dict[str, Any]], *, debug: bool = False, online: print(project.links()) print() - for icon in {"appveyor", "github", "azure-pipelines", "circleci", "gitlab", "travisci", "windows", "apple", "linux"}: - print(f"[{icon} icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/{icon}.svg") + for icon in ICONS: + print( + f"[{icon} icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/{icon}.svg" + ) - if debug: - print() - for project in projects: - print(project.info()) + print() + for project in projects: + print(project.info()) + + return io.getvalue() @click.command() @click.argument("input", type=click.File("r")) -@click.option("--debug/--no-debug") -@click.option("--online/--no-online", default=True) -def projects(input: click.File, debug: bool, online: bool) -> None: +@click.option("--online/--no-online", default=True, help="Get info from GitHub") +@click.option("--auth", help="GitHub authentication token") +@click.option("--readme", type=click.File("r+"), help="Modify a readme file if given") +def projects( + input: TextIO, online: bool, auth: Optional[str], readme: Optional[TextIO] +) -> None: config = yaml.safe_load(input) - print_projects(config, debug=debug, online=online) + output = str_projects(config, online=online, auth=auth) + + if readme is None: + print(output) + else: + text = readme.read() + start_str = "\n" + start = text.find(start_str) + end = text.find("\n") + new_text = f"{text[:start + len(start_str)]}\n{output}\n{text[end:]}" + + readme.seek(0) + readme.write(new_text) + readme.truncate() if __name__ == "__main__": diff --git a/bin/projects.yml b/bin/projects.yml index ed0cb416..42a954d3 100644 --- a/bin/projects.yml +++ b/bin/projects.yml @@ -29,8 +29,9 @@ ci: [github] os: [windows, apple, linux] -- name: python-admesh - gh: admesh/python-admesh +# Seems to be defunct +# - name: python-admesh +# gh: admesh/python-admesh - name: pybase64 gh: mayeut/pybase64 diff --git a/requirements-dev.txt b/requirements-dev.txt index a4417881..a7b0f124 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -8,4 +8,5 @@ requests click mypy pyyaml +pygithub typing-extensions From 3ac943b7540a94cfaa42810d2769d4cb531fd064 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Fri, 4 Dec 2020 16:44:04 -0500 Subject: [PATCH 07/20] chore: run bin/projects.py --- README.md | 137 +++++++++++++++++++++++++++++++---------------- bin/projects.py | 2 +- bin/projects.yml | 14 ++--- 3 files changed, 100 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 50d0e5ab..c0d0bff3 100644 --- a/README.md +++ b/README.md @@ -107,45 +107,67 @@ Options -| Name | Stars  | CI | OS | Notes | -|-------------------------|-------|----|----|:------| -| [Matplotlib][] | ![Matplotlib stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions | -| [twisted-iocpsupport][] | ![twisted-iocpsupport stars][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. | -| [websockets][] | ![websockets stars][] | | | | -| [aiortc][] | ![aiortc stars][] | | | | -| [coverage.py][] | ![coverage.py stars][] | | | The coverage tool for Python | -| [creme][] | ![creme stars][] | | | | -| [PyAV][] | ![PyAV stars][] | | | | -| [aioquic][] | ![aioquic stars][] | | | | -| [AutoPy][] | ![AutoPy stars][] | | | | -| [pikepdf][] | ![pikepdf stars][] | | | | -| [Parselmouth][] | ![Parselmouth stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. | -| [KDEpy][] | ![KDEpy stars][] | | | | -| [bx-python][] | ![bx-python stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | -| [pybase64][] | ![pybase64 stars][] | | | | -| [TgCrypto][] | ![TgCrypto stars][] | | | | -| [etebase-py][] | ![etebase-py stars][] | ![travisci icon][] | | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | -| [gmic-py][] | ![gmic-py stars][] | | | | -| [fathon][] | ![fathon stars][] | | | | -| [pyinstrument_cext][] | ![pyinstrument_cext stars][] | ![travisci icon][] ![appveyor icon][] | | A simple C extension, without external dependencies | -| [python-admesh][] | ![python-admesh stars][] | | | | -| [xmlstarlet][] | ![xmlstarlet stars][] | ![github icon][] | | Python 3.6+ CFFI bindings with true MSVC build. | -| [apriltags2-ethz][] | ![apriltags2-ethz stars][] | | | | +| Name | Stars  | CI | OS | Notes | +|-----------------------------------|-------|----|----|:------| +| [scikit-learn][] | ![scikit-learn stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: scikit-learn: machine learning in Python | +| [Matplotlib][] | ![Matplotlib stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions | +| [twisted-iocpsupport][] | ![twisted-iocpsupport stars][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. | +| [scikit-image][] | ![scikit-image stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Image processing in Python | +| [websockets][] | ![websockets stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Library for building WebSocket servers and clients in Python | +| [pyzmq][] | ![pyzmq stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: PyZMQ: Python bindings for zeromq | +| [aiortc][] | ![aiortc stars][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. | +| [h5py][] | ![h5py stars][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. | +| [coverage.py][] | ![coverage.py stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python | +| [creme][] | ![creme stars][] | | | :closed_book: 🌊 Online machine learning in Python | +| [PyAV][] | ![PyAV stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. | +| [google/neuroglancer][] | ![google/neuroglancer stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: WebGL-based viewer for volumetric data | +| [aioquic][] | ![aioquic stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: QUIC and HTTP/3 implementation in Python | +| [AutoPy][] | ![AutoPy stars][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | +| [pikepdf][] | ![pikepdf stars][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: A Python library for reading and writing PDF, powered by qpdf | +| [Parselmouth][] | ![Parselmouth stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. | +| [python-rapidjson][] | ![python-rapidjson stars][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | :closed_book: Python wrapper around rapidjson | +| [KDEpy][] | ![KDEpy stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Kernel Density Estimation in Python | +| [pybind11:python_example][] | ![pybind11:python_example stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Example pybind11 module built with a Python-based build system | +| [pybind11:cmake_example][] | ![pybind11:cmake_example stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Example pybind11 module built with a CMake-based build system | +| [iminuit][] | ![iminuit stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Jupyter-friendly Python interface for C++ MINUIT2 | +| [jq.py][] | ![jq.py stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Python bindings for jq | +| [bx-python][] | ![bx-python stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | +| [boost-histogram][] | ![boost-histogram stars][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. | +| [pybase64][] | ![pybase64 stars][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Fast Base64 encoding/decoding in Python | +| [TgCrypto][] | ![TgCrypto stars][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | +| [etebase-py][] | ![etebase-py stars][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | +| [pyjet][] | ![pyjet stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: The interface between FastJet and NumPy | +| [numpythia][] | ![numpythia stars][] | ![github icon][] | ![apple icon][] ![linux icon][] | :closed_book: The interface between PYTHIA and NumPy | +| [gmic-py][] | ![gmic-py stars][] | | | :closed_book: Python binding for the G'MIC Image Processing Framework | +| [fathon][] | ![fathon stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: python package for DFA (Detrended Fluctuation Analysis) and related algorithms | +| [pyinstrument_cext][] | ![pyinstrument_cext stars][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies | +| [xmlstarlet][] | ![xmlstarlet stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. | +| [pybind11:scikit_build_example][] | ![pybind11:scikit_build_example stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: An example combining scikit-build and pybind11 | +[scikit-learn]: https://github.com/scikit-learn/scikit-learn +[scikit-learn stars]: https://img.shields.io/github/stars/scikit-learn/scikit-learn?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [Matplotlib]: https://github.com/matplotlib/matplotlib [Matplotlib stars]: https://img.shields.io/github/stars/matplotlib/matplotlib?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport [twisted-iocpsupport stars]: https://img.shields.io/github/stars/twisted/twisted?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[scikit-image]: https://github.com/scikit-image/scikit-image +[scikit-image stars]: https://img.shields.io/github/stars/scikit-image/scikit-image?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [websockets]: https://github.com/aaugustin/websockets [websockets stars]: https://img.shields.io/github/stars/aaugustin/websockets?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[pyzmq]: https://github.com/zeromq/pyzmq +[pyzmq stars]: https://img.shields.io/github/stars/zeromq/pyzmq?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [aiortc]: https://github.com/aiortc/aiortc [aiortc stars]: https://img.shields.io/github/stars/aiortc/aiortc?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[h5py]: https://github.com/h5py/h5py +[h5py stars]: https://img.shields.io/github/stars/h5py/h5py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [coverage.py]: https://github.com/nedbat/coveragepy [coverage.py stars]: https://img.shields.io/github/stars/nedbat/coveragepy?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [creme]: https://github.com/creme-ml/creme [creme stars]: https://img.shields.io/github/stars/creme-ml/creme?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [PyAV]: https://github.com/PyAV-Org/PyAV [PyAV stars]: https://img.shields.io/github/stars/PyAV-Org/PyAV?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[google/neuroglancer]: https://github.com/google/neuroglancer +[google/neuroglancer stars]: https://img.shields.io/github/stars/google/neuroglancer?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [aioquic]: https://github.com/aiortc/aioquic [aioquic stars]: https://img.shields.io/github/stars/aiortc/aioquic?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [AutoPy]: https://github.com/autopilot-rs/autopy @@ -154,62 +176,87 @@ Options [pikepdf stars]: https://img.shields.io/github/stars/pikepdf/pikepdf?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [Parselmouth]: https://github.com/YannickJadoul/Parselmouth [Parselmouth stars]: https://img.shields.io/github/stars/YannickJadoul/Parselmouth?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson +[python-rapidjson stars]: https://img.shields.io/github/stars/python-rapidjson/python-rapidjson?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [KDEpy]: https://github.com/tommyod/KDEpy [KDEpy stars]: https://img.shields.io/github/stars/tommyod/KDEpy?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[pybind11:python_example]: https://github.com/pybind/python_example +[pybind11:python_example stars]: https://img.shields.io/github/stars/pybind/python_example?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[pybind11:cmake_example]: https://github.com/pybind/cmake_example +[pybind11:cmake_example stars]: https://img.shields.io/github/stars/pybind/cmake_example?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[iminuit]: https://github.com/scikit-hep/iminuit +[iminuit stars]: https://img.shields.io/github/stars/scikit-hep/iminuit?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[jq.py]: https://github.com/mwilliamson/jq.py +[jq.py stars]: https://img.shields.io/github/stars/mwilliamson/jq.py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [bx-python]: https://github.com/bxlab/bx-python [bx-python stars]: https://img.shields.io/github/stars/bxlab/bx-python?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[boost-histogram]: https://github.com/scikit-hep/boost-histogram +[boost-histogram stars]: https://img.shields.io/github/stars/scikit-hep/boost-histogram?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pybase64]: https://github.com/mayeut/pybase64 [pybase64 stars]: https://img.shields.io/github/stars/mayeut/pybase64?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [TgCrypto]: https://github.com/pyrogram/tgcrypto [TgCrypto stars]: https://img.shields.io/github/stars/pyrogram/tgcrypto?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [etebase-py]: https://github.com/etesync/etebase-py [etebase-py stars]: https://img.shields.io/github/stars/etesync/etebase-py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[pyjet]: https://github.com/scikit-hep/pyjet +[pyjet stars]: https://img.shields.io/github/stars/scikit-hep/pyjet?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[numpythia]: https://github.com/scikit-hep/numpythia +[numpythia stars]: https://img.shields.io/github/stars/scikit-hep/numpythia?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [gmic-py]: https://github.com/dtschump/gmic-py [gmic-py stars]: https://img.shields.io/github/stars/dtschump/gmic-py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [fathon]: https://github.com/stfbnc/fathon [fathon stars]: https://img.shields.io/github/stars/stfbnc/fathon?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext [pyinstrument_cext stars]: https://img.shields.io/github/stars/joerick/pyinstrument_cext?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square -[python-admesh]: https://github.com/admesh/python-admesh -[python-admesh stars]: https://img.shields.io/github/stars/admesh/python-admesh?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [xmlstarlet]: https://github.com/dimitern/xmlstarlet [xmlstarlet stars]: https://img.shields.io/github/stars/dimitern/xmlstarlet?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square -[apriltags2-ethz]: https://github.com/safijari/apriltags2_ethz -[apriltags2-ethz stars]: https://img.shields.io/github/stars/safijari/apriltags2_ethz?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[pybind11:scikit_build_example]: https://github.com/pybind/scikit_build_example +[pybind11:scikit_build_example stars]: https://img.shields.io/github/stars/pybind/scikit_build_example?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[appveyor icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/appveyor.svg +[github icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/github.svg +[azurepipelines icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/azurepipelines.svg +[circleci icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/circleci.svg +[gitlab icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/gitlab.svg +[travisci icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/travisci.svg +[windows icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/windows.svg [apple icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/apple.svg [linux icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/linux.svg -[windows icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/windows.svg -[travisci icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/travisci.svg -[appveyor icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/appveyor.svg -[circleci icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/circleci.svg -[github icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/github.svg -[azure-pipelines icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/azure-pipelines.svg -[gitlab icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/gitlab.svg + - - + + + + + - + + - + - - + + + + + + + + + + - - + - - + diff --git a/bin/projects.py b/bin/projects.py index 7b2fb7dc..0461caf1 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -23,7 +23,7 @@ from github import Github ICONS = ( "appveyor", "github", - "azure-pipelines", + "azurepipelines", "circleci", "gitlab", "travisci", diff --git a/bin/projects.yml b/bin/projects.yml index 42a954d3..f307daaf 100644 --- a/bin/projects.yml +++ b/bin/projects.yml @@ -3,7 +3,7 @@ # gh: Github repo (eventually a url: could be added for non-github projects) # stars: Github repo (optional, if different from package, such as for Twisted) # os: Operating system list, [windows, apple, linux] (optional) -# ci: [appveyor, github, azure-pipelines, circleci, gitlab, travisci] (optional) +# ci: [appveyor, github, azurepipelines, circleci, gitlab, travisci] (optional) # notes: (text, optional) - name: Matplotlib @@ -20,7 +20,7 @@ - name: websockets gh: aaugustin/websockets - ci: [travicci] + ci: [travisci] os: [apple, linux] - name: Parselmouth @@ -35,7 +35,7 @@ - name: pybase64 gh: mayeut/pybase64 - ci: [travicci, appveyor] + ci: [travisci, appveyor] os: [windows, apple, linux] @@ -46,7 +46,7 @@ - name: AutoPy gh: autopilot-rs/autopy - ci: [travicci] + ci: [travisci] os: [windows, apple, linux] notes: Includes a Windows Travis build. @@ -56,7 +56,7 @@ - name: TgCrypto gh: pyrogram/tgcrypto - ci: [travicci] + ci: [travisci] os: [windows, apple, linux] notes: Includes a Windows Travis build. @@ -92,7 +92,7 @@ - name: pikepdf gh: pikepdf/pikepdf - ci: [azure-pipelines] + ci: [azurepipelines] os: [windows, apple, linux] - name: fathon @@ -141,7 +141,7 @@ - name: h5py gh: h5py/h5py - ci: [azure-pipelines] + ci: [azurepipelines] os: [windows, apple, linux] - name: pyzmq From 9bfd0f79562d3b78be40a9e6d027db8814b1a1f1 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Mon, 7 Dec 2020 09:31:08 -0500 Subject: [PATCH 08/20] fix: drop stars, fix a few more projects --- README.md | 171 +++++++++++++++++++---------------------------- bin/projects.py | 12 ++-- bin/projects.yml | 11 +-- 3 files changed, 78 insertions(+), 116 deletions(-) diff --git a/README.md b/README.md index c0d0bff3..da69388e 100644 --- a/README.md +++ b/README.md @@ -107,111 +107,75 @@ Options -| Name | Stars  | CI | OS | Notes | -|-----------------------------------|-------|----|----|:------| -| [scikit-learn][] | ![scikit-learn stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: scikit-learn: machine learning in Python | -| [Matplotlib][] | ![Matplotlib stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions | -| [twisted-iocpsupport][] | ![twisted-iocpsupport stars][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. | -| [scikit-image][] | ![scikit-image stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Image processing in Python | -| [websockets][] | ![websockets stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Library for building WebSocket servers and clients in Python | -| [pyzmq][] | ![pyzmq stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: PyZMQ: Python bindings for zeromq | -| [aiortc][] | ![aiortc stars][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. | -| [h5py][] | ![h5py stars][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. | -| [coverage.py][] | ![coverage.py stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python | -| [creme][] | ![creme stars][] | | | :closed_book: 🌊 Online machine learning in Python | -| [PyAV][] | ![PyAV stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. | -| [google/neuroglancer][] | ![google/neuroglancer stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: WebGL-based viewer for volumetric data | -| [aioquic][] | ![aioquic stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: QUIC and HTTP/3 implementation in Python | -| [AutoPy][] | ![AutoPy stars][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | -| [pikepdf][] | ![pikepdf stars][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: A Python library for reading and writing PDF, powered by qpdf | -| [Parselmouth][] | ![Parselmouth stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. | -| [python-rapidjson][] | ![python-rapidjson stars][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | :closed_book: Python wrapper around rapidjson | -| [KDEpy][] | ![KDEpy stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Kernel Density Estimation in Python | -| [pybind11:python_example][] | ![pybind11:python_example stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Example pybind11 module built with a Python-based build system | -| [pybind11:cmake_example][] | ![pybind11:cmake_example stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Example pybind11 module built with a CMake-based build system | -| [iminuit][] | ![iminuit stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Jupyter-friendly Python interface for C++ MINUIT2 | -| [jq.py][] | ![jq.py stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Python bindings for jq | -| [bx-python][] | ![bx-python stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | -| [boost-histogram][] | ![boost-histogram stars][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. | -| [pybase64][] | ![pybase64 stars][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Fast Base64 encoding/decoding in Python | -| [TgCrypto][] | ![TgCrypto stars][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | -| [etebase-py][] | ![etebase-py stars][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | -| [pyjet][] | ![pyjet stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: The interface between FastJet and NumPy | -| [numpythia][] | ![numpythia stars][] | ![github icon][] | ![apple icon][] ![linux icon][] | :closed_book: The interface between PYTHIA and NumPy | -| [gmic-py][] | ![gmic-py stars][] | | | :closed_book: Python binding for the G'MIC Image Processing Framework | -| [fathon][] | ![fathon stars][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: python package for DFA (Detrended Fluctuation Analysis) and related algorithms | -| [pyinstrument_cext][] | ![pyinstrument_cext stars][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies | -| [xmlstarlet][] | ![xmlstarlet stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. | -| [pybind11:scikit_build_example][] | ![pybind11:scikit_build_example stars][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: An example combining scikit-build and pybind11 | +| Name | CI | OS | Notes | +|-----------------------------------|----|----|:------| +| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: scikit-learn: machine learning in Python | +| [Matplotlib][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions | +| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. | +| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Image processing in Python | +| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Library for building WebSocket servers and clients in Python | +| [pyzmq][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: PyZMQ: Python bindings for zeromq | +| [aiortc][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. | +| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. | +| [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python | +| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: 🌊 Online machine learning in Python | +| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. | +| [google/neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: WebGL-based viewer for volumetric data | +| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: QUIC and HTTP/3 implementation in Python | +| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | +| [pikepdf][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: A Python library for reading and writing PDF, powered by qpdf | +| [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. | +| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | :closed_book: Python wrapper around rapidjson | +| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Kernel Density Estimation in Python | +| [pybind11:python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Example pybind11 module built with a Python-based build system | +| [pybind11:cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Example pybind11 module built with a CMake-based build system | +| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Jupyter-friendly Python interface for C++ MINUIT2 | +| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Python bindings for jq | +| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | +| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. | +| [pybase64][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Fast Base64 encoding/decoding in Python | +| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | +| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | +| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: The interface between FastJet and NumPy | +| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | :closed_book: The interface between PYTHIA and NumPy | +| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: python package for DFA (Detrended Fluctuation Analysis) and related algorithms | +| [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies | +| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. | +| [pybind11:scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: An example combining scikit-build and pybind11 | [scikit-learn]: https://github.com/scikit-learn/scikit-learn -[scikit-learn stars]: https://img.shields.io/github/stars/scikit-learn/scikit-learn?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [Matplotlib]: https://github.com/matplotlib/matplotlib -[Matplotlib stars]: https://img.shields.io/github/stars/matplotlib/matplotlib?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport -[twisted-iocpsupport stars]: https://img.shields.io/github/stars/twisted/twisted?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [scikit-image]: https://github.com/scikit-image/scikit-image -[scikit-image stars]: https://img.shields.io/github/stars/scikit-image/scikit-image?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [websockets]: https://github.com/aaugustin/websockets -[websockets stars]: https://img.shields.io/github/stars/aaugustin/websockets?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pyzmq]: https://github.com/zeromq/pyzmq -[pyzmq stars]: https://img.shields.io/github/stars/zeromq/pyzmq?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [aiortc]: https://github.com/aiortc/aiortc -[aiortc stars]: https://img.shields.io/github/stars/aiortc/aiortc?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [h5py]: https://github.com/h5py/h5py -[h5py stars]: https://img.shields.io/github/stars/h5py/h5py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [coverage.py]: https://github.com/nedbat/coveragepy -[coverage.py stars]: https://img.shields.io/github/stars/nedbat/coveragepy?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square -[creme]: https://github.com/creme-ml/creme -[creme stars]: https://img.shields.io/github/stars/creme-ml/creme?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square +[River]: https://github.com/online-ml/river [PyAV]: https://github.com/PyAV-Org/PyAV -[PyAV stars]: https://img.shields.io/github/stars/PyAV-Org/PyAV?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [google/neuroglancer]: https://github.com/google/neuroglancer -[google/neuroglancer stars]: https://img.shields.io/github/stars/google/neuroglancer?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [aioquic]: https://github.com/aiortc/aioquic -[aioquic stars]: https://img.shields.io/github/stars/aiortc/aioquic?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [AutoPy]: https://github.com/autopilot-rs/autopy -[AutoPy stars]: https://img.shields.io/github/stars/autopilot-rs/autopy?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pikepdf]: https://github.com/pikepdf/pikepdf -[pikepdf stars]: https://img.shields.io/github/stars/pikepdf/pikepdf?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [Parselmouth]: https://github.com/YannickJadoul/Parselmouth -[Parselmouth stars]: https://img.shields.io/github/stars/YannickJadoul/Parselmouth?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson -[python-rapidjson stars]: https://img.shields.io/github/stars/python-rapidjson/python-rapidjson?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [KDEpy]: https://github.com/tommyod/KDEpy -[KDEpy stars]: https://img.shields.io/github/stars/tommyod/KDEpy?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pybind11:python_example]: https://github.com/pybind/python_example -[pybind11:python_example stars]: https://img.shields.io/github/stars/pybind/python_example?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pybind11:cmake_example]: https://github.com/pybind/cmake_example -[pybind11:cmake_example stars]: https://img.shields.io/github/stars/pybind/cmake_example?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [iminuit]: https://github.com/scikit-hep/iminuit -[iminuit stars]: https://img.shields.io/github/stars/scikit-hep/iminuit?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [jq.py]: https://github.com/mwilliamson/jq.py -[jq.py stars]: https://img.shields.io/github/stars/mwilliamson/jq.py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [bx-python]: https://github.com/bxlab/bx-python -[bx-python stars]: https://img.shields.io/github/stars/bxlab/bx-python?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [boost-histogram]: https://github.com/scikit-hep/boost-histogram -[boost-histogram stars]: https://img.shields.io/github/stars/scikit-hep/boost-histogram?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pybase64]: https://github.com/mayeut/pybase64 -[pybase64 stars]: https://img.shields.io/github/stars/mayeut/pybase64?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [TgCrypto]: https://github.com/pyrogram/tgcrypto -[TgCrypto stars]: https://img.shields.io/github/stars/pyrogram/tgcrypto?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [etebase-py]: https://github.com/etesync/etebase-py -[etebase-py stars]: https://img.shields.io/github/stars/etesync/etebase-py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pyjet]: https://github.com/scikit-hep/pyjet -[pyjet stars]: https://img.shields.io/github/stars/scikit-hep/pyjet?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [numpythia]: https://github.com/scikit-hep/numpythia -[numpythia stars]: https://img.shields.io/github/stars/scikit-hep/numpythia?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square -[gmic-py]: https://github.com/dtschump/gmic-py -[gmic-py stars]: https://img.shields.io/github/stars/dtschump/gmic-py?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [fathon]: https://github.com/stfbnc/fathon -[fathon stars]: https://img.shields.io/github/stars/stfbnc/fathon?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext -[pyinstrument_cext stars]: https://img.shields.io/github/stars/joerick/pyinstrument_cext?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [xmlstarlet]: https://github.com/dimitern/xmlstarlet -[xmlstarlet stars]: https://img.shields.io/github/stars/dimitern/xmlstarlet?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [pybind11:scikit_build_example]: https://github.com/pybind/scikit_build_example -[pybind11:scikit_build_example stars]: https://img.shields.io/github/stars/pybind/scikit_build_example?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square [appveyor icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/appveyor.svg [github icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/github.svg @@ -223,40 +187,39 @@ Options [apple icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/apple.svg [linux icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/linux.svg - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + diff --git a/bin/projects.py b/bin/projects.py index 0461caf1..2a229f76 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -74,8 +74,8 @@ class Project: @classmethod def header(cls) -> str: return ( - f"| {'Name':{cls.NAME}} | Stars  | CI | OS | Notes |\n" - f"|{'':-^{cls.NAME+2 }}|-------|----|----|:------|" + f"| {'Name':{cls.NAME}} | CI | OS | Notes |\n" + f"|{'':-^{cls.NAME+2 }}|----|----|:------|" ) @property @@ -98,15 +98,11 @@ class Project: def os_icons(self) -> str: return " ".join(f"![{icon} icon][]" for icon in self.os) - @property - def starsimg(self) -> str: - return f"https://img.shields.io/github/stars/{self.stars_repo}?color=rgba%28255%2C%20255%2C%20255%2C%200%29&label=%20&logo=reverbnation&logoColor=%23333&style=flat-square" - def table_row(self) -> str: - return f"| {self.namelink: <{self.NAME}} | {self.starslink} | {self.ci_icons} | {self.os_icons} | {self.notes} |" + return f"| {self.namelink: <{self.NAME}} | {self.ci_icons} | {self.os_icons} | {self.notes} |" def links(self) -> str: - return f"[{self.name}]: {self.url}\n" f"[{self.name} stars]: {self.starsimg}" + return f"[{self.name}]: {self.url}" def info(self) -> str: days = (datetime.utcnow() - self.pushed_at).days diff --git a/bin/projects.yml b/bin/projects.yml index f307daaf..770a45e6 100644 --- a/bin/projects.yml +++ b/bin/projects.yml @@ -67,11 +67,14 @@ ci: [github] os: [windows] -- name: gmic-py - gh: dtschump/gmic-py +# cibuildwheel moved to backup folder +# - name: gmic-py +# gh: myselfhimself/gmic-py -- name: creme - gh: creme-ml/creme +- name: River + gh: online-ml/river + ci: [github] + os: [windows, apple, linux] - name: PyAV gh: PyAV-Org/PyAV From 044a5dab37c375b608b43343bc2e02dc133fa8c7 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Tue, 8 Dec 2020 17:57:04 -0500 Subject: [PATCH 09/20] docs: pybase64 moved Co-authored-by: Matthieu Darbois --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index da69388e..39c3be8f 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ Options | [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Python bindings for jq | | [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | | [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. | -| [pybase64][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Fast Base64 encoding/decoding in Python | +| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Fast Base64 encoding/decoding in Python | | [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | | [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | | [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: The interface between FastJet and NumPy | From f9a5ec84d965c36fbe98ff158b53e27a37d15b41 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Tue, 8 Dec 2020 21:53:16 -0500 Subject: [PATCH 10/20] Update bin/projects.yml --- bin/projects.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/projects.yml b/bin/projects.yml index 770a45e6..55eb2366 100644 --- a/bin/projects.yml +++ b/bin/projects.yml @@ -35,7 +35,7 @@ - name: pybase64 gh: mayeut/pybase64 - ci: [travisci, appveyor] + ci: [github] os: [windows, apple, linux] From 677e51d13764e68f29ab81265be07564ea7bba41 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 12:15:47 +0000 Subject: [PATCH 11/20] Use spaces in project names to allow line breaks and keep column narrow --- bin/projects.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/projects.yml b/bin/projects.yml index 55eb2366..91d310c2 100644 --- a/bin/projects.yml +++ b/bin/projects.yml @@ -137,7 +137,7 @@ ci: [github] os: [windows, apple, linux] -- name: google/neuroglancer +- name: google neuroglancer gh: google/neuroglancer ci: [github] os: [windows, apple, linux] @@ -162,17 +162,17 @@ ci: [travisci] os: [apple, linux] -- name: pybind11:python_example +- name: pybind11 python_example gh: pybind/python_example ci: [github] os: [windows, apple, linux] -- name: pybind11:cmake_example +- name: pybind11 cmake_example gh: pybind/cmake_example ci: [github] os: [windows, apple, linux] -- name: pybind11:scikit_build_example +- name: pybind11 scikit_build_example gh: pybind/scikit_build_example ci: [github] os: [windows, apple, linux] From 78b6f86305cfa7477c6ce3045fafb1e30dc23faa Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 12:18:11 +0000 Subject: [PATCH 12/20] Add notes to the popular projects --- bin/projects.py | 3 ++- bin/projects.yml | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/bin/projects.py b/bin/projects.py index 2a229f76..965c74bb 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -99,7 +99,8 @@ class Project: return " ".join(f"![{icon} icon][]" for icon in self.os) def table_row(self) -> str: - return f"| {self.namelink: <{self.NAME}} | {self.ci_icons} | {self.os_icons} | {self.notes} |" + notes = self.notes.replace('\n', ' ') + return f"| {self.namelink: <{self.NAME}} | {self.ci_icons} | {self.os_icons} | {notes} |" def links(self) -> str: return f"[{self.name}]: {self.url}" diff --git a/bin/projects.yml b/bin/projects.yml index 91d310c2..366e96cd 100644 --- a/bin/projects.yml +++ b/bin/projects.yml @@ -21,7 +21,11 @@ - name: websockets gh: aaugustin/websockets ci: [travisci] + ci_config: .travis.yml os: [apple, linux] + notes: | + Library for building WebSocket servers and clients. Mostly written in + Python, with a small C 'speedups' extension module. - name: Parselmouth gh: YannickJadoul/Parselmouth @@ -131,11 +135,20 @@ gh: scikit-learn/scikit-learn ci: [github] os: [windows, apple, linux] + ci_config: .github/workflows/wheels.yml + notes: | + The machine learning library. A complex but clean config using many of + cibuildwheel's features to build a large project with Cython and C++ + extensions. - name: scikit-image gh: scikit-image/scikit-image ci: [github] os: [windows, apple, linux] + ci_config: .github/workflows/cibuildwheel.yml + notes: | + Image processing library. Uses cibuildwheel to build and test a project + that uses Cython with platform-native code. - name: google neuroglancer gh: google/neuroglancer @@ -151,6 +164,9 @@ gh: zeromq/pyzmq ci: [github] os: [windows, apple, linux] + ci_config: .github/workflows/wheels.yml + notes: | + Python bindings for zeromq, the networking library. Uses Cython and CFFI. - name: python-rapidjson gh: python-rapidjson/python-rapidjson From 5dd2f56eab415afe46e130bbe8da94908281b613 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 12:19:04 +0000 Subject: [PATCH 13/20] Remove the book emoji, seems a little distracting --- bin/projects.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/projects.py b/bin/projects.py index 965c74bb..87397057 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -56,8 +56,8 @@ class Project: self.pushed_at = repo.pushed_at if not self.notes: notes = repo.description - if notes: - self.notes = f":closed_book: {notes}" + if repo.description: + self.notes = notes else: self.num_stars = 0 self.pushed_at = datetime.utcnow() From 6974680571d194a73288c45c7d570b6115a8ee5b Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 12:28:20 +0000 Subject: [PATCH 14/20] Move projects.yml to docs/data --- {bin => docs/data}/projects.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {bin => docs/data}/projects.yml (100%) diff --git a/bin/projects.yml b/docs/data/projects.yml similarity index 100% rename from bin/projects.yml rename to docs/data/projects.yml From 4ac5feb6bbf9e4609377464c114d5d5330344090 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 12:38:01 +0000 Subject: [PATCH 15/20] Add note about generated content, update paths --- README.md | 8 +++++--- bin/projects.py | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 39c3be8f..e0fae8cf 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,9 @@ For more information, including how to build on GitHub Actions, Appveyor, Azure Options ------- - + + + | Name | CI | OS | Notes | |-----------------------------------|----|----|:------| @@ -221,9 +223,9 @@ Options - + -> Add your repo here! Send a PR, adding your information to `bin/projects.yml`. +> Add your repo here! Send a PR, adding your information to `docs/data/projects.yml`. > > I'd like to include notes here to indicate why an example might be interesting to cibuildwheel users - the styles/technologies/techniques used in each. Please include that in future additions! diff --git a/bin/projects.py b/bin/projects.py index 87397057..e478c6ae 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -156,10 +156,11 @@ def projects( print(output) else: text = readme.read() - start_str = "\n" + start_str = "\n" start = text.find(start_str) - end = text.find("\n") - new_text = f"{text[:start + len(start_str)]}\n{output}\n{text[end:]}" + end = text.find("\n") + generated_note = f'' + new_text = f"{text[:start + len(start_str)]}\n{generated_note}\n\n{output}\n{text[end:]}" readme.seek(0) readme.write(new_text) From 2e165c3e7afb434d9ecb4ad554601d8827df4a81 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 12:40:04 +0000 Subject: [PATCH 16/20] Add back the options section --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index e0fae8cf..b1b551f0 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,28 @@ For more information, including how to build on GitHub Actions, Appveyor, Azure Options ------- +| | Option | Description | +|---|--------|-------------| +| **Build selection** | [`CIBW_PLATFORM`](https://cibuildwheel.readthedocs.io/en/stable/options/#platform) | Override the auto-detected target platform | +| | [`CIBW_BUILD`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip)
[`CIBW_SKIP`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip) | Choose the Python versions to build | +| **Build customization** | [`CIBW_ENVIRONMENT`](https://cibuildwheel.readthedocs.io/en/stable/options/#environment) | Set environment variables needed during the build | +| | [`CIBW_BEFORE_ALL`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-all) | Execute a shell command on the build system before any wheels are built. | +| | [`CIBW_BEFORE_BUILD`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-build) | Execute a shell command preparing each wheel's build | +| | [`CIBW_REPAIR_WHEEL_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#repair-wheel-command) | Execute a shell command to repair each (non-pure Python) built wheel | +| | [`CIBW_MANYLINUX_X86_64_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_I686_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_PYPY_X86_64_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_AARCH64_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_PPC64LE_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
[`CIBW_MANYLINUX_S390X_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) | Specify alternative manylinux docker images | +| | [`CIBW_DEPENDENCY_VERSIONS`](https://cibuildwheel.readthedocs.io/en/stable/options/#dependency-versions) | Specify how cibuildwheel controls the versions of the tools it uses | +| **Testing** | [`CIBW_TEST_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-command) | Execute a shell command to test each built wheel | +| | [`CIBW_BEFORE_TEST`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-test) | Execute a shell command before testing each wheel | +| | [`CIBW_TEST_REQUIRES`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-requires) | Install Python dependencies before running the tests | +| | [`CIBW_TEST_EXTRAS`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-extras) | Install your wheel for testing using extras_require | +| **Other** | [`CIBW_BUILD_VERBOSITY`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-verbosity) | Increase/decrease the output of pip wheel | + + +Working examples +---------------- + +Here are some repos that use cibuildwheel. + From dbb65f94bd0a94d71b9349c2d8c625d6523615cb Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 12:42:30 +0000 Subject: [PATCH 17/20] Run script to update readme --- README.md | 114 +++++++++++++++++++++++++++--------------------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index b1b551f0..5bf61880 100644 --- a/README.md +++ b/README.md @@ -133,39 +133,39 @@ Here are some repos that use cibuildwheel. | Name | CI | OS | Notes | |-----------------------------------|----|----|:------| -| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: scikit-learn: machine learning in Python | +| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The machine learning library. A complex but clean config using many of cibuildwheel's features to build a large project with Cython and C++ extensions. | | [Matplotlib][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions | | [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. | -| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Image processing in Python | -| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Library for building WebSocket servers and clients in Python | -| [pyzmq][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: PyZMQ: Python bindings for zeromq | +| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. | +| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Library for building WebSocket servers and clients. Mostly written in Python, with a small C 'speedups' extension module. | +| [pyzmq][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython and CFFI. | | [aiortc][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. | -| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. | +| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. | | [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python | -| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: 🌊 Online machine learning in Python | +| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | 🌊 Online machine learning in Python | | [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. | -| [google/neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: WebGL-based viewer for volumetric data | -| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: QUIC and HTTP/3 implementation in Python | +| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data | +| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python | | [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | -| [pikepdf][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: A Python library for reading and writing PDF, powered by qpdf | +| [pikepdf][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python library for reading and writing PDF, powered by qpdf | | [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. | -| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | :closed_book: Python wrapper around rapidjson | -| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Kernel Density Estimation in Python | -| [pybind11:python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Example pybind11 module built with a Python-based build system | -| [pybind11:cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Example pybind11 module built with a CMake-based build system | -| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Jupyter-friendly Python interface for C++ MINUIT2 | -| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: Python bindings for jq | +| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson | +| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python | +| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system | +| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system | +| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 | +| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq | | [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | | [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. | -| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: Fast Base64 encoding/decoding in Python | +| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python | | [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | | [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | -| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: The interface between FastJet and NumPy | -| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | :closed_book: The interface between PYTHIA and NumPy | -| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | :closed_book: python package for DFA (Detrended Fluctuation Analysis) and related algorithms | +| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy | +| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy | +| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | | [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies | | [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. | -| [pybind11:scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | :closed_book: An example combining scikit-build and pybind11 | +| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | [scikit-learn]: https://github.com/scikit-learn/scikit-learn [Matplotlib]: https://github.com/matplotlib/matplotlib @@ -178,15 +178,15 @@ Here are some repos that use cibuildwheel. [coverage.py]: https://github.com/nedbat/coveragepy [River]: https://github.com/online-ml/river [PyAV]: https://github.com/PyAV-Org/PyAV -[google/neuroglancer]: https://github.com/google/neuroglancer +[google neuroglancer]: https://github.com/google/neuroglancer [aioquic]: https://github.com/aiortc/aioquic [AutoPy]: https://github.com/autopilot-rs/autopy [pikepdf]: https://github.com/pikepdf/pikepdf [Parselmouth]: https://github.com/YannickJadoul/Parselmouth [python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson [KDEpy]: https://github.com/tommyod/KDEpy -[pybind11:python_example]: https://github.com/pybind/python_example -[pybind11:cmake_example]: https://github.com/pybind/cmake_example +[pybind11 python_example]: https://github.com/pybind/python_example +[pybind11 cmake_example]: https://github.com/pybind/cmake_example [iminuit]: https://github.com/scikit-hep/iminuit [jq.py]: https://github.com/mwilliamson/jq.py [bx-python]: https://github.com/bxlab/bx-python @@ -199,7 +199,7 @@ Here are some repos that use cibuildwheel. [fathon]: https://github.com/stfbnc/fathon [pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext [xmlstarlet]: https://github.com/dimitern/xmlstarlet -[pybind11:scikit_build_example]: https://github.com/pybind/scikit_build_example +[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example [appveyor icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/appveyor.svg [github icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/github.svg @@ -211,39 +211,39 @@ Here are some repos that use cibuildwheel. [apple icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/apple.svg [linux icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/linux.svg - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 84a4b0518fae11660ea9146026968f0ef3a5f495 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 14:47:14 +0000 Subject: [PATCH 18/20] Add our own versions of the icons, generated from script --- .pre-commit-config.yaml | 2 +- README.md | 34 +++++++++++----------- bin/projects.py | 35 ++++++++++++++++++++--- docs/data/readme_icons/apple.svg | 1 + docs/data/readme_icons/appveyor.svg | 1 + docs/data/readme_icons/azurepipelines.svg | 1 + docs/data/readme_icons/circleci.svg | 1 + docs/data/readme_icons/github.svg | 1 + docs/data/readme_icons/gitlab.svg | 1 + docs/data/readme_icons/linux.svg | 1 + docs/data/readme_icons/travisci.svg | 1 + docs/data/readme_icons/windows.svg | 1 + 12 files changed, 58 insertions(+), 22 deletions(-) create mode 100644 docs/data/readme_icons/apple.svg create mode 100644 docs/data/readme_icons/appveyor.svg create mode 100644 docs/data/readme_icons/azurepipelines.svg create mode 100644 docs/data/readme_icons/circleci.svg create mode 100644 docs/data/readme_icons/github.svg create mode 100644 docs/data/readme_icons/gitlab.svg create mode 100644 docs/data/readme_icons/linux.svg create mode 100644 docs/data/readme_icons/travisci.svg create mode 100644 docs/data/readme_icons/windows.svg diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1af3a9cc..effe9037 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: check-merge-conflict - id: check-yaml - id: end-of-file-fixer - exclude: cibuildwheel/resources/pinned_docker_images.cfg + exclude: (cibuildwheel/resources/pinned_docker_images.cfg)|(.svg$) - id: mixed-line-ending - id: trailing-whitespace diff --git a/README.md b/README.md index 5bf61880..fcf76d11 100644 --- a/README.md +++ b/README.md @@ -201,29 +201,29 @@ Here are some repos that use cibuildwheel. [xmlstarlet]: https://github.com/dimitern/xmlstarlet [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example -[appveyor icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/appveyor.svg -[github icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/github.svg -[azurepipelines icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/azurepipelines.svg -[circleci icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/circleci.svg -[gitlab icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/gitlab.svg -[travisci icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/travisci.svg -[windows icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/windows.svg -[apple icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/apple.svg -[linux icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/linux.svg +[appveyor icon]: docs/data/readme_icons/appveyor.svg +[github icon]: docs/data/readme_icons/github.svg +[azurepipelines icon]: docs/data/readme_icons/azurepipelines.svg +[circleci icon]: docs/data/readme_icons/circleci.svg +[gitlab icon]: docs/data/readme_icons/gitlab.svg +[travisci icon]: docs/data/readme_icons/travisci.svg +[windows icon]: docs/data/readme_icons/windows.svg +[apple icon]: docs/data/readme_icons/apple.svg +[linux icon]: docs/data/readme_icons/linux.svg - + - + - - - + + + - + @@ -232,7 +232,7 @@ Here are some repos that use cibuildwheel. - + @@ -240,7 +240,7 @@ Here are some repos that use cibuildwheel. - + diff --git a/bin/projects.py b/bin/projects.py index e478c6ae..d64977d1 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -5,7 +5,7 @@ Convert a yaml project list into a nice table. Suggested usage: - ./bin/projects.py bin/projects.yml --online --auth $GITHUB_API_TOKEN --readme README.md + ./bin/projects.py docs/data/projects.yml --online --auth $GITHUB_API_TOKEN --readme README.md git diff """ @@ -18,6 +18,9 @@ from typing import Dict, Any, List, Optional, TextIO import click import yaml from github import Github +import urllib.request +import xml.dom.minidom +from pathlib import Path ICONS = ( @@ -110,12 +113,38 @@ class Project: return f"" +def fetch_icon(icon_name: str) -> None: + url = f'https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/{icon_name}.svg' + with urllib.request.urlopen(url) as f: + original_svg_data = f.read() + + document = xml.dom.minidom.parseString(original_svg_data) + svgElement = document.documentElement + assert svgElement.nodeName == 'svg' + svgElement.setAttribute('width', '16px') + svgElement.setAttribute('fill', '#606060') + + icon_path = path_for_icon(icon_name) + icon_path.parent.mkdir(parents=True, exist_ok=True) + + with open(path_for_icon(icon_name), 'w') as f: + f.write(svgElement.toxml()) + + +def path_for_icon(icon_name: str) -> Path: + return Path('.') / 'docs' / 'data' / 'readme_icons' / f'{icon_name}.svg' + + def str_projects( config: List[Dict[str, Any]], *, online: bool = True, auth: Optional[str] = None ) -> str: io = StringIO() print = functools.partial(builtins.print, file=io) + if online: + for icon in ICONS: + fetch_icon(icon) + github = Github(auth) if online else None projects = sorted((Project(item, github) for item in config), reverse=online) @@ -130,9 +159,7 @@ def str_projects( print() for icon in ICONS: - print( - f"[{icon} icon]: https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/{icon}.svg" - ) + print(f"[{icon} icon]: {path_for_icon(icon).as_posix()}") print() for project in projects: diff --git a/docs/data/readme_icons/apple.svg b/docs/data/readme_icons/apple.svg new file mode 100644 index 00000000..f8780367 --- /dev/null +++ b/docs/data/readme_icons/apple.svg @@ -0,0 +1 @@ +Apple icon \ No newline at end of file diff --git a/docs/data/readme_icons/appveyor.svg b/docs/data/readme_icons/appveyor.svg new file mode 100644 index 00000000..6fa0bac2 --- /dev/null +++ b/docs/data/readme_icons/appveyor.svg @@ -0,0 +1 @@ +AppVeyor icon \ No newline at end of file diff --git a/docs/data/readme_icons/azurepipelines.svg b/docs/data/readme_icons/azurepipelines.svg new file mode 100644 index 00000000..e307977c --- /dev/null +++ b/docs/data/readme_icons/azurepipelines.svg @@ -0,0 +1 @@ +Azure Pipelines icon \ No newline at end of file diff --git a/docs/data/readme_icons/circleci.svg b/docs/data/readme_icons/circleci.svg new file mode 100644 index 00000000..2945b71c --- /dev/null +++ b/docs/data/readme_icons/circleci.svg @@ -0,0 +1 @@ +CircleCI icon \ No newline at end of file diff --git a/docs/data/readme_icons/github.svg b/docs/data/readme_icons/github.svg new file mode 100644 index 00000000..08c1abee --- /dev/null +++ b/docs/data/readme_icons/github.svg @@ -0,0 +1 @@ +GitHub icon \ No newline at end of file diff --git a/docs/data/readme_icons/gitlab.svg b/docs/data/readme_icons/gitlab.svg new file mode 100644 index 00000000..51222122 --- /dev/null +++ b/docs/data/readme_icons/gitlab.svg @@ -0,0 +1 @@ +GitLab icon \ No newline at end of file diff --git a/docs/data/readme_icons/linux.svg b/docs/data/readme_icons/linux.svg new file mode 100644 index 00000000..355dfd3d --- /dev/null +++ b/docs/data/readme_icons/linux.svg @@ -0,0 +1 @@ +Linux icon \ No newline at end of file diff --git a/docs/data/readme_icons/travisci.svg b/docs/data/readme_icons/travisci.svg new file mode 100644 index 00000000..3efbee2a --- /dev/null +++ b/docs/data/readme_icons/travisci.svg @@ -0,0 +1 @@ +Travis CI icon \ No newline at end of file diff --git a/docs/data/readme_icons/windows.svg b/docs/data/readme_icons/windows.svg new file mode 100644 index 00000000..0e103619 --- /dev/null +++ b/docs/data/readme_icons/windows.svg @@ -0,0 +1 @@ +Windows icon \ No newline at end of file From c217d5963df0bb305b8ddd0977bf2537cfeeae07 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 18:29:46 +0000 Subject: [PATCH 19/20] Add working examples and changelog docs pages --- README.md | 8 ++++++++ docs/changelog.md | 17 +++++++++++++++++ docs/extra.css | 1 - docs/working-examples.md | 20 ++++++++++++++++++++ mkdocs.yml | 2 ++ 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 docs/changelog.md create mode 100644 docs/working-examples.md diff --git a/README.md b/README.md index fcf76d11..06765a2a 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,8 @@ Options Working examples ---------------- + + Here are some repos that use cibuildwheel. @@ -251,6 +253,8 @@ Here are some repos that use cibuildwheel. > > I'd like to include notes here to indicate why an example might be interesting to cibuildwheel users - the styles/technologies/techniques used in each. Please include that in future additions! + + Legal note ---------- @@ -263,6 +267,8 @@ This is similar to static linking, so it might have some licence implications. C Changelog ========= + + ### 1.7.1 _3 December 2020_ @@ -670,6 +676,8 @@ _31 March 2017_ - 🌟 First public release! + + Contributing ============ diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 00000000..f4c1b679 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,17 @@ +--- +title: Changelog +--- + +{% + includemarkdown "../README.md" + start="" + end="" +%} + + diff --git a/docs/extra.css b/docs/extra.css index 5da96b0b..0a4dad6b 100644 --- a/docs/extra.css +++ b/docs/extra.css @@ -29,7 +29,6 @@ h1, h2, h3, h4, h5, h6 { border-bottom: 1px solid #e1e4e5; margin-bottom: 0.8em; padding-bottom: 0.2em; - } .rst-content blockquote { diff --git a/docs/working-examples.md b/docs/working-examples.md new file mode 100644 index 00000000..a769ff53 --- /dev/null +++ b/docs/working-examples.md @@ -0,0 +1,20 @@ +--- +title: Working examples +--- + +{% + includemarkdown "../README.md" + start="" + end="" +%} + + diff --git a/mkdocs.yml b/mkdocs.yml index 4a10a6d9..5bf1b022 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -20,7 +20,9 @@ nav: - deliver-to-pypi.md - cpp_standards.md - faq.md + - working-examples.md - contributing.md + - changelog.md markdown_extensions: - fenced_code From c76ee0b39b429e1325f2dbe6da39ea5230688278 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Sat, 12 Dec 2020 18:30:55 +0000 Subject: [PATCH 20/20] Add symlink to fix image references in the working-examples page Hopefully https://github.com/mondeja/mkdocs-include-markdown-plugin/issues/1 will provider a cleaner fix, but for now this works :) --- docs/docs/data | 1 + 1 file changed, 1 insertion(+) create mode 120000 docs/docs/data diff --git a/docs/docs/data b/docs/docs/data new file mode 120000 index 00000000..4909e06e --- /dev/null +++ b/docs/docs/data @@ -0,0 +1 @@ +../data \ No newline at end of file