Skip to content

Add create TRSP solver function #783

Add create TRSP solver function

Add create TRSP solver function #783

name: Measure Code Coverage
env:
CLONE_PATH: ${{ github.workspace }}
GH_ACTIONS_PATH: ${{ github.workspace }}/.github/workflows
MINQ_COMMIT_FILE: ${{ github.workspace }}/REQUIRED_MINQ_COMMIT
IBCDFO_PKG: ${{ github.workspace }}/ibcdfo_pypkg
MINQ5_M_PATH: ${{ github.workspace }}/MINQ/m/minq5
MINQ8_M_PATH: ${{ github.workspace }}/MINQ/m/minq8
BENDFO_M_PATH: ${{ github.workspace }}/BenDFO/m
BENDFO_DATA_PATH: ${{ github.workspace }}/BenDFO/data
POUNDERS_M_PATH: ${{ github.workspace }}/pounders/m
MSAMP_M_PATH: ${{ github.workspace }}/manifold_sampling/m
BENDFO_PY_PATH: ${{ github.workspace }}/BenDFO/py
MINQ5_PY_PATH: ${{ github.workspace }}/MINQ/py/minq5
PY_COV_FILE: coverage_ibcdfo
PY_COV_XML_FILE: cobertura_ibcdfo_py.xml
PY_COV_HTML_FILE: htmlcov_ibcdfo_py
POUNDERS_M_COV_HTML_FILE: htmlcov_ibcdfo_pounders_m
POUNDERS_M_COV_XML_FILE: cobertura_ibcdfo_pounders_m.xml
MSAMP_M_COV_HTML_FILE: htmlcov_ibcdfo_msamp_m
MSAMP_M_COV_XML_FILE: cobertura_ibcdfo_msamp_m.xml
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
# ----- LOAD OFFICIAL MINQ COMMIT INFO FOR PROPER SETUP FOR IBCDFO
# Load this eagerly so that it is available for immediate use in all
# subsequent jobs.
load_minq_sha:
outputs:
minq_sha: ${{ steps.load_sha.outputs.minq_sha }}
runs-on: ubuntu-latest
steps:
- name: Checkout IBCDFO repository
uses: actions/checkout@v6
- name: Load Official MINQ SHA
id: load_sha
run: |
MINQ_SHA=$(cat $MINQ_COMMIT_FILE)
echo "The valid MINQ commit hash is $MINQ_SHA"
echo "minq_sha=$MINQ_SHA" >> "$GITHUB_OUTPUT"
# ----- MEASURE COVERAGE ACROSS ALL PYTHON PACKAGES
# Prefer using the latest Python version supported by the package
coverage_py:
runs-on: ubuntu-latest
needs: load_minq_sha
env:
MINQ_SHA: ${{ needs.load_minq_sha.outputs.minq_sha }}
steps:
# -- General Setup Steps
- name: Checkout IBCDFO repository
uses: actions/checkout@v6
- name: Checkout MINQ repository
uses: actions/checkout@v6
with:
repository: POptUS/MINQ
path: MINQ
ref: ${{ env.MINQ_SHA }}
- name: Checkout BenDFO repository
uses: actions/checkout@v6
with:
repository: POptUS/BenDFO
path: BenDFO
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.14"
- name: Setup Python with tox
run: $GH_ACTIONS_PATH/setup_tox_github_action.sh ${{ runner.os }}
# -- Run Coverage for All Python Packages
# The tox task downloads dfo.dat automatically
- name: Generate Python coverage reports
run: |
export PYTHONPATH=$BENDFO_PY_PATH:$MINQ5_PY_PATH
echo "PYTHONPATH=$PYTHONPATH" >> $GITHUB_ENV
pushd $IBCDFO_PKG
COVERAGE_FILE=$PY_COV_FILE COVERAGE_XML_FILE=$PY_COV_XML_FILE COVERAGE_HTML_FILE=$PY_COV_HTML_FILE tox -r -e coverage,report
mv $PY_COV_FILE $CLONE_PATH
mv $PY_COV_XML_FILE $CLONE_PATH
mv $PY_COV_HTML_FILE $CLONE_PATH
popd
# -- Publish as artifact for users and subsequent jobs
- name: Archive Python coverage results
uses: actions/upload-artifact@v6
with:
name: python-coverage-results
path: |
${{ env.PY_COV_FILE }}
${{ env.PY_COV_XML_FILE }}
${{ env.PY_COV_HTML_FILE }}
# ----- MEASURE COVERAGE ACROSS ALL MATLAB PACKAGES
# Prefer using the latest MATLAB version available
coverage_m:
runs-on: ubuntu-latest
needs: load_minq_sha
env:
MINQ_SHA: ${{ needs.load_minq_sha.outputs.minq_sha }}
steps:
# -- General Setup Steps
- name: Checkout IBCDFO repository
uses: actions/checkout@v6
- name: Checkout MINQ repository
uses: actions/checkout@v6
with:
repository: POptUS/MINQ
path: MINQ
ref: ${{ env.MINQ_SHA }}
- name: Checkout BenDFO repository
uses: actions/checkout@v6
with:
repository: POptUS/BenDFO
path: BenDFO
- name: Set up MATLAB
uses: matlab-actions/setup-matlab@v3
with:
release: "latest"
products: Optimization_Toolbox
# -- Test Execution Step
# This requires R2023b or higher
- name: Generate code coverage report for MATLAB code
uses: matlab-actions/run-command@v3
with:
command: >
addpath("${{ env.MINQ5_M_PATH }}"),
addpath("${{ env.MINQ8_M_PATH }}"),
addpath("${{ env.BENDFO_M_PATH }}"),
addpath("${{ env.BENDFO_DATA_PATH }}"),
cd ${{ env.POUNDERS_M_PATH }},
[results, cov_p] = runtests("IncludeSubfolders", true, "ReportCoverageFor", pwd),
assertSuccess(results),
cd ${{ env.MSAMP_M_PATH }},
[results, cov_ms] = runtests("IncludeSubfolders", true, "ReportCoverageFor", pwd),
assertSuccess(results),
cd ${{ env.CLONE_PATH }},
fp = generateHTMLReport(cov_p, "${{ env.POUNDERS_M_COV_HTML_FILE }}"),
generateCoberturaReport(cov_p, "${{ env.POUNDERS_M_COV_XML_FILE }}");
fp = generateHTMLReport(cov_ms, "${{ env.MSAMP_M_COV_HTML_FILE }}"),
generateCoberturaReport(cov_ms, "${{ env.MSAMP_M_COV_XML_FILE }}");
# -- Publish as artifact for users and subsequent jobs
- name: Archive MATLAB coverage results
uses: actions/upload-artifact@v6
with:
name: matlab-coverage-results
path: |
${{ env.POUNDERS_M_COV_HTML_FILE }}
${{ env.POUNDERS_M_COV_XML_FILE }}
${{ env.MSAMP_M_COV_HTML_FILE }}
${{ env.MSAMP_M_COV_XML_FILE }}
# ----- PUBLISH FULL CODE COVERAGE REPORT
publish:
needs: [coverage_py, coverage_m]
runs-on: ubuntu-latest
steps:
- name: Checkout IBCDFO repository
uses: actions/checkout@v6
- name: Access Python coverage reports
uses: actions/download-artifact@v8
with:
name: python-coverage-results
path: ${{ env.CLONE_PATH }}
- name: Access MATLAB coverage reports
uses: actions/download-artifact@v8
with:
name: matlab-coverage-results
path: ${{ env.CLONE_PATH }}
- name: Upload coverage report to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: |
${{ env.CLONE_PATH }}/${{ env.POUNDERS_M_COV_XML_FILE }},
${{ env.CLONE_PATH }}/${{ env.MSAMP_M_COV_XML_FILE }},
${{ env.CLONE_PATH }}/${{ env.PY_COV_XML_FILE }}
disable_search: true
verbose: true
fail_ci_if_error: true