From 2746f410f297af2757c512ecf91ace14aff3a53e Mon Sep 17 00:00:00 2001 From: Wen Wei Tseng Date: Sat, 3 Feb 2024 14:07:35 +0000 Subject: [PATCH] cache python --- .github/workflows/ci.yml | 197 +++++++++++++++++--------------- .github/workflows/linkcheck.yml | 110 +++++++++--------- 2 files changed, 157 insertions(+), 150 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d0c0280..9976f7b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,95 +1,102 @@ -name: Build notebooks and publish - -on: - workflow_dispatch: - push: - branches: [main] - pull_request: - branches: [main] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -env: - NPROC: '2' # Number of Julia processes to run the notebooks - CACHE_NUM: '1' - PY_VER: '3.12' - JULIA_CONDAPKG_BACKEND: 'Null' - JULIA_CI: 'true' - JULIA_NUM_THREADS: '2' - -jobs: - CI: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - id: cp - with: - python-version: ${{ env.PY_VER }} - cache: 'pip' - - name: Install python packages - run: pip install -r requirements.txt - - name: Read Julia version - uses: SebRollen/toml-action@v1.2.0 - id: read_toml - with: - file: 'Manifest.toml' - field: 'julia_version' - - name: Setup Julia - uses: julia-actions/setup-julia@v1 - with: - version: ${{ steps.read_toml.outputs.value }} - - name: Cache Julia packages - uses: actions/cache@v4 - id: cache-julia - with: - save-always: 'true' - path: | - ~/.julia - !~/.julia/registries - key: ${{ runner.os }}-julia-${{ env.CACHE_NUM }}-${{ hashFiles('src/**', 'Project.toml', 'Manifest.toml')}} - restore-keys: | - ${{ runner.os }}-julia-${{ env.CACHE_NUM }}- - - name: Install Julia packages - if: ${{ steps.cache-julia.outputs.cache-hit != 'true' }} - env: - PYTHON: ${{ env.pythonLocation }}/python - shell: julia --color=yes {0} - run: | - using Pkg, Dates - Pkg.add(["PrettyTables", "Literate"]) - Pkg.activate(".") - Pkg.instantiate() - Pkg.precompile() - Pkg.gc(collect_delay=Day(0)) - - name: Run program - run: julia --color=yes -p ${{ env.NPROC }} literate.jl - - name: Build website - run: jupyter-book build docs/ - - name: Upload page artifact - if: ${{ github.ref == 'refs/heads/main' }} - uses: actions/upload-pages-artifact@v3 - with: - path: docs/_build/html - - # Deploy pages - deploy: - needs: CI - if: ${{ github.ref == 'refs/heads/main' }} - # Grant GITHUB_TOKEN the permissions required to make a Pages deployment - permissions: - pages: write # to deploy to Pages - id-token: write # to verify the deployment originates from an appropriate source - actions: read # to download an artifact uploaded by `actions/upload-pages-artifact@v3` - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 +name: Build notebooks and publish + +on: + workflow_dispatch: + push: + branches: [main] + pull_request: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + NPROC: '2' # Number of Julia processes to run the notebooks + CACHE_NUM: '1' + PY_VER: '3.12' + JULIA_CONDAPKG_BACKEND: 'Null' + JULIA_CI: 'true' + JULIA_NUM_THREADS: '2' + +jobs: + CI: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Setup Python + uses: actions/setup-python@v5 + id: cp + with: + python-version: ${{ env.PY_VER }} + - name: Cache pip dependencies + uses: actions/cache@v4 + id: cache-py + with: + save-always: 'true' + path: ${{ env.pythonLocation }} + key: ${{ runner.os }}-pip-${{ env.CACHE_NUM }}-${{ steps.cp.outputs.python-version }}-${{ hashFiles('requirements.txt') }} + - name: Install pip dependencies if cache miss + if: steps.cache-py.outputs.cache-hit != 'true' + run: pip install -r requirements.txt + - name: Read Julia version + uses: SebRollen/toml-action@v1.2.0 + id: read_toml + with: + file: 'Manifest.toml' + field: 'julia_version' + - name: Setup Julia + uses: julia-actions/setup-julia@v1 + with: + version: ${{ steps.read_toml.outputs.value }} + - name: Cache Julia packages + uses: actions/cache@v4 + id: cache-julia + with: + save-always: 'true' + path: | + ~/.julia + !~/.julia/registries + key: ${{ runner.os }}-julia-${{ env.CACHE_NUM }}-${{ hashFiles('src/**', 'Project.toml', 'Manifest.toml')}} + restore-keys: | + ${{ runner.os }}-julia-${{ env.CACHE_NUM }}- + - name: Install Julia packages + if: ${{ steps.cache-julia.outputs.cache-hit != 'true' }} + env: + PYTHON: ${{ env.pythonLocation }}/python + shell: julia --color=yes {0} + run: | + using Pkg, Dates + Pkg.add(["PrettyTables", "Literate"]) + Pkg.activate(".") + Pkg.instantiate() + Pkg.precompile() + Pkg.gc(collect_delay=Day(0)) + - name: Run program + run: julia --color=yes -p ${{ env.NPROC }} literate.jl + - name: Build website + run: jupyter-book build docs/ + - name: Upload page artifact + if: ${{ github.ref == 'refs/heads/main' }} + uses: actions/upload-pages-artifact@v3 + with: + path: docs/_build/html + + # Deploy pages + deploy: + needs: CI + if: ${{ github.ref == 'refs/heads/main' }} + # Grant GITHUB_TOKEN the permissions required to make a Pages deployment + permissions: + pages: write # to deploy to Pages + id-token: write # to verify the deployment originates from an appropriate source + actions: read # to download an artifact uploaded by `actions/upload-pages-artifact@v3` + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/linkcheck.yml b/.github/workflows/linkcheck.yml index 4e321b24..765ccbf0 100644 --- a/.github/workflows/linkcheck.yml +++ b/.github/workflows/linkcheck.yml @@ -1,55 +1,55 @@ -name: Check markdown links - -on: - workflow_dispatch: - schedule: - - cron: '0 0 1 * *' # Every month - push: - branches: - - main - paths: - - 'docs/**' - - '.lycheeignore' - - '.github/workflows/linkcheck.yml' - -env: - DIR: 'docs' - -jobs: - linkcheck: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Julia - uses: julia-actions/setup-julia@v1 - - name: Convert literate notebooks to markdown files - shell: julia --color=yes {0} - working-directory: ${{ env.DIR }} - run: | - import Pkg - Pkg.add("Literate") - using Literate - for (root, dirs, files) in walkdir(pwd()) - for file in files - if endswith(file, ".jl") - Literate.markdown(joinpath(root, file); mdstrings=true, flavor = Literate.CommonMarkFlavor()) - end - end - end - - name: Restore lychee cache - id: restore-cache - uses: actions/cache@v4 - with: - save-always: 'true' - path: .lycheecache - key: cache-lychee-${{ github.sha }} - restore-keys: cache-lychee- - - name: Lychee Checker - uses: lycheeverse/lychee-action@v1.9.3 - id: lychee - with: - fail: true - args: '--accept 200,204,429 --verbose --no-progress --cache --max-cache-age 1d ${{ env.DIR }}' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +name: Check markdown links + +on: + workflow_dispatch: + schedule: + - cron: '0 0 1 * *' # Every month + push: + branches: + - main + paths: + - 'docs/**' + - '.lycheeignore' + - '.github/workflows/linkcheck.yml' + +env: + DIR: 'docs' + +jobs: + linkcheck: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Julia + uses: julia-actions/setup-julia@v1 + - name: Convert literate notebooks to markdown files + shell: julia --color=yes {0} + working-directory: ${{ env.DIR }} + run: | + import Pkg + Pkg.add("Literate") + using Literate + for (root, dirs, files) in walkdir(pwd()) + for file in files + if endswith(file, ".jl") + Literate.markdown(joinpath(root, file); mdstrings=true, flavor = Literate.CommonMarkFlavor()) + end + end + end + - name: Restore lychee cache + id: restore-cache + uses: actions/cache@v4 + with: + save-always: 'true' + path: .lycheecache + key: cache-lychee-${{ github.sha }} + restore-keys: cache-lychee- + - name: Lychee Checker + uses: lycheeverse/lychee-action@v1.9.3 + id: lychee + with: + fail: true + args: '--accept 200,204,429 --verbose --no-progress --cache --max-cache-age 1d ${{ env.DIR }}' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}