--- name: PyYAML CI on: push: pull_request: 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 DISTFILES=(dist/*.tar.gz) if [[ ${DISTFILES[@]} -ne 1 ]]; then echo "unexpected content in dist dir: $(ls dist/*.tar.gz)" exit 1 fi - 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 -v $(pwd):/io -e LIBYAML_REF -e 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 -t -d --rm --name worker -v $(pwd):/io "$DOCKER_IMAGE" bash - name: build/test/package run: > docker exec -e PYTHON_TAG -e PYYAML_RUN_TESTS -e PYYAML_BUILD_WHEELS -e 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 ...