summaryrefslogtreecommitdiff
path: root/.github/workflows/ci.yaml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/ci.yaml')
-rw-r--r--.github/workflows/ci.yaml339
1 files changed, 259 insertions, 80 deletions
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 777839c..266dc6d 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -1,4 +1,8 @@
---
+# This is the CI workflow (not the artifact build/release workflow). The workflows
+# are split because GHA doesn't support a dynamic/conditional matrix. This workflow
+# has slow jobs and jobs that require private GHA runners (eg, M1 Mac) commented out.defaults:
+# Ensure changes are synced with manual_artifact_build.yaml.
name: PyYAML CI
on:
@@ -13,10 +17,10 @@ env:
jobs:
python_sdist:
- name: PyYAML sdist
+ name: pyyaml sdist
runs-on: ubuntu-latest
steps:
- - name: Checkout pyyaml
+ - name: Checkout PyYAML
uses: actions/checkout@v2
- name: Install a python
@@ -24,18 +28,14 @@ jobs:
with:
python-version: 3.x
- - name: Install build deps
+ - name: Build sdist
+ env:
+ PYYAML_FORCE_CYTHON: 1
+ PYYAML_FORCE_LIBYAML: 0
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.
@@ -74,8 +74,9 @@ jobs:
matrix:
cfg:
- { platform: manylinux1, arch: x86_64 }
- - { platform: manylinux2014, arch: aarch64 }
- - { platform: manylinux2014, arch: s390x }
+ - { platform: manylinux2014, arch: x86_64 }
+# - { platform: manylinux2014, arch: aarch64 }
+# - { platform: manylinux2014, arch: s390x }
env:
DOCKER_IMAGE: quay.io/pypa/${{matrix.cfg.platform}}_${{matrix.cfg.arch}}
steps:
@@ -84,7 +85,7 @@ jobs:
uses: actions/cache@v2
with:
path: libyaml
- key: libyamlX_${{matrix.cfg.platform}}_${{matrix.cfg.arch}}_${{env.LIBYAML_REF}}
+ key: libyaml_${{matrix.cfg.platform}}_${{matrix.cfg.arch}}_${{env.LIBYAML_REF}}
- name: configure docker foreign arch support
uses: docker/setup-qemu-action@v1
@@ -113,37 +114,37 @@ jobs:
linux_pyyaml:
needs: linux_libyaml
- name: pyyaml ${{matrix.cfg.arch}} ${{matrix.cfg.platform}} ${{matrix.cfg.python_tag}}
+ name: pyyaml ${{matrix.arch}} ${{matrix.platform}} ${{matrix.spec}}
runs-on: ubuntu-latest
strategy:
matrix:
- cfg:
- - { 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
+ include:
+ - { platform: manylinux1, arch: x86_64, spec: cp36 }
+# - { platform: manylinux1, arch: x86_64, spec: cp37 }
+# - { platform: manylinux1, arch: x86_64, spec: cp38 }
+# - { platform: manylinux1, arch: x86_64, spec: cp39 }
+ - { platform: manylinux2014, arch: x86_64, spec: cp310 }
+# - { platform: manylinux2014, arch: aarch64, spec: cp36 }
+# - { platform: manylinux2014, arch: aarch64, spec: cp37 }
+# - { platform: manylinux2014, arch: aarch64, spec: cp38 }
+# - { platform: manylinux2014, arch: aarch64, spec: cp39 }
+# - { platform: manylinux2014, arch: aarch64, spec: cp310 }
+# - { platform: manylinux2014, arch: s390x, spec: cp36 }
+# - { platform: manylinux2014, arch: s390x, spec: cp37 }
+# - { platform: manylinux2014, arch: s390x, spec: cp38 }
+# - { platform: manylinux2014, arch: s390x, spec: cp39 }
+# - { platform: manylinux2014, arch: s390x, spec: cp310 }
+
steps:
- - uses: actions/checkout@v2
+ - name: Checkout PyYAML
+ 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}}
+ key: libyaml_${{matrix.platform}}_${{matrix.arch}}_${{env.LIBYAML_REF}}
- name: Ensure libyaml fetched
run: exit 1
@@ -151,76 +152,236 @@ jobs:
- 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
+ if: matrix.arch != 'x86_64'
- 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
+ env:
+ CIBW_ARCHS: all
+ CIBW_BUILD: ${{matrix.spec}}-manylinux_${{matrix.arch}}
+ CIBW_BUILD_VERBOSITY: 1
+ # containerized Linux builds require explicit CIBW_ENVIRONMENT
+ CIBW_ENVIRONMENT: >
+ C_INCLUDE_PATH=libyaml/include
+ LIBRARY_PATH=libyaml/src/.libs
+ LD_LIBRARY_PATH=libyaml/src/.libs
+ PYYAML_FORCE_CYTHON=1
+ PYYAML_FORCE_LIBYAML=1
+ CIBW_TEST_COMMAND: cd {project}; python tests/lib/test_all.py
+ run: |
+ set -eux
+ python3 -V
+ python3 -m pip install -U --user cibuildwheel
+ python3 -m cibuildwheel --platform auto --output-dir dist .
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v2
with:
name: dist
path: dist/*.whl
+ if-no-files-found: error
macos_libyaml:
- name: libyaml ${{matrix.arch}} ${{matrix.platform}}
- runs-on: ${{matrix.platform}}
+ name: libyaml macos ${{matrix.arch}}
strategy:
matrix:
- platform:
- - macos-10.15
- arch:
- - x86_64
+ include:
+ - arch: x86_64
+# - arch: arm64
+# runs_on: [self-hosted, macOS, arm64]
+# deployment_target: '11.0'
+# run_wrapper: arch -arm64 bash --noprofile --norc -eo pipefail {0}
+# sdkroot: macosx11.3
+ defaults:
+ run:
+ shell: ${{ matrix.run_wrapper || 'bash --noprofile --norc -eo pipefail {0}' }}
+ runs-on: ${{ matrix.runs_on || 'macos-10.15' }}
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}}
+ key: libyaml_macos_${{matrix.arch}}_${{env.LIBYAML_REF}}
- - name: Checkout pyyaml
+ - name: Checkout PyYAML
uses: actions/checkout@v2
if: steps.cached_libyaml.outputs.cache-hit != 'true'
- name: Build libyaml
env:
- MACOSX_DEPLOYMENT_TARGET: '10.9'
+ MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deployment_target || '10.9' }}
+ SDKROOT: ${{ matrix.sdkroot || 'macosx' }}
run: |
- brew install automake coreutils
+ set -eux
+ brew install automake coreutils m4
bash ./packaging/build/libyaml.sh
+ echo "finished artifact arch is $(lipo -archs libyaml/src/.libs/libyaml.a)"
if: steps.cached_libyaml.outputs.cache-hit != 'true'
+
macos_pyyaml:
needs: macos_libyaml
- name: pyyaml ${{matrix.arch}} ${{matrix.platform}} ${{matrix.python_tag}}
+ name: pyyaml ${{ matrix.spec }}
+ runs-on: ${{ matrix.runs_on || 'macos-10.15' }}
+ defaults:
+ run:
+ shell: ${{ matrix.run_wrapper || 'bash --noprofile --norc -eo pipefail {0}' }}
+ strategy:
+ matrix:
+ include:
+ - spec: cp36-macosx_x86_64
+# - spec: cp37-macosx_x86_64
+# - spec: cp38-macosx_x86_64
+# - spec: cp39-macosx_x86_64
+ - spec: cp310-macosx_x86_64
+
+# # build for arm64 under a hacked macOS 12 self-hosted x86_64-on-arm64 runner until arm64 is fully supported
+# # FIXME: ? cp38-macosx_arm64 requires special handling and fails some test_zdist tests under cibw 2.1.2, skip it (so Apple's XCode python3 won't have a wheel)
+# - spec: cp39-macosx_arm64
+# deployment_target: '11.0'
+# runs_on: [self-hosted, macOS, arm64]
+# arch: arm64
+# run_wrapper: arch -arm64 bash --noprofile --norc -eo pipefail {0}
+# sdkroot: macosx11.3
+#
+# - spec: cp310-macosx_arm64
+# deployment_target: '11.0'
+# runs_on: [self-hosted, macOS, arm64]
+# arch: arm64
+# run_wrapper: arch -arm64 bash --noprofile --norc -eo pipefail {0}
+# sdkroot: macosx11.3
+
+ 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_macos_${{ matrix.arch || 'x86_64' }}_${{env.LIBYAML_REF}}
+
+ - name: Ensure libyaml fetched
+ run: exit 1
+ if: steps.cached_libyaml.outputs.cache-hit != 'true'
+
+ - name: Build/Test/Package
+ env:
+ C_INCLUDE_PATH: libyaml/include
+ CIBW_BUILD: ${{matrix.spec}}
+ CIBW_BUILD_VERBOSITY: 1
+ CIBW_TEST_COMMAND: cd {project}; python tests/lib/test_all.py
+ LIBRARY_PATH: libyaml/src/.libs
+ MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deployment_target || '10.9' }}
+ SDKROOT: ${{ matrix.sdkroot || 'macosx' }}
+ run: |
+ python3 -V
+ python3 -m pip install -U --user cibuildwheel
+ python3 -m cibuildwheel --platform auto --output-dir dist .
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v2
+ with:
+ name: dist
+ path: dist/*.whl
+ if-no-files-found: error
+
+ windows_libyaml:
+ name: libyaml ${{matrix.platform}} ${{matrix.arch}}
runs-on: ${{matrix.platform}}
strategy:
matrix:
- platform:
- - macos-10.15
- arch:
- - x86_64
- python_tag:
- - cp36*
- - cp37*
- - cp38*
- - cp39*
+ include:
+ - platform: windows-2016
+ arch: x64
+ - platform: windows-2016
+ arch: win32
steps:
+ - 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: Build libyaml
+ shell: bash
+ if: steps.cached_libyaml.outputs.cache-hit != 'true'
+ run: |
+ # git spews all over stderr unless we tell it not to
+ export GIT_REDIRECT_STDERR="2>&1"
+
+ if [[ ! -d ./libyaml ]]; then
+ git clone -b ${{ env.LIBYAML_REF }} ${{ env.LIBYAML_REPO }} 2>&1
+ fi
+
+ pushd libyaml
+ git clean -fdx
+ popd
+
+ mkdir libyaml/build
+
+ pushd libyaml/build
+ cmake.exe -G "Visual Studio 15 2017" -A ${{ matrix.arch }} -DYAML_STATIC_LIB_NAME=yaml ..
+ cmake.exe --build . --config Release
+ popd
+
+
+ windows_pyyaml:
+ needs: windows_libyaml
+ name: pyyaml ${{ matrix.platform }} ${{matrix.python_arch}} ${{matrix.spec}}
+ runs-on: ${{matrix.platform}}
+ strategy:
+ matrix:
+ include:
+ - platform: windows-2016
+ build_arch: x64
+ python_arch: x64
+ spec: 3.6
+# - platform: windows-2016
+# build_arch: x64
+# python_arch: x64
+# spec: 3.7
+# - platform: windows-2016
+# build_arch: x64
+# python_arch: x64
+# spec: 3.8
+# - platform: windows-2016
+# build_arch: x64
+# python_arch: x64
+# spec: 3.9
+ - platform: windows-2016
+ build_arch: x64
+ python_arch: x64
+ spec: 3.10.0-rc.2
+ - platform: windows-2016
+ build_arch: win32
+ python_arch: x86
+ spec: 3.6
+# - platform: windows-2016
+# build_arch: win32
+# python_arch: x86
+# spec: 3.7
+# - platform: windows-2016
+# build_arch: win32
+# python_arch: x86
+# spec: 3.8
+# - platform: windows-2016
+# build_arch: win32
+# python_arch: x86
+# spec: 3.9
+ - platform: windows-2016
+ build_arch: win32
+ python_arch: x86
+ spec: 3.10.0-rc.2
+ steps:
+ # autocrlf screws up tests under Windows
+ - name: Set git to use LF
+ run: |
+ git config --global core.autocrlf false
+ git config --global core.eol lf
+
- name: Checkout pyyaml
uses: actions/checkout@v2
@@ -229,25 +390,43 @@ jobs:
uses: actions/cache@v2
with:
path: libyaml
- key: libyaml_${{matrix.platform}}_${{matrix.arch}}_${{env.LIBYAML_REF}}
+ key: libyaml_${{matrix.platform}}_${{matrix.build_arch}}_${{env.LIBYAML_REF}}
- name: Ensure libyaml fetched
run: exit 1
if: steps.cached_libyaml.outputs.cache-hit != 'true'
- - name: Install a python
+ - name: Install python ${{ matrix.spec }}
uses: actions/setup-python@v2
with:
- python-version: 3.x
+ architecture: ${{ matrix.python_arch }}
+ python-version: ${{ matrix.spec }}
- name: Build/Test/Package
env:
- CIBW_BUILD: ${{matrix.python_tag}}
- CIBW_BUILD_VERBOSITY: 1
- run: bash ./packaging/build/macos.sh
+ PYYAML_FORCE_CYTHON: 1
+ PYYAML_FORCE_LIBYAML: 1
+ shell: bash
+ run: |
+ set -eux
+ python -V
+ python -m pip install Cython wheel
+
+ python setup.py \
+ --with-libyaml build_ext \
+ -I libyaml/include \
+ -L libyaml/build/Release \
+ -D YAML_DECLARE_STATIC \
+ build bdist_wheel
- - uses: actions/upload-artifact@v2
+ # run tests on built wheel
+ python -m pip install dist/*.whl
+ python tests/lib/test_all.py
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v2
with:
name: dist
path: dist/*.whl
+ if-no-files-found: error
...