mirror of
https://gitee.com/openharmony/third_party_pyyaml
synced 2024-11-23 15:30:46 +00:00
431 lines
13 KiB
YAML
431 lines
13 KiB
YAML
---
|
|
# 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
|
|
...
|