QMC.jl uses GitHub Actions for continuous integration. Four workflow files
live in .github/workflows/ and serve distinct purposes.
| Workflow | File | Trigger | Platforms | Scope |
|---|---|---|---|---|
| CI | ci.yml |
Feature-branch pushes, PRs, manual | Linux | Unit tests + notebooks + coverage |
| CI Full | ci-full.yml |
PRs to develop/master |
Linux, macOS, Windows | Unit tests |
| Nightly | nightly.yml |
Daily at 05:30 UTC | macOS, Windows | Unit tests |
| Docs | docs.yml |
Push to develop/master (docs/src paths) |
Linux | Documenter build + deploy |
All workflows use concurrency groups with cancel-in-progress: true
so that superseded pushes do not waste CI minutes.
The primary fast-feedback workflow, triggered on feature-branch pushes
(develop/master are handled by the other workflows), on all pull requests,
and via manual dispatch.
Unit tests job:
- Runs on
ubuntu-latestwith Julia 1.12. - Installs Python 3.13 and
qmctoolscl(required byDigitalNetB2,Lattice, etc.). - Executes
Pkg.test(coverage=true), which runstest/runtests.jlwith Julia coverage instrumentation enabled. - Processes the resulting coverage data into
lcov.info. - Uploads
lcov.infoboth to Codecov and as a GitHub Actions artifact.
Notebooks job:
- Runs after the unit tests pass.
- Only executes when
demos/,src/, ortest/run_notebooks.jlchanged in the triggering commit, keeping CI fast for documentation-only or workflow-only changes. - Runs all
.ipynbdemo notebooks viatest/run_notebooks.jl.
A cross-platform sweep triggered on pull requests targeting develop or master.
- Tests Julia 1.10 and 1.11 on Linux, macOS, and Windows (6 jobs total).
- Runs unit tests only (no notebooks or doctests) to keep macOS/Windows jobs fast and avoid platform-specific rendering issues.
A scheduled workflow that runs daily at 05:30 UTC, testing macOS and Windows with Julia 1.11. This catches breakages from upstream Julia or dependency updates without blocking day-to-day development.
Can also be triggered manually via workflow_dispatch.
Builds the Documenter.jl documentation and deploys to GitHub Pages.
- Triggered on pushes to
develop/masterwhendocs/,src/,Project.toml, or the workflow file itself changes. - Also runs on matching PRs (build-only, no deploy).
- Uses
julia --project=docsto resolve the docs-specific dependency set. - Deploys via
deploydocs()whenCI=true(only on push, not PR).
Unit tests:
julia --project=. -e 'using Pkg; Pkg.test()'Unit tests with coverage instrumentation:
julia --project=. -e 'using Pkg; Pkg.test(coverage=true)'
# or
make coverageA single demo notebook:
julia --project=. test/run_notebooks.jl quickstartAll demo notebooks:
julia --project=. test/run_notebooks.jlBuild documentation:
julia --project=docs docs/make.jlQMC.jl publishes test coverage through the fast Linux CI workflow.
- The repository README badge points at the Codecov report for the default branch.
ci.ymlconverts Julia's*.covoutputs intolcov.info.- The resulting LCOV file is uploaded to Codecov and also attached to the workflow run as an artifact.
The local Pkg.test(coverage=true) command is the same instrumentation mode used by CI.
make coverage additionally processes the raw *.cov files into lcov.info
and prints a source-coverage summary for src/.
Tests are organized to mirror the Python QMCSoftware test suite:
| File | Coverage |
|---|---|
test_discrete_distributions.jl |
IIDStdUniform, Lattice, DigitalNetB2, Halton, Kronecker, scrambling, windowed sampling |
test_true_measures.jl |
All true measures including AcceptanceRejection, DistributionsWrapper |
test_integrands.jl |
All integrands including FinancialOption variants, SensitivityIndices, BayesianLRCoeffs |
test_kernels.jl |
Shift-invariant, digital-shift-invariant, Matern, Gaussian, combined kernels |
test_stopping_criteria.jl |
All stopping criteria, rel_tol, resume/checkpoint, IterationLog |
test_integration.jl |
End-to-end integration pipelines |
test_multilevel.jl |
Multilevel interface, CubMLMC, CubMLMCCont, CubMLQMCCont |
run_notebooks.jl |
Executes all demo notebooks, reports errors and warnings |
All CI jobs require:
- Julia 1.10+ (pinned versions in each workflow matrix)
- Python 3.13 with
qmctoolscl(pip install qmctoolscl) - Julia package dependencies installed via
Pkg.instantiate()
- Add your
@testsetblock to the appropriatetest_*.jlfile. - If testing a new component category, create a new file and add an
include()line inruntests.jl. - Push — CI will run the tests automatically.
CODECOV_TOKEN— used for Codecov upload when required by the repository configuration; CI is configured not to fail if upload is unavailable.GITHUB_TOKEN— provided automatically by GitHub; used for docs deployment.