Dos in merge key #617
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| name: PyYAML CI | |
| on: | |
| push: | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| workflow_dispatch: | |
| inputs: | |
| libyaml_repo: | |
| description: Repo URL for libyaml | |
| type: string | |
| default: https://github.com/yaml/libyaml | |
| libyaml_ref: | |
| description: Tag/branch ref for libyaml | |
| type: string | |
| default: 0.2.5 | |
| skip_artifact_upload: | |
| description: Skip most artifact uploads? | |
| type: boolean | |
| default: true | |
| skip_ci_redundant_jobs: | |
| description: Skip redundant jobs for CI? | |
| type: boolean | |
| default: true | |
| skip_slow_jobs: | |
| description: Skip slow (emulated) jobs for CI? | |
| type: boolean | |
| default: true | |
| env: | |
| LIBYAML_REPO: ${{ inputs.libyaml_repo || 'https://github.com/yaml/libyaml' }} # FIXME: can we ref the input.default value? | |
| LIBYAML_REF: ${{ inputs.libyaml_ref || '0.2.5' }} # FIXME: can we ref the input.default value? | |
| skip_ci_redundant_jobs: ${{ inputs.skip_ci_redundant_jobs || github.event_name == 'pull_request' || github.event_name == 'push' }} | |
| skip_slow_jobs: ${{ inputs.skip_slow_jobs || github.event_name == 'pull_request' || github.event_name == 'push' }} | |
| skip_artifact_upload: ${{ (github.event_name == 'workflow_dispatch' && inputs.skip_artifact_upload) || github.event_name != 'workflow_dispatch' }} | |
| jobs: | |
| python_sdist: | |
| name: pyyaml sdist | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| artifact_name: ${{ steps.build_sdist.outputs.artifact_name }} | |
| package_version: ${{ steps.build_sdist.outputs.package_version }} | |
| steps: | |
| - name: Checkout PyYAML | |
| uses: actions/checkout@v4 | |
| - name: Install a python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.x | |
| - name: Build sdist | |
| id: build_sdist | |
| env: | |
| PYYAML_FORCE_CYTHON: 1 | |
| PYYAML_FORCE_LIBYAML: 0 | |
| run: | | |
| python -V | |
| python -m pip install build | |
| python -m build -s . | |
| echo "artifact_name=$(ls ./dist)" >> "$GITHUB_OUTPUT" | |
| echo "package_version=$(ls ./dist | sed -En 's/pyyaml-(.+)\.tar\.gz/\1/p')" >> "$GITHUB_OUTPUT" | |
| - name: Upload sdist artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ steps.build_sdist.outputs.artifact_name }} | |
| path: dist/${{ steps.build_sdist.outputs.artifact_name }} | |
| if-no-files-found: error | |
| # always upload the sdist artifact- all the wheel build jobs require it | |
| make_linux_libyaml_matrix: | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| matrix_json: ${{ steps.make_matrix.outputs.matrix_json }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: make a matrix | |
| id: make_matrix | |
| uses: ./.github/actions/dynamatrix | |
| with: | |
| matrix_yaml: | | |
| include: | |
| - { platform: manylinux1, arch: x86_64 } | |
| - { platform: manylinux2014, arch: x86_64 } | |
| - { platform: manylinux2014, arch: aarch64 } | |
| - { platform: manylinux2014, arch: s390x, omit: ${{ env.skip_ci_redundant_jobs || env.skip_slow_jobs }} } | |
| - { platform: musllinux_1_2, arch: x86_64 } | |
| - { platform: musllinux_1_2, arch: aarch64 } | |
| linux_libyaml: | |
| needs: [make_linux_libyaml_matrix] | |
| name: libyaml ${{ matrix.platform }} ${{ matrix.arch }} | |
| runs-on: ${{ (matrix.arch == 'aarch64') && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.make_linux_libyaml_matrix.outputs.matrix_json) }} | |
| env: | |
| DOCKER_IMAGE: quay.io/pypa/${{ matrix.platform }}_${{ matrix.arch }} | |
| steps: | |
| - name: Check cached libyaml state | |
| id: cached_libyaml | |
| uses: actions/cache@v4 | |
| with: | |
| path: libyaml | |
| key: libyaml_${{ matrix.platform }}_${{ matrix.arch }}_${{ env.LIBYAML_REF }} | |
| - name: configure docker foreign arch support | |
| uses: docker/setup-qemu-action@v3 | |
| if: matrix.arch != 'x86_64' && steps.cached_libyaml.outputs.cache-hit != 'true' | |
| - name: Checkout pyyaml | |
| uses: actions/checkout@v4 | |
| 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' | |
| make_linux_pyyaml_matrix: | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| matrix_json: ${{ steps.make_matrix.outputs.matrix_json }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: make a matrix | |
| id: make_matrix | |
| uses: ./.github/actions/dynamatrix | |
| with: | |
| matrix_yaml: | | |
| include: | |
| - { platform: manylinux1, arch: x86_64, spec: cp38, cibw_version: 'cibuildwheel<4' } | |
| - { platform: manylinux1, arch: x86_64, spec: cp39, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: x86_64, spec: cp310, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: x86_64, spec: cp311, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: x86_64, spec: cp312, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: x86_64, spec: cp313, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: x86_64, spec: cp314 } | |
| - { platform: manylinux2014, arch: x86_64, spec: cp314t } | |
| - { platform: manylinux2014, arch: aarch64, spec: cp38, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: aarch64, spec: cp39, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: aarch64, spec: cp310, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: aarch64, spec: cp311, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: aarch64, spec: cp312, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: aarch64, spec: cp313, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: manylinux2014, arch: aarch64, spec: cp314 } | |
| - { platform: manylinux2014, arch: aarch64, spec: cp314t } | |
| - { platform: manylinux2014, arch: s390x, spec: cp38, omit: ${{ env.skip_ci_redundant_jobs || env.skip_slow_jobs }} } | |
| - { platform: manylinux2014, arch: s390x, spec: cp39, omit: ${{ env.skip_ci_redundant_jobs || env.skip_slow_jobs }} } | |
| - { platform: manylinux2014, arch: s390x, spec: cp310, omit: ${{ env.skip_ci_redundant_jobs || env.skip_slow_jobs }} } | |
| - { platform: manylinux2014, arch: s390x, spec: cp311, omit: ${{ env.skip_ci_redundant_jobs || env.skip_slow_jobs }} } | |
| - { platform: manylinux2014, arch: s390x, spec: cp312, omit: ${{ env.skip_ci_redundant_jobs || env.skip_slow_jobs }} } | |
| - { platform: manylinux2014, arch: s390x, spec: cp313, omit: ${{ env.skip_ci_redundant_jobs || env.skip_slow_jobs }} } | |
| - { platform: manylinux2014, arch: s390x, spec: cp314, omit: ${{ env.skip_slow_jobs }} } | |
| - { platform: manylinux2014, arch: s390x, spec: cp314t, omit: ${{ env.skip_ci_redundant_jobs || env.skip_slow_jobs }} } | |
| - { platform: musllinux_1_2, arch: x86_64, spec: cp38, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: x86_64, spec: cp39, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: x86_64, spec: cp310, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: x86_64, spec: cp311, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: x86_64, spec: cp312, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: x86_64, spec: cp313, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: x86_64, spec: cp314 } | |
| - { platform: musllinux_1_2, arch: x86_64, spec: cp314t } | |
| - { platform: musllinux_1_2, arch: aarch64, spec: cp39, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: aarch64, spec: cp310, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: aarch64, spec: cp311, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: aarch64, spec: cp312, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: aarch64, spec: cp313, omit: ${{ env.skip_ci_redundant_jobs }} } | |
| - { platform: musllinux_1_2, arch: aarch64, spec: cp314, omit: ${{ env.skip_slow_jobs }} } | |
| - { platform: musllinux_1_2, arch: aarch64, spec: cp314t, omit: ${{ env.skip_slow_jobs }} } | |
| linux_pyyaml: | |
| needs: [python_sdist, linux_libyaml, make_linux_pyyaml_matrix] | |
| name: pyyaml ${{matrix.spec}}-${{matrix.platform}}_${{matrix.arch}} | |
| runs-on: ${{ (matrix.arch == 'aarch64') && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.make_linux_pyyaml_matrix.outputs.matrix_json) }} | |
| steps: | |
| - name: fetch sdist artifact | |
| id: fetch_sdist | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ needs.build_sdist.outputs.artifact_name }} | |
| - name: Fetch cached libyaml | |
| id: cached_libyaml | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: libyaml | |
| key: libyaml_${{matrix.platform}}_${{matrix.arch}}_${{env.LIBYAML_REF}} | |
| fail-on-cache-miss: true | |
| - name: configure docker foreign arch support | |
| uses: docker/setup-qemu-action@v3 | |
| if: matrix.arch != 'x86_64' && matrix.arch != 'aarch64' | |
| - name: Build/Test/Package | |
| id: build | |
| env: | |
| CIBW_ARCHS: all | |
| # HACK: ick, maybe deconstruct the matrix a bit or query cibuildwheel for its default target *linux spec first? | |
| CIBW_BUILD: ${{matrix.spec}}-${{ contains(matrix.platform, 'musllinux') && 'musllinux' || 'manylinux' }}_${{matrix.arch}} | |
| CIBW_BUILD_VERBOSITY: 1 | |
| # containerized Linux builds require explicit CIBW_ENVIRONMENT | |
| CIBW_ENVIRONMENT: > | |
| LD_LIBRARY_PATH=../libyaml/src/.libs | |
| PYYAML_FORCE_CYTHON=1 | |
| PYYAML_FORCE_LIBYAML=1 | |
| CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_img || '' }} | |
| CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.manylinux_img || '' }} | |
| CIBW_MANYLINUX_AARCH64_IMAGE: ${{ matrix.manylinux_img || '' }} | |
| CIBW_MANYLINUX_S390X_IMAGE: ${{ matrix.manylinux_img || '' }} | |
| CIBW_MUSLLINUX_X86_64_IMAGE: ${{ matrix.musllinux_img || 'musllinux_1_2' }} | |
| CIBW_MUSLLINUX_I686_IMAGE: ${{ matrix.musllinux_img || 'musllinux_1_2' }} | |
| CIBW_MUSLLINUX_AARCH64_IMAGE: ${{ matrix.musllinux_img || 'musllinux_1_2' }} | |
| CIBW_TEST_COMMAND: cd {project}; pytest | |
| CIBW_TEST_REQUIRES: pytest | |
| run: | | |
| set -eux | |
| python3 -V | |
| python3 -m pip install -U --user "${{ matrix.cibw_version || 'cibuildwheel' }}" | |
| mkdir pyyaml | |
| tar zxf ${{ steps.fetch_sdist.outputs.download-path }}/pyyaml*.tar.gz/pyyaml*.tar.gz --strip-components=1 -C pyyaml | |
| cat << 'EOF' > build_config.toml | |
| [tool.cibuildwheel.config-settings] | |
| pyyaml_build_config='{"force":1, "library_dirs": ["../libyaml/src/.libs"], "include_dirs": ["../libyaml/include"]}' | |
| EOF | |
| CIBW_BEFORE_BUILD="ls -l {project}" python3 -m cibuildwheel --config-file $(pwd)/build_config.toml --platform auto --output-dir ./dist ./pyyaml | |
| echo "artifact_name=$(ls ./dist/)" >> "$GITHUB_OUTPUT" | |
| # FIXME: ensure exactly one artifact | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ steps.build.outputs.artifact_name }} | |
| path: dist/*.whl | |
| if-no-files-found: error | |
| if: ${{ env.skip_artifact_upload != 'true' }} | |
| macos_libyaml: | |
| name: libyaml macos ${{matrix.arch}} | |
| strategy: | |
| matrix: | |
| include: | |
| - arch: x86_64 | |
| runs-on: macos-15-intel # force x86_64 runner | |
| - arch: arm64 | |
| deployment_target: '11.0' | |
| defaults: | |
| run: | |
| shell: ${{ matrix.run_wrapper || 'bash --noprofile --norc -eo pipefail {0}' }} | |
| runs-on: ${{ matrix.runs-on || 'macos-15' }} | |
| steps: | |
| - name: Check cached libyaml state | |
| id: cached_libyaml | |
| uses: actions/cache@v4 | |
| with: | |
| path: libyaml | |
| key: libyaml_macos_${{matrix.arch}}_${{env.LIBYAML_REF}} | |
| - name: Checkout PyYAML | |
| uses: actions/checkout@v4 | |
| if: steps.cached_libyaml.outputs.cache-hit != 'true' | |
| - name: Build libyaml | |
| env: | |
| MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deployment_target || '10.13' }} | |
| SDKROOT: ${{ matrix.sdkroot || 'macosx' }} | |
| run: | | |
| set -eux | |
| brew install automake coreutils m4 libtool | |
| 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' | |
| make_macos_pyyaml_matrix: | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| matrix_json: ${{ steps.make_matrix.outputs.matrix_json }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: make a matrix | |
| id: make_matrix | |
| uses: ./.github/actions/dynamatrix | |
| with: | |
| matrix_yaml: | | |
| include: | |
| ### x86_64 jobs | |
| - spec: cp38-macosx_x86_64 | |
| arch: x86_64 | |
| cibw_version: cibuildwheel==2.11.1 | |
| runs_on: [macos-15-intel] | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp39-macosx_x86_64 | |
| arch: x86_64 | |
| runs_on: [macos-15-intel] | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp310-macosx_x86_64 | |
| arch: x86_64 | |
| runs_on: [macos-15-intel] | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp311-macosx_x86_64 | |
| arch: x86_64 | |
| runs_on: [macos-15-intel] | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp312-macosx_x86_64 | |
| arch: x86_64 | |
| runs_on: [macos-15-intel] | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp313-macosx_x86_64 | |
| arch: x86_64 | |
| runs_on: [macos-15-intel] | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp314-macosx_x86_64 | |
| arch: x86_64 | |
| runs_on: [macos-15-intel] | |
| - spec: cp314t-macosx_x86_64 | |
| arch: x86_64 | |
| runs_on: [macos-15-intel] | |
| ### arm64 jobs | |
| - spec: cp39-macosx_arm64 | |
| deployment_target: '11.0' | |
| arch: arm64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp310-macosx_arm64 | |
| deployment_target: '11.0' | |
| arch: arm64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp311-macosx_arm64 | |
| deployment_target: '11.0' | |
| arch: arm64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp312-macosx_arm64 | |
| deployment_target: '11.0' | |
| arch: arm64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp313-macosx_arm64 | |
| deployment_target: '11.0' | |
| arch: arm64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp314-macosx_arm64 | |
| deployment_target: '11.0' | |
| arch: arm64 | |
| - spec: cp314t-macosx_arm64 | |
| deployment_target: '11.0' | |
| arch: arm64 | |
| macos_pyyaml: | |
| needs: [python_sdist, macos_libyaml, make_macos_pyyaml_matrix] | |
| name: pyyaml ${{ matrix.spec }} | |
| runs-on: ${{ matrix.runs_on || 'macos-15' }} | |
| defaults: | |
| run: | |
| shell: ${{ matrix.run_wrapper || 'bash --noprofile --norc -eo pipefail {0}' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.make_macos_pyyaml_matrix.outputs.matrix_json) }} | |
| steps: | |
| - name: fetch sdist artifact | |
| id: fetch_sdist | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ needs.build_sdist.outputs.artifact_name }} | |
| - name: Get cached libyaml state | |
| id: cached_libyaml | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: libyaml | |
| key: libyaml_macos_${{ matrix.arch }}_${{env.LIBYAML_REF}} | |
| fail-on-cache-miss: true | |
| - name: Install python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' # as of 2024-05, this has to be < 3.12 since the macos-15 runner image's | |
| # built-in virtualenv/pip are pinned to busted versions that fail on newer Pythons | |
| - name: Build/Test/Package | |
| id: build | |
| env: | |
| C_INCLUDE_PATH: ../libyaml/include | |
| CIBW_BUILD: ${{matrix.spec}} | |
| CIBW_BUILD_VERBOSITY: 1 | |
| CIBW_TEST_COMMAND: pytest {package} | |
| CIBW_TEST_REQUIRES: pytest | |
| LIBRARY_PATH: ../libyaml/src/.libs | |
| MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deployment_target || '10.13' }} | |
| PYYAML_FORCE_CYTHON: 1 | |
| PYYAML_FORCE_LIBYAML: 1 | |
| SDKROOT: ${{ matrix.sdkroot || 'macosx' }} | |
| run: | | |
| set -eux | |
| python3 -V | |
| python3 -m pip install -U --user "${{ matrix.cibw_version || 'cibuildwheel' }}" | |
| mkdir pyyaml | |
| tar zxf pyyaml*.tar.gz/pyyaml*.tar.gz --strip-components=1 -C pyyaml | |
| cat << 'EOF' > build_config.toml | |
| [tool.cibuildwheel.config-settings] | |
| pyyaml_build_config='{"force":1, "library_dirs": ["../libyaml/src/.libs"], "include_dirs": ["../libyaml/include"]}' | |
| EOF | |
| python3 -m cibuildwheel --config-file $(pwd)/build_config.toml --platform auto --output-dir ./dist ./pyyaml | |
| echo "artifact_name=$(ls ./dist/)" >> "$GITHUB_OUTPUT" | |
| # FIXME: ensure exactly one artifact | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ steps.build.outputs.artifact_name }} | |
| path: dist/*.whl | |
| if-no-files-found: error | |
| if: ${{ env.skip_artifact_upload != 'true' }} | |
| windows_libyaml: | |
| name: libyaml windows ${{ matrix.arch }} | |
| runs-on: ${{ (matrix.arch == 'arm64') && 'windows-11-arm' || 'windows-2022' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - arch: x64 | |
| - arch: win32 | |
| - arch: arm64 | |
| steps: | |
| - name: Get cached libyaml state | |
| id: cached_libyaml | |
| uses: actions/cache@v4 | |
| with: | |
| path: libyaml | |
| key: libyaml_${{ 'windows' }}_${{ 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 17 2022" -A ${{ matrix.arch }} -DYAML_STATIC_LIB_NAME=yaml -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. | |
| cmake.exe --build . --config Release | |
| popd | |
| make_windows_pyyaml_matrix: | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| matrix_json: ${{ steps.make_matrix.outputs.matrix_json }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: make a matrix | |
| id: make_matrix | |
| uses: ./.github/actions/dynamatrix | |
| with: | |
| matrix_yaml: | | |
| include: | |
| ### x86_64 jobs | |
| - spec: cp38-win_amd64 | |
| arch: x64 | |
| cibw_version: cibuildwheel<4 | |
| - spec: cp39-win_amd64 | |
| arch: x64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp310-win_amd64 | |
| arch: x64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp311-win_amd64 | |
| arch: x64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp312-win_amd64 | |
| arch: x64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp313-win_amd64 | |
| arch: x64 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp314-win_amd64 | |
| arch: x64 | |
| - spec: cp314t-win_amd64 | |
| arch: x64 | |
| ### arm64 jobs | |
| - spec: cp312-win_arm64 | |
| arch: arm64 | |
| runs-on: windows-11-arm | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp313-win_arm64 | |
| arch: arm64 | |
| runs-on: windows-11-arm | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp314-win_arm64 | |
| arch: arm64 | |
| runs-on: windows-11-arm | |
| - spec: cp314t-win_arm64 | |
| arch: arm64 | |
| runs-on: windows-11-arm | |
| ### win32 jobs | |
| - spec: cp38-win32 | |
| arch: win32 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp39-win32 | |
| arch: win32 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp310-win32 | |
| arch: win32 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp311-win32 | |
| arch: win32 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp312-win32 | |
| arch: win32 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| - spec: cp313-win32 | |
| arch: win32 | |
| omit: ${{ env.skip_ci_redundant_jobs }} | |
| # no more win32 after 3.13? | |
| windows_pyyaml: | |
| needs: [python_sdist, windows_libyaml, make_windows_pyyaml_matrix] | |
| name: pyyaml ${{matrix.spec}} | |
| runs-on: ${{ matrix.runs-on || 'windows-2022' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJSON(needs.make_windows_pyyaml_matrix.outputs.matrix_json) }} | |
| 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: fetch sdist artifact | |
| id: fetch_sdist | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ needs.build_sdist.outputs.artifact_name }} | |
| - name: Get cached libyaml state | |
| id: cached_libyaml | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: libyaml | |
| key: libyaml_${{'windows'}}_${{ matrix.arch }}_${{env.LIBYAML_REF}} | |
| fail-on-cache-miss: true | |
| - name: Install python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.x | |
| - name: Build/Test/Package | |
| id: build | |
| shell: bash | |
| env: | |
| CIBW_BUILD: ${{matrix.spec}} | |
| CIBW_BUILD_VERBOSITY: 1 | |
| CIBW_BEFORE_TEST: ls -l {package} | |
| CIBW_TEST_COMMAND: pytest {package} | |
| CIBW_TEST_REQUIRES: pytest | |
| #CIBW_CONFIG_SETTINGS: | | |
| # pyyaml_build_config='{"include_dirs": ["libyaml/include"], "library_dirs": ["libyaml/build/Release"], "define": [["YAML_DECLARE_STATIC", 1]], "force": 1}' | |
| run: | | |
| set -eux | |
| python -V | |
| python -m pip install -U --user "${{ matrix.cibw_version || 'cibuildwheel' }}" | |
| mkdir pyyaml | |
| tar zxf pyyaml*.tar.gz/pyyaml*.tar.gz --strip-components=1 -C pyyaml | |
| cat << 'EOF' > build_config.toml | |
| [tool.cibuildwheel.config-settings] | |
| pyyaml_build_config='{"force":1, "include_dirs": ["../libyaml/include"], "library_dirs": ["../libyaml/build/Release"], "define": [["YAML_DECLARE_STATIC", 1]], "force": 1}' | |
| EOF | |
| python3 -m cibuildwheel --config-file $(pwd)/build_config.toml --platform auto --output-dir ./dist ./pyyaml | |
| echo "artifact_name=$(ls ./dist/)" >> "$GITHUB_OUTPUT" | |
| # FIXME: ensure exactly one artifact | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ steps.build.outputs.artifact_name }} | |
| path: dist/*.whl | |
| if-no-files-found: error | |
| if: ${{ env.skip_artifact_upload != 'true' }} | |
| merge_artifacts: | |
| needs: [python_sdist, macos_pyyaml, linux_pyyaml, windows_pyyaml] | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: merge all artifacts | |
| uses: actions/upload-artifact/merge@v4 | |
| with: | |
| name: dist-pyyaml-${{ needs.python_sdist.outputs.package_version }} | |
| delete-merged: true | |
| if: ${{ env.skip_artifact_upload != 'true' }} | |
| check: | |
| if: always() | |
| needs: | |
| - python_sdist | |
| - linux_pyyaml | |
| - macos_pyyaml | |
| - windows_pyyaml | |
| - merge_artifacts | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Verify all previous jobs succeeded (provides a single check to sample for gating purposes) | |
| uses: re-actors/alls-green@release/v1 | |
| with: | |
| jobs: ${{ toJSON(needs) }} | |
| ... |