GNU Octave for continuous integration
Matlab CI is often a better choice than Octave below.
Cross-platform developers run into numerous compatibility issues. Rather than wait for frustrated users to report such a bug, use continuous integration.
Here are CI templates using GNU Octave tests of .m code. Octave oruntests() is incompatible with the advanced functionality of Matlab runtests(),
GitHub Actions: “.github/workflows/ci.yml”:
name: ci
on:
  push:
    paths:
    - "**.m"
    - ".github/workflows/ci.yml"
jobs:
  linux:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout
    - run: |
        sudo apt update
        sudo apt install --no-install-recommends octave
    - run: octave --eval "test_myfuncs"
      working-directory: tests
  windows:
    runs-on: windows-2025
    steps:
    - uses: actions/checkout
    - run: winget install GNU.Octave --disable-interactivity --accept-source-agreements --accept-package-agreements
    - run: octave --eval "test_myfuncs"
      working-directory: tests