From 83ecc22cf61e37e92918aed23d52ccc3b8c1b06a Mon Sep 17 00:00:00 2001 From: John Reese Date: Tue, 25 Aug 2020 17:43:34 -0700 Subject: [PATCH 1/4] Initial documentation site/skeleton Uses sphinx with the Alabaster theme, mostly copy-pasta'd from aiosqlite. Includes the readme, changelog, contributing guide, and code of conduct from the base repo. The FB Open Source logo needs a version that is meant for use on light/white backgrounds. Build the docs using `make html` from within the virtualenv. Better readme/user guide to be done in separate diffs. --- .gitignore | 1 + Makefile | 7 +++ docs/_static/custom.css | 20 ++++++++ docs/_static/fbopensource.png | Bin 0 -> 16581 bytes docs/_templates/badges.html | 6 +++ docs/_templates/facebook.html | 18 +++++++ docs/changelog.rst | 4 ++ docs/code-of-conduct.rst | 5 ++ docs/conf.py | 91 ++++++++++++++++++++++++++++++++++ docs/contributing.rst | 5 ++ docs/index.rst | 10 ++++ requirements-dev.txt | 2 + 12 files changed, 169 insertions(+) create mode 100644 docs/_static/custom.css create mode 100644 docs/_static/fbopensource.png create mode 100644 docs/_templates/badges.html create mode 100644 docs/_templates/facebook.html create mode 100644 docs/changelog.rst create mode 100644 docs/code-of-conduct.rst create mode 100644 docs/conf.py create mode 100644 docs/contributing.rst create mode 100644 docs/index.rst diff --git a/.gitignore b/.gitignore index f9db0b0..387c3a7 100644 --- a/.gitignore +++ b/.gitignore @@ -106,4 +106,5 @@ venv.bak/ # Visual Studio Code .vscode/ +html/ usort/version.py diff --git a/Makefile b/Makefile index 9b091ab..5372b42 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,10 @@ venv: source .venv/bin/activate && make setup @echo 'run `source .venv/bin/activate` to use virtualenv' +.PHONY: clean +clean: + rm -rf dist html + # The rest of these are intended to be run within the venv, where python points # to whatever was used to set up the venv. @@ -15,6 +19,9 @@ setup: python -m pip install -Ur requirements-dev.txt python -m pip install -Ur requirements.txt +html: usort/*.py docs/* docs/*/* *.md + sphinx-build -b html docs html + .PHONY: test test: python -m coverage run -m usort.tests $(TESTOPTS) diff --git a/docs/_static/custom.css b/docs/_static/custom.css new file mode 100644 index 0000000..73807cb --- /dev/null +++ b/docs/_static/custom.css @@ -0,0 +1,20 @@ +div.facebook { + margin-top: 24px; +} + +div.facebook-badges { + margin-top: 12px; + margin-bottom: 10px; +} + +div.facebook-badges a { + color: #bbb; + text-decoration: none; + font-size: 24px; + border: none; +} + +div.facebook-badges a:hover { + color: #777; + border: none; +} diff --git a/docs/_static/fbopensource.png b/docs/_static/fbopensource.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1883ff6ee19d1834a0f81fbc53bebd677a0f7b GIT binary patch literal 16581 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 literal 0 HcmV?d00001 diff --git a/docs/_templates/badges.html b/docs/_templates/badges.html new file mode 100644 index 0000000..8850338 --- /dev/null +++ b/docs/_templates/badges.html @@ -0,0 +1,6 @@ + + + diff --git a/docs/_templates/facebook.html b/docs/_templates/facebook.html new file mode 100644 index 0000000..2a685dc --- /dev/null +++ b/docs/_templates/facebook.html @@ -0,0 +1,18 @@ + + + + diff --git a/docs/changelog.rst b/docs/changelog.rst new file mode 100644 index 0000000..83d7eb5 --- /dev/null +++ b/docs/changelog.rst @@ -0,0 +1,4 @@ +Changelog +========= + +.. mdinclude:: ../CHANGELOG.md diff --git a/docs/code-of-conduct.rst b/docs/code-of-conduct.rst new file mode 100644 index 0000000..8340f66 --- /dev/null +++ b/docs/code-of-conduct.rst @@ -0,0 +1,5 @@ +Code of Conduct +=============== + +.. mdinclude:: ../CODE_OF_CONDUCT.md + :start-line: 2 diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..1fe90fe --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,91 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +import datetime + +project = "µsort" +copyright = f"{datetime.date.today().year}, Facebook Inc." +author = "Tim Hatch" + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "m2r", + "sphinx.ext.autodoc", + "sphinx.ext.intersphinx", +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + +autodoc_default_options = { + "show-inheritance": True, + "members": True, + "undoc-members": True, +} +autodoc_member_order = "groupwise" + +highlight_language = "python3" +intersphinx_mapping = {"python": ("https://docs.python.org/3", None)} +master_doc = "index" + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "alabaster" +html_theme_options = { + "description": "Safe Python import sorting", + "fixed_sidebar": True, + "badge_branch": "master", + "github_button": False, + "github_user": "facebookexperimental", + "github_repo": "usort", + "show_powered_by": False, + "sidebar_collapse": False, + "extra_nav_links": { + "Report Issues": "https://github.com/facebookexperimental/usort/issues", + }, +} + +html_sidebars = { + "**": [ + "about.html", + "badges.html", + "navigation.html", + "relations.html", + "searchbox.html", + "facebook.html", + ], +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] diff --git a/docs/contributing.rst b/docs/contributing.rst new file mode 100644 index 0000000..6168c75 --- /dev/null +++ b/docs/contributing.rst @@ -0,0 +1,5 @@ +Contributing +============ + +.. mdinclude:: ../CONTRIBUTING.md + :start-line: 1 diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..8f16b7f --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,10 @@ +.. mdinclude:: ../README.md + + +.. toctree:: + :hidden: + :maxdepth: 1 + + changelog + contributing + code-of-conduct diff --git a/requirements-dev.txt b/requirements-dev.txt index 0479c95..0eba16c 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,7 +3,9 @@ coverage==4.5.4 flake8==3.7.9 isort==4.3.21 mypy==0.750 +sphinx==3.0.3 tox==3.14.1 twine==3.1.1 volatile==2.1.0 wheel==0.33.6 +git+https://github.com/miyakogi/m2r From 711b2654c68686159dac2a7956e63c026c9498f1 Mon Sep 17 00:00:00 2001 From: John Reese Date: Wed, 26 Aug 2020 11:27:14 -0700 Subject: [PATCH 2/4] Address feedback * `make html` will build and use venv even if not activated * CI will run `make html` * pinned m2r requirement to latest upstream rev --- .github/workflows/build.yml | 4 +++- Makefile | 17 ++++++++++++----- requirements-dev.txt | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7293361..614661d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,5 @@ name: Build -on: +on: push: branches: - master @@ -35,3 +35,5 @@ jobs: - name: Coverage run: codecov --token ${{ secrets.CODECOV_TOKEN }} --branch ${{ github.ref }} continue-on-error: true + - name: Documentation + run: make html diff --git a/Makefile b/Makefile index 5372b42..2c962a1 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,26 @@ PYTHON?=python SOURCES=usort setup.py -.PHONY: venv -venv: +.venv: $(PYTHON) -m venv .venv source .venv/bin/activate && make setup @echo 'run `source .venv/bin/activate` to use virtualenv' +.PHONY: venv +venv: .venv + +.PHONY: html +html: .venv + .venv/bin/sphinx-build -b html docs html + .PHONY: clean clean: rm -rf dist html +.PHONY: distclean +distclean: + rm -rf .venv + # The rest of these are intended to be run within the venv, where python points # to whatever was used to set up the venv. @@ -19,9 +29,6 @@ setup: python -m pip install -Ur requirements-dev.txt python -m pip install -Ur requirements.txt -html: usort/*.py docs/* docs/*/* *.md - sphinx-build -b html docs html - .PHONY: test test: python -m coverage run -m usort.tests $(TESTOPTS) diff --git a/requirements-dev.txt b/requirements-dev.txt index 0eba16c..2584352 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -8,4 +8,4 @@ tox==3.14.1 twine==3.1.1 volatile==2.1.0 wheel==0.33.6 -git+https://github.com/miyakogi/m2r +git+https://github.com/miyakogi/m2r@66f4a5a500cdd9fc59085106bff082c9cadafaf3 From 0f9a503477c2dcc83ad04f7a93fcd175998c47ed Mon Sep 17 00:00:00 2001 From: John Reese Date: Wed, 26 Aug 2020 18:54:32 -0700 Subject: [PATCH 3/4] Less attempts to magic html/venv usage --- Makefile | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 2c962a1..26a6174 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,12 @@ PYTHON?=python SOURCES=usort setup.py -.venv: +.PHONY: venv +venv: $(PYTHON) -m venv .venv source .venv/bin/activate && make setup @echo 'run `source .venv/bin/activate` to use virtualenv' -.PHONY: venv -venv: .venv - -.PHONY: html -html: .venv - .venv/bin/sphinx-build -b html docs html - .PHONY: clean clean: rm -rf dist html @@ -46,6 +40,10 @@ lint: python -m flake8 $(SOURCES) mypy --strict usort +.PHONY: html +html: + sphinx-build -b html docs html + .PHONY: release release: rm -rf dist From 678d18e803e3070204d1ff78bf9c02aea6f56012 Mon Sep 17 00:00:00 2001 From: John Reese Date: Wed, 26 Aug 2020 19:46:25 -0700 Subject: [PATCH 4/4] Better FB open source brand assets --- docs/_static/custom.css | 2 +- docs/_static/fbopensource.png | Bin 16581 -> 5197 bytes docs/_templates/facebook.html | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/_static/custom.css b/docs/_static/custom.css index 73807cb..3a94175 100644 --- a/docs/_static/custom.css +++ b/docs/_static/custom.css @@ -14,7 +14,7 @@ div.facebook-badges a { border: none; } -div.facebook-badges a:hover { +div.facebook a, div.facebook a:hover, div.facebook-badges a:hover { color: #777; border: none; } diff --git a/docs/_static/fbopensource.png b/docs/_static/fbopensource.png index fc1883ff6ee19d1834a0f81fbc53bebd677a0f7b..2b5480d455eb1aeb09f19a2798df9c5255889c25 100644 GIT binary patch literal 5197 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 diff --git a/docs/_templates/facebook.html b/docs/_templates/facebook.html index 2a685dc..de7fdad 100644 --- a/docs/_templates/facebook.html +++ b/docs/_templates/facebook.html @@ -1,7 +1,6 @@