diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 526ed4c..593e000 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -12,9 +12,8 @@ jobs: build-mex: runs-on: ${{ matrix.os }} strategy: - fail-fast: false matrix: - os: [ubuntu-latest,windows-latest,macos-latest,macos-14] + os: [ubuntu-20.04,windows-2019,macos-12,macos-14] steps: - name: Retrieve the source code uses: actions/checkout@v4 @@ -23,7 +22,7 @@ jobs: - name: Install MATLAB uses: matlab-actions/setup-matlab@v2 with: - release: ${{ matrix.os == 'macos-14' && 'R2023b' || ( matrix.os == 'windows-latest' && 'R2021b' || 'R2021a' ) }} + release: ${{ matrix.os == 'macos-14' && 'R2023b' || ( matrix.os == 'windows-2019' && 'R2021b' || 'R2021a' ) }} - name: Build MATLAB MEX files uses: matlab-actions/run-command@v2 with: @@ -35,15 +34,14 @@ jobs: - name: Upload MATLAB MEX files uses: actions/upload-artifact@v4 with: - name: mexfiles-${{ matrix.os }} + name: mex-${{ matrix.os }} path: | Solver/Mexfun/*.mex* build-oct: runs-on: ${{ matrix.os }} strategy: - fail-fast: false matrix: - os: [ubuntu-latest,windows-latest,macos-latest,macos-14] + os: [ubuntu-20.04,windows-2019,macos-12,macos-14] steps: - name: Retrieve the source code uses: actions/checkout@v4 @@ -52,19 +50,19 @@ jobs: - name: Install Octave shell: bash run: | - if [ "${{ matrix.os }}" = ubuntu-latest ]; then + if [ "${{ matrix.os }}" = ubuntu-20.04 ]; then sudo apt update sudo apt install --no-install-recommends octave liboctave-dev - elif [ "${{ matrix.os }}" = windows-latest ]; then + elif [ "${{ matrix.os }}" = windows-2019 ]; then choco install octave.portable else brew install octave fi - name: Build Octave MEX files - if: matrix.os != 'windows-latest' + if: matrix.os != 'windows-2019' run: octave --eval "install_sdpt3 -rebuild" - name: Build Octave MEX files - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2019' shell: cmd run: | set PATH=C:\ProgramData\chocolatey\bin;%PATH% @@ -72,10 +70,10 @@ jobs: octave-cli.exe --no-gui --eval "install_sdpt3 -rebuild" if %errorlevel% neq 0 exit /b %errorlevel% - name: Run test - if: matrix.os != 'windows-latest' + if: matrix.os != 'windows-2019' run: octave --eval "install_sdpt3; sqlpdemo -noplot -nopause -exitiferror" - name: Run test - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2019' shell: cmd run: | set PATH=C:\ProgramData\chocolatey\bin;%PATH% @@ -83,7 +81,7 @@ jobs: - name: Upload Octave MEX files uses: actions/upload-artifact@v4 with: - name: mexfiles-oct-${{ matrix.os }} + name: oct-${{ matrix.os }} path: | Solver/Mexfun/*.mex package: @@ -98,15 +96,12 @@ jobs: uses: actions/download-artifact@v4 - name: Move artifacts into place run: | - mkdir -p Solver/Mexfun/o_lin && mv mexfiles-oct-ubuntu-latest/* Solver/Mexfun/o_lin/ - mkdir -p Solver/Mexfun/o_win && mv mexfiles-oct-windows-latest/* Solver/Mexfun/o_win/ - mkdir -p Solver/Mexfun/o_maci && mv mexfiles-oct-macos-latest/* Solver/Mexfun/o_maci/ - mkdir -p Solver/Mexfun/o_maca && mv mexfiles-oct-macos-14/* Solver/Mexfun/o_maca/ - mv mexfiles-ubuntu-latest/* Solver/Mexfun/ - mv mexfiles-windows-latest/* Solver/Mexfun/ - mv mexfiles-macos-latest/* Solver/Mexfun/ - mv mexfiles-macos-14/* Solver/Mexfun/ - rmdir mexfiles-* + mkdir -p Solver/Mexfun/o_lin && mv oct-ubuntu-*/* Solver/Mexfun/o_lin/ + mkdir -p Solver/Mexfun/o_win && mv oct-windows-*/* Solver/Mexfun/o_win/ + mkdir -p Solver/Mexfun/o_maci && mv oct-macos-12/* Solver/Mexfun/o_maci/ + mkdir -p Solver/Mexfun/o_maca && mv oct-macos-14/* Solver/Mexfun/o_maca/ + mv mex-*/* Solver/Mexfun/ + rmdir mex-* oct-* - name: Show files, build archives run: | cd .. @@ -125,8 +120,82 @@ jobs: path: | sdpt3.zip sdpt3.tgz + matlab-tests: + needs: package + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest,macos-latest,windows-latest,macos-14] + steps: + - name: Retrieve artifact + uses: actions/download-artifact@v4 + with: + name: bundles + - name: Unpack artifact + run: tar xfz sdpt3.tgz --strip-components=1 + - name: Install latest MATLAB + uses: matlab-actions/setup-matlab@v2 + - name: Run test + uses: matlab-actions/run-command@v2 + with: + command: "install_sdpt3; sqlpdemo -noplot -nopause -exitiferror" + octave-tests: + needs: package + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest,windows-latest,macos-latest,macos-14] + steps: + - name: Retrieve artifact + uses: actions/download-artifact@v4 + with: + name: bundles + - name: Unpack artifact + run: tar xfz sdpt3.tgz --strip-components=1 + - name: Install Octave, Snap, Flatpak + shell: bash + run: | + if [ "${{ matrix.os }}" = ubuntu-latest ]; then + sudo apt update + sudo apt install --no-install-recommends octave flatpak snapd + elif [ "${{ matrix.os }}" = windows-latest ]; then + choco install octave.portable + else + brew install octave + fi + - name: Run test + if: matrix.os != 'windows-latest' + run: octave --eval "install_sdpt3; sqlpdemo -noplot -nopause -exitiferror" + - name: Run test + if: matrix.os == 'windows-latest' + shell: cmd + run: | + set PATH=C:\ProgramData\chocolatey\bin;%PATH% + octave-cli.exe --no-gui --eval "install_sdpt3; sqlpdemo -noplot -nopause -exitiferror" + - name: Flatpak + if: matrix.os == 'ubuntu-latest' + run: | + flatpak remote-add --user --if-not-exists \ + flathub https://flathub.org/repo/flathub.flatpakrepo + flatpak install --user -y flathub org.octave.Octave + flatpak run org.octave.Octave --eval "install_sdpt3; sqlpdemo -noplot -nopause -exitiferror" + flatpak uninstall --user -y org.octave.Octave + - name: Snapd + if: matrix.os == 'ubuntu-latest' + run: | + sudo snap install octave + snap run octave --eval "install_sdpt3; sqlpdemo -noplot -nopause -exitiferror" + sudo snap remove octave + publish: + needs: [matlab-tests,octave-tests] + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + steps: + - name: Retrieve artifacts + uses: actions/download-artifact@v4 + with: + name: bundles - uses: softprops/action-gh-release@v2 - if: startsWith(github.ref, 'refs/tags/') with: files: | sdpt3.tgz