From df7bd5749879c06ae1126a85404b6b43de99a1d1 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Tue, 29 Jul 2025 15:59:43 +0200 Subject: [PATCH 01/14] improved workflows --- .github/CODEOWNERS | 1 + .github/workflows/release-matfrostmex.yml | 47 +++++++------- .github/workflows/run-tests-dispatch.yml | 3 + .github/workflows/run-tests-reusable.yml | 4 +- .github/workflows/run-tests-ubuntu.yml | 19 ------ .github/workflows/run-tests-windows.yml | 19 ------ .github/workflows/run-tests.yml | 78 +++++++++++++++++------ Artifacts.toml | 6 +- 8 files changed, 90 insertions(+), 87 deletions(-) create mode 100644 .github/CODEOWNERS delete mode 100644 .github/workflows/run-tests-ubuntu.yml delete mode 100644 .github/workflows/run-tests-windows.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..9e428e0 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @jorisbelierasml @watermarkhu diff --git a/.github/workflows/release-matfrostmex.yml b/.github/workflows/release-matfrostmex.yml index 7eb262f..a335bd6 100644 --- a/.github/workflows/release-matfrostmex.yml +++ b/.github/workflows/release-matfrostmex.yml @@ -11,7 +11,7 @@ jobs: build-mex-binary: strategy: matrix: - matlab-version: ['2021b', '2022a', '2022b', '2023a', '2023b', '2024a'] + matlab-version: ['2021b', '2022a', '2022b', '2023a', '2023b', '2024a', '2024b', '2025a'] runs-on: windows-latest name: windows-R${{ matrix.matlab-version }} steps: @@ -34,26 +34,27 @@ jobs: with: path: src/matfrostjuliacall/bin name: matfrost-mex-win-r${{ matrix.matlab-version }}-x64 - release-mex-binary: - needs: build-mex-binary - runs-on: ubuntu-latest - name: Release-MEX-Binary - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Download MEX artifacts - uses: actions/download-artifact@v4 - with: - path: mexbinwin - merge-multiple: true - - name: Display structure of downloade MEX binaries. - run: ls -R mexbinwin - - name: Upload MEX binaries - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - cd mexbinwin - tar -czvf ../matfrost-mex-v${{ inputs.matfrost-mex-version }}-win-x64.tar.gz * - cd .. - gh release create matfrost-mex-v${{ inputs.matfrost-mex-version }} --latest=false matfrost-mex-v${{ inputs.matfrost-mex-version }}-win-x64.tar.gz + + # release-mex-binary: + # needs: build-mex-binary + # runs-on: ubuntu-latest + # name: Release-MEX-Binary + # steps: + # - name: Checkout code + # uses: actions/checkout@v4 + # - name: Download MEX artifacts + # uses: actions/download-artifact@v4 + # with: + # path: mexbinwin + # merge-multiple: true + # - name: Display structure of downloade MEX binaries. + # run: ls -R mexbinwin + # - name: Upload MEX binaries + # env: + # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # run: | + # cd mexbinwin + # tar -czvf ../matfrost-mex-v${{ inputs.matfrost-mex-version }}-win-x64.tar.gz * + # cd .. + # gh release create matfrost-mex-v${{ inputs.matfrost-mex-version }} --latest=false matfrost-mex-v${{ inputs.matfrost-mex-version }}-win-x64.tar.gz diff --git a/.github/workflows/run-tests-dispatch.yml b/.github/workflows/run-tests-dispatch.yml index 769cc9a..95ba70a 100644 --- a/.github/workflows/run-tests-dispatch.yml +++ b/.github/workflows/run-tests-dispatch.yml @@ -22,6 +22,8 @@ on: - 'R2023a' - 'R2023b' - 'R2024a' + - 'R2024b' + - 'R2025a' julia-version: required: true description: "Julia version" @@ -31,6 +33,7 @@ on: - '1.8' - '1.9' - '1.10' + - '1.11' jobs: test: diff --git a/.github/workflows/run-tests-reusable.yml b/.github/workflows/run-tests-reusable.yml index bc3fe3a..aa5c56f 100644 --- a/.github/workflows/run-tests-reusable.yml +++ b/.github/workflows/run-tests-reusable.yml @@ -21,7 +21,7 @@ on: env: - GCC_VERSION: ${{ (startsWith(inputs.matlab-version, 'R2022') && '9' || '10') }} + GCC_VERSION: ${{ (startsWith(inputs.matlab-version, 'R2021') || (startsWith(inputs.matlab-version, 'R2022')) && '9' || '10') }} jobs: test: @@ -63,8 +63,6 @@ jobs: products: > ${{ contains(inputs.matlab-version, '2024') && 'MATLAB_Support_for_MinGW-w64_C/C++/Fortran_Compiler' || 'MATLAB_Support_for_MinGW-w64_C/C++_Compiler' }} - - - name: Run tests uses: matlab-actions/run-tests@v2 env: diff --git a/.github/workflows/run-tests-ubuntu.yml b/.github/workflows/run-tests-ubuntu.yml deleted file mode 100644 index 46a3c3e..0000000 --- a/.github/workflows/run-tests-ubuntu.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: "ubuntu" - -on: - workflow_call: - workflow_dispatch: - -jobs: - test-ubuntu: - uses: ./.github/workflows/run-tests-reusable.yml - secrets: inherit - strategy: - fail-fast: false - matrix: - matlab-version: ['R2022a', 'R2022b', 'R2023b'] - julia-version: ['1.7', '1.8', '1.9', '1.10'] - with: - os: ubuntu-latest - matlab-version: ${{ matrix.matlab-version }} - julia-version: ${{ matrix.julia-version }} diff --git a/.github/workflows/run-tests-windows.yml b/.github/workflows/run-tests-windows.yml deleted file mode 100644 index c57d159..0000000 --- a/.github/workflows/run-tests-windows.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: "windows" - -on: - workflow_call: - workflow_dispatch: - -jobs: - test-windows: - uses: ./.github/workflows/run-tests-reusable.yml - secrets: inherit - strategy: - fail-fast: false - matrix: - matlab-version: ['R2021b', 'R2022b', 'R2023b'] - julia-version: ['1.7', '1.8', '1.9', '1.10', '1.11'] - with: - os: windows-latest - matlab-version: ${{ matrix.matlab-version }} - julia-version: ${{ matrix.julia-version }} diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 13fe899..59a536f 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -1,16 +1,6 @@ name: Run Tests Automation on: - workflow_dispatch: - push: - branches: - - main - paths: - - 'src/**' - - 'test/**' - - 'Project.toml' - - '.github/workflows/run-tests.yml' - - '.github/workflows/run-tests-reusable.yml' pull_request: branches: - main @@ -27,13 +17,61 @@ on: - '.github/workflows/run-tests-reusable.yml' jobs: - # Linux disabled due to incompatability. - # - # ubuntu: - # uses: ./.github/workflows/run-tests-ubuntu.yml - # if: ${{ ((github.event_name == 'pull_request') && !github.event.pull_request.draft) || (github.event_name == 'push') || (github.event_name == 'workflow_dispatch') }} - # secrets: inherit - windows: - uses: ./.github/workflows/run-tests-windows.yml - if: ${{ ((github.event_name == 'pull_request') && !github.event.pull_request.draft) || (github.event_name == 'push') || (github.event_name == 'workflow_dispatch') }} - secrets: inherit + changed-files: + name: Check for changed files + runs-on: ubuntu-latest + outputs: + changed-workflows: ${{ steps.changed-files.outputs.workflows_any_changed }} + changed-src: ${{ steps.changed-files.outputs.src_any_changed }} + changed-test: ${{ steps.changed-files.outputs.test_any_changed }} + changed-examples: ${{ steps.changed-files.outputs.examples_any_changed }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v46 + with: + files_yaml: | + workflows: + - .github/workflows/run-tests*.yaml + src: + - src/** + - Project.toml + - Artifacts.toml + test: + - test/** + examples: + - examples/** + + test-matrix: + name: Test Matrix + needs: [changed-files] + if: ${{ needs.changed-files.outputs.changed-workflows || needs.changed-files.outputs.changed-src || needs.changed-files.outputs.changed-test || needs.changed-files.outputs.changed-examples }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + julia-version: ['1.7', '1.8', '1.9', '1.10', '1.11'] + matlab-version: ['R2021b', 'R2022a', 'R2022b', 'R2023a', 'R2023b', 'R2024a', 'R2024b', 'R2025a'] + uses: ./.github/workflows/run-tests-reusable.yml + with: + os: ${{ matrix.os }} + julia-version: ${{ matrix.julia-version }} + matlab-version: ${{ matrix.matlab-version }} + + summary: + name: Summary + needs: [changed-files, test-matrix] + runs-on: ubuntu-latest + steps: + - name: Download artifacts + uses: actions/download-artifact@v4 + + - name: Generate JUnit summary + if: ${{ needs.changed-files.outputs.changed-workflows || needs.changed-files.outputs.changed-src || needs.changed-files.outputs.changed-test || needs.changed-files.outputs.changed-examples }} + uses: mikepenz/action-junit-report@v5 + with: + report_paths: results-*/results.xml + fail_on_error: true diff --git a/Artifacts.toml b/Artifacts.toml index 11cc1d4..89739de 100644 --- a/Artifacts.toml +++ b/Artifacts.toml @@ -2,6 +2,6 @@ git-tree-sha1 = "3c64e8d2a2e9720abcb9edfdfae4bae4882d0d40" - [[matfrost-mex.download]] - sha256 = "26cea9dca7b408b84a9a66e0974aa121253d8c4314687d97bf5c9989e16479e1" - url = "https://github.com/ASML-Labs/MATFrost.jl/releases/download/matfrost-mex-v0.4.0/matfrost-mex-v0.4.0-win-x64.tar.gz" +[[matfrost-mex.download]] +sha256 = "26cea9dca7b408b84a9a66e0974aa121253d8c4314687d97bf5c9989e16479e1" +url = "https://github.com/ASML-Labs/MATFrost.jl/releases/download/matfrost-mex-v0.4.0/matfrost-mex-v0.4.0-win-x64.tar.gz" From 4f8121c46b6cbaca0755a0b2439322e40c2a5714 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Tue, 29 Jul 2025 16:16:53 +0200 Subject: [PATCH 02/14] better logic --- .github/workflows/run-tests-reusable.yml | 50 +++++++++++++++++++----- .github/workflows/run-tests.yml | 1 + 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/.github/workflows/run-tests-reusable.yml b/.github/workflows/run-tests-reusable.yml index aa5c56f..ee5942c 100644 --- a/.github/workflows/run-tests-reusable.yml +++ b/.github/workflows/run-tests-reusable.yml @@ -19,12 +19,43 @@ on: default: "1.10" type: string +jobs: + config: + runs-on: ubuntu-latest + steps: + - name: Parse MATLAB version + id: parse_matlab_version + run: | + VERSION="${{ inputs.matlab-version }}" + YEAR=$(echo "$VERSION" | grep -oP 'R\K[0-9]{4}') + RELEASE=$(echo "$VERSION" | grep -oP '[ab]$') + echo "MATLAB_YEAR=$YEAR" >> $GITHUB_ENV + echo "MATLAB_RELEASE=$RELEASE" >> $GITHUB_ENV -env: - GCC_VERSION: ${{ (startsWith(inputs.matlab-version, 'R2021') || (startsWith(inputs.matlab-version, 'R2022')) && '9' || '10') }} + - name: Set GCC version + id: set_gcc_version + run: | + if [[ "${{ env.MATLAB_YEAR }}" -lt 2021 ]]; then + echo "gcc_version=9" >> $GITHUB_OUTPUT + else + echo "gcc_version=10" >> $GITHUB_OUTPUT + fi + + - name: Set Windows GCC products + id: set_windows_products + run: | + if [[ "${{ env.MATLAB_YEAR }}" -ge 2024 ]]; then + echo "windows_products=MATLAB_Support_for_MinGW-w64_C/C++/Fortran_Compiler" >> $GITHUB_OUTPUT + else + echo "windows_products=MATLAB_Support_for_MinGW-w64_C/C++_Compiler" >> $GITHUB_OUTPUT + fi + + outputs: + gcc_version: ${{ steps.set_gcc_version.outputs.gcc_version }} + windows_products: ${{ steps.set_windows_products.outputs.windows_products }} -jobs: test: + needs: [config] runs-on: ${{ inputs.os }} name: ${{ inputs.os }}-${{ inputs.matlab-version }}-${{ inputs.julia-version }} steps: @@ -32,10 +63,10 @@ jobs: - name: Configure compatible linux GCC compiler for MATLAB. if: ${{ startsWith(inputs.os , 'ubuntu') }} run: | - sudo apt-get install g++-${{ env.GCC_VERSION }} - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${{ env.GCC_VERSION }} 100 + sudo apt-get install g++-${{ needs.config.outputs.gcc_version }} + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${{ needs.config.outputs.gcc_version }} 100 sudo update-alternatives --config g++ - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_VERSION }} 100 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ needs.config.outputs.gcc_version }} 100 sudo update-alternatives --config gcc g++ --version gcc --version @@ -47,9 +78,9 @@ jobs: with: channel: ${{ inputs.julia-version }} - - name: Set up MATLAB on Unix/Mac + - name: Set up MATLAB on Unix uses: matlab-actions/setup-matlab@v2 - if: ${{ !contains( inputs.os, 'windows') }} + if: ${{ startsWith(inputs.os , 'ubuntu') }} with: release: ${{ inputs.matlab-version }} cache: true @@ -60,8 +91,7 @@ jobs: with: release: ${{ inputs.matlab-version }} cache: true - products: > - ${{ contains(inputs.matlab-version, '2024') && 'MATLAB_Support_for_MinGW-w64_C/C++/Fortran_Compiler' || 'MATLAB_Support_for_MinGW-w64_C/C++_Compiler' }} + products: ${{ needs.config.outputs.windows_products }} - name: Run tests uses: matlab-actions/run-tests@v2 diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 59a536f..e2c367b 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -64,6 +64,7 @@ jobs: summary: name: Summary needs: [changed-files, test-matrix] + if: ${{ !cancelled() }} runs-on: ubuntu-latest steps: - name: Download artifacts From 502b2300e28466ae984d6aa7feb2975a74bfc635 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Tue, 29 Jul 2025 16:20:20 +0200 Subject: [PATCH 03/14] concurrency and windows --- .github/workflows/run-tests.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index e2c367b..fb49784 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -1,4 +1,4 @@ -name: Run Tests Automation +name: Testing on: pull_request: @@ -16,6 +16,10 @@ on: - '.github/workflows/run-tests.yml' - '.github/workflows/run-tests-reusable.yml' +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}-${{ github.event.pull_request.merged }}" + cancel-in-progress: true + jobs: changed-files: name: Check for changed files @@ -46,13 +50,12 @@ jobs: - examples/** test-matrix: - name: Test Matrix needs: [changed-files] if: ${{ needs.changed-files.outputs.changed-workflows || needs.changed-files.outputs.changed-src || needs.changed-files.outputs.changed-test || needs.changed-files.outputs.changed-examples }} strategy: fail-fast: false matrix: - os: [ubuntu-latest] + os: [winodws-latest'] julia-version: ['1.7', '1.8', '1.9', '1.10', '1.11'] matlab-version: ['R2021b', 'R2022a', 'R2022b', 'R2023a', 'R2023b', 'R2024a', 'R2024b', 'R2025a'] uses: ./.github/workflows/run-tests-reusable.yml From acec3a676ee65f9d1b25ac2768f22960cbc95ce0 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Tue, 29 Jul 2025 16:21:49 +0200 Subject: [PATCH 04/14] typo --- .github/workflows/run-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index fb49784..50a5b4a 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -55,7 +55,7 @@ jobs: strategy: fail-fast: false matrix: - os: [winodws-latest'] + os: [winodws-latest] julia-version: ['1.7', '1.8', '1.9', '1.10', '1.11'] matlab-version: ['R2021b', 'R2022a', 'R2022b', 'R2023a', 'R2023b', 'R2024a', 'R2024b', 'R2025a'] uses: ./.github/workflows/run-tests-reusable.yml From 5fa0f688b265528ab4dd62666e1d228cfb12e189 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Tue, 29 Jul 2025 16:37:15 +0200 Subject: [PATCH 05/14] typo --- .github/workflows/run-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 50a5b4a..f5a5a28 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -55,7 +55,7 @@ jobs: strategy: fail-fast: false matrix: - os: [winodws-latest] + os: [windows-latest] julia-version: ['1.7', '1.8', '1.9', '1.10', '1.11'] matlab-version: ['R2021b', 'R2022a', 'R2022b', 'R2023a', 'R2023b', 'R2024a', 'R2024b', 'R2025a'] uses: ./.github/workflows/run-tests-reusable.yml From 899760a04dabd23aa7894a53ad1e7e9828742bc7 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Tue, 29 Jul 2025 16:37:45 +0200 Subject: [PATCH 06/14] trigger --- .github/workflows/run-tests.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index f5a5a28..d4996b0 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -9,12 +9,6 @@ on: - reopened - synchronize - ready_for_review - paths: - - 'src/**' - - 'test/**' - - 'Project.toml' - - '.github/workflows/run-tests.yml' - - '.github/workflows/run-tests-reusable.yml' concurrency: group: "${{ github.workflow }}-${{ github.ref }}-${{ github.event.pull_request.merged }}" From 6b62d4f2d8568faa799fc966dc075fb7862d8b4e Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Tue, 29 Jul 2025 16:42:33 +0200 Subject: [PATCH 07/14] copilot --- .github/workflows/run-tests-reusable.yml | 2 +- .github/workflows/run-tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run-tests-reusable.yml b/.github/workflows/run-tests-reusable.yml index ee5942c..f10df47 100644 --- a/.github/workflows/run-tests-reusable.yml +++ b/.github/workflows/run-tests-reusable.yml @@ -35,7 +35,7 @@ jobs: - name: Set GCC version id: set_gcc_version run: | - if [[ "${{ env.MATLAB_YEAR }}" -lt 2021 ]]; then + if [[ "${{ env.MATLAB_YEAR }}" -le 2021 ]]; then echo "gcc_version=9" >> $GITHUB_OUTPUT else echo "gcc_version=10" >> $GITHUB_OUTPUT diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index d4996b0..46c7275 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -33,7 +33,7 @@ jobs: with: files_yaml: | workflows: - - .github/workflows/run-tests*.yaml + - .github/workflows/run-tests*.yml src: - src/** - Project.toml From e39e1b22ccab735f8fc111b7844a699ee8a4e927 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Wed, 30 Jul 2025 08:55:36 +0200 Subject: [PATCH 08/14] use different test summary action --- .github/workflows/run-tests.yml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 46c7275..24e080c 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -18,6 +18,8 @@ jobs: changed-files: name: Check for changed files runs-on: ubuntu-latest + permissions: + contents: read outputs: changed-workflows: ${{ steps.changed-files.outputs.workflows_any_changed }} changed-src: ${{ steps.changed-files.outputs.src_any_changed }} @@ -46,6 +48,8 @@ jobs: test-matrix: needs: [changed-files] if: ${{ needs.changed-files.outputs.changed-workflows || needs.changed-files.outputs.changed-src || needs.changed-files.outputs.changed-test || needs.changed-files.outputs.changed-examples }} + permissions: + contents: read strategy: fail-fast: false matrix: @@ -63,13 +67,16 @@ jobs: needs: [changed-files, test-matrix] if: ${{ !cancelled() }} runs-on: ubuntu-latest + permissions: + checks: write + contents: read steps: - name: Download artifacts uses: actions/download-artifact@v4 - - name: Generate JUnit summary + - name: Generate test summary if: ${{ needs.changed-files.outputs.changed-workflows || needs.changed-files.outputs.changed-src || needs.changed-files.outputs.changed-test || needs.changed-files.outputs.changed-examples }} - uses: mikepenz/action-junit-report@v5 + uses: EnricoMi/publish-unit-test-result-action@v2 with: - report_paths: results-*/results.xml - fail_on_error: true + files: results-*/results.xml + action_fail: true From a5301c383442933a88a113e46c0b10fef55639f3 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Wed, 30 Jul 2025 10:40:43 +0200 Subject: [PATCH 09/14] result table --- .github/workflows/run-tests-reusable.yml | 23 ++++++++++-- .github/workflows/run-tests.yml | 48 ++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/.github/workflows/run-tests-reusable.yml b/.github/workflows/run-tests-reusable.yml index f10df47..65d54a2 100644 --- a/.github/workflows/run-tests-reusable.yml +++ b/.github/workflows/run-tests-reusable.yml @@ -94,6 +94,7 @@ jobs: products: ${{ needs.config.outputs.windows_products }} - name: Run tests + id: tests uses: matlab-actions/run-tests@v2 env: JULIA_VERSION: ${{ inputs.julia-version }} @@ -101,12 +102,28 @@ jobs: source-folder: 'src/matlab' select-by-folder: 'test' strict: false - test-results-junit: test-reults/results.xml - code-coverage-cobertura: test-reults/coverage.xml + test-results-junit: test-results/results.xml + code-coverage-cobertura: test-results/coverage.xml + + - name: Write test result status + if: always() + env: + outcome: ${{ steps.tests.outcome }} + run: | + mkdir -p test-results + if [ "$outcome" = "success" ]; then + echo "✅" > test-results/outcome.txt + elif [ "$outcome" = "failure" ]; then + echo "❌" > test-results/outcome.txt + elif [ "$outcome" = "skipped" ]; then + echo "⏭️" > test-results/outcome.txt + else + echo "❔" > test-results/outcome.txt + fi - name: Upload artifacts if: always() uses: actions/upload-artifact@v4 with: - path: test-reults + path: test-results name: results-${{ inputs.os }}-${{ inputs.matlab-version }}-${{ inputs.julia-version }} diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 24e080c..a77e41a 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -14,6 +14,11 @@ concurrency: group: "${{ github.workflow }}-${{ github.ref }}-${{ github.event.pull_request.merged }}" cancel-in-progress: true +env: + os: '["windows-latest"]' + julia-version: '["1.7", "1.8", "1.9", "1.10", "1.11"]' + matlab-version: '["R2021b", "R2022a", "R2022b", "R2023a", "R2023b", "R2024a", "R2024b", "R2025a"]' + jobs: changed-files: name: Check for changed files @@ -53,9 +58,10 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-latest] - julia-version: ['1.7', '1.8', '1.9', '1.10', '1.11'] - matlab-version: ['R2021b', 'R2022a', 'R2022b', 'R2023a', 'R2023b', 'R2024a', 'R2024b', 'R2025a'] + os: ${{ fromJson(env.os) }} + julia-version: ${{ fromJson(env.julia-version) }} + matlab-version: ${{ fromJson(env.matlab-version) }} + uses: ./.github/workflows/run-tests-reusable.yml with: os: ${{ matrix.os }} @@ -68,12 +74,46 @@ jobs: if: ${{ !cancelled() }} runs-on: ubuntu-latest permissions: - checks: write contents: read + checks: write + pull-requests: write + steps: - name: Download artifacts uses: actions/download-artifact@v4 + - name: Generate outcome tables + shell: bash + run: | + set -e + os_list=($(echo "$os" | jq -r '.[]')) + julia_versions=($(echo "$julia_version" | jq -r '.[]')) + matlab_versions=($(echo "$matlab_version" | jq -r '.[]')) + for os_name in "${os_list[@]}"; do + table="| MATLAB / Julia |" + for julia in "${julia_versions[@]}"; do + table+=" $julia |" + done + table+="\n|---|"$(printf '---|' $(seq 1 ${#julia_versions[@]}))"\n" + for matlab in ${matlab_versions[@]}; do + row="| $matlab |" + for julia in "${julia_versions[@]}"; do + outcome_file="results-${os_name}-${matlab}-${julia}/outcome.txt" + if [[ -f "$outcome_file" ]]; then + outcome=$(cat "$outcome_file") + else + outcome="N/A" + fi + row+=" $outcome |" + done + table+="$row\n" + done + echo -e "\n### Results for \`$os_name\`\n$table" | tee -a outcome_tables.md + done + cat outcome_tables.md + echo "" >> $GITHUB_STEP_SUMMARY + cat outcome_tables.md >> $GITHUB_STEP_SUMMARY + - name: Generate test summary if: ${{ needs.changed-files.outputs.changed-workflows || needs.changed-files.outputs.changed-src || needs.changed-files.outputs.changed-test || needs.changed-files.outputs.changed-examples }} uses: EnricoMi/publish-unit-test-result-action@v2 From c65b76b3f65844fa49cc285b3edf770fef42a0b0 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Wed, 30 Jul 2025 10:43:47 +0200 Subject: [PATCH 10/14] cannot access env in job --- .github/workflows/run-tests.yml | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index a77e41a..d571272 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -14,11 +14,6 @@ concurrency: group: "${{ github.workflow }}-${{ github.ref }}-${{ github.event.pull_request.merged }}" cancel-in-progress: true -env: - os: '["windows-latest"]' - julia-version: '["1.7", "1.8", "1.9", "1.10", "1.11"]' - matlab-version: '["R2021b", "R2022a", "R2022b", "R2023a", "R2023b", "R2024a", "R2024b", "R2025a"]' - jobs: changed-files: name: Check for changed files @@ -58,16 +53,16 @@ jobs: strategy: fail-fast: false matrix: - os: ${{ fromJson(env.os) }} - julia-version: ${{ fromJson(env.julia-version) }} - matlab-version: ${{ fromJson(env.matlab-version) }} + os: [windows-latest] + julia-version: [1.7, 1.8, 1.9, 1.10, 1.11] + matlab-version: [R2021b, R2022a, R2022b, R2023a, R2023b, R2024a, R2024b, R2025a] uses: ./.github/workflows/run-tests-reusable.yml with: os: ${{ matrix.os }} julia-version: ${{ matrix.julia-version }} matlab-version: ${{ matrix.matlab-version }} - + summary: name: Summary needs: [changed-files, test-matrix] @@ -77,7 +72,10 @@ jobs: contents: read checks: write pull-requests: write - + env: + os: windows-latest + julia-version: 1.7 1.8 1.9 1.10 1.11 + matlab-version: R2021b R2022a R2022b R2023a R2023b R2024a R2024b R2025a steps: - name: Download artifacts uses: actions/download-artifact@v4 @@ -86,11 +84,11 @@ jobs: shell: bash run: | set -e - os_list=($(echo "$os" | jq -r '.[]')) - julia_versions=($(echo "$julia_version" | jq -r '.[]')) - matlab_versions=($(echo "$matlab_version" | jq -r '.[]')) + os_list=($os) + julia_versions=($julia_version) + matlab_versions=($matlab_version) for os_name in "${os_list[@]}"; do - table="| MATLAB / Julia |" + table="| #{os_name} |" for julia in "${julia_versions[@]}"; do table+=" $julia |" done @@ -100,9 +98,9 @@ jobs: for julia in "${julia_versions[@]}"; do outcome_file="results-${os_name}-${matlab}-${julia}/outcome.txt" if [[ -f "$outcome_file" ]]; then - outcome=$(cat "$outcome_file") + outcome=$(cat "$outcome_file") else - outcome="N/A" + outcome="N/A" fi row+=" $outcome |" done From 3201384f375830d87750e59224bd66ee6f12abe0 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Wed, 30 Jul 2025 13:52:05 +0200 Subject: [PATCH 11/14] outcome tables --- .github/workflows/run-tests.yml | 36 +++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index d571272..345fe90 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -73,40 +73,46 @@ jobs: checks: write pull-requests: write env: - os: windows-latest - julia-version: 1.7 1.8 1.9 1.10 1.11 - matlab-version: R2021b R2022a R2022b R2023a R2023b R2024a R2024b R2025a + OS: windows-latest + JULIA_VERSION: 1.7 1.8 1.9 1.10 1.11 + MATLAB_VERSION: R2021b R2022a R2022b R2023a R2023b R2024a R2024b R2025a steps: - name: Download artifacts uses: actions/download-artifact@v4 - name: Generate outcome tables + continue-on-error: true shell: bash run: | set -e - os_list=($os) - julia_versions=($julia_version) - matlab_versions=($matlab_version) - for os_name in "${os_list[@]}"; do - table="| #{os_name} |" - for julia in "${julia_versions[@]}"; do + os_list=($OS) + julia_versions=($JULIA_VERSION) + matlab_versions=($MATLAB_VERSION) + for os_name in ${os_list[@]}; do + echo "Generating outcome table for ${os_name}..." + table="| ${os_name} |" + for julia in ${julia_versions[@]}; do table+=" $julia |" done - table+="\n|---|"$(printf '---|' $(seq 1 ${#julia_versions[@]}))"\n" + table+="\n|---|" + for ((i=0; i<${#julia_versions[@]}; i++)); do + table+="---|" + done + table+="\n" for matlab in ${matlab_versions[@]}; do row="| $matlab |" - for julia in "${julia_versions[@]}"; do - outcome_file="results-${os_name}-${matlab}-${julia}/outcome.txt" + for julia in ${julia_versions[@]}; do + outcome_file=outcome.txt if [[ -f "$outcome_file" ]]; then - outcome=$(cat "$outcome_file") + outcome=$(cat "$outcome_file") else - outcome="N/A" + outcome="N/A" fi row+=" $outcome |" done table+="$row\n" done - echo -e "\n### Results for \`$os_name\`\n$table" | tee -a outcome_tables.md + echo -e "\n### Results for \`${os_name}\`\n\n$table" | tee -a outcome_tables.md done cat outcome_tables.md echo "" >> $GITHUB_STEP_SUMMARY From 038a09c36ec36ad2ddf2ad20a9bdd980c687a5f4 Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Thu, 31 Jul 2025 09:11:40 +0200 Subject: [PATCH 12/14] Use python shell --- .github/workflows/run-tests-reusable.yml | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/run-tests-reusable.yml b/.github/workflows/run-tests-reusable.yml index 65d54a2..e4552b7 100644 --- a/.github/workflows/run-tests-reusable.yml +++ b/.github/workflows/run-tests-reusable.yml @@ -106,20 +106,24 @@ jobs: code-coverage-cobertura: test-results/coverage.xml - name: Write test result status + shell: python if: always() env: outcome: ${{ steps.tests.outcome }} run: | - mkdir -p test-results - if [ "$outcome" = "success" ]; then - echo "✅" > test-results/outcome.txt - elif [ "$outcome" = "failure" ]; then - echo "❌" > test-results/outcome.txt - elif [ "$outcome" = "skipped" ]; then - echo "⏭️" > test-results/outcome.txt - else - echo "❔" > test-results/outcome.txt - fi + import os + os.makedirs('test-results', exist_ok=True) + outcome = os.environ.get('outcome', '').lower() + if outcome == 'success': + symbol = '✅' + elif outcome == 'failure': + symbol = '❌' + elif outcome == 'skipped': + symbol = '⏭️' + else: + symbol = '❔' + with open('test-results/outcome.txt', 'w', encoding='utf-8') as f: + f.write(symbol) - name: Upload artifacts if: always() From 9a3989bc14f05f6c261244ed78032e658d81e19e Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Mon, 11 Aug 2025 14:59:09 +0200 Subject: [PATCH 13/14] first test on single config --- .github/workflows/run-tests.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 345fe90..65f6dee 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -45,9 +45,20 @@ jobs: examples: - examples/** - test-matrix: + test-single: needs: [changed-files] if: ${{ needs.changed-files.outputs.changed-workflows || needs.changed-files.outputs.changed-src || needs.changed-files.outputs.changed-test || needs.changed-files.outputs.changed-examples }} + permissions: + contents: read + uses: ./.github/workflows/run-tests-reusable.yml + with: + os: windows-latest + julia-version: 1.11 + matlab-version: R2025a + + test-matrix: + needs: [changed-files, test-single] + if: ${{ needs.changed-files.outputs.changed-workflows || needs.changed-files.outputs.changed-src || needs.changed-files.outputs.changed-test || needs.changed-files.outputs.changed-examples }} permissions: contents: read strategy: @@ -56,6 +67,10 @@ jobs: os: [windows-latest] julia-version: [1.7, 1.8, 1.9, 1.10, 1.11] matlab-version: [R2021b, R2022a, R2022b, R2023a, R2023b, R2024a, R2024b, R2025a] + exclude: + - os: windows-latest + julia-version: 1.11 + matlab-version: 2025a uses: ./.github/workflows/run-tests-reusable.yml with: From 5afab7e4fc261ea8f717cf092a2dce70b893beec Mon Sep 17 00:00:00 2001 From: Mark Shui Hu Date: Mon, 11 Aug 2025 15:04:26 +0200 Subject: [PATCH 14/14] ignore runs --- .github/workflows/run-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 65f6dee..2eb34c8 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -139,3 +139,4 @@ jobs: with: files: results-*/results.xml action_fail: true + ignore_runs: true