Using github actions to publish documentation

人盡茶涼 提交于 2019-12-21 22:04:16

问题


What I considered:

  • github offers github pages to host documentation in either a folder on my master branch or a dedicated gh-pages branch, but that would mean to commit build artifacts
  • I can also let readthedocs build and host docs for me through webhooks, but that means learning how to configure Yet Another Tool at a point in time where I try to consolidate everything related to my project in github-actions

I already have a docu-building process that works for me (using sphinx as the builder) and that I can also test locally, so I'd rather just leverage that instead. It has all the rules set up and drops some static html in an artifact - it just doesn't get served anywhere. Handling it in the workflow, where all the other deployment configuration of my project is living, feels better than scattering it over different tools or github specific options.

Is there already an action in the marketplace that allows me do something like this?

name: CI
on: [push]
jobs:

  ...  # do stuff like building my-project-v1.2.3.whl, testing, etc.

  release_docs:
    steps:
      - uses: actions/sphinx-to-pages@v1  # I wish this existed
        with:
          dependencies:
            - some-sphinx-extension
            - dist/my-project*.whl
          apidoc_args:
            - "--no-toc"
            - "--module-first"
            - "-o docs/autodoc"
            - "src/my-project"
          build-args:
            - "docs"
            - "public"  # the content of this folder will then be served at
                        # https://my_gh_name.github.io/my_project/

In other words, I'd like to still have control over how the build happens and where artifacts are dropped, but do not want to need to handle the interaction with readthedocs or github-pages.


Actions that I tried

❌ deploy-to-github-pages: runs the docs build in an npm container - will be inconvenient to make it work with python and sphinx

❌ gh-pages-for-github-action: no documentation

❌ gh-pages-deploy: seems to target host envs like jekyll instead of static content, and correct usage with yml syntax not yet documented - I tried a little and couldn't get it to work

❌ github-pages-deploy: looks good, but correct usage with yml syntax not yet documented


✅ github-pages: needs a custom PAT in order to trigger rebuilds (which is inconvenient) and uploads broken html (which is bad, but might be my fault)

✅ deploy-action-for-github-pages: also works, and looks a little cleaner in the logs. Same limitations as the upper solution though, it needs a PAT and the served html is still broken.


The eleven other results when searching for github+pages on the action marketplace all look like they want to use their own builder, which sadly never happens to be sphinx.


回答1:


I got it to work, but there is no dedicated action to build and host sphinx docs on either github pages or readthedocs as of yet, so as far as I am concerned there is quite a bit left to be desired here.

This is my current release_sphinx job that uses the deploy-action-for-github-pages action and uploads to github-pages:

release_sphinx:
  needs: [build]
  runs-on: ubuntu-latest
  container:
    image: python:3.6
    volumes:
      - dist:dist
      - public:public
  steps:

    # check out sources that will be used for autodocs, plus readme
    - uses: actions/checkout@v1

    # download wheel that was build and uploaded in the build step
    - uses: actions/download-artifact@v1
      with:
        name: distributions
        path: dist

    # didn't need to change anything here, but had to add sphinx.ext.githubpages
    # to my conf.py extensions list. that fixes the broken uploads
    - name: Building documentation
      run: |
        pip install dist/*.whl
        pip install sphinx Pallets-Sphinx-Themes
        sphinx-apidoc --no-toc --module-first -o docs/autodoc src/stenotype
        sphinx-build docs public -b dirhtml

    # still need to build and set the PAT to get a rebuild on the pages job,
    # apart from that quite clean and nice 
    - name: github pages deploy
      uses: peaceiris/actions-gh-pages@v2.3.1
      env:
        PERSONAL_TOKEN: ${{ secrets.PAT }}
        PUBLISH_BRANCH: gh-pages
        PUBLISH_DIR: public

    # since gh-pages has a history, this step might no longer be necessary.
    - uses: actions/upload-artifact@v1
      with:
        name: documentation
        path: public

Shoutout to the deploy action's maintainer, who resolved the upload problem within 8 minutes of me posting it as an issue.



来源:https://stackoverflow.com/questions/57989790/using-github-actions-to-publish-documentation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!