Add dependency on rules_shell #475
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Generate docs | |
on: | |
pull_request: | |
branches: | |
- main | |
paths: | |
- '.github/**' | |
- 'docs/**' | |
push: | |
branches: | |
- main | |
env: | |
BAZELISK_VERSION: 1.23.0 | |
MDBOOK_VERSION: 0.4.42 | |
GH_REPO: ${{ github.repository }} | |
MIN_VERSION: ${{ github.event.inputs.MIN_VERSION || '0.1.0' }} | |
FILTER_VERSION: ${{ github.event.inputs.FILTER_VERSION || '' }} | |
RELEASE_TAG_REGEX: ^\d+\.\d+\.\d+$ | |
jobs: | |
setup: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash --noprofile --norc -euo pipefail {0} | |
steps: | |
- name: get release tags that match $release_tag_regex | |
id: get_release_tags | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
RELEASES_JSON="$( | |
curl -s --fail-with-body \ | |
-H "Authorization: token $GH_TOKEN" \ | |
"https://api.github.com/repos/$GH_REPO/tags" | |
)" | |
RELEASES_JSON_FILTERED="$(echo "$RELEASES_JSON" | | |
jq -c \ | |
--arg RELEASE_TAG_REGEX "$RELEASE_TAG_REGEX" \ | |
--arg FILTER_VERSION "$FILTER_VERSION" \ | |
--arg MIN_VERSION "$MIN_VERSION" ' | |
[ "main" ] + | |
([.[].name | | |
select( | |
(test($RELEASE_TAG_REGEX) and | |
(. | split(".") | map(tonumber) >= ($MIN_VERSION | split(".") | map(tonumber))) | |
) and ($FILTER_VERSION == "" or . == $FILTER_VERSION) | |
) | |
]) | |
' | |
)" | |
echo "releases=$RELEASES_JSON_FILTERED" | |
echo "releases=$RELEASES_JSON_FILTERED" >> "$GITHUB_OUTPUT" | |
outputs: | |
releases: ${{ steps.get_release_tags.outputs.releases || '[]' }} | |
build: | |
runs-on: ubuntu-latest | |
needs: setup | |
defaults: | |
run: | |
shell: bash --noprofile --norc -euo pipefail {0} | |
strategy: | |
fail-fast: false | |
matrix: | |
ref: ${{ fromJson(needs.setup.outputs.releases) }} | |
env: | |
WORKSPACE: ${{ github.workspace }} | |
BIN: ${{ github.workspace }}/bin | |
steps: | |
- name: Checkout $REF | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ matrix.ref }} | |
- name: Patch $REF | |
env: | |
REF: ${{ matrix.ref }} | |
run: | | |
[[ "$REF" == "main" ]] && exit | |
PATCH=".github/docs-${REF}.patch" | |
URL="https://raw.githubusercontent.com/$GH_REPO/main/$PATCH" | |
echo "$URL" | |
curl -LO --fail-with-body "$URL" || { | |
echo "No patch found for $REF, exiting..." | |
exit 0 | |
} | |
echo "Patching ref: $REF" | |
git apply "$(basename "$PATCH")" | |
- name: Install bazelisk | |
run: | | |
BAZELISK="bazelisk-linux-amd64" | |
URL="https://github.com/bazelbuild/bazelisk/releases/download/v$BAZELISK_VERSION/$BAZELISK" | |
echo "URL=$URL" | |
curl -LO --fail-with-body "$URL" | |
chmod +x "$BAZELISK" | |
mkdir -p "$BIN" | |
mv "$BAZELISK" "$BIN/bazel" | |
- name: Install mdbook | |
run: | | |
MDBOOK="mdbook-v$MDBOOK_VERSION-x86_64-unknown-linux-gnu.tar.gz" | |
URL="https://github.com/rust-lang/mdBook/releases/download/v$MDBOOK_VERSION/$MDBOOK" | |
echo "URL=$URL" | |
curl -LO --fail-with-body "$URL" | |
tar -xvf "$MDBOOK" | |
chmod +x mdbook | |
mkdir -p "$BIN" | |
mv mdbook "$BIN/mdbook" | |
- name: bazel run //:generate_docs | |
run: | | |
"$BIN/bazel" run //:generate_docs | |
working-directory: ${{ github.workspace }}/docs | |
- name: mdbook build root | |
run: | | |
"$BIN/mdbook" build | |
working-directory: ${{ github.workspace }}/docs/root | |
if: ${{ matrix.ref == 'main' }} | |
- name: mdbook build docs | |
run: | | |
"$BIN/mdbook" build | |
working-directory: ${{ github.workspace }}/docs | |
- name: Upload docs root | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.ref }}-root | |
path: ${{ github.workspace }}/docs/root/book | |
if-no-files-found: error | |
if: ${{ github.event_name != 'pull_request' && matrix.ref == 'main' }} | |
- name: Upload docs/book | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.ref }} | |
path: ${{ github.workspace }}/docs/book | |
if-no-files-found: error | |
if: ${{ github.event_name != 'pull_request' }} | |
deploy: | |
runs-on: ubuntu-latest | |
needs: build | |
if: ${{ github.event_name != 'pull_request' }} | |
defaults: | |
run: | |
shell: bash --noprofile --norc -euo pipefail {0} | |
env: | |
WORKSPACE: ${{ github.workspace }} | |
steps: | |
- name: Fetch artifacts (first root) | |
uses: actions/download-artifact@v4 | |
with: | |
name: main-root | |
path: ${{ github.workspace }}/docs/book | |
- name: Fetch artifacts (then others) | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/docs/pages | |
- name: Install pages | |
run: mv "$WORKSPACE/docs/pages/"* "$WORKSPACE/docs/book/" | |
- name: publish | |
uses: peaceiris/actions-gh-pages@v4 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_branch: docs | |
publish_dir: ./docs/book |