Skip to content

PyTest PyBoy

PyTest PyBoy #345

Workflow file for this run

name: PyTest PyBoy
on:
push:
branches:
- master
pull_request:
release:
types: [published, prereleased]
jobs:
test_cython:
name: Cython - Build, Test and Deploy
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
python-version: [3.8, 3.9, "3.10", 3.11, 3.12]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install Python dependencies
run: |
pip install --upgrade pip
pip install --upgrade wheel setuptools
pip install --prefer-binary -r requirements.txt
- name: Build PyBoy
run: |
python setup.py build_ext -j $(getconf _NPROCESSORS_ONLN) --inplace
- name: Setup Ubuntu - OpenGL dependencies
if: ${{ contains(matrix.os, 'ubuntu') }}
run: |
sudo apt update
sudo apt install libopengl0 freeglut3-dev
- name: Run PyTest
env:
PYTEST_SECRETS_KEY: ${{ secrets.PYTEST_SECRETS_KEY }}
TEST_CI: 1
TEST_NO_UI: 1
run: |
pip install --upgrade pip
pip install --prefer-binary -r requirements_tests.txt
python -m pytest tests/ -n2 -v
- name: Build and upload wheel
if: ${{ github.event_name == 'release' && github.event.action == 'released' && !contains(matrix.os, 'ubuntu') }}
run: |
echo "Building wheel and uploading"
pip install wheel twine
python setup.py sdist bdist_wheel
python -m twine upload --non-interactive -u '__token__' -p ${{ secrets.PYPI_API_TOKEN }} dist/*.whl
echo "Uploading source code"
python -m twine upload --non-interactive --skip-existing -u '__token__' -p ${{ secrets.PYPI_API_TOKEN }} dist/*.tar.gz
- name: Build and upload wheel [TEST]
if: ${{ github.event_name == 'release' && github.event.action == 'prereleased' && !contains(matrix.os, 'ubuntu') }}
run: |
echo "Building wheel and uploading"
pip install wheel twine
python setup.py sdist bdist_wheel
python -m twine upload --repository testpypi --non-interactive -u '__token__' -p ${{ secrets.PYPI_TEST_API_TOKEN }} dist/*.whl
echo "Uploading source code"
python -m twine upload --repository testpypi --non-interactive --skip-existing -u '__token__' -p ${{ secrets.PYPI_TEST_API_TOKEN }} dist/*.tar.gz
test_pypy:
name: PyPy - Test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
python-version: ['pypy-3.9'] # TODO: 'pypy-3.10'
steps:
- uses: actions/checkout@v3
- name: Setup macOS
if: ${{ contains(matrix.os, 'macos-latest') }}
run: |
# Fix cryptography build: https://github.com/pyca/cryptography/issues/3489
brew install openssl
echo "CPPFLAGS=-I/usr/local/opt/openssl/include" >> $GITHUB_ENV
echo "LDFLAGS=-L/usr/local/opt/openssl/lib" >> $GITHUB_ENV
- name: Setup Ubuntu - OpenGL dependencies
if: ${{ contains(matrix.os, 'ubuntu') }}
run: |
sudo apt update
sudo apt install libopengl0 freeglut3-dev
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install PyPy dependencies
run: |
pypy3 -m ensurepip
pypy3 -m pip install --upgrade pip
pypy3 -m pip install wheel
- name: Run PyTest
env:
PYTEST_SECRETS_KEY: ${{ secrets.PYTEST_SECRETS_KEY }}
TEST_CI: 1
TEST_NO_UI: 1
run: |
pip install --upgrade pip
pypy3 -m pip install --prefer-binary -r requirements_tests.txt
pypy3 -m pytest tests/ -n2 -v
test_manylinux:
name: ManyLinux - Build, Test and Deploy
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['cp37-cp37m', 'cp38-cp38', 'cp39-cp39', 'cp310-cp310', 'cp311-cp311', 'cp312-cp312']
manylinux-version: ['manylinux2010_x86_64', 'manylinux_2_28_x86_64'] # GHA doesn't support manylinux_2_24_aarch64
exclude:
- manylinux-version: manylinux2010_x86_64
python-version: cp311-cp311
- manylinux-version: manylinux2010_x86_64
python-version: cp312-cp312
steps:
- uses: actions/checkout@v3
- name: Docker Run Action
uses: addnab/docker-run-action@v3
with:
image: quay.io/pypa/${{ matrix.manylinux-version }}:latest
options: -v ${{ github.workspace }}:/work -e GITHUB_REF=${{ github.ref }} --rm
run: |
set -e
echo "Linking Python version ${{ matrix.python-version }}"
ln -s "/opt/python/${{ matrix.python-version }}/bin/python3" /usr/local/bin/python
if [[ "${{ matrix.manylinux-version }}" == "manylinux_2_28_x86_64" ]]; then
dnf install libjpeg-devel -y
else
yum -y install libjpeg-devel libffi-devel
fi
cd /work
echo "Starting build"
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
echo "Starting tests"
if [[ "${{ matrix.manylinux-version }}" == "manylinux2010_x86_64" ]]; then
python -m pip install cryptography==37 numpy==1.21.6
fi
python -m pip install --prefer-binary -r requirements.txt
python setup.py build_ext -j $(getconf _NPROCESSORS_ONLN) --inplace
python -m pip install --prefer-binary -r requirements_tests.txt
PYTEST_SECRETS_KEY=${{ secrets.PYTEST_SECRETS_KEY }} TEST_CI=1 TEST_NO_UI=1 python -m pytest tests/ -n2 -v
echo "Building wheel"
python -m pip install wheel
python setup.py sdist bdist_wheel
python -m pip install auditwheel
auditwheel repair dist/*.whl
rm -rf dist/*.whl
mv wheelhouse/*.whl dist/
chmod 777 -R . # Fix permissions to help cleaning up outside of Docker
- name: Set up Python 3.8 (just for PyPi upload)
uses: actions/setup-python@v3
with:
python-version: 3.8
- name: Upload wheel
if: ${{ github.event_name == 'release' && github.event.action == 'released' }}
run: |
echo "Uploading wheel"
pip install twine
python -m twine upload --non-interactive -u '__token__' -p ${{ secrets.PYPI_API_TOKEN }} dist/*.whl
- name: Upload wheel [TEST]
if: ${{ github.event_name == 'release' && github.event.action == 'prereleased' }}
run: |
echo "Uploading wheel"
pip install twine
python -m twine upload --repository testpypi --non-interactive -u '__token__' -p ${{ secrets.PYPI_TEST_API_TOKEN }} dist/*.whl