| --- |
| 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.cfg.arch}} ${{matrix.cfg.platform}} |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| cfg: |
| - { platform: manylinux1, arch: x86_64 } |
| - { platform: manylinux2014, arch: aarch64 } |
| - { platform: manylinux2014, arch: s390x } |
| env: |
| DOCKER_IMAGE: quay.io/pypa/${{matrix.cfg.platform}}_${{matrix.cfg.arch}} |
| steps: |
| - name: Check cached libyaml state |
| id: cached_libyaml |
| uses: actions/cache@v2 |
| with: |
| path: libyaml |
| key: libyamlX_${{matrix.cfg.platform}}_${{matrix.cfg.arch}}_${{env.LIBYAML_REF}} |
| |
| - name: configure docker foreign arch support |
| uses: docker/setup-qemu-action@v1 |
| if: matrix.cfg.arch != 'x86_64' && steps.cached_libyaml.outputs.cache-hit != 'true' |
| |
| - 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' |
| |
| - name: ensure output is world readable (or cache fill fails with Permission Denied) |
| run: > |
| sudo chmod -R a+r ./libyaml/ |
| if: steps.cached_libyaml.outputs.cache-hit != 'true' |
| |
| |
| linux_pyyaml: |
| needs: linux_libyaml |
| name: pyyaml ${{matrix.cfg.arch}} ${{matrix.cfg.platform}} ${{matrix.cfg.python_tag}} |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| cfg: |
| - { platform: manylinux1, arch: x86_64, python_tag: cp27-cp27mu } |
| - { platform: manylinux1, arch: x86_64, python_tag: cp36-cp36m } |
| - { platform: manylinux1, arch: x86_64, python_tag: cp37-cp37m } |
| - { platform: manylinux1, arch: x86_64, python_tag: cp38-cp38 } |
| - { platform: manylinux1, arch: x86_64, python_tag: cp39-cp39 } |
| - { platform: manylinux2014, arch: aarch64, python_tag: cp36-cp36m } |
| - { platform: manylinux2014, arch: aarch64, python_tag: cp37-cp37m } |
| - { platform: manylinux2014, arch: aarch64, python_tag: cp38-cp38 } |
| - { platform: manylinux2014, arch: aarch64, python_tag: cp39-cp39 } |
| - { platform: manylinux2014, arch: s390x, python_tag: cp36-cp36m } |
| - { platform: manylinux2014, arch: s390x, python_tag: cp37-cp37m } |
| - { platform: manylinux2014, arch: s390x, python_tag: cp38-cp38 } |
| - { platform: manylinux2014, arch: s390x, python_tag: cp39-cp39 } |
| env: |
| AW_PLAT: ${{matrix.cfg.platform}}_${{matrix.cfg.arch}} |
| DOCKER_IMAGE: quay.io/pypa/${{matrix.cfg.platform}}_${{matrix.cfg.arch}} |
| PYTHON_TAG: ${{matrix.cfg.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: libyamlX_${{matrix.cfg.platform}}_${{matrix.cfg.arch}}_${{env.LIBYAML_REF}} |
| |
| - name: Ensure libyaml fetched |
| run: exit 1 |
| if: steps.cached_libyaml.outputs.cache-hit != 'true' |
| |
| - name: configure docker foreign arch support |
| uses: docker/setup-qemu-action@v1 |
| if: matrix.cfg.arch != 'x86_64' |
| |
| - 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 |
| ... |