aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/manual_artifact_build.yaml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/manual_artifact_build.yaml')
-rw-r--r--.github/workflows/manual_artifact_build.yaml430
1 files changed, 430 insertions, 0 deletions
diff --git a/.github/workflows/manual_artifact_build.yaml b/.github/workflows/manual_artifact_build.yaml
new file mode 100644
index 0000000..519276e
--- /dev/null
+++ b/.github/workflows/manual_artifact_build.yaml
@@ -0,0 +1,430 @@
+---
+# This is the actual artifact build/release workflow. This workflow exists temporarily
+# because GHA doesn't support a dynamic/conditional matrix. Ensure changes are synced with ci.yaml.
+name: Manual Artifact Build
+
+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: Build sdist
+ env:
+ PYYAML_FORCE_CYTHON: 1
+ PYYAML_FORCE_LIBYAML: 0
+ run: |
+ python -V
+ python -m pip install build
+
+ 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: 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: libyaml_${{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.arch}} ${{matrix.platform}} ${{matrix.spec}}
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ 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:
+ - name: Checkout PyYAML
+ 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: configure docker foreign arch support
+ uses: docker/setup-qemu-action@v1
+ if: matrix.arch != 'x86_64'
+
+ - name: Build/Test/Package
+ 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 macos ${{matrix.arch}}
+ strategy:
+ matrix:
+ 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_macos_${{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: ${{ matrix.deployment_target || '10.9' }}
+ SDKROOT: ${{ matrix.sdkroot || 'macosx' }}
+ run: |
+ 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.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:
+ 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'
+ - 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'
+ 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
+
+ - name: Get cached libyaml state
+ id: cached_libyaml
+ uses: actions/cache@v2
+ with:
+ path: libyaml
+ 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 python ${{ matrix.spec }}
+ uses: actions/setup-python@v2
+ with:
+ architecture: ${{ matrix.python_arch }}
+ python-version: ${{ matrix.spec }}
+
+ - name: Build/Test/Package
+ env:
+ 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
+
+ # 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
+...