Merge branch 'v0.13.1' into main #107
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: Examples | |
on: | |
workflow_dispatch: | |
pull_request: | |
push: | |
branches: | |
- main | |
paths: | |
- 'src/**' | |
- 'examples/**' | |
- '.github/workflows/Example.yml' | |
- 'Project.toml' | |
jobs: | |
jupyter: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest] # ubuntu-latest] | |
file-name: [simple_hybrid_CS, simple_hybrid_ME, juliacon_2023, modelica_conference_2021] | |
julia-version: ['1.10'] | |
julia-arch: [x64] | |
experimental: [false] | |
steps: | |
- name: "Check out repository" | |
uses: actions/checkout@v4 | |
- name: "Set up Julia" | |
uses: julia-actions/setup-julia@v2 | |
with: | |
version: ${{ matrix.julia-version }} | |
arch: ${{ matrix.julia-arch }} | |
- name: "Install dependencies" | |
run: julia --project=examples/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' | |
- name: "Install packages" | |
run: pip install jupyter nbconvert | |
- name: "Execute notebook" | |
env: | |
FILE: examples/jupyter-src/${{ matrix.file-name }}.ipynb | |
run: jupyter nbconvert --ExecutePreprocessor.kernel_name="julia-${{ matrix.julia-version }}" --to notebook --inplace --execute ${{ env.FILE }} | |
- name: "Fix SVGs" # on notebook (json) level: removes all cells, that have the tag "text/html" AND have "<?xml " within their content | |
run: julia -e 'using Pkg; Pkg.add("JSON"); using JSON; data = JSON.parsefile(joinpath("examples", "jupyter-src", "${{ matrix.file-name }}.ipynb"); use_mmap=false); function search_and_remove!(json, tag, content=""); if typeof(json) == Vector{Any}; for e in json; search_and_remove!(e, tag, content); end; elseif typeof(json) == Dict{String, Any}; for (t, c) in json; if contains(t, tag) && (content == "" || any([contains(line, content) for line in c])); pop!(json, t); else; search_and_remove!(c, tag, content); end; end; end; end; search_and_remove!(data, "text/html", "<?xml "); open(joinpath("examples", "jupyter-src", "tmp_${{ matrix.file-name }}.ipynb"),"w") do f; JSON.print(f, data, 1); end; mv(joinpath("examples", "jupyter-src", "tmp_${{ matrix.file-name }}.ipynb"), joinpath("examples", "jupyter-src", "${{ matrix.file-name }}.ipynb"); force=true);' | |
- name: "Export notebook to jl and md" | |
env: | |
FILE: examples/jupyter-src/${{ matrix.file-name }}.ipynb | |
run: | | |
jupyter nbconvert --to script ${{ env.FILE }} | |
jupyter nbconvert --to markdown ${{ env.FILE }} | |
- name: "Fix GIFs" # on md level, requires .gif to be exportet prior during execution and follow naming convention of gifs: gif_1.gif, gif_2.gif, ... | |
run: | | |
echo "starting gif fixing" | |
mv examples/jupyter-src/gif_*.gif examples/jupyter-src/${{ matrix.file-name }}_files | |
$env:Path += ";C:\Program Files\Git\usr\bin" | |
awk '{if($0~/<img src="data:image\/gif;base64,[[:alpha:],[:digit:],\/,+,=]*" \/>/) {sub(/<img src="data:image\/gif;base64,[[:alpha:],[:digit:],\/,+,=]*" \/>/,"![gif](${{ matrix.file-name }}_files\/gif_"++i".gif)")}}1' examples/jupyter-src/${{ matrix.file-name }}.md > examples/jupyter-src/tmp_${{ matrix.file-name }}.md | |
mv -Force examples/jupyter-src/tmp_${{ matrix.file-name }}.md examples/jupyter-src/${{ matrix.file-name }}.md | |
echo "gifs should be fixed" | |
- name: "run generated jl script to determine success of example building" | |
run: julia --project=examples/ examples/jupyter-src/${{ matrix.file-name }}.jl | |
- name: "auto-commit (retry on merge)" | |
if: success() && github.event_name != 'pull_request' && github.ref_name == 'main' | |
uses: nick-fields/retry@v3 | |
env: | |
CI_COMMIT_MESSAGE: jupyter-example-${{ matrix.file-name }}-${{ matrix.os }}-${{ matrix.julia-version }}-${{ matrix.julia-arch }}-${{ matrix.experimental }}[${{ github.ref_name }}] | |
CI_COMMIT_AUTHOR: github-actions[bot] | |
EXAMPLES_PATH: examples/jupyter-src | |
# Fetch all and clear the stash list. Include all files from the examples folder to the stash and switch the branch. | |
# Reset the branch and remove all current files in the examples folder. | |
# Checkout the last stash to restore the new notebooks and apply the stash index to restore all other new files in the folder. | |
with: | |
timeout_minutes: 999 | |
max_attempts: 10 | |
warning_on_retry: false | |
shell: bash | |
command: | | |
git fetch --all | |
git stash clear | |
git stash --include-untracked -- ${{ env.EXAMPLES_PATH }}/${{ matrix.file-name }}* | |
git switch examples | |
git reset --hard origin/examples | |
rm -r ${{ env.EXAMPLES_PATH }}/${{ matrix.file-name }}* | |
git checkout stash -f -- ${{ env.EXAMPLES_PATH }} | |
git stash apply --index | |
git stash drop | |
git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}" | |
git config --global user.email "${{ env.CI_COMMIT_AUTHOR }}@users.noreply.github.com" | |
git config --global core.autocrlf false | |
git pull | |
git reset | |
git add ${{ env.EXAMPLES_PATH }}/${{ matrix.file-name }}* | |
git commit -m "${{ env.CI_COMMIT_MESSAGE }}" | |
git push origin examples || (git reset --soft HEAD~1 && (exit 1)) | |
pluto: | |
runs-on: ubuntu-latest | |
steps: | |
- name: "Check out repository" | |
uses: actions/checkout@v4 | |
- name: "Set up Julia" | |
uses: julia-actions/setup-julia@v2 | |
with: | |
version: '1.10' | |
- run: julia -e 'using Pkg; Pkg.add("PlutoSliderServer");' | |
- run: julia -e 'using PlutoSliderServer; PlutoSliderServer.export_directory("examples/pluto-src")' | |
- name: "auto-commit (retry on merge)" | |
if: success() && github.event_name != 'pull_request' && github.ref_name == 'main' | |
uses: nick-fields/retry@v3 | |
env: | |
CI_COMMIT_MESSAGE: pluto-examples[${{ github.ref_name }}] | |
CI_COMMIT_AUTHOR: github-actions[bot] | |
EXAMPLES_PATH: examples/pluto-src | |
# Fetch all and clear the stash list. Include all files from the examples folder to the stash and switch the branch. | |
# Reset the branch and remove all current files in the examples folder. | |
# Checkout the last stash to restore the new notebooks and apply the stash index to restore all other new files in the folder. | |
with: | |
timeout_minutes: 999 | |
max_attempts: 10 | |
warning_on_retry: false | |
shell: bash | |
command: | | |
git fetch --all | |
git stash clear | |
git stash --include-untracked -- ${{ env.EXAMPLES_PATH }} | |
git switch examples | |
git reset --hard origin/examples | |
rm -r ${{ env.EXAMPLES_PATH }}/* | |
git checkout stash -f -- ${{ env.EXAMPLES_PATH }} | |
git stash apply --index | |
git stash drop | |
git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}" | |
git config --global user.email "${{ env.CI_COMMIT_AUTHOR }}@users.noreply.github.com" | |
git config --global core.autocrlf false | |
git pull | |
git reset | |
git add ${{ env.EXAMPLES_PATH }} | |
git commit -m "${{ env.CI_COMMIT_MESSAGE }}" | |
git push origin examples || (git reset --soft HEAD~1 && (exit 1)) | |
call-docu: | |
needs: [jupyter, pluto] | |
if: github.event_name != 'pull_request' && github.ref_name == 'main' | |
runs-on: ubuntu-latest | |
steps: | |
# Trigger an repoisitory dispath event | |
- name: Repository Dispatch | |
uses: peter-evans/repository-dispatch@v3 | |
with: | |
event-type: trigger-docu |