| --- |
| 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; 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 |
| ... |