Skip to content
Open
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
64 changes: 44 additions & 20 deletions .readthedocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,47 @@ build:
tools:
python: "3"

commands:
# https://docs.readthedocs.io/en/stable/build-customization.html#cancel-build-based-on-a-condition
#
# Cancel building pull requests when there aren't changes in the Doc directory.
#
# If there are no changes (git diff exits with 0) we force the command to return with 183.
# This is a special exit code on Read the Docs that will cancel the build immediately.
- |
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && [ "$(git diff --quiet origin/main -- Doc/ .readthedocs.yml; echo $?)" -eq 0 ];
then
echo "No changes to Doc/ - exiting the build.";
exit 183;
fi

- asdf plugin add uv
- asdf install uv latest
- asdf global uv latest
- make -C Doc venv html
- mkdir _readthedocs
- mv Doc/build/html _readthedocs/html
jobs:
post_checkout:
# https://docs.readthedocs.com/platform/stable/guides/build/skip-build.html#skip-builds-based-on-conditions
#
# Cancel building pull requests when there aren't changes in the Doc
# directory or RTD configuration, or if we can't cleanly merge the base
# branch.
- |
set -eEux;
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ];
then
base_branch=main;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is there an env var that could be used instead of main? I imagine this isn't going to work well in backport PRs unless we check against stable branches.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

My plan is to manually set base_branch to the right branch in each backport; I'm afraid RTD doesn't provide the base branch anywhere (that's documented, anyway).

git fetch --depth=50 origin $base_branch;
for attempt in $(seq 10);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think @StanFromIreland added a bash script for progressive unshallowing some time ago based on my experiments elsewhere. We could probably reuse that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh, he embedded bash in YAML: #147975 (comment). But perhaps, if it's extracted into Tools/, we could deduplicate the logic.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Deduplicating sounds good, but I think I'll leave that for a later cleanup.

do
if ! git merge-base HEAD origin/$base_branch;
then
git fetch --deepen=50 origin $base_branch;
else
break;
fi;
done;
if ! git -c "user.name=rtd" -c "user.email=no-reply@readthedocs.org" merge --no-stat --no-edit origin/$base_branch;
then
echo "Unsuccessful merge with '$base_branch' branch, skipping the build";
exit 183;
fi;
if git diff --exit-code --stat origin/$base_branch -- Doc/ .readthedocs.yml;
then
echo "No changes to Doc/ - skipping the build.";
exit 183;
fi;
fi;
create_environment:
- echo "Skipping default environment creation"
install:
- asdf plugin add uv
- asdf install uv latest
- asdf global uv latest
build:
html:
- make -C Doc venv html
- mkdir -p "$READTHEDOCS_OUTPUT"
- mv Doc/build/html "$READTHEDOCS_OUTPUT/"
Loading