[ci] Use docker Octave images
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3069bf2..201392e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -24,6 +24,7 @@
     continue-on-error: ${{ matrix.continue-on-error || false }}
 
     runs-on: ${{ matrix.os || 'ubuntu-20.04' }}
+    container: ${{ matrix.container }}
 
     # By default, the name of the build is the language used and SWIG options, but matrix entries
     # can define the additional "desc" field with any additional information to include in the name.
@@ -34,318 +35,31 @@
         include:
         - SWIGLANG: ""
           CPPFLAGS: "-DDOH_POISON"
-        - SWIGLANG: ""
-          GCC: 7
-          CPPSTD: c++98
-          CSTD: c99
-        - SWIGLANG: ""
-          GCC: 7
-        - SWIGLANG: ""
-          GCC: 8
-        - SWIGLANG: ""
-          GCC: 9
-        - SWIGLANG: ""
-          GCC: 10
-        - SWIGLANG: ""
-          GCC: 11
-        - SWIGLANG: ""
-          GCC: 12
-          os: ubuntu-22.04
-        - SWIGLANG: ""
-          GCC: 13
-          os: ubuntu-22.04
-        - SWIGLANG: ""
-          compiler: clang
-          os: ubuntu-22.04
-        - SWIGLANG: csharp
-        - SWIGLANG: d
-          VER: 'ldc'
-          CPPSTD: c++14
-        - SWIGLANG: d
-          VER: 'gdmd'
-          CPPSTD: c++11
-        - SWIGLANG: d
-          VER: '2.103.1'
-          CPPSTD: c++17
-        - SWIGLANG: go
-          VER: '1.6'
-          CSTD: gnu11
-        - SWIGLANG: go
-          VER: '1.8'
-        - SWIGLANG: go
-          VER: '1.12'
-          CSTD: gnu11
-        - SWIGLANG: go
-          VER: '1.17'
-        - SWIGLANG: guile
-        - SWIGLANG: guile
-          VER: '2.2'
-        - SWIGLANG: guile
-          VER: '3.0'
-        - SWIGLANG: java
-        - SWIGLANG: javascript
-          ENGINE: jsc
-          VER: '4.0'
-        - SWIGLANG: javascript
-          ENGINE: napi
-          VER: '18'
-          CPPSTD: c++11
-        #- SWIGLANG: javascript
-        #  ENGINE: node
-        #  VER: '6'
-        #  CPPSTD: c++11
-        #  os: ubuntu-18.04
-        #- SWIGLANG: javascript
-        #  ENGINE: node
-        #  VER: '8'
-        #  CPPSTD: c++11
-        #  os: ubuntu-18.04
-        #- SWIGLANG: javascript
-        #  ENGINE: node
-        #  VER: '10'
-        #  CPPSTD: c++11
-        #  os: ubuntu-18.04
-        - SWIGLANG: javascript
-          ENGINE: node
-          VER: '12'
-          CPPSTD: c++11
-        - SWIGLANG: lua
-        - SWIGLANG: lua
-          VER: '5.3'
         - SWIGLANG: octave
           CPPSTD: c++11
         - SWIGLANG: octave
           os: ubuntu-22.04 # Octave 6.4.0
           CPPSTD: c++11
-        - SWIGLANG: perl5
-        - SWIGLANG: php
-          VER: '8.0'
-        - SWIGLANG: php
-          VER: '8.1'
-        - SWIGLANG: php
-          VER: '8.2'
-        - SWIGLANG: php
-          VER: '8.3'
-        - SWIGLANG: python
-          PY2: 2
-        #- SWIGLANG: python
-        #  VER: '3.3'
-        #  os: ubuntu-18.04 # Python < 3.5 not available for 20.04.
-        #- SWIGLANG: python
-        #  VER: '3.4'
-        #  os: ubuntu-18.04 # Python < 3.5 not available for 20.04.
-        - SWIGLANG: python
-          VER: '3.5'
-        - SWIGLANG: python
-          VER: '3.6'
-        - SWIGLANG: python
-          VER: '3.7'
-        - SWIGLANG: python
-          VER: '3.8'
-        - SWIGLANG: python
-          VER: '3.9'
-        - SWIGLANG: python
-          VER: '3.10'
-        - SWIGLANG: python
-          VER: '3.11'
-        - SWIGLANG: python
-          VER: '3.12'
-          CSTD: gnu99
-        - SWIGLANG: python
-          PY2: 2
-          SWIG_FEATURES: -builtin
-        - SWIGLANG: python
-          PY2: 2
-          SWIG_FEATURES: -builtin -O
-        - SWIGLANG: python
-          SWIG_FEATURES: -builtin
-        - SWIGLANG: python
-          SWIG_FEATURES: -builtin -O
-        - SWIGLANG: python
-          VER: '3.8'
-          PY_ABI_VER: '3.4'
-        - SWIGLANG: r
-        - SWIGLANG: ruby
-          VER: '2.0'
-        - SWIGLANG: ruby
-          VER: '2.1'
-        - SWIGLANG: ruby
-          VER: '2.2'
-        - SWIGLANG: ruby
-          VER: '2.3'
-        - SWIGLANG: ruby
-          VER: '2.4'
-        - SWIGLANG: ruby
-          VER: '2.5'
-        - SWIGLANG: ruby
-          VER: '2.6'
-        - SWIGLANG: ruby
-          VER: '2.7'
-        - SWIGLANG: ruby
-          VER: '3.0'
-          CPPSTD: c++11
-        - SWIGLANG: ruby
-          VER: '3.1.4' # import_fragments testcase started to fail on upgrade to 3.1.5, see https://github.com/swig/swig/issues/2800
-          CPPSTD: c++11
-        - SWIGLANG: ruby
-          CPPSTD: c++11
-          VER: '3.2.2' # import_fragments testcase started to fail on upgrade to 3.2.3, see https://github.com/swig/swig/issues/2800
-        - SWIGLANG: scilab
-          VER: '5.5.2'
-        - SWIGLANG: scilab
-          VER: '6.0.2'
-        - SWIGLANG: scilab
-          os: ubuntu-22.04 # scilab 6.1.1
-        - SWIGLANG: scilab
-          VER: '2023.0.0'
-        - SWIGLANG: tcl
-        # c++11 testing
-        - SWIGLANG: csharp
-          CPPSTD: c++11
-        - SWIGLANG: go
-          VER: '1.17'
-          CPPSTD: c++11
-          CSTD: gnu11
-        - SWIGLANG: guile
-          CPPSTD: c++11
-        - SWIGLANG: java
-          CPPSTD: c++11
-        - SWIGLANG: javascript
-          ENGINE: jsc
-          VER: '4.1'
-          os: ubuntu-22.04
-          CPPSTD: c++11
-        - SWIGLANG: javascript
-          ENGINE: node
-          VER: '14'
-          CPPSTD: c++11
-        - SWIGLANG: lua
-          CPPSTD: c++11
-        - SWIGLANG: perl5
-          CPPSTD: c++11
-        - SWIGLANG: php
-          CPPSTD: c++11
-          CSTD: gnu11
-        - SWIGLANG: python
-          CPPSTD: c++11
-        - SWIGLANG: r
-          CPPSTD: c++11
-        - SWIGLANG: ruby
-          CPPSTD: c++11
-          VER: '3.3'
-        - SWIGLANG: ruby
-          CPPSTD: c++11
-        - SWIGLANG: scilab
-          CPPSTD: c++11
-        - SWIGLANG: tcl
-          CPPSTD: c++11
-        # c++14 testing
-        - SWIGLANG: csharp
-          CPPSTD: c++14
-        - SWIGLANG: go
-          VER: '1.17'
-          CPPSTD: c++14
-          CSTD: gnu11
-        - SWIGLANG: guile
-          CPPSTD: c++14
-        - SWIGLANG: java
-          CPPSTD: c++14
-        - SWIGLANG: javascript
-          ENGINE: node
-          VER: '16'
-          CPPSTD: c++14
-        - SWIGLANG: lua
-          CPPSTD: c++14
         - SWIGLANG: octave
           CPPSTD: c++14
-        - SWIGLANG: perl5
-          CPPSTD: c++14
-        - SWIGLANG: php
-          CPPSTD: c++14
-          CSTD: gnu11
-        - SWIGLANG: python
-          CPPSTD: c++14
-        - SWIGLANG: r
-          CPPSTD: c++14
-        - SWIGLANG: ruby
-          CPPSTD: c++14
-        - SWIGLANG: scilab
-          CPPSTD: c++14
-        - SWIGLANG: tcl
-          CPPSTD: c++14
-        # c++17 testing (using gcc13)
-        - SWIGLANG: csharp
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: go
-          VER: '1.17'
-          CPPSTD: c++17
-          GCC: 13
-          CSTD: gnu17
-        - SWIGLANG: guile
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: java
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: javascript
-          ENGINE: node
-          VER: '18'
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: lua
-          CPPSTD: c++17
-          GCC: 13
         - SWIGLANG: octave
           CPPSTD: c++17
           GCC: 13
-        - SWIGLANG: perl5
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: php
-          CPPSTD: c++17
-          CSTD: gnu17
-          GCC: 13
-        - SWIGLANG: python
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: r
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: ruby
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: scilab
-          CPPSTD: c++17
-          GCC: 13
-        - SWIGLANG: tcl
-          CPPSTD: c++17
-          GCC: 13
-        # c++20 testing (using gcc13)
-        - SWIGLANG: python
-          CPPSTD: c++20
-          GCC: 13
-          os: ubuntu-22.04
-        - SWIGLANG: javascript
-          ENGINE: napi
-          VER: '20'
-          CPPSTD: c++20
-          GCC: 13
-          os: ubuntu-22.04
-        - SWIGLANG: javascript
-          ENGINE: node
-          VER: '20'
-          CPPSTD: c++20
-          GCC: 13
-          os: ubuntu-22.04
-        # Experimental languages (these are allowed to fail)
-        - SWIGLANG: mzscheme
-          continue-on-error: true
-        - SWIGLANG: ocaml
-          CPPSTD: c++17
-          GCC: 13
-          os: ubuntu-22.04 # ocaml-4.08 in ubuntu-20.04 doesn't work
-          continue-on-error: true
+        - SWIGLANG: octave
+          os: ubuntu-latest
+          container: gnuoctave/octave:4.0.0
+        - SWIGLANG: octave
+          os: ubuntu-latest
+          container: gnuoctave/octave:4.4.1
+        - SWIGLANG: octave
+          os: ubuntu-latest
+          container: gnuoctave/octave:7.3.0
+        - SWIGLANG: octave
+          os: ubuntu-latest
+          container: gnuoctave/octave:8.4.0
+        - SWIGLANG: octave
+          os: ubuntu-latest
+          container: gnuoctave/octave:9.1.0
       # Run all of them, as opposed to aborting when one fails
       fail-fast: false