Bump actions/download-artifact from 4 to 7 #75
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: Build | |
| on: | |
| push: | |
| branches: ['main'] | |
| pull_request: | |
| branches: ['main'] | |
| workflow_run: | |
| workflows: ['clear-cache'] | |
| types: ['completed'] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| fetch: | |
| name: Fetch | |
| runs-on: ubuntu-latest | |
| outputs: | |
| py: ${{ steps.info.outputs.py }} | |
| ios: ${{ steps.info.outputs.ios }} | |
| bz2: ${{ steps.ver.outputs.bz2 }} | |
| ffi: ${{ steps.ver.outputs.ffi }} | |
| xz: ${{ steps.ver.outputs.xz }} | |
| steps: | |
| - name: Checkout ${{ github.repository }} | |
| uses: actions/checkout@v4 | |
| - name: Get build information from build.toml | |
| id: info | |
| run: | | |
| echo "py=$(yq .build.py build.toml -oj)" >> $GITHUB_OUTPUT | |
| echo "ios=$(yq .build.ios build.toml)" >> $GITHUB_OUTPUT | |
| - name: Get library version information from build.toml | |
| id: ver | |
| run: | | |
| echo "bz2=$(yq .lib.bz2 build.toml)" >> $GITHUB_OUTPUT | |
| echo "ffi=$(yq .lib.ffi build.toml)" >> $GITHUB_OUTPUT | |
| echo "xz=$(yq .lib.xz build.toml)" >> $GITHUB_OUTPUT | |
| build-bz2: | |
| name: Build bzip2 | |
| needs: fetch | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: | |
| - target: 'iphoneos.arm64' | |
| sdk: 'iphoneos' | |
| host: 'arm64-apple-ios${{ needs.fetch.outputs.ios }}' | |
| - target: 'iphonesimulator.arm64' | |
| sdk: 'iphonesimulator' | |
| host: 'arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| - target: 'iphonesimulator.x86_64' | |
| sdk: 'iphonesimulator' | |
| host: 'x86_64-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| steps: | |
| - name: Checkout ${{ github.repository }} | |
| uses: actions/checkout@v4 | |
| - name: Cache bzip2 | |
| id: cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ github.workspace }}/install/bz2 | |
| key: bz2-${{ needs.fetch.outputs.bz2 }}-${{ matrix.build.host }} | |
| - name: Download bzip2 source | |
| run: | | |
| curl -O https://www.sourceware.org/pub/bzip2/bzip2-${{ needs.fetch.outputs.bz2 }}.tar.gz | |
| tar -xf bzip2-${{ needs.fetch.outputs.bz2 }}.tar.gz | |
| - name: Build bzip2 | |
| working-directory: bzip2-${{ needs.fetch.outputs.bz2 }} | |
| run: > | |
| make install | |
| PREFIX="${{ github.workspace }}/install/bz2" | |
| CC="xcrun --sdk ${{ matrix.build.sdk }} clang -target ${{ matrix.build.host }}" | |
| CFLAGS="--sysroot=$(xcrun --sdk ${{ matrix.build.sdk }} --show-sdk-path) -mios-version-min=${{ needs.fetch.outputs.ios }}" | |
| LDFLAGS="-isysroot $(xcrun --sdk ${{ matrix.build.sdk }} --show-sdk-path) -mios-version-min=${{ needs.fetch.outputs.ios }}" | |
| - name: Upload the bzip2 artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: bz2-${{ matrix.build.host }} | |
| path: ${{ github.workspace }}/install/bz2 | |
| if-no-files-found: error | |
| retention-days: 1 | |
| build-ffi: | |
| name: Build libffi | |
| needs: fetch | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: | |
| - target: 'iphoneos.arm64' | |
| sdk: 'iphoneos' | |
| host: 'arm64-apple-ios${{ needs.fetch.outputs.ios }}' | |
| - target: 'iphonesimulator.arm64' | |
| sdk: 'iphonesimulator' | |
| host: 'arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| - target: 'iphonesimulator.x86_64' | |
| sdk: 'iphonesimulator' | |
| host: 'x86_64-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| steps: | |
| - name: Checkout ${{ github.repository }} | |
| uses: actions/checkout@v4 | |
| - name: Cache libffi | |
| id: cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ github.workspace }}/install/ffi | |
| key: ffi-${{ needs.fetch.outputs.ffi }}-${{ matrix.build.host }} | |
| - name: Download libffi source | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| run: > | |
| gh release | |
| -R libffi/libffi | |
| download v${{ needs.fetch.outputs.ffi }} | |
| -p libffi-${{ needs.fetch.outputs.ffi }}.tar.gz | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| - name: Extract libffi tarball | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| run: tar -xzf libffi-${{ needs.fetch.outputs.ffi }}.tar.gz | |
| - name: Configure libffi build | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| working-directory: libffi-${{ needs.fetch.outputs.ffi }} | |
| run: > | |
| ./configure | |
| --prefix="${{ github.workspace }}/install/ffi" | |
| --build=$(uname -m)-apple-darwin | |
| --host=${{ matrix.build.host }} | |
| --disable-shared | |
| --enable-static | |
| CC="xcrun --sdk ${{ matrix.build.sdk }} clang -target ${{ matrix.build.host }}" | |
| CFLAGS="--sysroot=$(xcrun --sdk ${{ matrix.build.sdk }} --show-sdk-path) -mios-version-min=${{ needs.fetch.outputs.ios }}" | |
| LDFLAGS="-isysroot $(xcrun --sdk ${{ matrix.build.sdk }} --show-sdk-path) -mios-version-min=${{ needs.fetch.outputs.ios }}" | |
| - name: Build libffi | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| working-directory: libffi-${{ needs.fetch.outputs.ffi }} | |
| run: | | |
| make | |
| make install | |
| - name: Upload the libffi artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ffi-${{ matrix.build.host }} | |
| path: ${{ github.workspace }}/install/ffi | |
| if-no-files-found: error | |
| retention-days: 1 | |
| build-xz: | |
| name: Build XZ Utils | |
| needs: fetch | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: | |
| - target: 'iphoneos.arm64' | |
| sdk: 'iphoneos' | |
| host: 'arm64-apple-ios${{ needs.fetch.outputs.ios }}' | |
| - target: 'iphonesimulator.arm64' | |
| sdk: 'iphonesimulator' | |
| host: 'arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| - target: 'iphonesimulator.x86_64' | |
| sdk: 'iphonesimulator' | |
| host: 'x86_64-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| steps: | |
| - name: Checkout ${{ github.repository }} | |
| uses: actions/checkout@v4 | |
| - name: Cache XZ Utils | |
| id: cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ github.workspace }}/install/xz | |
| key: xz-${{ needs.fetch.outputs.xz }}-${{ matrix.build.host }} | |
| - name: Download XZ Utils source | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| run: > | |
| gh release | |
| -R tukaani-project/xz | |
| download v${{ needs.fetch.outputs.xz }} | |
| -p xz-${{ needs.fetch.outputs.xz }}.tar.gz | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| - name: Extract XZ Utils tarball | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| run: tar -xzf xz-${{ needs.fetch.outputs.xz }}.tar.gz | |
| - name: Apply patch | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| working-directory: xz-${{ needs.fetch.outputs.xz }} | |
| run: | | |
| patch -u ./build-aux/config.sub ${{ github.workspace }}/patch/xz.patch | |
| - name: Configure XZ Utils build | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| working-directory: xz-${{ needs.fetch.outputs.xz }} | |
| run: > | |
| ./configure | |
| --prefix="${{ github.workspace }}/install/xz" | |
| --host=${{ matrix.build.host }} | |
| --disable-shared | |
| --enable-static | |
| CC="xcrun --sdk ${{ matrix.build.sdk }} clang -target ${{ matrix.build.host }}" | |
| CFLAGS="--sysroot=$(xcrun --sdk ${{ matrix.build.sdk }} --show-sdk-path) -mios-version-min=${{ needs.fetch.outputs.ios }}" | |
| LDFLAGS="-isysroot $(xcrun --sdk ${{ matrix.build.sdk }} --show-sdk-path) -mios-version-min=${{ needs.fetch.outputs.ios }}" | |
| - name: Build XZ Utils | |
| if: ${{ steps.cache.outputs.cache-hit != 'true' }} | |
| working-directory: xz-${{ needs.fetch.outputs.xz }} | |
| run: | | |
| make | |
| make install | |
| - name: Upload the XZ Utils artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: xz-${{ matrix.build.host }} | |
| path: ${{ github.workspace }}/install/xz | |
| if-no-files-found: error | |
| retention-days: 1 | |
| build-python-framework: | |
| name: Build Python.framework | |
| needs: [fetch, build-bz2, build-ffi, build-xz] | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ['3.13-dev'] | |
| build: | |
| - host: 'arm64-apple-ios${{ needs.fetch.outputs.ios }}' | |
| - host: 'arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| - host: 'x86_64-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| steps: | |
| - name: Checkout ${{ github.repository }} | |
| uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| id: py | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| check-latest: true | |
| - name: Set version information | |
| id: pyver | |
| run: | | |
| echo "py=$(python -V | cut -wf 2)" >> $GITHUB_OUTPUT | |
| - name: Clone python/cpython ${{ matrix.python-version }} | |
| run: > | |
| gh repo clone python/cpython | |
| -- -b v${{ steps.pyver.outputs.py }} --depth=1 | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: ${{ github.workspace }}/install | |
| pattern: '*-${{ matrix.build.host }}' | |
| - name: Add iOS/Resources/bin to PATH | |
| working-directory: cpython | |
| run: echo "${{ github.workspace }}/cpython/iOS/Resources/bin" >> $GITHUB_PATH | |
| - name: Configure Python build | |
| working-directory: cpython | |
| run: > | |
| ./configure | |
| BZIP2_CFLAGS="-I${{ github.workspace }}/install/bz2-${{ matrix.build.host }}/include" | |
| BZIP2_LIBS="-L${{ github.workspace }}/install/bz2-${{ matrix.build.host }}/lib -lbz2" | |
| LIBFFI_CFLAGS="-I${{ github.workspace }}/install/ffi-${{ matrix.build.host }}/include" | |
| LIBFFI_LIBS="-L${{ github.workspace }}/install/ffi-${{ matrix.build.host }}/lib -lffi" | |
| LIBLZMA_CFLAGS="-I${{ github.workspace }}/install/xz-${{ matrix.build.host }}/include" | |
| LIBLZMA_LIBS="-L${{ github.workspace }}/install/xz-${{ matrix.build.host }}/lib -llzma" | |
| --enable-framework="${{ github.workspace }}/framework" | |
| --build=$(uname -m)-apple-darwin | |
| --host=${{ matrix.build.host }} | |
| --with-build-python="${{ steps.py.outputs.python-path }}" | |
| - name: Build Python.framework | |
| working-directory: cpython | |
| run: | | |
| make | |
| make install | |
| - name: Upload Python.framework | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: cp${{ matrix.python-version }}-${{ matrix.build.host }} | |
| path: ${{ github.workspace }}/framework | |
| if-no-files-found: error | |
| retention-days: 1 | |
| create-iphoneos-framework: | |
| name: Create Python.framework for iphoneos | |
| needs: [fetch, build-python-framework] | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ['3.13-dev'] | |
| steps: | |
| - name: Checkout ${{ github.repository }} | |
| uses: actions/checkout@v4 | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: ${{ github.workspace }}/frameworks | |
| pattern: 'cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }}' | |
| - name: Copy iphoneos framework | |
| working-directory: frameworks | |
| run: > | |
| cp | |
| cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }} | |
| cp${{ matrix.python-version }}-iphoneos | |
| - name: Upload Python.framework | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: cp${{ matrix.python-version }}-iphoneos | |
| path: ${{ github.workspace }}/frameworks/cp${{ matrix.python-version }}-iphoneos | |
| if-no-files-found: error | |
| retention-days: 1 | |
| create-iphonesimulator-framework: | |
| name: Create Python.framework for iphonesimulator | |
| needs: [fetch, build-python-framework] | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ['3.13-dev'] | |
| steps: | |
| - name: Checkout ${{ github.repository }} | |
| uses: actions/checkout@v4 | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: ${{ github.workspace }}/frameworks | |
| pattern: 'cp${{ matrix.python-version }}-*-apple-ios${{ needs.fetch.outputs.ios }}-simulator' | |
| - name: Copy binaries | |
| working-directory: frameworks | |
| run: > | |
| cp | |
| cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator/bin | |
| cp${{ matrix.python-version }}-iphonesimulator/bin | |
| - name: Copy standard libraries | |
| working-directory: frameworks | |
| run: > | |
| cp | |
| cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator/lib | |
| cp${{ matrix.python-version }}-iphonesimulator/lib | |
| - name: Create a new framework directory | |
| working-directory: frameworks | |
| run: | | |
| mkdir -p cp${{ matrix.python-version }}-iphonesimulator/Python.framework | |
| - name: Copy headers | |
| working-directory: frameworks | |
| run: > | |
| cp | |
| cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator/Python.framework/Headers | |
| cp${{ matrix.python-version }}-iphonesimulator/Python.framework/Headers | |
| - name: Copy pyconfig-arm64.h | |
| working-directory: frameworks | |
| run: > | |
| cp | |
| cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator/Python.framework/Headers/pyconfig.h | |
| cp${{ matrix.python-version }}-iphonesimulator/Python.framework/Headers/pyconfig-arm64.h | |
| - name: Copy pyconfig-x86_64.h | |
| working-directory: frameworks | |
| run: > | |
| cp | |
| cp${{ matrix.python-version }}-x86_64-apple-ios${{ needs.fetch.outputs.ios }}-simulator/Python.framework/Headers/pyconfig.h | |
| cp${{ matrix.python-version }}-iphonesimulator/Python.framework/Headers/pyconfig-x86_64.h | |
| - name: Copy Info.plist | |
| working-directory: frameworks | |
| run: > | |
| cp | |
| cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator/Python.framework/Info.plist | |
| cp${{ matrix.python-version }}-iphonesimulator/Python.framework/Info.plist | |
| - name: Merge iphoneossimulator farmeworks | |
| working-directory: frameworks | |
| run: > | |
| lipo -create | |
| -output cp${{ matrix.python-version }}-iphonesimulator/Python.framework/Python | |
| cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }}-simulator/Python.framework/Python | |
| cp${{ matrix.python-version }}-x86_64-apple-ios${{ needs.fetch.outputs.ios }}-simulator/Python.framework/Python | |
| - name: Delete platform-specific files | |
| working-directory: frameworks/cp${{ matrix.python-version }}-iphonesimulator/lib/ | |
| run: | | |
| rm -r | |
| - name: Upload Python.framework | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: cp${{ matrix.python-version }}-iphonesimulator | |
| path: ${{ github.workspace }}/frameworks/cp${{ matrix.python-version }}-arm64-apple-ios${{ needs.fetch.outputs.ios }} | |
| if-no-files-found: error | |
| retention-days: 1 | |
| create-xcframework: | |
| name: Build Python.xcframework | |
| needs: [create-iphoneos-framework, create-iphonesimulator-framework] | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ['3.13-dev'] | |
| steps: | |
| - name: Checkout ${{ github.repository }} | |
| uses: actions/checkout@v4 | |
| - name: Download Python.framework for iphoneos | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: ${{ github.workspace }}/frameworks | |
| pattern: 'cp${{ matrix.python-version }}-iphoneos' | |
| - name: Download Python.framework for iphonesimulator | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: ${{ github.workspace }}/frameworks | |
| pattern: 'cp${{ matrix.python-version }}-iphonesimulator' |