Skip to content

Escape Windows Python test snippet. #149

Escape Windows Python test snippet.

Escape Windows Python test snippet. #149

name: lint-test-build-upload
on:
push
jobs:
manylinux:
container: quay.io/pypa/manylinux2014_x86_64
name: "Python ${{ matrix.PYTHON }} on manylinux2014"
runs-on: ubuntu-latest
steps:
-
uses: actions/checkout@v2
-
name: "Install Python."
run: |
yum -y install wget libffi-devel patchelf
/opt/python/${{ matrix.PYTHON }}/bin/python -m pip install virtualenv
/opt/python/${{ matrix.PYTHON }}/bin/python -m virtualenv .venv
-
name: "Install Python dependencies for build process."
run: ".venv/bin/pip install -U pip setuptools wheel build"
-
name: "Download mcl source tree archive and extract it."
run: |
wget https://github.com/herumi/mcl/archive/refs/tags/v1.61.tar.gz
tar -xvzf *.tar.gz
-
name: "Build wheel file."
run: |
# Compile platform-dependent binaries.
cd mcl*
make
ls lib
cd ..
# Remove prebuilt binaries (if any are leftover from an old build).
rm -f mclbn256/libmclbn256.*
rm -f mclbn256/lib/libmcl.*
# Copy binaries into Python module.
cp mcl-*/lib/libmclbn256.so mclbn256
cp mcl-*/lib/libmcl.so mclbn256/lib
#
# Allow relative linking of libmcl.so dependency (also likely unused, but changing a link is easier than deleting one)
#
echo "Files linked to from lib/libmcl.so"
patchelf --print-needed mclbn256/lib/libmcl.so # dependency has only standard system dependenciesendency (also likely unused, but changing a link is easier than deleting one)
echo "Files linked to from libmclbn256.so"
patchelf --print-needed mclbn256/libmclbn256.so # the BN254 build depends on lib/libmcl.so which may not be in any environment folder
echo "patching..."
patchelf --replace-needed lib/libmcl.so \$ORIGIN/lib/libmcl.so mclbn256/libmclbn256.so
echo "Files linked to from libmclbn256.so"
patchelf --print-needed mclbn256/libmclbn256.so # the lib/libmcl.so dependency should be relative now
echo "patching..."
patchelf --replace-needed libmcl.so \$ORIGIN/lib/libmcl.so mclbn256/libmclbn256.so
echo "Files linked to from libmclbn256.so"
patchelf --print-needed mclbn256/libmclbn256.so # the lib/libmcl.so dependency should be relative now
# echo "adding dependency...";#echo "patching..."
# patchelf --add-needed \$ORIGIN/lib/libmcl.so mclbn256/libmclbn256.so
# # patchelf --add-needed \$ORIGIN/libmcl.so mclbn256/libmclbn256.so
echo "adding dependency...";#echo "patching..."
patchelf --add-needed lib/libmcl.so mclbn256/libmclbn256.so
patchelf --add-rpath \$ORIGIN/ mclbn256/libmclbn256.so
# patchelf --add-rpath . mclbn256/libmclbn256.so
echo "Files linked to from libmclbn256.so"
patchelf --print-needed mclbn256/libmclbn256.so # the lib/libmcl.so dependency should be relative now
# # Build
# .venv/bin/python -m build
# mkdir tmpwheelhouse
# mv dist/mclbn*.whl tmpwheelhouse
mkdir lib; cp mcl-*/lib/libmcl.so lib
# mkdir tmpwheelhouse/lib; cp mcl-*/lib/libmcl.so tmpwheelhouse/lib
# cp mcl-*/lib/libmcl.so /usr/local/bin
# auditwheel repair tmpwheelhouse/mclbn*.whl -w wheelhouse/
# # mkdir wheelhouse
# # mv dist/mclbn*.whl wheelhouse
# -
# name: "Test wheel installation."
# run: |
# ls wheelhouse
# unzip -Zl wheelhouse/*.whl
# # ls -R wheelhouse
# .venv/bin/pip install -f wheelhouse --no-index mclbn256
-
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
name: "Lint and test module (and compiled MCl shared library files)."
run: |
.venv/bin/python -c "import mclbn256; mclbn256.mclbn256.assert_bilinearity(); mclbn256.mclbn256.assert_serializable(); print('pass')"
#.venv/bin/pip install -U pylint coverage coveralls nose
#.venv/bin/python -m pylint mclbn256 # Check against linting rules.
#.venv/bin/python mclbn256/mclbn256.py -v # Run doctests.
#.venv/bin/python -m nose --cover-erase # Test using nose.
#.venv/bin/python -m coveralls --service=github # Submit to coveralls.
# -
# name: "Upload wheel file."
# run: |
# mkdir mclbn-wheelhouse
# mv wheelhouse/mclbn*.whl mclbn-wheelhouse/
# -
# uses: actions/upload-artifact@v1
# with:
# name: "mclbn256-0.3.3-manylinux1-${{ matrix.PYTHON }}"
# path: mclbn-wheelhouse/
strategy:
matrix:
PYTHON:
- cp37-cp37m
- cp38-cp38
- cp39-cp39
- cp310-cp310
- cp311-cp311
macos:
name: "Python ${{ matrix.PYTHON.VERSION }} for ABI ${{ matrix.PYTHON.ABI_VERSION }} on macOS"
runs-on: macOS-latest
steps:
-
uses: actions/checkout@v2
-
env:
PYTHON_DOWNLOAD_URL: "${{ matrix.PYTHON.DOWNLOAD_URL }}"
name: "Install Python."
run: |
curl "$PYTHON_DOWNLOAD_URL" -o python.pkg
sudo installer -pkg python.pkg -target /
${{ matrix.PYTHON.BIN_PATH }} -m pip install -U virtualenv
${{ matrix.PYTHON.BIN_PATH }} -m virtualenv venv
-
name: "Install Python dependencies for build process."
run: "venv/bin/pip install -U pip setuptools wheel build"
-
name: "Download MCl source tree archive and extract it."
run: |
wget https://github.com/herumi/mcl/archive/refs/tags/v1.61.tar.gz
tar -xvzf *.tar.gz
-
env:
PYTHON_VERSION: "${{ matrix.PYTHON.ABI_VERSION }}"
name: "Build wheel file."
run: |
# Compile platform-dependent binaries.
cd mcl*
make
ls lib
cd ..
# Remove prebuilt binaries (if any are leftover from an old build).
rm -f mclbn256/libmclbn256.*
rm -f mclbn256/lib/libmcl.*
# Copy binaries into Python module.
cp mcl-*/lib/libmclbn256.dylib mclbn256
cp mcl-*/lib/libmcl.dylib mclbn256/lib
# Allow relative linking of libmcl.dylib dependency (also likely unused, but changing a link is easier than deleting one)
otool -L mclbn256/lib/libmcl.dylib # dependency has only standard system dependencies
otool -L mclbn256/libmclbn256.dylib # the BN254 build depends on lib/libmcl.so which may not be in any environment folder
install_name_tool -change lib/libmcl.dylib @loader_path/lib/libmcl.dylib mclbn256/libmclbn256.dylib
# # Build
# venv/bin/python -m build
# mkdir wheelhouse
# mv dist/mclbn*.whl wheelhouse
# -
# name: "Test wheel installation."
# run: |
# ls wheelhouse
# unzip -Zl wheelhouse/*.whl
# # ls -R wheelhouse
# venv/bin/pip install .
# # venv/bin/pip install -f wheelhouse --no-index mclbn256
-
name: "Lint and test module (and compiled MCl shared library files)."
run: |
venv/bin/python -c "import mclbn256; mclbn256.mclbn256.assert_bilinearity(); mclbn256.mclbn256.assert_serializable(); print('pass')"
# venv/bin/pip install -U pip pylint coverage nose
# venv/bin/python -m pylint mclbn256 # Check against linting rules.
# venv/bin/python mclbn256/mclbn256.py -v # Run doctests.
# venv/bin/python -m nose --cover-erase # Test using nose.
# -
# name: "Upload wheel file."
# run: |
# mkdir mclbn-wheelhouse
# mv wheelhouse/mclbn*.whl mclbn-wheelhouse/
# -
# uses: actions/upload-artifact@v1
# with:
# name: "mclbn-0.3.3-macOS-11-amd-${{ matrix.PYTHON.VERSION }}"
# path: mclbn-wheelhouse/
strategy:
matrix:
PYTHON:
-
ABI_VERSION: "3.6"
BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.9/bin/python3
DOWNLOAD_URL: "https://www.python.org/ftp/python/3.9.12/python-3.9.12-macos11.pkg"
VERSION: "3.9"
-
ABI_VERSION: "3.6"
BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3
DOWNLOAD_URL: "https://www.python.org/ftp/python/3.10.5/python-3.10.5-macos11.pkg"
VERSION: "3.10"
-
ABI_VERSION: "3.6"
BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.11/bin/python3
DOWNLOAD_URL: "https://www.python.org/ftp/python/3.11.6/python-3.11.6-macos11.pkg"
VERSION: "3.11"
macos-arm:
name: "Python ${{ matrix.PYTHON.VERSION }} for ABI ${{ matrix.PYTHON.ABI_VERSION }} on macOS ARM"
runs-on: [self-hosted, macos, ARM64]
steps:
-
uses: actions/checkout@v2
-
env:
PYTHON_DOWNLOAD_URL: "${{ matrix.PYTHON.DOWNLOAD_URL }}"
name: "Install Python."
run: |
curl "$PYTHON_DOWNLOAD_URL" -o python.pkg
sudo installer -pkg python.pkg -target /
${{ matrix.PYTHON.BIN_PATH }} -m pip install -U virtualenv
${{ matrix.PYTHON.BIN_PATH }} -m virtualenv venv
-
name: "Install Python dependencies for build process."
run: "venv/bin/pip install -U pip setuptools wheel build"
-
name: "Download mcl source tree archive and extract it."
run: |
wget https://github.com/herumi/mcl/archive/refs/tags/v1.61.tar.gz
tar -xvzf *.tar.gz
-
env:
PYTHON_VERSION: "${{ matrix.PYTHON.ABI_VERSION }}"
name: "Build wheel file."
run: |
# Compile platform-dependent binaries.
cd mcl*
make
ls lib
cd ..
# Remove prebuilt binaries (if any are leftover from an old build).
rm -f mclbn256/libmclbn256.*
rm -f mclbn256/lib/libmcl.*
# Copy binaries into Python module.
cp mcl-*/lib/libmclbn256.dylib mclbn256
cp mcl-*/lib/libmcl.dylib mclbn256/lib
# Allow relative linking of libmcl.dylib dependency (also likely unused, but changing a link is easier than deleting one)
otool -L mclbn256/lib/libmcl.dylib # dependency has only standard system dependencies
otool -L mclbn256/libmclbn256.dylib # the BN254 build depends on lib/libmcl.so which may not be in any environment folder
install_name_tool -change lib/libmcl.dylib @loader_path/lib/libmcl.dylib mclbn256/libmclbn256.dylib
# # Build
# venv/bin/python -m build
# mkdir wheelhouse
# mv dist/mclbn*.whl wheelhouse
# -
# name: "Test wheel installation."
# run: |
# ls wheelhouse
# unzip -Zl wheelhouse/*.whl
# # ls -R wheelhouse
# venv/bin/pip install -f wheelhouse --no-index mclbn256
-
name: "Lint and test module (and compiled MCl shared library files)."
run: |
venv/bin/python -c "import mclbn256; mclbn256.mclbn256.assert_bilinearity(); mclbn256.mclbn256.assert_serializable(); print('pass')"
# venv/bin/pip install -U pip pylint coverage nose
# venv/bin/python -m pylint mclbn256 # Check against linting rules.
# venv/bin/python mclbn256/mclbn256.py -v # Run doctests.
#venv/bin/python -m nose --cover-erase # Test using nose. # mclbn256 0.2.0 has succeeded before but but errored at end [due to nose in 3.10 bug](https://github.com/nose-devs/nose/issues/1099)
# -
# name: "Upload wheel file."
# run: |
# mkdir mclbn-wheelhouse
# mv wheelhouse/mclbn*.whl mclbn-wheelhouse/
# -
# uses: actions/upload-artifact@v1
# with:
# name: "mclbn-0.3.3-macOS-arm-${{ matrix.PYTHON.VERSION }}"
# path: mclbn-wheelhouse/
strategy:
matrix:
PYTHON:
-
ABI_VERSION: "3.6"
BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.9/bin/python3
DOWNLOAD_URL: "https://www.python.org/ftp/python/3.9.12/python-3.9.12-macos11.pkg"
VERSION: "3.9"
-
ABI_VERSION: "3.6"
BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3
DOWNLOAD_URL: "https://www.python.org/ftp/python/3.10.5/python-3.10.5-macos11.pkg"
VERSION: "3.10"
-
ABI_VERSION: "3.6"
BIN_PATH: /Library/Frameworks/Python.framework/Versions/3.11/bin/python3
DOWNLOAD_URL: "https://www.python.org/ftp/python/3.11.6/python-3.11.6-macos11.pkg"
VERSION: "3.11"
windows:
runs-on: windows-latest
strategy:
matrix:
WINDOWS:
- {ARCH: 'x86', MCL_ARCH: 'Win32', VS_ARCH: 'x86'}
- {ARCH: 'x64', MCL_ARCH: 'x64', VS_ARCH: 'amd64'}
PYTHON:
- {VERSION: "3.9", MCL_MSVC_VERSION: "v142", "USE_ABI3": "true", "ABI_VERSION": "cp36"}
- {VERSION: "3.10", MCL_MSVC_VERSION: "v142", "USE_ABI3": "true", "ABI_VERSION": "cp36"}
- {VERSION: "3.11", MCL_MSVC_VERSION: "v142", "USE_ABI3": "true", "ABI_VERSION": "cp36"}
name: "Python ${{ matrix.PYTHON.VERSION }} for ABI ${{ matrix.PYTHON.ABI_VERSION }} on Windows ${{ matrix.WINDOWS.ARCH }}"
steps:
- uses: actions/checkout@v2
- name: Enable Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1.10.0
- name: Install Python.
uses: actions/setup-python@v2.2.2
with:
python-version: ${{ matrix.PYTHON.VERSION }}
architecture: ${{ matrix.WINDOWS.ARCH }}
- name: Install Python dependencies for build process.
run: python -m pip install -U pip setuptools wheel cffi
shell: bash
- name: Download and extract mcl dynamic library file.
run: |
wget -O c:\msvc-mcl-v1.61.zip https://github.com/herumi/mcl/archive/refs/tags/v1.61.zip
Expand-Archive c:\msvc-mcl-v1.61.zip -DestinationPath d:\a\mclbn256\mclbn256
dir .
dir c:\
shell: powershell
- name: Add environment variables for MCl.
run: |
echo "INCLUDE=C:/MCl/include;$INCLUDE" >> $GITHUB_ENV
echo "LIB=C:/MCl/${{ matrix.WINDOWS.MCL_ARCH }}/release/${{ matrix.PYTHON.MCL_MSVC_VERSION }}/static;$LIB" >> $GITHUB_ENV
shell: bash
- name: Build DLL.
run: |
ls
cd mcl-*
ls
mklib dll
# mk -d test\bls12_test.cpp && bin\bls12_test.exe
cd ..
shell: cmd
- name: Build wheel file.
run: |
ls mcl-*/lib/
# echo
# echo
ls mcl-*/bin/
# echo
# echo
ls mclbn256/
cp mcl-*/bin/mclbn256.dll mclbn256/libmclbn256.dll
# mkdir wheelhouse
# # call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" -no_logo -arch=${{ matrix.WINDOWS.VS_ARCH }}
# python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }}
# # cp build/lib*/mclbn256/_MCL.pyd mclbn256
# ls dist
# mv dist/mclbn256*.whl wheelhouse
# ls wheelhouse
# shell: cmd
# - name: Test wheel installation.
# run: pip install -f wheelhouse mclbn256 --no-index
- name: Lint and test module (and compiled MCl shared library file).
run: |
# python -c "import mclbn256; mclbn256.mclbn256.assert_bilinearity(); mclbn256.mclbn256.assert_serializable(); print('pass')"
python -c "exec(\"import mclbn256\n mclbn256.mclbn256.assert_bilinearity()\n mclbn256.mclbn256.assert_serializable()\n print('pass') \")"
# python -m pip install -U pip pylint coverage nose
# python -m pylint mclbn256 # Check against linting rules.
# python mclbn256/mclbn256.py -v # Run doctests.
# python -m nose --cover-erase # Test using nose.
# - name: Upload wheel file.
# run: |
# mkdir mclbn256-wheelhouse
# move wheelhouse\mclbn256*.whl mclbn256-wheelhouse\
# # move mcl-*\* mclbn256-wheelhouse\
# # move mcl-*\lib\mclbn256.dll mclbn256-wheelhouse\
# - uses: actions/upload-artifact@v1
# with:
# name: "mclbn256-2.0.0-win-${{ matrix.WINDOWS.ARCH }}-${{ matrix.PYTHON.VERSION }}"
# path: mclbn256-wheelhouse