1- # From: https://github.com/rkdarst/sphinx-actions-test/blob/master/.github/workflows/sphinx-build.yml
1+ # Deploy Sphinx. This could be shorter, but we also do some extra
2+ # stuff.
3+ #
4+ # License: CC-0. This is the canonical location of this file, which
5+ # you may want to link to anyway:
6+ # https://github.com/coderefinery/sphinx-lesson-template/blob/main/.github/workflows/sphinx.yml
7+ # https://raw.githubusercontent.com/coderefinery/sphinx-lesson-template/main/.github/workflows/sphinx.yml
8+
29
310name : sphinx
411on : [push, pull_request]
512
613env :
714 DEFAULT_BRANCH : " main"
15+ # If these SPHINXOPTS are enabled, then be strict about the
16+ # builds and fail on any warnings.
817 # SPHINXOPTS: "-W --keep-going -T"
9- # ^-- If these SPHINXOPTS are enabled, then be strict about the builds and fail on any warnings
18+ GENERATE_PDF : true # to enable, must be 'true' lowercase
19+ GENERATE_SINGLEHTML : true # to enable, must be 'true' lowercase
20+ PDF_FILENAME : lesson.pdf
21+ MULTIBRANCH : true # to enable, must be 'true' lowercase
22+
1023
1124jobs :
12- build-and-deploy :
13- name : Build and gh-pages
25+ build :
26+ name : Build
1427 runs-on : ubuntu-latest
28+ permissions :
29+ contents : read
30+
1531 steps :
1632 # https://github.com/marketplace/actions/checkout
17- - uses : actions/checkout@v2
33+ - uses : actions/checkout@v4
1834 with :
1935 fetch-depth : 0
2036 lfs : true
37+
2138 # https://github.com/marketplace/actions/setup-python
2239 # ^-- This gives info on matrix testing.
2340 - name : Install Python
24- uses : actions/setup-python@v2
41+ uses : actions/setup-python@v4
2542 with :
26- python-version : 3.8
27- # https://docs.github.com/en/actions/guides/building-and-testing-python#caching-dependencies
28- # ^-- How to set up caching for pip on Ubuntu
29- - name : Cache pip
30- uses : actions/cache@v2
31- with :
32- path : ~/.cache/pip
33- key : ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
34- restore-keys : |
35- ${{ runner.os }}-pip-
36- ${{ runner.os }}-
43+ python-version : ' 3.11'
44+ cache : ' pip'
45+
3746 # https://docs.github.com/en/actions/guides/building-and-testing-python#installing-dependencies
3847 # ^-- This gives info on installing dependencies with pip
3948 - name : Install dependencies
4049 run : |
4150 python -m pip install --upgrade pip
4251 pip install -r requirements.txt
52+
53+ # Debug
4354 - name : Debugging information
55+ env :
56+ ref : ${{github.ref}}
57+ event_name : ${{github.event_name}}
58+ head_ref : ${{github.head_ref}}
59+ base_ref : ${{github.base_ref}}
4460 run : |
45- echo "github.ref:" ${{github.ref}}
46- echo "github.event_name:" ${{github.event_name}}
47- echo "github.head_ref:" ${{github.head_ref}}
48- echo "github.base_ref:" ${{github.base_ref}}
61+ echo "github.ref: ${ref}"
62+ echo "github.event_name: ${event_name}"
63+ echo "github.head_ref: ${head_ref}"
64+ echo "github.base_ref: ${base_ref}"
65+ echo "GENERATE_PDF: ${GENERATE_PDF}"
66+ echo "GENERATE_SINGLEHTML: ${GENERATE_SINGLEHTML}"
4967 set -x
5068 git rev-parse --abbrev-ref HEAD
5169 git branch
@@ -54,11 +72,12 @@ jobs:
5472 python -V
5573 pip list --not-required
5674 pip list
57-
75+
5876
5977 # Build
6078 - uses : ammaraskar/sphinx-problem-matcher@master
61- - name : Build Sphinx docs
79+ - name : Build Sphinx docs (dirhtml)
80+ # SPHINXOPTS used via environment variables
6281 run : |
6382 make dirhtml
6483 # This fixes broken copy button icons, as explained in
@@ -70,73 +89,80 @@ jobs:
7089 # https://github.com/readthedocs/sphinx_rtd_theme/pull/1025
7190 sed -i 's/url_root="#"/url_root=""/' _build/dirhtml/index.html || true
7291
92+ # singlehtml
93+ - name : Generate singlehtml
94+ if : ${{ env.GENERATE_SINGLEHTML == 'true' }}
95+ run : |
96+ make singlehtml
97+ mv _build/singlehtml/ _build/dirhtml/singlehtml/
7398
74- # The following supports building all branches and combining on
75- # gh-pages
99+ # PDF if requested
100+ - name : Generate PDF
101+ if : ${{ env.GENERATE_PDF == 'true' }}
102+ run : |
103+ pip install https://github.com/rkdarst/sphinx_pyppeteer_builder/archive/refs/heads/main.zip
104+ make pyppeteer
105+ mv _build/pyppeteer/*.pdf _build/dirhtml/${PDF_FILENAME}
76106
77- # Clone and set up the old gh-pages branch
78- - name : Clone old gh-pages
107+ # Stage all deployed assets in _gh-pages/ for simplicity, and to
108+ # prepare to do a multi-branch deployment.
109+ - name : Copy deployment data to _gh-pages/
79110 if : ${{ github.event_name == 'push' }}
80- run : |
81- set -x
82- git fetch
83- ( git branch gh-pages remotes/origin/gh-pages && git clone . --branch=gh-pages _gh-pages/ ) || mkdir _gh-pages
84- rm -rf _gh-pages/.git/
85- mkdir -p _gh-pages/branch/
86- # If a push and default branch, copy build to _gh-pages/ as the "main"
87- # deployment.
88- - name : Copy new build (default branch)
89- if : |
90- contains(github.event_name, 'push') &&
91- contains(github.ref, env.DEFAULT_BRANCH)
92- run : |
93- set -x
94- # Delete everything under _gh-pages/ that is from the
95- # primary branch deployment. Eicludes the other branches
96- # _gh-pages/branch-* paths, and not including
97- # _gh-pages itself.
98- find _gh-pages/ -mindepth 1 ! -path '_gh-pages/branch*' -delete
111+ run :
99112 rsync -a _build/dirhtml/ _gh-pages/
100- # If a push and not on default branch, then copy the build to
101- # _gh-pages/branch/$brname (transforming '/' into '--')
102- - name : Copy new build (branch)
103- if : |
104- contains(github.event_name, 'push') &&
105- !contains(github.ref, env.DEFAULT_BRANCH)
106- run : |
107- set -x
108- #brname=$(git rev-parse --abbrev-ref HEAD)
109- brname="${{github.ref}}"
110- brname="${brname##refs/heads/}"
111- brdir=${brname//\//--} # replace '/' with '--'
112- rm -rf _gh-pages/branch/${brdir}
113- rsync -a _build/dirhtml/ _gh-pages/branch/${brdir}
114- # Go through each branch in _gh-pages/branch/, if it's not a
115- # ref, then delete it.
116- - name : Delete old feature branches
117- if : ${{ github.event_name == 'push' }}
118- run : |
119- set -x
120- for brdir in `ls _gh-pages/branch/` ; do
121- brname=${brdir//--/\/} # replace '--' with '/'
122- if ! git show-ref remotes/origin/$brname ; then
123- echo "Removing $brdir"
124- rm -r _gh-pages/branch/$brdir/
125- fi
126- done
113+
114+ # Use gh-pages-multibranch to multiplex different branches into
115+ # one deployment. See
116+ # https://github.com/coderefinery/gh-pages-multibranch
117+ - name : gh-pages multibranch
118+ uses : coderefinery/gh-pages-multibranch@main
119+ if : ${{ github.event_name == 'push' && env.MULTIBRANCH == 'true' }}
120+ with :
121+ directory : _gh-pages/
122+ default_branch : ${{ env.DEFAULT_BRANCH }}
123+ publish_branch : gh-pages
127124
128125 # Add the .nojekyll file
129126 - name : nojekyll
130127 if : ${{ github.event_name == 'push' }}
131128 run : |
132129 touch _gh-pages/.nojekyll
133130
131+ # Save artifact for the next step.
132+ - uses : actions/upload-artifact@v4
133+ if : ${{ github.event_name == 'push' }}
134+ with :
135+ name : gh-pages-build
136+ path : _gh-pages/
137+
138+ # Deploy in a separate job so that write permissions are restricted
139+ # to the minimum steps.
140+ deploy :
141+ name : Deploy
142+ runs-on : ubuntu-latest
143+ needs : build
144+ # This if can't use the env context - find better way later.
145+ if : ${{ github.event_name == 'push' }}
146+ permissions :
147+ contents : write
148+
149+ steps :
150+ - uses : actions/download-artifact@v4
151+ if : ${{ github.event_name == 'push' && ( env.MULTIBRANCH == 'true' || github.ref == format('refs/heads/{0}', env.DEFAULT_BRANCH )) }}
152+ with :
153+ name : gh-pages-build
154+ path : _gh-pages/
155+
156+ # As of 2023, we could publish to pages via a Deployment. This
157+ # isn't done yet to give it time to stabilize (out of beta), and
158+ # also having a gh-pages branch to check out is rather
159+ # convenient.
160+
134161 # Deploy
135162 # https://github.com/peaceiris/actions-gh-pages
136163 - name : Deploy
137164 uses : peaceiris/actions-gh-pages@v3
138- if : ${{ github.event_name == 'push' }}
139- # if: ${{ success() && github.event_name == 'push' && github.ref == 'refs/heads/$defaultBranch' }}
165+ if : ${{ github.event_name == 'push' && ( env.MULTIBRANCH == 'true' || github.ref == format('refs/heads/{0}', env.DEFAULT_BRANCH )) }}
140166 with :
141167 publish_branch : gh-pages
142168 github_token : ${{ secrets.GITHUB_TOKEN }}
0 commit comments