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
│ │ | ...
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