Merge pull request #831 from andyfaff/resources #915
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- "v*" | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
permissions: | |
contents: read | |
jobs: | |
############################################################################### | |
test_linux: | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: true | |
max-parallel: 3 | |
matrix: | |
python-version: ['3.10', '3.11', '3.12', '3.13'] | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: 'pip' # caching pip dependencies | |
allow-prereleases: true | |
- name: setup apt dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install xvfb qt6-base-dev libhdf5-serial-dev libnetcdf-dev build-essential | |
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev | |
python -m pip install --upgrade pip | |
- name: Test with pytest | |
env: | |
MPLBACKEND: agg | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install wheel build | |
python -m build | |
python -m pip install dist/*.whl | |
pip install -r .requirements.txt | |
# uses xvfb for GUI part of the test | |
pushd tools | |
xvfb-run pytest --pyargs refnx | |
popd | |
# check that refnx gui starts | |
# python tools/app/check_app_starts.py refnx | |
# run vendored ptemcee tests | |
pytest --pyargs refnx._lib.ptemcee.tests | |
- name: Make sdist | |
if: ${{ matrix.python-version == '3.9' }} | |
run: | | |
git clean -xdf | |
python setup.py sdist | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
if: ${{ matrix.python-version == '3.9' }} | |
with: | |
name: refnx-wheel-linux-${{ matrix.python-version }} | |
path: dist/ | |
# linux_wheels: | |
# | |
# runs-on: ubuntu-latest | |
# strategy: | |
# max-parallel: 2 | |
# matrix: | |
# PLAT: ["manylinux2014_x86_64"] | |
# | |
# steps: | |
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
# - name: Make Linux Wheel | |
# run: | | |
# docker run --rm -e="PLAT=${{ matrix.PLAT }}" -v $(pwd):/io quay.io/pypa/${{ matrix.PLAT }} /bin/bash /io/tools/build_manylinux_wheels.sh | |
# | |
# - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
# with: | |
# name: refnx-wheel | |
# path: dist/ | |
############################################################################### | |
test_macos_intel: | |
runs-on: macos-13 | |
strategy: | |
fail-fast: true | |
max-parallel: 1 | |
matrix: | |
python-version: [ '3.12' ] | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- run: mkdir -p dist | |
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: 'pip' # caching pip dependencies | |
allow-prereleases: true | |
- name: Make wheel | |
shell: bash | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install wheel delocate build | |
python -m build . -v | |
- name: Install package and test with pytest | |
shell: bash | |
env: | |
MPLBACKEND: agg | |
run: | | |
pip install -r .requirements.txt | |
pushd dist | |
python -m pip install --only-binary=refnx --no-index --find-links=. refnx | |
pytest --pyargs refnx | |
popd | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: refnx-wheel-macos-${{ matrix.python-version }}-intel | |
path: dist/ | |
test_macos: | |
runs-on: macos-14 | |
strategy: | |
fail-fast: true | |
max-parallel: 3 | |
matrix: | |
python-version: ['3.10', '3.11', '3.12'] | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- run: mkdir -p dist | |
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: 'pip' # caching pip dependencies | |
allow-prereleases: true | |
- name: install compilers | |
shell: bash | |
run: | | |
brew install llvm | |
- name: Make wheel | |
shell: bash | |
env: | |
ARCHFLAGS: "-arch arm64" | |
_PYTHON_HOST_PLATFORM: macosx-11.0-arm64 | |
run: | | |
sudo xcode-select -s /Applications/Xcode_15.3.app | |
export PATH="$PATH:/opt/homebrew/opt/llvm/bin" | |
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include" | |
export LDFLAGS="-L/opt/homebrew/opt/llvm/lib/c++ -Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++ -L/opt/homebrew/opt/llvm/lib" | |
python -m pip install --upgrade pip | |
python -m pip install wheel delocate build | |
python -m build . -v | |
# so that libomp is distributed with wheel | |
delocate-wheel -v dist/refnx*.whl | |
- name: Install package and test with pytest | |
shell: bash | |
env: | |
MPLBACKEND: agg | |
run: | | |
python -m pip install -r .requirements.txt | |
pushd dist | |
python -m pip install --only-binary=refnx --no-index --find-links=. refnx | |
pytest --pyargs refnx | |
popd | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: refnx-wheel-macos-${{ matrix.python-version }} | |
path: dist/ | |
test_macos_app: | |
needs: test_macos | |
runs-on: macos-14 | |
strategy: | |
fail-fast: true | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 | |
with: | |
python-version: '3.12' | |
allow-prereleases: true | |
- run: mkdir -p dist | |
- name: Download wheel | |
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 | |
with: | |
pattern: refnx-wheel-macos-3.12 | |
merge-multiple: true | |
path: dist | |
- name: Make frozen GUI executable | |
run: | | |
# make app in virtualenv | |
python -m venv app | |
source app/bin/activate | |
python -m pip install --upgrade --upgrade-strategy eager -r tools/app/requirements.txt | |
python -m pip install scipy | |
pushd dist | |
ls | |
python -m pip install --only-binary=refnx --no-index --find-links=. refnx | |
popd | |
python -m pip install pyinstaller psutil | |
# compileall in an effort to speedup pyinstaller GUI start | |
python -m compileall | |
pushd tools/app | |
pyinstaller motofit.spec | |
# check to see that the app starts | |
python check_app_starts.py dist/refnx.app/Contents/MacOS/refnx | |
popd | |
printenv | |
- name: Sign app and create dmg | |
if: github.repository == 'refnx/refnx' && (github.event.pull_request.merged == true || startsWith(github.ref, 'refs/tags')) | |
env: | |
MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE_ISA }} | |
MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_ISA_PWD }} | |
run: | | |
pushd tools/app | |
echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 | |
ls -al certificate.p12 | |
security create-keychain -p DloaAcYP build.keychain | |
security default-keychain -s build.keychain | |
security unlock-keychain -p DloaAcYP build.keychain | |
security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign | |
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k DloaAcYP build.keychain >/dev/null | |
security find-identity -p codesigning | |
codesign --verify --options=runtime --entitlements entitlements.plist --timestamp --deep --verbose=4 --force --sign "Developer ID Application: The International Scattering Alliance (8CX8K63BQM)" dist/refnx.app | |
cp ../../refnx/reflect/_app/icons/Motofit.icns . | |
sips -i Motofit.icns | |
DeRez -only icns Motofit.icns > icns.rsrc | |
hdiutil create dist/refnx.dmg -srcfolder dist/refnx.app -ov -format UDZO | |
Rez -append icns.rsrc -o dist/refnx.dmg | |
SetFile -a C dist/refnx.dmg | |
codesign -s "Developer ID Application: The International Scattering Alliance (8CX8K63BQM)" dist/refnx.dmg | |
mv dist/refnx.dmg ../../dist/ | |
popd | |
# xcrun notarytool submit --apple-id "$APPLEID" --password "$APP_PASSWORD" --team-id 8CX8K63BQM --wait refnx.dmg | |
- name: Notarize DMG | |
if: github.repository == 'refnx/refnx' && (github.event.pull_request.merged == true || startsWith(github.ref, 'refs/tags')) | |
uses: lando/notarize-action@b5c3ef16cf2fbcf2af26dc58c90255ec242abeed # v2.0.2 | |
with: | |
product-path: "dist/refnx.dmg" | |
primary-bundle-id: "com.refnx.refnx" | |
appstore-connect-username: ${{ secrets.NOTARIZATION_USERNAME }} | |
appstore-connect-password: ${{ secrets.NOTARIZATION_PASSWORD }} | |
appstore-connect-team-id: 8CX8K63BQM | |
verbose: True | |
- name: Staple Release Build | |
if: github.repository == 'refnx/refnx' && (github.event.pull_request.merged == true || startsWith(github.ref, 'refs/tags')) | |
uses: BoundfoxStudios/action-xcode-staple@1e2200b448c6ed4dd44b963ff17d3e340fc6b064 # v1 | |
with: | |
product-path: "dist/refnx.dmg" | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: refnx-app-macos-${{ matrix.python-version }} | |
path: dist/*.dmg | |
############################################################################### | |
test_win: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: true | |
max-parallel: 3 | |
matrix: | |
python-version: ['3.10', '3.11', '3.12'] | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: 'pip' # caching pip dependencies | |
allow-prereleases: true | |
- run: pip install -r .requirements.txt | |
- run: mkdir -p dist | |
- name: Make wheel | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install wheel | |
python -m pip wheel . --no-deps -w dist | |
- name: Install package and test with pytest | |
if: ${{ matrix.python-version == '3.10' }} | |
env: | |
PYOPENCL_CTX: 0 | |
run: | | |
cd dist | |
python -m pip install --only-binary=refnx --no-index --find-links=. refnx | |
# python -m pip install pytools mako cffi | |
# choco install opencl-intel-cpu-runtime | |
# python -m pip install --only-binary=pyopencl --find-links http://www.silx.org/pub/wheelhouse/ --trusted-host www.silx.org pyopencl | |
pytest --pyargs refnx | |
cd .. | |
- name: Check refnx gui starts | |
if: ${{ matrix.python-version == '3.10' }} | |
run: | | |
# check that refnx gui starts | |
pip install psutil | |
python tools/app/check_app_starts.py refnx | |
- name: Make frozen GUI executable | |
if: ${{ matrix.python-version == '3.10' }} | |
run: | | |
# make app in virtualenv | |
pip uninstall -y h5py | |
python -m venv app | |
app\Scripts\activate.bat | |
python -m pip install --upgrade --upgrade-strategy eager -r tools/app/requirements.txt | |
cd dist | |
python -m pip install --only-binary=refnx --no-index --find-links=. refnx | |
cd .. | |
# fix for multiprocessing on Py3.9 is not merged in PyInstaller | |
# if you are on Py3.7 you can just pip install pyinstaller | |
# pip install git+https://github.com/andyfaff/pyinstaller.git@gh4865 | |
cd tools\app | |
pyinstaller motofit.spec | |
move dist\motofit.exe ..\..\dist\ | |
cd ..\.. | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: refnx-exe-win-${{ matrix.python-version }} | |
path: dist/ | |
############################################################################### | |
build_doc: | |
runs-on: ubuntu-latest | |
strategy: | |
max-parallel: 1 | |
matrix: | |
python-version: ["3.10"] | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: setup apt dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install pandoc | |
- name: Build documentation | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install . | |
python -m pip install wheel | |
cd doc | |
python -m pip install -r requirements.txt | |
make html | |
############################################################################### | |
lint: | |
runs-on: ubuntu-latest | |
strategy: | |
max-parallel: 1 | |
matrix: | |
python-version: ["3.10"] | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Lint with flake8 and black | |
run: | | |
python -m pip install ruff black | |
# stop the build if there are Python syntax errors or undefined names | |
# the ignores are taken care of by black | |
ruff check refnx | |
black --check refnx | |
- name: clang-format | |
run: | | |
sudo apt update | |
sudo apt install clang-format | |
cd src | |
clang-format --Werror -n *.cpp *.h *.c | |
cd pnr | |
clang-format --Werror -n *.cc *.h |