diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a01336bf..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 @@ -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 0b10f302..5166e85f 100644 --- a/README.md +++ b/README.md @@ -125,35 +125,136 @@ Options 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. + -> Add your repo here! Send a PR. + + +| Name | CI | OS | Notes | +|-----------------------------------|----|----|:------| +| [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][] | 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][] | 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][] | 🌊 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][] | 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][] | 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][] | 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][] | 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][] | 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][] | An example combining scikit-build and pybind11 | + +[scikit-learn]: https://github.com/scikit-learn/scikit-learn +[Matplotlib]: https://github.com/matplotlib/matplotlib +[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport +[scikit-image]: https://github.com/scikit-image/scikit-image +[websockets]: https://github.com/aaugustin/websockets +[pyzmq]: https://github.com/zeromq/pyzmq +[aiortc]: https://github.com/aiortc/aiortc +[h5py]: https://github.com/h5py/h5py +[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 +[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 +[iminuit]: https://github.com/scikit-hep/iminuit +[jq.py]: https://github.com/mwilliamson/jq.py +[bx-python]: https://github.com/bxlab/bx-python +[boost-histogram]: https://github.com/scikit-hep/boost-histogram +[pybase64]: https://github.com/mayeut/pybase64 +[TgCrypto]: https://github.com/pyrogram/tgcrypto +[etebase-py]: https://github.com/etesync/etebase-py +[pyjet]: https://github.com/scikit-hep/pyjet +[numpythia]: https://github.com/scikit-hep/numpythia +[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 + +[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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> 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! + + Legal note ---------- @@ -166,6 +267,8 @@ This is similar to static linking, so it might have some licence implications. C Changelog ========= + + ### 1.7.1 _3 December 2020_ @@ -573,6 +676,8 @@ _31 March 2017_ - 🌟 First public release! + + Contributing ============ diff --git a/bin/projects.py b/bin/projects.py new file mode 100755 index 00000000..d64977d1 --- /dev/null +++ b/bin/projects.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 + +""" +Convert a yaml project list into a nice table. + +Suggested usage: + + ./bin/projects.py docs/data/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 yaml +from github import Github +import urllib.request +import xml.dom.minidom +from pathlib import Path + + +ICONS = ( + "appveyor", + "github", + "azurepipelines", + "circleci", + "gitlab", + "travisci", + "windows", + "apple", + "linux", +) + + +class Project: + NAME: int = 0 + + def __init__(self, config: Dict[str, Any], github: Optional[Github] = None): + 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", []) + self.os: List[str] = config.get("os", []) + + 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 repo.description: + self.notes = notes + else: + self.num_stars = 0 + self.pushed_at = datetime.utcnow() + + name_len = len(self.name) + 4 + self.__class__.NAME = max(self.__class__.NAME, name_len) + + def __lt__(self, other: "Project") -> bool: + if self.online: + return self.num_stars < other.num_stars + else: + return self.name < other.name + + @classmethod + def header(cls) -> str: + return ( + f"| {'Name':{cls.NAME}} | CI | OS | Notes |\n" + f"|{'':-^{cls.NAME+2 }}|----|----|:------|" + ) + + @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 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) + + def table_row(self) -> str: + 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}" + + def info(self) -> str: + days = (datetime.utcnow() - self.pushed_at).days + 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) + + print(Project.header()) + for project in projects: + print(project.table_row()) + + print() + for project in projects: + print(project.links()) + + print() + for icon in ICONS: + print(f"[{icon} icon]: {path_for_icon(icon).as_posix()}") + + print() + for project in projects: + print(project.info()) + + return io.getvalue() + + +@click.command() +@click.argument("input", type=click.File("r")) +@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) + 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") + 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) + readme.truncate() + + +if __name__ == "__main__": + projects() 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/data/projects.yml b/docs/data/projects.yml new file mode 100644 index 00000000..366e96cd --- /dev/null +++ b/docs/data/projects.yml @@ -0,0 +1,215 @@ +# 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, apple, linux] (optional) +# ci: [appveyor, github, azurepipelines, 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, apple, linux] + +- 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: [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 + 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, apple, linux] + +# Seems to be defunct +# - name: python-admesh +# gh: admesh/python-admesh + +- name: pybase64 + gh: mayeut/pybase64 + ci: [github] + os: [windows, apple, linux] + + +- name: KDEpy + gh: tommyod/KDEpy + ci: [github] + os: [windows, apple, linux] + +- name: AutoPy + gh: autopilot-rs/autopy + ci: [travisci] + os: [windows, apple, linux] + notes: Includes a Windows Travis build. + +# Seems to be defunct +# - name: apriltags2-ethz +# gh: safijari/apriltags2_ethz + +- name: TgCrypto + gh: pyrogram/tgcrypto + ci: [travisci] + os: [windows, apple, linux] + notes: Includes a Windows Travis build. + +- 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] + +# cibuildwheel moved to backup folder +# - name: gmic-py +# gh: myselfhimself/gmic-py + +- name: River + gh: online-ml/river + ci: [github] + os: [windows, apple, linux] + +- 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: [azurepipelines] + 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 + notes: A library that includes Cython extensions. + ci: [travisci] + os: [apple, linux] + +- 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] + 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 + ci: [github] + os: [windows, apple, linux] + +- name: h5py + gh: h5py/h5py + ci: [azurepipelines] + os: [windows, apple, linux] + +- name: pyzmq + 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 + 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. 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 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 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 928c1116..3b404dbc 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 diff --git a/requirements-dev.txt b/requirements-dev.txt index 52bc8edb..341498b4 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -7,4 +7,6 @@ pip-tools requests click mypy +pyyaml +pygithub typing-extensions