--- name: PyYAML CI on: push: pull_request: types: [opened, synchronize, edited, reopened] workflow_dispatch: env: LIBYAML_REPO: https://github.com/yaml/libyaml LIBYAML_REF: 0.2.5 jobs: python_sdist: name: PyYAML sdist runs-on: ubuntu-latest steps: - name: Checkout pyyaml uses: actions/checkout@v2 - name: Install a python uses: actions/setup-python@v2 with: python-version: 3.x - name: Install build deps run: | python -V python -m pip install build - name: Build sdist run: | # We DO want to force Cythoning, at least until 6.0. export PYYAML_FORCE_CYTHON=1 # We don't actually want to build the lib. export PYYAML_FORCE_LIBYAML=0 python -m build . # Ensure exactly one artifact was produced. [[ $(shopt -s nullglob; ls dist/*.tar.gz | wc -w) == 1 ]] || { echo "Unexpected content in dist dir: '$(ls dist/*.tar.gz)'." exit 1 } - name: Test sdist run: | # Install some libyaml headers. # TODO Should we smoke test the sdist against the libyaml we built? sudo apt update sudo apt install libyaml-dev -y # Ensure Cython is not present so we use only what's in the sdist. python -m pip uninstall Cython -y || true # Pass no extra args. # We should auto-install with libyaml since it's present. python -m pip install dist/*.tar.gz -v python packaging/build/smoketest.py - name: Upload sdist artifact uses: actions/upload-artifact@v2 with: name: dist path: dist/*.tar.gz linux_libyaml: name: libyaml ${{matrix.arch}} ${{matrix.platform}} runs-on: ubuntu-latest strategy: matrix: platform: # manylinux1 is forward-compatible to 2010/2014. #- manylinux2014 #- manylinux2010 - manylinux1 arch: - x86_64 env: DOCKER_IMAGE: quay.io/pypa/${{matrix.platform}}_${{matrix.arch}} steps: - name: Check cached libyaml state id: cached_libyaml uses: actions/cache@v2 with: path: libyaml key: libyaml_${{matrix.platform}}_${{matrix.arch}}_${{env.LIBYAML_REF}} - name: Checkout pyyaml uses: actions/checkout@v2 if: steps.cached_libyaml.outputs.cache-hit != 'true' - name: Build libyaml run: > docker run --rm --volume "$(pwd):/io" --env LIBYAML_REF --env LIBYAML_REPO --workdir /io "$DOCKER_IMAGE" /io/packaging/build/libyaml.sh if: steps.cached_libyaml.outputs.cache-hit != 'true' linux_pyyaml: needs: linux_libyaml name: pyyaml ${{matrix.arch}} ${{matrix.platform}} ${{matrix.python_tag}} runs-on: ubuntu-latest strategy: matrix: platform: # So long as manylinux1 container builds work, they're # forward-compatible to 2010/2014. # - manylinux2014 # - manylinux2010 - manylinux1 arch: - x86_64 python_tag: # NB manylinux >=2014 containers don't have Python 2.7, so we have to # use exclude to skip it. - cp27-cp27mu - cp36-cp36m - cp37-cp37m - cp38-cp38 - cp39-cp39 # exclude: # - platform: manylinux2014 # arch: x86_64 # python_tag: cp27-cp27mu env: AW_PLAT: ${{matrix.platform}}_${{matrix.arch}} DOCKER_IMAGE: quay.io/pypa/${{matrix.platform}}_${{matrix.arch}} PYTHON_TAG: ${{matrix.python_tag}} PYYAML_BUILD_WHEELS: 1 steps: - uses: actions/checkout@v2 - name: Fetch cached libyaml id: cached_libyaml uses: actions/cache@v2 with: path: libyaml key: libyaml_${{matrix.platform}}_${{matrix.arch}}_${{env.LIBYAML_REF}} - name: Ensure libyaml fetched run: exit 1 if: steps.cached_libyaml.outputs.cache-hit != 'true' - name: Start container run: > docker run --rm --tty --detach --name worker --volume "$(pwd):/io" "$DOCKER_IMAGE" bash - name: Build/Test/Package run: > docker exec --env PYTHON_TAG --env PYYAML_RUN_TESTS --env PYYAML_BUILD_WHEELS --env AW_PLAT --workdir /io worker /io/packaging/build/manylinux.sh - uses: actions/upload-artifact@v2 with: name: dist path: dist/*.whl macos_libyaml: name: libyaml ${{matrix.arch}} ${{matrix.platform}} runs-on: ${{matrix.platform}} strategy: matrix: platform: - macos-10.15 arch: - x86_64 steps: - name: Check cached libyaml state id: cached_libyaml uses: actions/cache@v2 with: path: libyaml key: libyaml_${{matrix.platform}}_${{matrix.arch}}_${{env.LIBYAML_REF}} - name: Checkout pyyaml uses: actions/checkout@v2 if: steps.cached_libyaml.outputs.cache-hit != 'true' - name: Build libyaml env: MACOSX_DEPLOYMENT_TARGET: '10.9' run: | brew install automake coreutils bash ./packaging/build/libyaml.sh if: steps.cached_libyaml.outputs.cache-hit != 'true' macos_pyyaml: needs: macos_libyaml name: pyyaml ${{matrix.arch}} ${{matrix.platform}} ${{matrix.python_tag}} runs-on: ${{matrix.platform}} strategy: matrix: platform: - macos-10.15 arch: - x86_64 python_tag: - cp27* - cp36* - cp37* - cp38* - cp39* steps: - name: Checkout pyyaml uses: actions/checkout@v2 - name: Get cached libyaml state id: cached_libyaml uses: actions/cache@v2 with: path: libyaml key: libyaml_${{matrix.platform}}_${{matrix.arch}}_${{env.LIBYAML_REF}} - name: Ensure libyaml fetched run: exit 1 if: steps.cached_libyaml.outputs.cache-hit != 'true' - name: Install a python uses: actions/setup-python@v2 with: python-version: 3.x - name: Build/Test/Package env: CIBW_BUILD: ${{matrix.python_tag}} CIBW_BUILD_VERBOSITY: 1 run: bash ./packaging/build/macos.sh - uses: actions/upload-artifact@v2 with: name: dist path: dist/*.whl ...