Skip to content

Commit

Permalink
CI (#299)
Browse files Browse the repository at this point in the history
* CI

* workaround for steady state

* fix
  • Loading branch information
sosiristseng authored Jan 25, 2024
1 parent b9a8676 commit bf2999e
Show file tree
Hide file tree
Showing 8 changed files with 218 additions and 236 deletions.
3 changes: 3 additions & 0 deletions .github/read_toml.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import tomllib
with open("Manifest.toml", "rb") as f:
print(tomllib.load(f)["julia_version"])
193 changes: 92 additions & 101 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,101 +1,92 @@
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
uses: actions/cache@v4
id: cache-pip
with:
path: ${{ env.pythonLocation }}
key: ${{ runner.os }}-pip-${{ steps.cp.outputs.python-version }}-${{ hashFiles('requirements.txt') }}
- name: Install python packages
if: ${{ steps.cache-pip.outputs.cache-hit != 'true' }}
run: pip install -r requirements.txt
- name: Read Julia version
uses: SebRollen/[email protected]
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 }}
show-versioninfo: 'true'
- name: Cache Julia packages
uses: actions/cache/restore@v4
id: cache-julia
with:
path: |
~/.julia
!~/.julia/registries
key: ${{ runner.os }}-julia-${{ steps.read_toml.outputs.value }}-${{ env.CACHE_NUM }}-${{ hashFiles('src/**','Project.toml', 'Manifest.toml')}}
restore-keys: |
${{ runner.os }}-julia-${{ steps.read_toml.outputs.value }}-${{ env.CACHE_NUM }}-
- name: Install Julia packages
if: ${{ steps.cache-julia.outputs.cache-hit != 'true' }}
run: |
julia --project=@. --color=yes -e 'using Pkg, Dates; Pkg.instantiate(); Pkg.precompile(); Pkg.gc(collect_delay=Day(0))'
- name: Save Julia packages
uses: actions/cache/save@v4
if: ${{ steps.cache-julia.outputs.cache-hit != 'true' }}
with:
path: |
~/.julia
!~/.julia/registries
key: ${{ steps.cache-julia.outputs.cache-primary-key }}
- name: Run program
run: julia --project=@. --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 }}
cache: 'pip'
- name: Install python packages
run: pip install -r requirements.txt
- name: Read Julia version
id: read_toml
run: echo "value=$(python .github/read_toml.py)" >> "$GITHUB_OUTPUT"
- 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
112 changes: 55 additions & 57 deletions .github/workflows/linkcheck.yml
Original file line number Diff line number Diff line change
@@ -1,57 +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'
PY_VER: '3.12'

jobs:
linkcheck:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
id: cp
with:
python-version: ${{ env.PY_VER }}
- name: Cache pip
uses: actions/cache@v4
id: cache-pip
with:
path: ${{ env.pythonLocation }}
key: ${{ runner.os }}-pip-${{ steps.cp.outputs.python-version }}-${{ hashFiles('requirements.txt') }}
- name: Install python packages
if: ${{ steps.cache-pip.outputs.cache-hit != 'true' }}
run: pip install -r requirements.txt
- 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")
nb = joinpath(root, file)
Literate.notebook(nb, dirname(nb); mdstrings=true, execute=false)
end
end
end
- name: Check links
run: jupyter-book build ${DIR} --builder linkcheck
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/[email protected]
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 }}
Loading

0 comments on commit bf2999e

Please sign in to comment.