Skip to content

Fix release CI

Fix release CI #136

Workflow file for this run

name: libpymcr
on:
push:
branches: [main]
pull_request:
branches: [main]
types: [opened, reopened, synchronize]
release:
types: [published]
workflow_dispatch:
inputs:
py_version:
type: choice
options: ["3.7", "3.8", "3.9", "3.10", "3.11"]
concurrency :
group: ${{ github.workflow }}-${{ github.ref == 'refs/head/main' && github.run_number || github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash -l {0}
env:
# Matlab only provides binaries for 64-bit systems - so force x86_64 builds in "tag"
JSONSTR: |
{
"pyvers": {
"push": ["3.8"],
"pull_request": ["3.8"],
"release": ["3.7", "3.8", "3.9", "3.10", "3.11"],
"workflow_dispatch": ["WORKFLOW_PYVER"]
},
"os_map": {
"ubuntu-22.04": {
"mlver": "R2020a",
"tag": "manylinux_x86_64",
"mlprefix": "/host/"
},
"windows-2022": {
"mlver": "R2021a",
"tag": "win_amd64",
"mlprefix": ""
},
"macos-12": {
"mlver": "R2020a",
"tag": "macosx_x86_64",
"mlprefix": ""
}
}
}
# Must match what is stored in the gists
MCRVER: R2020a
jobs:
cache_matlab:
name: Create Matlab cache, ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-22.04, windows-2022, macos-12]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache MCR
if: ${{ matrix.os != 'ubuntu-22.04' }}
id: cache-mcr
uses: actions/cache@v4
with:
path: mcr
key: ${{ runner.os }}-matlab-${{ env.MCRVER }}-mcr
lookup-only: true
- name: Cache gists
id: cache-gists
uses: actions/cache@v4
with:
path: gists
key: ${{ runner.os }}-gists
lookup-only: true
- name: Download gists
if: ${{ steps.cache-gists.outputs.cache-hit != 'true' }}
run: |
mkdir -p gists
pip3 install requests
python3 gist_test_ctf.py --get --token=${{ secrets.GH_GIST_TOKEN }} --dir gists
- name: Install Mac MCR
if: ${{ matrix.os == 'macos-12' && steps.cache-mcr.outputs.cache-hit != 'true' }}
run: |
mkdir -p mcr
unzip -d . -q gists/pace_neutrons_installer.zip
sudo ./pace_neutrons_installer/Contents/MacOS/setup -mode silent -agreeToLicense yes
sleep 10
while [[ ! -z $(ps aux |grep installer | grep mathworks) ]]; do sleep 10; done
cp -r /Applications/MATLAB/MATLAB_Runtime/v98/* mcr/
- name: Install Win MCR
if: ${{ matrix.os == 'windows-2022' && steps.cache-mcr.outputs.cache-hit != 'true' }}
run: |
mkdir -p mcr
powershell -Command "gists\pace_neutrons_installer.exe -mode silent -agreeToLicense yes"
sleep 10
powershell -Command "while(Get-Process pace_neutrons_installer -ErrorAction SilentlyContinue) { Start-Sleep -Seconds 10 }"
cp -r /c/Program\ Files/MATLAB/MATLAB\ Runtime/v98/* mcr/
build_and_test:
name: Build and test, ${{ matrix.os }}, py${{ matrix.pyver }}
needs: cache_matlab
# OS strategy matrix must match key in JSONSTR.os_map above
strategy:
matrix:
os: [ubuntu-22.04, windows-2022, macos-12]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup variables
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
export JSONSTR=$(echo $JSONSTR | sed s/WORKFLOW_PYVER/${{ github.event.inputs.py_version }}/)
fi
export EVENTTYPE=${{ github.event_name }}
if [[ "${{ github.event_name }}" == "pull_request" ]] && [[ "${{ github.event.pull_request.title }}" == *"RELEASE"* ]]; then
python3 release.py --version_check
export EVENTTYPE=release
fi
echo CIBW=`echo $JSONSTR | jq ".os_map[\"${{ matrix.os }}\"].tag as \\\$tag| .pyvers[\"$EVENTTYPE\"] | [.[] | \
capture(\"(?<maj>[0-9]+)\\\\\\.(?<min>[0-9]+)\") | \"cp\(.maj)\(.min)-\(\\\$tag)\"] | @sh" | sed s/[\"\']//g` >> $GITHUB_ENV
echo PYVERS=`echo $JSONSTR | jq ".pyvers[\"$EVENTTYPE\"] | @sh"` >> $GITHUB_ENV
export MLVER=`echo $JSONSTR | jq ".os_map[\"${{ matrix.os }}\"].mlver" | sed s/\"//g`
echo MLVER=$MLVER >> $GITHUB_ENV
echo MLPREFIX=`echo $JSONSTR | jq ".os_map[\"${{ matrix.os }}\"].mlprefix" | sed s/\"//g` >> $GITHUB_ENV
echo "HOSTDIRECTORY=`pwd`" >> $GITHUB_ENV
if [ "$RUNNER_OS" == "Linux" ]; then
echo "MATLABEXECUTABLE=/usr/local/MATLAB/$MLVER/bin/matlab" >> $GITHUB_ENV;
else
echo "MATLABEXECUTABLE=`pwd`/mcr/bin/matlab" >> $GITHUB_ENV;
fi
env
- name: Set up MATLAB
if: ${{ matrix.os == 'ubuntu-22.04' }}
uses: matlab-actions/[email protected]
with:
release: ${{ env.MLVER }}
- uses: actions/cache/restore@v4
if: ${{ matrix.os != 'ubuntu-22.04' }}
with:
path: mcr
key: ${{ runner.os }}-matlab-${{ env.MCRVER }}-mcr
fail-on-cache-miss: true
- uses: actions/cache/restore@v4
with:
path: gists
key: ${{ runner.os }}-gists
fail-on-cache-miss: true
- uses: pypa/[email protected]
env:
CIBW_BUILD: ${{ env.CIBW }}
CIBW_ENVIRONMENT: >-
MATLABEXECUTABLE="${{ env.MLPREFIX }}${{ env.MATLABEXECUTABLE }}"
HOSTDIRECTORY="${{ env.MLPREFIX }}${{ env.HOSTDIRECTORY }}"
CIBW_BUILD_VERBOSITY: 1
MACOSX_DEPLOYMENT_TARGET: "10.15"
- uses: mamba-org/setup-micromamba@v1
with:
cache-downloads: true
- name: Install wheels and run test
run: |
# set -e makes sure the script fails if any command in the loop fails
set -e
cp -f gists/* test/
for pyver in $(echo $PYVERS | sed s/[\"\']//g); do
$MAMBA_EXE create -n py$pyver -c conda-forge python=$pyver numpy six
eval "$($MAMBA_EXE shell activate py$pyver)"
python -m pip install wheelhouse/*cp$(echo $pyver | sed s/\\.//)*
cd test
# Sometimes the test results in a segfault on exit
python run_test.py || true
test -f success
cd ..
done
- name: Upload release wheels
if: ${{ github.event_name == 'release' }}
run: |
pip3 install requests
python3 release.py --notest --github --token=${{ secrets.GH_GIST_TOKEN }}
#- name: Setup tmate
# if: ${{ failure() }}
# uses: mxschmitt/action-tmate@v3
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}_artifacts.zip
path: |
wheelhouse/*
**/*.mex[awmaci]*64