Skip to content

buildbook

buildbook #1793

Workflow file for this run

name: buildbook
on:
push:
pull_request:
schedule:
- cron: '0 0 * * *'
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
env:
# Increase this value to reset cache
CONDA_CACHE_NUMBER: 0
PYDEVD_DISABLE_FILE_VALIDATION: 1 # disable warnings that debugger might not work using frozen (i.e. faster-to-load) modules. We'd expect debugging to be done outside of CI, so here it's probably fine to hide it.
jobs:
build:
# Only run scheduled jobs on the upstream repo
if: github.repository == 'orcestra-campaign/book' || github.event_name != 'schedule'
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- uses: actions/checkout@v4
- name: initialize conda
uses: conda-incubator/setup-miniconda@v3
with:
activate-environment: orcestra_book
auto-activate-base: false
use-mamba: true
miniforge-version: latest
- name: restore conda environment from cache
uses: actions/cache/restore@v4
with:
path: ${{ env.CONDA }}/envs
key:
conda-${{ runner.os }}--${{ runner.arch }}--${{ hashFiles('environment.yml') }}-${{ env.CONDA_CACHE_NUMBER }}
id: conda_cache
- name: install conda environment
run:
mamba env update -n orcestra_book -f environment.yml
if: steps.conda_cache.outputs.cache-hit != 'true'
id: install_conda_env
- name: upload conda environment to cache
uses: actions/cache/save@v4
if: steps.install_conda_env.outcome == 'success'
with:
path: ${{ env.CONDA }}/envs
key:
conda-${{ runner.os }}--${{ runner.arch }}--${{ hashFiles('environment.yml') }}-${{ env.CONDA_CACHE_NUMBER }}
- name: setting up notebook execution cache
uses: actions/cache/restore@v4
with:
path: |
orcestra_book/_build/.jupyter_cache
key: notebooks-${{ runner.os }}-${{ hashFiles('environment.yml') }}-${{ github.run_id }}-${{ github.run_attempt }}
restore-keys: |
notebooks-${{ runner.os }}-${{ hashFiles('environment.yml') }}-${{ github.run_id }}-
notebooks-${{ runner.os }}-${{ hashFiles('environment.yml') }}-
- name: Invalidate EarthCARE cache
if: github.event_name == 'schedule'
# Invalidate the cache for the EarthCARE track to always show the latest prediction
run: jcache notebook -p orcestra_book/_build/.jupyter_cache/ invalidate orcestra_book/earthcare.md
- name: build book
run: |
conda info
jupyter-book build -W -n --keep-going orcestra_book
- name: save execution cache
uses: actions/cache/save@v4
if: always()
with:
path: |
orcestra_book/_build/.jupyter_cache
key: notebooks-${{ runner.os }}-${{ hashFiles('environment.yml') }}-${{ github.run_id }}-${{ github.run_attempt }}
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: html
path: |
orcestra_book/_build/html
publish:
needs: build
if: "always() && github.repository_owner == 'orcestra-campaign' && (github.event_name == 'schedule' || (github.event_name == 'push' && github.ref == 'refs/heads/main'))"
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
# 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
steps:
- name: Download compiled book
uses: actions/download-artifact@v4
with:
name: html
path: html
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
# Upload entire repository
path: 'html'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4