mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-27 09:04:53 +08:00
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/39331 Fixes gh-37590 Adds an extra `make coverage` to document building, which uses the built-in facility in sphinx to check docstring coverage. Also fixes a failure to import `torch/jit/supported_ops.py` which broke the [Torchscript Builtins](https://pytorch.org/docs/stable/jit_builtin_functions.html) page. This also adds the required `SPHINXOPTS` to turn warnings into error, but this is commented out. Note that since documentation of `torchvision` is merged in here, failures there would cause failures here if this is made active. Some thought might be needed about pinning the torchvision version merged into documentation. The first commit should fail, since the "ScriptModule" class is commented out. I did that in order to check that a CI failure is properly reported. Pull Request resolved: https://github.com/pytorch/pytorch/pull/38244 Differential Revision: D21640589 Pulled By: ezyang fbshipit-source-id: 1e240d81669b5f21404d596de4a27d192dc9fd8a
147 lines
4.6 KiB
Bash
Executable File
147 lines
4.6 KiB
Bash
Executable File
# =================== The following code **should** be executed inside Docker container ===================
|
|
|
|
# Install dependencies
|
|
sudo apt-get -y update
|
|
sudo apt-get -y install expect-dev
|
|
|
|
# This is where the local pytorch install in the docker image is located
|
|
pt_checkout="/var/lib/jenkins/workspace"
|
|
|
|
echo "python_doc_push_script.sh: Invoked with $*"
|
|
|
|
set -ex
|
|
|
|
# Argument 1: Where to copy the built documentation to
|
|
# (pytorch.github.io/$install_path)
|
|
install_path="$1"
|
|
if [ -z "$install_path" ]; then
|
|
echo "error: python_doc_push_script.sh: install_path (arg1) not specified"
|
|
exit 1
|
|
fi
|
|
|
|
# Argument 2: What version of the docs we are building.
|
|
version="$2"
|
|
if [ -z "$version" ]; then
|
|
echo "error: python_doc_push_script.sh: version (arg2) not specified"
|
|
exit 1
|
|
fi
|
|
|
|
is_master_doc=false
|
|
if [ "$version" == "master" ]; then
|
|
is_master_doc=true
|
|
fi
|
|
|
|
# Argument 3: The branch to push to. Usually is "site"
|
|
branch="$3"
|
|
if [ -z "$branch" ]; then
|
|
echo "error: python_doc_push_script.sh: branch (arg3) not specified"
|
|
exit 1
|
|
fi
|
|
|
|
# Argument 4: (optional) If present, we will NOT do any pushing. Used for testing.
|
|
dry_run=false
|
|
if [ "$4" != "" ]; then
|
|
dry_run=true
|
|
fi
|
|
|
|
echo "install_path: $install_path version: $version dry_run: $dry_run"
|
|
|
|
git clone https://github.com/pytorch/pytorch.github.io -b $branch
|
|
pushd pytorch.github.io
|
|
|
|
export LC_ALL=C
|
|
export PATH=/opt/conda/bin:$PATH
|
|
|
|
rm -rf pytorch || true
|
|
|
|
# Install TensorBoard in python 3 so torch.utils.tensorboard classes render
|
|
pip install -q https://s3.amazonaws.com/ossci-linux/wheels/tensorboard-1.14.0a0-py3-none-any.whl
|
|
|
|
# Get all the documentation sources, put them in one place
|
|
pushd "$pt_checkout"
|
|
git clone https://github.com/pytorch/vision
|
|
pushd vision
|
|
conda install -q pillow
|
|
time python setup.py install
|
|
popd
|
|
pushd docs
|
|
rm -rf source/torchvision
|
|
cp -a ../vision/docs/source source/torchvision
|
|
|
|
# Build the docs
|
|
pip -q install -r requirements.txt || true
|
|
if [ "$is_master_doc" = true ]; then
|
|
# TODO: fix gh-38011 then enable this which changes warnings into errors
|
|
# export SPHINXOPTS="-WT --keep-going"
|
|
make html
|
|
make coverage
|
|
# Now we have the coverage report, we need to make sure it is empty.
|
|
# Count the number of lines in the file and turn that number into a variable
|
|
# $lines. The `cut -f1 ...` is to only parse the number, not the filename
|
|
# Skip the report header by subtracting 2: the header will be output even if
|
|
# there are no undocumented items.
|
|
#
|
|
# Also: see docs/source/conf.py for "coverage_ignore*" items, which should
|
|
# be documented then removed from there.
|
|
lines=$(wc -l build/coverage/python.txt 2>/dev/null |cut -f1 -d' ')
|
|
undocumented=$(($lines - 2))
|
|
if [ $undocumented -lt 0 ]; then
|
|
echo coverage output not found
|
|
exit 1
|
|
elif [ $undocumented -gt 0 ]; then
|
|
echo undocumented objects found:
|
|
cat build/coverage/python.txt
|
|
exit 1
|
|
fi
|
|
else
|
|
# Don't fail the build on coverage problems
|
|
make html-stable
|
|
fi
|
|
|
|
# Move them into the docs repo
|
|
popd
|
|
popd
|
|
git rm -rf "$install_path" || true
|
|
mv "$pt_checkout/docs/build/html" "$install_path"
|
|
|
|
# Add the version handler by search and replace.
|
|
# XXX: Consider moving this to the docs Makefile or site build
|
|
if [ "$is_master_doc" = true ]; then
|
|
find "$install_path" -name "*.html" -print0 | xargs -0 perl -pi -w -e "s@master\s+\((\d\.\d\.[A-Fa-f0-9]+\+[A-Fa-f0-9]+)\s+\)@<a href='http://pytorch.org/docs/versions.html'>\1 \▼</a>@g"
|
|
else
|
|
find "$install_path" -name "*.html" -print0 | xargs -0 perl -pi -w -e "s@master\s+\((\d\.\d\.[A-Fa-f0-9]+\+[A-Fa-f0-9]+)\s+\)@<a href='http://pytorch.org/docs/versions.html'>$version \▼</a>@g"
|
|
fi
|
|
|
|
# Prevent Google from indexing $install_path/_modules. This folder contains
|
|
# generated source files.
|
|
# NB: the following only works on gnu sed. The sed shipped with mac os is different.
|
|
# One can `brew install gnu-sed` on a mac and then use "gsed" instead of "sed".
|
|
find "$install_path/_modules" -name "*.html" -print0 | xargs -0 sed -i '/<head>/a \ \ <meta name="robots" content="noindex">'
|
|
|
|
git add "$install_path" || true
|
|
git status
|
|
git config user.email "soumith+bot@pytorch.org"
|
|
git config user.name "pytorchbot"
|
|
# If there aren't changes, don't make a commit; push is no-op
|
|
git commit -m "auto-generating sphinx docs" || true
|
|
git status
|
|
|
|
if [ "$dry_run" = false ]; then
|
|
echo "Pushing to pytorch.github.io:$branch"
|
|
set +x
|
|
/usr/bin/expect <<DONE
|
|
spawn git push origin $branch
|
|
expect "Username*"
|
|
send "pytorchbot\n"
|
|
expect "Password*"
|
|
send "$::env(GITHUB_PYTORCHBOT_TOKEN)\n"
|
|
expect eof
|
|
DONE
|
|
set -x
|
|
else
|
|
echo "Skipping push due to dry_run"
|
|
fi
|
|
|
|
popd
|
|
# =================== The above code **should** be executed inside Docker container ===================
|