Skip to content

Add Optimization Toolbox to MATLAB CI. #255

Add Optimization Toolbox to MATLAB CI.

Add Optimization Toolbox to MATLAB CI. #255

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-10.15, macos-11.0, macos-12.0, ubuntu-18.04, ubuntu-20.04, ubuntu-22.04]
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 MP-Test, Set MPTEST_PATH
run: |
git clone --depth=1 https://github.com/MATPOWER/mptest.git $HOME/mptest
echo "MPTEST_PATH=$HOME/mptest/lib:$HOME/mptest/lib/t" >> $GITHUB_ENV
- name: Install MIPS, Set MIPS_PATH
run: |
git clone --depth=1 https://github.com/MATPOWER/mips.git $HOME/mips
echo "MIPS_PATH=$HOME/mips/lib:$HOME/mips/lib/t:${MPTEST_PATH}" >> $GITHUB_ENV
- name: Set MP_OPT_MODEL_PATH
run: echo "MP_OPT_MODEL_PATH=${GITHUB_WORKSPACE}/lib:${GITHUB_WORKSPACE}/lib/t:${MIPS_PATH}" >> $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: env $ML_PATHVAR=$MPTEST_PATH $ML_CMD "mptestver; test_mptest(0,1)"
- name: Test MIPS
run: env $ML_PATHVAR=$MIPS_PATH $ML_CMD "mipsver; test_mips(0,1)"
- name: Test MP-Opt-Model
run: env $ML_PATHVAR=$MP_OPT_MODEL_PATH $ML_CMD "mpomver; test_mp_opt_model(0,1)"
# - name: Test MP-Opt-Model-OSQP
# run: env $ML_PATHVAR=$MP_OPT_MODEL_PATH $ML_CMD "t_om_solve_qps"
# - name: Create MEX file downloads
# uses: actions/upload-artifact@v2
# with:
# name: ${{ matrix.os }}-octave-${{ env.OCTAVE_VER }}-mex-files
# path: |
# ~/build/ipopt
# ~/build/osqp-matlab