diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c08e82d..bf845a8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,7 +59,8 @@ jobs: opam exec -- dune build @install - name: test run: | - opam exec -- dune runtest + BISECT_FILE=$(pwd)/bisect opam exec -- dune runtest --force --instrument-with bisect_ppx + # opam exec -- dune runtest - name: lint-doc run: | ODOC_WARN_ERROR=true opam exec -- dune build @doc 2> output.txt || true diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..a92ebd4 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,65 @@ +name: deploy + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v4 + with: + persist-credentials: false + - name: cache + id: cache-opam + uses: actions/cache@v4 + env: + cache-name: cache-opam-deploy + with: + path: | + ~/work/ola/ola/_opam/ + key: ${{ runner.os }}-deploy-${{ env.cache-name }}-${{ hashFiles('**/*.opam') }} + - name: setup-ocaml + uses: ocaml/setup-ocaml@v3 + with: + ocaml-compiler: "4.14" + dune-cache: true + opam-pin: true + allow-prerelease-opam: false + # - name: depext + # run: | + # sudo apt update + # opam install . --depext-only --with-test --with-doc + - name: setup-deploy + if: steps.cache-opam.outputs.cache-hit != 'true' + run: | + opam install . --deps-only --with-test --with-doc + opam install bisect_ppx ocb + # - name: api + # run: | + # touch doc/.nojekyll + # opam exec -- dune build @doc + # mv _build/default/_doc/_html doc/api + - name: build + run: | + opam exec -- dune build @install + - name: coverage + run: | + BISECT_FILE=$(pwd)/bisect opam exec -- dune runtest --force --instrument-with bisect_ppx + opam exec -- bisect-ppx-report html + - name: coverage-badge + run: | + label=coverage + percentage=$(opam exec -- bisect-ppx-report summary | sed -E 's/.*\((..).*/\1/g') + color=$(printf "%x%x%x" $((255-$percentage)) $((155+$percentage)) 85) + opam exec -- ocb --style classic --label $label --status $percentage'%' --color $color > _coverage/badge.svg + # - name: deploy + # uses: JamesIves/github-pages-deploy-action@v4.6.3 + # with: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # BRANCH: gh-pages + # FOLDER: doc/ + # CLEAN: true diff --git a/.gitignore b/.gitignore index a18e084..8fce649 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,8 @@ *.cmxa # ocamlbuild working directory -_build/ +_build +_coverage # ocamlbuild targets *.byte diff --git a/README.md b/README.md index 7fce27b..ad0b8d9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ola - An OCaml Lua language interpreter +# ola - An OCaml Lua language interpreter [![build status](https://github.com/epatrizio/ola/workflows/build/badge.svg)](https://github.com/epatrizio/ola/actions) This project is an interpreter of the [Lua 5.4](https://www.lua.org/manual/5.4/manual.html) programming language written in [OCaml](https://ocaml.org) with the [Dune](https://dune.build) build system. @@ -23,6 +23,11 @@ interprete ... Hello, world! ``` +```sh +$ bisect-ppx-report summary +Coverage: 225/1379 (16.32%) +``` + - Install in current [opam OCaml switch](https://ocaml.org/docs/opam-switch-introduction): `dune install` - Run: `ola file_name.lua` - `ola file_name.lua --debug` diff --git a/dune-project b/dune-project index 0daac6b..d1d9d64 100644 --- a/dune-project +++ b/dune-project @@ -14,7 +14,8 @@ (maintainers "Eric Patrizio ") -(source (github epatrizio/ola)) +(source + (github epatrizio/ola)) (generate_opam_files true) @@ -23,8 +24,10 @@ (package (name ola) (synopsis "OCaml Lua Interpreter") - (description "OCaml Lua Interpreter. Experimental project, work in progress ...") - (tags (ola ocaml lua interpreter)) + (description + "OCaml Lua Interpreter. Experimental project, work in progress ...") + (tags + (ola ocaml lua interpreter)) (depends (ocaml (>= 4.14)) @@ -33,6 +36,15 @@ (and :build (>= 20220210))) + (bisect_ppx + (and + (>= 2.5) + :with-dev-setup)) + (ocb + (and + :with-test + (>= "0.1") + :dev)) (odoc :with-doc) (mdx (and diff --git a/ola.opam b/ola.opam index 6615a70..0ba2d3f 100644 --- a/ola.opam +++ b/ola.opam @@ -14,6 +14,8 @@ depends: [ "ocaml" {>= "4.14"} "sedlex" "menhir" {build & >= "20220210"} + "bisect_ppx" {>= "2.5" & with-dev-setup} + "ocb" {with-test & >= "0.1" & dev} "odoc" {with-doc} "mdx" {with-test & >= "2.1"} ] diff --git a/src/bisect.exclude b/src/bisect.exclude new file mode 100644 index 0000000..66bc675 --- /dev/null +++ b/src/bisect.exclude @@ -0,0 +1,2 @@ +file "src/parser.ml" +file "src/lexer.ml" diff --git a/src/dune b/src/dune index 9152615..648c2c9 100644 --- a/src/dune +++ b/src/dune @@ -17,7 +17,10 @@ typer) (preprocess (pps sedlex.ppx)) - (libraries sedlex menhirLib)) + (libraries sedlex menhirLib) + (instrumentation + (backend bisect_ppx --exclusions src/bisect.exclude) + (deps bisect.exclude))) (menhir (modules parser))