Skip to content

Fix and update Docker auto testing. #398

Fix and update Docker auto testing.

Fix and update Docker auto testing. #398

name: CI
# controls when action will run
on:
# triggers workflow on push events
push:
# allows workflow to be triggered manually from Actions tab
workflow_dispatch:
jobs:
build:
strategy:
fail-fast: false
matrix:
platform: [octave]
os: [macos-latest, ubuntu-20.04, ubuntu-22.04]
include:
- platform: matlab
os: ubuntu-latest
runs-on: ${{ matrix.os }}
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Include IPOPT?
if: matrix.platform == 'matlab' || matrix.os != 'ubuntu-16.04'
run: echo "INCLUDE_IPOPT=1" >> $GITHUB_ENV
- name: Include OSQP?
if: matrix.platform == 'matlab' || (matrix.os != 'ubuntu-16.04' && matrix.os != 'ubuntu-18.04')
run: echo "INCLUDE_OSQP=1" >> $GITHUB_ENV
- name: Cache IPOPT Libs (macOS)
if: env.INCLUDE_IPOPT && startsWith(matrix.os, 'macos')
id: cache-ipopt-libs
env:
cache-name: ipopt-libs
uses: actions/cache@v4
with:
path: ~/install
key: ${{ env.cache-name }}-${{ matrix.os }}
- name: Build IPOPT (macOS)
if: env.INCLUDE_IPOPT && startsWith(matrix.os, 'macos') && steps.cache-ipopt-libs.outputs.cache-hit != 'true'
uses: MATPOWER/action-build-ipopt-macos@v1
- name: Cache IPOPT interface
if: env.INCLUDE_IPOPT
id: cache-ipopt
env:
cache-name: ipopt
uses: actions/cache@v4
with:
path: ~/build/ipopt
key: ${{ env.cache-name }}-${{ matrix.platform }}-${{ matrix.os }}
- name: Cache OSQP interface
if: env.INCLUDE_OSQP
id: cache-osqp
env:
cache-name: osqp
uses: actions/cache@v4
with:
path: ~/build/osqp-matlab
key: ${{ env.cache-name }}-${{ matrix.platform }}-${{ matrix.os }}
- name: Install Octave (Linux)
if: matrix.platform == 'octave' && startsWith(matrix.os, 'ubuntu')
uses: MATPOWER/action-install-octave-linux@v1
with:
ipopt-libs: ${{ env.INCLUDE_IPOPT == 1 }}
- name: Install Octave (macOS)
if: matrix.platform == 'octave' && startsWith(matrix.os, 'macos')
uses: MATPOWER/action-install-octave-macos@v1
- name: Install MATLAB
if: matrix.platform == 'matlab'
uses: matlab-actions/setup-matlab@v2
with:
products: Optimization_Toolbox
- name: Configure MATLAB
if: matrix.platform == 'matlab'
uses: MATPOWER/action-configure-matlab@v2
with:
os: ${{ matrix.os }}
ipopt: ${{ env.INCLUDE_IPOPT == 1 }}
ipopt-cached: ${{ steps.cache-ipopt.outputs.cache-hit == 'true' }}
osqp: ${{ env.INCLUDE_OSQP == 1 }}
osqp-cached: ${{ steps.cache-osqp.outputs.cache-hit == 'true' }}
- name: ${{ env.ML_NAME }} ${{ env.ML_VER }} Installed
run: $ML_CMD ver
- name: Install IPOPT interface for Octave
if: env.INCLUDE_IPOPT && matrix.platform == 'octave'
uses: MATPOWER/action-install-ipopt-octave@v1
with:
cached: ${{ steps.cache-ipopt.outputs.cache-hit == 'true' }}
- name: Install OSQP interface for Octave
if: env.INCLUDE_OSQP && matrix.platform == 'octave'
uses: MATPOWER/action-install-osqp-octave@v1
with:
cached: ${{ steps.cache-osqp.outputs.cache-hit == 'true' }}
- name: Install MATPOWER
run: |
$ML_CMD "install_matpower(0,1,1)"
ln -s ./startup.m .octaverc
$ML_CMD mpver
- name: Include MP-Core?
run: |
export HAVE_MP_CORE=`$ML_CMD "fprintf('%d', have_feature('mp_core'))"`
export INCLUDE_MP_CORE=${HAVE_MP_CORE: -1}
echo "INCLUDE_MP_CORE=${INCLUDE_MP_CORE}" >> $GITHUB_ENV
- name: Test GLPK availability, print version number
if: matrix.platform == 'octave'
run: env $ML_PATHVAR=$MP_OPT_MODEL_PATH $ML_CMD "qps_glpk( [],[1; 1],[1 1],[2],[2],[1; 1],[1; 1],[1; 1],struct('verbose', 3)); if ~have_feature('glpk'), exit(1); end"
- name: Test IPOPT availability, print version number
if: env.INCLUDE_IPOPT
run: env $ML_PATHVAR=$MP_OPT_MODEL_PATH $ML_CMD "qps_ipopt([],[1; 1],[1 1],[2],[2],[1; 1],[1; 1],[1; 1],struct('verbose', 2)); if ~have_feature('ipopt'), exit(1); end"
- name: Test OSQP availability, print version number
if: env.INCLUDE_OSQP
run: env $ML_PATHVAR=$MP_OPT_MODEL_PATH $ML_CMD "osqpver; if ~have_feature('osqp'), exit(1); end"
- name: Test MP-Test
run: $ML_CMD "test_mptest(0,1)"
- name: Test MIPS
run: $ML_CMD "test_mips(0,1)"
- name: Test MP-Opt-Model
run: $ML_CMD "test_mp_opt_model(0,1)"
- name: Test MATPOWER (MP_CORE=${{ env.INCLUDE_MP_CORE }})
run: $ML_CMD "test_matpower(0,1)"
- name: Test MOST
run: $ML_CMD "test_most(0,1)"
- name: Test MATPOWER Legacy
if: env.INCLUDE_MP_CORE == '1'
run: $ML_CMD "have_feature('mp_core', 0); test_matpower(0,1)"