forked from mirrors/jj
Github actions to build docs
One action publishes the 'prerelease' version on every push to `main`. The other publishes a 'latest' version on every releasse. I tested both of them, but not with branch protection rules.
This commit is contained in:
parent
8f29afaafd
commit
c8bb8fbeb2
4 changed files with 165 additions and 1 deletions
15
.github/scripts/docs-build-deploy
vendored
Executable file
15
.github/scripts/docs-build-deploy
vendored
Executable file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Set up a virtual environment with the required tools, build, and deploy the docs.
|
||||||
|
#
|
||||||
|
# Run from the root directory of the project as
|
||||||
|
# .github/scripts/docs-build-deploy 'https://martinvonz.github.io' prerelease main
|
||||||
|
# All arguments after the first are passed to `mike deploy`, run
|
||||||
|
# `poetry run -- mike deploy --help` for options. Note that `mike deploy`
|
||||||
|
# creates a commit directly on the `gh-pages` branch.
|
||||||
|
set -ev
|
||||||
|
|
||||||
|
export "SITE_URL_FOR_MKDOCS=$1"; shift
|
||||||
|
# https://github.com/python-poetry/poetry/issues/1917
|
||||||
|
export PYTHON_KEYRING_BACKEND=keyring.backends.fail.Keyring
|
||||||
|
poetry install # Only really needed once per environment unless there are updates
|
||||||
|
poetry run -- mike deploy "$@"
|
34
.github/workflows/docs.yml
vendored
Normal file
34
.github/workflows/docs.yml
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
name: website
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
prerelease-docs-build-deploy:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- run: "git fetch origin gh-pages --depth=1"
|
||||||
|
- uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: 3.11
|
||||||
|
- name: Install poetry
|
||||||
|
uses: abatilo/actions-poetry@v2
|
||||||
|
with:
|
||||||
|
poetry-version: latest
|
||||||
|
- name: Install dependencies, compile and deploy docs
|
||||||
|
run: |
|
||||||
|
git config user.name jj-docs-bot
|
||||||
|
git config user.email jj-docs-bot@users.noreply.github.io
|
||||||
|
.github/scripts/docs-build-deploy 'https://martinvonz.github.io/jj' prerelease main --push
|
||||||
|
- name: "Show `git diff --stat`"
|
||||||
|
run: git diff --stat gh-pages^ gh-pages || echo "(No diffs)"
|
28
.github/workflows/release.yml
vendored
28
.github/workflows/release.yml
vendored
|
@ -70,3 +70,31 @@ jobs:
|
||||||
asset_path: ${{ env.ASSET }}
|
asset_path: ${{ env.ASSET }}
|
||||||
asset_name: ${{ env.ASSET }}
|
asset_name: ${{ env.ASSET }}
|
||||||
asset_content_type: application/octet-stream
|
asset_content_type: application/octet-stream
|
||||||
|
|
||||||
|
docs-build-deploy:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- run: "git fetch origin gh-pages --depth=1"
|
||||||
|
- uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: 3.11
|
||||||
|
- name: Install poetry
|
||||||
|
uses: abatilo/actions-poetry@v2
|
||||||
|
with:
|
||||||
|
poetry-version: latest
|
||||||
|
- name: Install dependencies, compile and deploy docs
|
||||||
|
run: |
|
||||||
|
git config user.name jj-docs-bot
|
||||||
|
git config user.email jj-docs-bot@users.noreply.github.io
|
||||||
|
# Using the 'latest' tag below makes the website default
|
||||||
|
# to this version.
|
||||||
|
.github/scripts/docs-build-deploy 'https://martinvonz.github.io/jj' "${{ github.event.release.tag_name }}" latest --update-aliases --push
|
||||||
|
- name: "Show `git diff --stat`"
|
||||||
|
run: git diff --stat gh-pages^ gh-pages || echo "(No diffs)"
|
||||||
|
|
|
@ -136,7 +136,12 @@ These are listed roughly in order of decreasing importance.
|
||||||
|
|
||||||
## Previewing the HTML documentation
|
## Previewing the HTML documentation
|
||||||
|
|
||||||
<!---- Short-term TODO: More docs follow in a subsequent commit ---->
|
The documentation for `jj` is automatically published to the website
|
||||||
|
<https://martinvonz.github.io/jj/>. At the moment, this is experimental,
|
||||||
|
but we hope to advertise this website to our users soon.
|
||||||
|
|
||||||
|
When editing documentation, we'd appreciate it if you checked that the
|
||||||
|
result will look as expected when published to the website.
|
||||||
|
|
||||||
### Setting up the prerequisites
|
### Setting up the prerequisites
|
||||||
|
|
||||||
|
@ -187,6 +192,88 @@ You should occasionally check the terminal from which you ran `mkdocs serve` for
|
||||||
any build errors or warnings. Warnings about `"GET /versions.json HTTP/1.1" code
|
any build errors or warnings. Warnings about `"GET /versions.json HTTP/1.1" code
|
||||||
404` are expected and harmless.
|
404` are expected and harmless.
|
||||||
|
|
||||||
|
### How to build the entire website (not usually necessary)
|
||||||
|
|
||||||
|
The full `jj` website includes the documentation for several `jj` versions
|
||||||
|
(`prerelease`, latest release, and the older releases). The top-level
|
||||||
|
URL <https://martinvonz.github.io/jj> redirects to
|
||||||
|
<https://martinvonz.github.io/jj/latest>, which in turn redirects to
|
||||||
|
the docs for the last stable version.
|
||||||
|
|
||||||
|
The different versions of documentation are managed and deployed with
|
||||||
|
[`mike`](https://github.com/jimporter/mike), which can be run with
|
||||||
|
`poetry run -- mike`.
|
||||||
|
|
||||||
|
On a POSIX system or WSL, one way to build the entire website is as follows (on
|
||||||
|
Windows, you'll need to understand and adapt the shell script):
|
||||||
|
|
||||||
|
1. Check out `jj` as a co-located `jj + git` repository (`jj clone --colocate`),
|
||||||
|
cloned from your fork of `jj` (e.g. `jjfan.github.com/jj`). You can also use a
|
||||||
|
pure Git repo if you prefer.
|
||||||
|
|
||||||
|
2. Make sure `jjfan.github.com/jj` includes the `gh-pages` branch of the jj repo
|
||||||
|
and run `git fetch origin gh-pages`.
|
||||||
|
|
||||||
|
3. Go to the Github repository settings, enable Github Pages, and configure them
|
||||||
|
to use the `gh-pages` branch (this is usually the default).
|
||||||
|
|
||||||
|
4. Run the same `sh` script that is used in Github CI (details below):
|
||||||
|
|
||||||
|
```shell
|
||||||
|
.github/scripts/docs-build-deploy 'https://jjfan.github.io/jj/'\
|
||||||
|
prerelease main --push
|
||||||
|
```
|
||||||
|
|
||||||
|
This should build the version of the docs from the current commit,
|
||||||
|
deploy it as a new commit to the `gh-pages` branch,
|
||||||
|
and push the `gh-pages` branch to the origin.
|
||||||
|
|
||||||
|
5. Now, you should be able to see the full website, including your latest changes
|
||||||
|
to the `prerelease` version, at `https://jjfan.github.io/jj/prerelease/`.
|
||||||
|
|
||||||
|
6. (Optional) The previous steps actually only rebuild
|
||||||
|
`https://jjfan.github.io/jj/prerelease/` and its alias
|
||||||
|
`https://jjfan.github.io/jj/main/`. If you'd like to test out version switching
|
||||||
|
back and forth, you can also rebuild the docs for the latest release as follows.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
jj new v1.33.1 # Let's say `jj 1.33.1` is the currently the latest release
|
||||||
|
.github/scripts/docs-build-deploy 'https://jjfan.github.io/jj/'\
|
||||||
|
v1.33.1 latest --push
|
||||||
|
```
|
||||||
|
|
||||||
|
7. (Optional) When you are done, you may want to reset the `gh-branches` to the
|
||||||
|
same spot as it is in the upstream. If you configured the `upstream` remote,
|
||||||
|
this can be done with:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# This will LOSE any changes you made to `gh-pages`
|
||||||
|
jj git fetch --remote upstream
|
||||||
|
jj branch set gh-pages -r gh-pages@upstream
|
||||||
|
jj git push --remote origin --branch gh-pages
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to preserve some of the changes you made, you can do `jj branch
|
||||||
|
set my-changes -r gh-pages` BEFORE running the above commands.
|
||||||
|
|
||||||
|
#### Explanation of the `docs-build-deploy` script
|
||||||
|
|
||||||
|
The script sets up the `site_url` mkdocs config to
|
||||||
|
`'https://jjfan.github.io/jj/'`. If this config does not match the URL
|
||||||
|
where you loaded the website, some minor website features (like the
|
||||||
|
version switching widget) will have reduced functionality.
|
||||||
|
|
||||||
|
Then, the script passes the rest of its arguments to `potery run -- mike
|
||||||
|
deploy`, which does the rest of the job. Run `poetry run -- mike help deploy` to
|
||||||
|
find out what the arguments do.
|
||||||
|
|
||||||
|
If you need to do something more complicated, you can use `poetry run -- mike
|
||||||
|
...` commands. You can also edit the `gh-pages` branch directly, but take care
|
||||||
|
to avoid files that will be overwritten by future invocations of `mike`. Then,
|
||||||
|
you can submit a PR based on the `gh-pages` branch of
|
||||||
|
<https://martinvonz.github.com/jj> (instead of the usual `main` branch).
|
||||||
|
|
||||||
|
|
||||||
## Modifying protobuffers (this is not common)
|
## Modifying protobuffers (this is not common)
|
||||||
|
|
||||||
Occasionally, you may need to change the `.proto` files that define jj's data
|
Occasionally, you may need to change the `.proto` files that define jj's data
|
||||||
|
|
Loading…
Reference in a new issue