pythongithubgithub-pagespython-sphinxmyst

multiple github-pages deployments using specific url paths


I have a project that has an associated github-pages that lives at (say):

https://myorg.github.io/my_repo_name

I also have documentation for the python module. My hope is to also deploy that the docs to the github-pages under a docs path like so:

https://myorg.github.io/my_repo_name/docs

For what its worth the site is built using mystmd and the docs are autogenerated with sphinx.

The directory structure has _build directory in the root for the site and an _build folder in subfolder, docs/ for the documentation (see below).

It it possible to do two separate deployments to github pages (one to the standard url and one to a subpath) to accomplish this?

Thanks!

Here is a rough directory structure:

.
├── my_module
│   ├── __init__.py
│   ├── thing1.py
│   ├── thing2.py

| ...

├── _build
│   ├── html
│   │   ├── ...
│   │   ├── 8122.thebe-core.min
│   │   ├── ...
│   │   ├── index.html
│   │   ├── intro.html
│   │   ├── ...

| ...

├── docs
│   ├── _build
│   │   ├── ...
│   │   └── html
│   │       ├── index.html
│   │       | ...

Solution

  • Following @BenjaminW's advice I simply moved the Sphinx docs to a subfolder of the MyST docs. I managed this with github actions (doing edits upon the one generated by myst).

    The key was to remove the artifact uploads from the initial workflow then replace it with some linux commands for moving everything to the _site directory and uploading the _site directory as an artifact. Namely

          - name: Copy builds to site-directory
            run: |
                mv _build/html _site
                mv docs/_build/html _site/docs
                mkdir _site/nb
                mv nb/public _site/nb/public
          - name: Upload Site Artifact
            uses: actions/upload-pages-artifact@v3
            with:
              path: ./_site
    

    Here's the complete file:

    # This file was created by editing the file created by `myst init --gh-pages`
    name: MyST and Sphinx GitHub Pages Deploy
    on:
      push:
        branches: [main]
    env:
      # `BASE_URL` determines the website is served from, including CSS & JS assets
      # You may need to change this to `BASE_URL: ''`
      BASE_URL: /${{ github.event.repository.name }}
    
    # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
    permissions:
      contents: read
      pages: write
      id-token: write
    # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
    # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
    concurrency:
      group: 'pages'
      cancel-in-progress: false
    jobs:
      deploy:
        environment:
          name: github-pages
          url: ${{ steps.deployment.outputs.page_url }}
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - name: Setup Pages
            uses: actions/configure-pages@v3
          - uses: actions/setup-node@v4
            with:
              node-version: 18.x
          - name: Install MyST Markdown
            run: npm install -g mystmd
          - name: Build MyST HTML Assets
            run: myst build --html
          - name: Install Sphinx and Dependencies
            run: |
              pip install sphinx sphinx-autodoc2 furo myst_parser
          - name: Sphinx Build HTML
            run: |
                (cd docs && make html)
          - name: Copy builds to site-directory
            run: |
                mv _build/html _site
                mv docs/_build/html _site/docs
                mkdir _site/nb
                mv nb/public _site/nb/public
          - name: Upload Site Artifact
            uses: actions/upload-pages-artifact@v3
            with:
              path: ./_site
          - name: Deploy to GitHub Pages
            id: deployment
            uses: actions/deploy-pages@v4