Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: Tooling and automation for support matrix #290

Merged
merged 1 commit into from
May 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .github/workflows/docs-ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: docs-ci

on:
workflow_dispatch:
push:
branches: [ main ]
paths:
- 'docs/**.py'
pull_request:
branches: [ main ]
types: [opened, synchronize, reopened, closed]
paths:
- 'docs/**.py'

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: [3.8]
os: [ubuntu-latest]

steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Ubuntu packages
run: |
sudo apt-get update -y
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools==59.4.0 wheel
python -m pip install -r docs/requirements-doc.txt
- name: Lint with flake8
run: |
flake8 docs
- name: Lint with black
run: |
black --check docs
- name: Lint with isort
run: |
isort -c docs
- name: Lint with codespell
run: |
codespell
- name: Run unittests
# python -m pytest -rxs docs
run: |
coverage run -m pytest -v docs && coverage report -m
2 changes: 1 addition & 1 deletion .github/workflows/docs-sched-rebuild.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: docs-sched-rebuild
on:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: "0 0 * * *"
- cron: "0 1 * * *"
workflow_dispatch:

jobs:
Expand Down
54 changes: 54 additions & 0 deletions .github/workflows/docs-smx-data.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: docs-smx-data

on:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: "0 0 * * *"
workflow_dispatch:

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: [3.8]
os: [ubuntu-latest]

steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Ubuntu packages
run: |
sudo apt-get update -y
sudo apt-get clean autoclean
sudo apt-get autoremove --yes
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools==59.4.0 wheel
python -m pip install -r docs/requirements-doc.txt
- name: Maximize disk space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /opt/ghc
sudo rm -rf /usr/local/share/boost
- name: Get container data
run: |
python docs/extractor.py
- name: Initialize Git configuration
run: |
git config user.name docs-smx-bot
git config user.email do-not-send-@github.com
- name: Commit updates to data.json
run: |
x=$(git status --porcelain)
if grep -q "data.json" <<< "${x}"; then
git add .
git commit -m 'Updates from new containers'
git push
fi
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
docs/build/
docs/source/examples
docs/source/README.md
docs/source/generated/

.coverage

__pycache__/
*.py[cod]
62 changes: 62 additions & 0 deletions .pylintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
[MESSAGES CONTROL]
disable=fixme,
# docstrings aren't required (yet).
missing-function-docstring,
missing-module-docstring,
missing-class-docstring,

# formatting checks that we're handling with black/isort
wrong-import-order,
wrong-import-position,
ungrouped-imports,
line-too-long,
superfluous-parens,
trailing-whitespace,

# we'll probably never enable these checks
invalid-name,
import-error,
duplicate-code,

# disable code-complexity checks for now
# TODO: should we configure the thresholds for these rather than just disable?
; too-many-function-args,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly just curious: what does the leading semicolon on these lines do?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@karlhigley , ha. I didn't even question it. I highlighted the lines in vscode and pressed Ctrl+/ to comment them and vscode added the semicolons. I believe the semi acts as a comment character because I added some of those explicitly to some of the functions.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh interesting! I thought it might be a comment but then I realized # was a comment, and it turns out to be impossible to search for information on this, because all you get is info on the pylint checks about semicolons.

; too-many-instance-attributes,
; too-many-locals,
; too-many-branches,
; too-many-nested-blocks,
; too-many-statements,
; too-many-arguments,
; too-many-return-statements,
; too-many-lines,
; too-few-public-methods,

# many of these checks would be great to include at some point, but would
# require some changes to our codebase
; useless-return,
; protected-access,
; arguments-differ,
; unused-argument,
; unused-variable,
; abstract-method,
; no-name-in-module,
; attribute-defined-outside-init,
; redefined-outer-name,
; import-outside-toplevel,
; no-else-continue,
; no-else-return,
; no-else-raise,
; no-member,
; super-with-arguments,
; unsupported-assignment-operation,
; inconsistent-return-statements,
; duplicate-string-formatting-argument,
; len-as-condition,
; cyclic-import,

# producing false positives
; unexpected-keyword-arg,
; not-an-iterable,
; unsubscriptable-object
[SIMILARITIES]
min-similarty-lines=20
6 changes: 4 additions & 2 deletions ci/versions.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
# limitations under the License.
#

# pylint: skip-file

import argparse
import contextlib

Expand Down Expand Up @@ -46,7 +48,7 @@ def get_pythonpkg_version(container, pkg):
"bash -c 'pip list | grep " + pkg + "'", stderr=False
)
return output[1].decode("utf-8").split()[1]
except:
except: # noqa
return "N/A"


Expand All @@ -56,7 +58,7 @@ def create_pr(repo, branch, filename, content, token, version):
r.create_git_ref(ref="refs/heads/" + branch, sha=r.get_branch("main").commit.sha)
f = r.get_contents(filename, ref=branch)
r.update_file(f.path, "release " + version, content, branch=branch, sha=f.sha)
pr = r.create_pull(
pr = r.create_pull( # noqa
title="Merlin Release " + version, body="", head=branch, base="main"
)

Expand Down
40 changes: 40 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ Perform the following steps to build the docs.
These steps should run Sphinx in your shell and create HTML in the `build/html/`
directory.

The build for Merlin is unique because the support matrix is generated during
the build.
The build reads the `docs/data.json` file and creates several RST snippet files
in `docs/source/generated`.
The `docs/data.json` file is updated by the `docs-smx-data` GitHub workflow.

## Preview the Changes

View the docs web page by opening the HTML in your browser. First, navigate to
Expand All @@ -37,3 +43,37 @@ python -m http.server
Afterward, open a web browser and access <https://localhost:8000>.

Check that yours edits formatted correctly and read well.

## Tests

```shell
python -m pytest docs
```
...or...

```shell
coverage run -m pytest -v docs && coverage report -m
```

## Handy notes

### Remove a field from the JSON

In the following case, the `cuparse` key is a mistake and should have been
`cusparse`. The following command removes the mistake from the JSON:

```shell
jq 'walk(if type == "object" then del(.cuparse) else . end)' < data.json > x
```

### View a container for a release

```shell
jq '.["nvcr.io/nvidia/merlin/merlin-inference"]["22.03"]' < ../docs/source/data.json
```

### List the containers and releases

```shell
jq '. | map_values(keys) ' < docs/source/data.json
```
Loading