test(webapp): setup electron tests #470
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: ci | |
on: [push] | |
jobs: | |
lint-ocamlformat: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup OCaml | |
uses: ocaml/setup-ocaml@v3 | |
with: | |
ocaml-compiler: 4.14.x | |
dune-cache: true | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
opam depext --install --yes dune | |
opam install --yes ocamlformat=0.26.2 | |
- name: Run format check | |
run: | | |
# needs `opam exec --` as `dune` is not in the shell PATH | |
opam exec -- dune fmt --preview | |
cli-and-doc: | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: # 2x2 versions ran here, with 2 different ocaml versions and with/without labltk | |
ocaml-compiler: | |
- 4.13.x | |
- 4.14.x | |
additional-packages: | |
- '' | |
- labltk | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup OCaml | |
uses: ocaml/setup-ocaml@v3 | |
with: | |
ocaml-compiler: ${{ matrix.ocaml-compiler }} | |
dune-cache: true | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install --yes gnuplot-nox \ | |
poppler-utils graphviz texlive-latex-recommended \ | |
texlive-fonts-recommended texlive-pictures tex4ht \ | |
texlive-latex-extra | |
opam depext --install --yes dune odoc camlp-streams \ | |
${{ matrix.additional-packages }} | |
opam install --yes . --deps-only | |
- name: Make Kappa | |
run: opam exec -- make all | |
- name: Make documentation | |
run: opam exec -- make doc_html | |
- name: Make check | |
run: opam exec -- make --jobs=2 check | |
- name: Archive documentation | |
uses: actions/upload-artifact@v4 | |
if: matrix.ocaml-compiler == '4.14.x' && matrix.additional-packages == '' | |
with: | |
name: doc | |
path: | | |
man | |
_build/default/_doc/_html/kappa-library | |
python: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup OCaml | |
uses: ocaml/setup-ocaml@v3 | |
with: | |
ocaml-compiler: 4.13.x | |
dune-cache: true | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install --yes gnuplot-nox \ | |
poppler-utils graphviz texlive-latex-recommended \ | |
texlive-fonts-recommended texlive-pictures tex4ht | |
opam install --yes . --deps-only | |
pip install nose | |
- name: Make Kappa | |
run: | | |
opam exec -- make all | |
opam exec -- dune build @install | |
- name: Uninstall nose | |
run: opam exec -- pip uninstall -y nose | |
- name: Reinstall nose | |
run: "opam exec -- pip install nose-py3" | |
- name: Nose tests | |
run: opam exec -- nosetests -v tests/kappy | |
webapp-ubuntu: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup OCaml | |
uses: ocaml/setup-ocaml@v3 | |
with: | |
ocaml-compiler: 4.13.x | |
dune-cache: true | |
- name: Install system dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install --yes gnuplot-nox \ | |
poppler-utils graphviz texlive-latex-recommended \ | |
texlive-fonts-recommended texlive-pictures tex4ht | |
- name: Install OPAM dependencies | |
run: opam install --yes . --deps-only | |
- name: Make Kappa | |
run: opam exec -- make all | |
- name: Make Javascript app | |
run: | | |
opam exec -- make Kappapp.tar.gz build/site/index.html | |
cp -r gui/js_lib/viz . | |
mv build/Kappapp.tar.gz . | |
mv build/site . | |
- name: Archive Javascript app | |
uses: actions/upload-artifact@v4 | |
with: | |
name: online-ui | |
path: | | |
site | |
viz | |
- name: Archive linux electron app | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux | |
path: | | |
Kappapp.tar.gz | |
webapp-macos: | |
runs-on: macos-13 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup OCaml | |
uses: ocaml/setup-ocaml@v3 | |
with: | |
ocaml-compiler: 4.13.x | |
dune-cache: true | |
- name: Install OPAM dependencies | |
run: opam install --yes . --deps-only | |
- name: Make Kappa | |
run: opam exec -- make all | |
- name: Make MacOS app | |
run: | | |
opam exec -- make Kappapp.app | |
mv build/Kappapp.app . | |
- name: Sign MacOS binaries | |
run: | | |
find Kappapp.app/Contents/ \( -name \*.app -or -name \*.framework \) \ | |
-exec codesign --deep -s - \{\} \; | |
codesign -s - Kappapp.app | |
zip -y -r Kappapp.app.zip Kappapp.app | |
- name: Archive MacOS app | |
uses: actions/upload-artifact@v4 | |
with: | |
name: macos | |
path: Kappapp.app.zip | |
webapp-windows: | |
runs-on: windows-2022 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup OCaml | |
uses: ocaml/setup-ocaml@v3 | |
with: | |
ocaml-compiler: 4.14.x | |
dune-cache: true | |
- name: Install OPAM dependencies | |
run: opam install --yes . --deps-only | |
- name: Make Kappa | |
run: opam exec -- make all | |
- name: Make Windows app | |
run: | | |
opam exec -- make KappappWin | |
# Note: This runs powershell thus the different path syntax | |
mv .\build\KappappWin . | |
# Note: Windows VMs on GitHub Action do not have zip command but provide 7z | |
7z a -tzip KappappWin.zip KappappWin | |
- name: Archive Windows app | |
uses: actions/upload-artifact@v4 | |
with: | |
name: windows | |
path: KappappWin.zip | |
webapp-playwright-test: | |
needs: [cli-and-doc, webapp-ubuntu] | |
# run only on master OR when the PR is _not_ a draft | |
# TODO: improve this? | |
if: | | |
github.ref == 'refs/heads/master' || | |
github.event.pull_request.draft == false | |
timeout-minutes: 75 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: lts/* | |
- name: Install dependencies | |
run: | | |
npm ci | |
sudo apt-get update | |
sudo apt-get install lighttpd | |
sudo apt-get install xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps | |
sudo npm install -D @playwright/test@latest | |
npm install --save-dev @types/node @types/yauzl | |
- name: Install Playwright Browsers | |
run: npx playwright install --with-deps | |
- name: Download online-ui | |
uses: actions/download-artifact@v4 | |
with: | |
name: online-ui | |
- name: Setup webapp server | |
run: >- | |
echo ' | |
include_shell "/usr/share/lighttpd/create-mime.conf.pl" | |
server.document-root = "/home/runner/work/KappaTools/KappaTools/site" | |
server.port = 12345 | |
server.username = "root" | |
server.groupname = "root" | |
' > lighttpd.conf | |
lighttpd -f lighttpd.conf -D & | |
sleep 10 && curl -i http://127.0.0.1:12345/index.html # test | |
- name: Download electron app | |
uses: actions/download-artifact@v4 | |
with: | |
name: linux | |
# - name: Setup electron app | |
# run: | | |
# tar xzf Kappapp.tar.gz | |
# mkdir -p build | |
# mv Kappapp ./build/ | |
# # pwd | |
# # ls -R | |
# # ls -R /home/runner/work/ | |
# Xvfb :99 -ac -screen 0 1920x1080x24 +extension GLX +render > xvfb_log.txt 2>&1 & | |
# sleep 3 | |
- name: Run Playwright tests | |
run: | | |
# export DISPLAY=:99 # needed for electron | |
DEBUG=pw:browser* npx playwright test --retries=2 --trace retain-on-first-failure | |
- uses: actions/upload-artifact@v4 | |
if: ${{ !cancelled() }} | |
with: | |
name: playwright-report | |
path: playwright-report/ | |
retention-days: 30 | |
# - uses: actions/upload-artifact@v4 | |
# if: ${{ !cancelled() }} | |
# with: | |
# name: xvfb_log | |
# path: xvfb_log.txt | |
# retention-days: 30 | |
deploy: | |
needs: [cli-and-doc, webapp-ubuntu, webapp-macos, webapp-windows, webapp-playwright-test] | |
if: github.ref == 'refs/heads/master' | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
deploy-name: [doc, online-ui, linux, macos, windows] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{matrix.deploy-name}} | |
- name: Install SSH Key | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.DEPLOY_KEY }} | |
known_hosts: api.kappalanguage.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJooIEJd6sgRL5JUKGqh9zB3Xla1MchqR8IWl7Nh9ahm9Ji6IwV9QSKG9YQEIHdJWxBk4UzbfRWGkDK9q1GggyM= | |
- name: Run deploy script | |
run: dev/deploy-to-website.sh ${{matrix.deploy-name}} | |
# TODO: see if add cache | |
# # from https://github.com/hazelgrove/hazel/blob/868f673119827a35ec67fad5e7e0d5135ce91d4c/.github/workflows/deploy_branches.yml#L19-L29 | |
# - name: Retrieve the switch environment if cached | |
# id: opam-cache-switch | |
# uses: actions/cache@v4 | |
# with: | |
# path: '_opam' | |
# key: ${{ runner.os }}-opam-${{ env.cache-name }}-${{ matrix.ocaml-compiler }}-${{ matrix.additional-packages}}-${{ hashFiles('*.opam') }} |