-
Notifications
You must be signed in to change notification settings - Fork 112
168 lines (145 loc) · 5.91 KB
/
docs.yml
File metadata and controls
168 lines (145 loc) · 5.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# This workflow builds the tensordict docs and deploys them to gh-pages.
name: Generate documentation
on:
push:
branches:
- nightly
- main
- release/*
tags:
- v[0-9]+.[0-9]+.[0-9]
- v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+
pull_request:
workflow_dispatch:
workflow_call:
concurrency:
# Documentation suggests ${{ github.head_ref }}, but that's only available on pull_request/pull_request_target triggers, so using ${{ github.ref }}.
# On master, we want all builds to complete even if merging happens faster to make it easier to discover at which point something broke.
group: docs-${{ github.ref == 'refs/heads/main' && format('ci-master-{0}', github.sha) || format('ci-{0}', github.ref) }}
cancel-in-progress: true
jobs:
build-docs:
strategy:
matrix:
python_version: ["3.10"]
cuda_arch_version: ["12.8"]
uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main
permissions:
id-token: write
contents: read
with:
repository: pytorch/tensordict
upload-artifact: docs
runner: "linux.g5.4xlarge.nvidia.gpu"
docker-image: "nvidia/cuda:12.8.0-devel-ubuntu22.04"
timeout: 120
script: |
set -e
set -v
# Set up environment variables
export PYTHON_VERSION=3.10
export CU_VERSION="cpu"
export TORCH_VERSION=nightly
export ARCH=x86_64
# Use existing setup script
bash .github/unittest/linux/scripts/setup_env.sh
# Install additional tools needed for docs build
apt update && apt install -y unzip
# Activate the conda environment
eval "$(./conda/bin/conda shell.bash hook)"
conda activate "./env"
# Install PyTorch and torchvision (CPU version for docs)
python -m pip install --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cpu -U --quiet --root-user-action=ignore
# Install tensordict runtime deps explicitly (except torch which is handled above),
# then install tensordict without resolving dependencies to avoid any solver changing the
# PyTorch build (stable vs nightly).
python -m pip install -U packaging pyvers importlib_metadata --quiet --root-user-action=ignore
# Set up versioning environment (conditional on release branch/tag)
export GITHUB_REF_TYPE=${{ github.ref_type }}
export GITHUB_REF_NAME=${{ github.ref_name }}
source .github/scripts/version_script.sh
# Install tensordict -- install as develop if not on a release branch
if [[ ${{ github.ref_type }} == branch && ${{ github.ref_name }} == release/* ]] || [[ ${{ github.ref_type }} == tag ]]; then
python -m pip install . --no-deps
else
python -m pip install -e . --no-deps
fi
# Install docs requirements
export TD_GET_DEFAULTS_TO_NONE='1'
python -m pip install -r docs/requirements.txt --quiet --root-user-action=ignore
# Test tensordict installation
mkdir _tmp
cd _tmp
PYOPENGL_PLATFORM=egl MUJOCO_GL=egl python -c "from tensordict import *"
cd ..
# Set sanitize version for releases
if [[ ${{ github.event_name }} == push && (${{ github.ref_type }} == tag || (${{ github.ref_type }} == branch && ${{ github.ref_name }} == release/*)) ]]; then
echo '::group::Enable version string sanitization'
# This environment variable just has to exist and must not be empty. The actual value is arbitrary.
# See docs/source/conf.py for details
export TENSORDICT_SANITIZE_VERSION_STR_IN_DOCS=1
echo '::endgroup::'
fi
# Build documentation
cd ./docs
make docs
cd ..
# Copy artifacts
cp -r docs/build/html/* "${RUNNER_ARTIFACT_DIR}"
echo $(ls "${RUNNER_ARTIFACT_DIR}")
if [[ ${{ github.event_name == 'pull_request' }} ]]; then
cp -r docs/build/html/* "${RUNNER_DOCS_DIR}"
fi
upload:
needs: build-docs
if: github.repository == 'pytorch/tensordict' && github.event_name == 'push' &&
((github.ref_type == 'branch' && github.ref_name == 'main') || github.ref_type == 'tag')
permissions:
contents: write
uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
with:
repository: pytorch/tensordict
download-artifact: docs
ref: gh-pages
test-infra-ref: main
script: |
set -euo pipefail
REF_TYPE=${{ github.ref_type }}
REF_NAME=${{ github.ref_name }}
if [[ "${REF_TYPE}" == branch ]]; then
if [[ "${REF_NAME}" == main ]]; then
TARGET_FOLDER="${REF_NAME}"
# Bebug:
# else
# TARGET_FOLDER="release-doc"
fi
elif [[ "${REF_TYPE}" == tag ]]; then
case "${REF_NAME}" in
*-rc*)
echo "Aborting upload since this is an RC tag: ${REF_NAME}"
exit 0
;;
*)
# Strip the leading "v" as well as the trailing patch version. For example:
# 'v0.15.2' -> '0.15'
TARGET_FOLDER=$(echo "${REF_NAME}" | sed 's/v\([0-9]\+\)\.\([0-9]\+\)\.[0-9]\+/\1.\2/')
;;
esac
fi
echo "Target Folder: ${TARGET_FOLDER}"
mkdir -p "${TARGET_FOLDER}"
rm -rf "${TARGET_FOLDER}"/*
echo $(ls "${RUNNER_ARTIFACT_DIR}")
rsync -a "${RUNNER_ARTIFACT_DIR}"/ "${TARGET_FOLDER}"
git add "${TARGET_FOLDER}" || true
if [[ "${TARGET_FOLDER}" == "main" ]] ; then
mkdir -p _static
rm -rf _static/*
cp -r "${TARGET_FOLDER}"/_static/* _static
git add _static || true
fi
git config user.name 'pytorchbot'
git config user.email 'soumith+bot@pytorch.org'
git config http.postBuffer 524288000
git commit -m "auto-generating sphinx docs" || true
git push