name: Validate PyPy e2e on: push: branches: - main paths-ignore: - '**.md' pull_request: paths-ignore: - '**.md' schedule: - cron: 30 3 * * * workflow_dispatch: jobs: setup-pypy: name: Setup PyPy ${{ matrix.pypy }} ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-latest, windows-latest, macos-latest, macos-13 ] pypy: - 'pypy-2.7' - 'pypy-3.10' - 'pypy3.9' - 'pypy-2.7-v7.3.14' - 'pypy-3.10-v7.3.15' - 'pypy-3.10-v7.3.14' - 'pypy-3.10-v7.3.x' - 'pypy-3.10-v7.x' - 'pypy-2.7-v7.3.12rc1' - 'pypy-3.10-nightly' - 'pypy3.10-v7.3.15' steps: - name: Checkout uses: actions/checkout@v4 - name: setup-python ${{ matrix.pypy }} id: setup-python uses: ./ with: python-version: ${{ matrix.pypy }} - name: Check python-path run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}' shell: bash - name: PyPy and Python version run: python --version - name: Run simple code run: python -c 'import math; print(math.factorial(5))' - name: Assert PyPy is running run: | import platform assert platform.python_implementation().lower() == "pypy" shell: python - name: Assert expected binaries (or symlinks) are present run: | EXECUTABLE=${{ matrix.pypy }} EXECUTABLE=${EXECUTABLE/pypy-/pypy} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe ${EXECUTABLE} --version shell: bash setup-pypy-noenv: name: Setup PyPy ${{ matrix.pypy }} ${{ matrix.os }} (noenv) runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest, macos-13] pypy: ['pypy2.7', 'pypy3.9', 'pypy3.10-nightly'] steps: - name: Checkout uses: actions/checkout@v4 - name: setup-python ${{ matrix.pypy }} id: setup-python uses: ./ with: python-version: ${{ matrix.pypy }} update-environment: false - name: PyPy and Python version run: ${{ steps.setup-python.outputs.python-path }} --version - name: Run simple code run: ${{ steps.setup-python.outputs.python-path }} -c 'import math; print(math.factorial(5))' check-latest: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest, macos-13] steps: - uses: actions/checkout@v4 - name: Setup PyPy and check latest uses: ./ with: python-version: 'pypy-3.10-v7.3.x' check-latest: true - name: PyPy and Python version run: python --version - name: Run simple code run: python -c 'import math; print(math.factorial(5))' - name: Assert PyPy is running run: | import platform assert platform.python_implementation().lower() == "pypy" shell: python - name: Assert expected binaries (or symlinks) are present run: | EXECUTABLE="pypy-3.10-v7.3.x" EXECUTABLE=${EXECUTABLE/-/} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe ${EXECUTABLE} --version shell: bash setup-pypy-multiple-versions: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest, macos-13] steps: - uses: actions/checkout@v4 - name: Setup PyPy and check latest uses: ./ with: python-version: | pypy-3.10-v7.3.x pypy3.9 check-latest: true - name: PyPy and Python version run: python --version - name: Run simple code run: python -c 'import math; print(math.factorial(5))' - name: Assert PyPy is running run: | import platform assert platform.python_implementation().lower() == "pypy" shell: python - name: Assert expected binaries (or symlinks) are present run: | EXECUTABLE="pypy-3.10-v7.3.x" EXECUTABLE=${EXECUTABLE/-/} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe ${EXECUTABLE} --version shell: bash - name: Assert expected binaries (or symlinks) are present run: | EXECUTABLE='pypy3.9' EXECUTABLE=${EXECUTABLE/pypy-/pypy} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe ${EXECUTABLE} --version shell: bash