GitHub
CI Integration
GitHub explicitly states that self-hosted (private) runners should not be used for public repositories. This is because there is no mechanism to prevent someone injecting malicious code in a pull request in an attempt to gain access to the system with the self-hosted runner.
GitHub Pages
GitHub Pages is designed to generate online documentation from Markdown using Jekyll. You can generate the webpages using other tools, but the html must be included in the repository. Some people use a separate repository to hold the generated html in order to avoid polluting their main repository with generated html.
GitLab
CI Integration
GitLab pipelines provide a mechanism for manual triggering, which allows maintainers to control whether a pipeline is run and prevent a malicious PR from executing.
GitLab pipelines for GitHub repos cannot be run for pull requests from forks. GitLab pipelines for GitLab repos can run for merge (pull) requests from forks.
GitLab Pages
GitLab pages support documentation generated in a GitLab pipeline by Sphinx or other documentation tools without polluting the repository with the generated html.
Read the Docs
Documentation must be generated on the Read the Docs servers. They do not allow pushing the html from a CI workflow. They have no intention of changing this because they do not want to be used as a website provider.