add support for the WIT map type (#239)
#233
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: Release | |
| on: | |
| push: | |
| branches: [main] | |
| tags: | |
| - "v*" | |
| paths-ignore: | |
| - "examples/**" | |
| - "README.md" | |
| - "CONTRIBUTING.md" | |
| workflow_dispatch: | |
| env: | |
| CARGO_TERM_COLOR: always | |
| WASI_SDK_VERSION: 34 | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| linux: | |
| name: Populate cache | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.14.0" | |
| - name: Install latest Rust stable toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-wasip2 | |
| components: clippy, rustfmt | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "rust-cache-${{ hashFiles('./Cargo.lock') }}" | |
| cache-on-failure: false | |
| - name: Install WASI-SDK | |
| shell: bash | |
| run: | | |
| cd /tmp | |
| curl -LO https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VERSION}/wasi-sdk-${WASI_SDK_VERSION}.0-x86_64-linux.tar.gz | |
| tar xf wasi-sdk-${WASI_SDK_VERSION}.0-x86_64-linux.tar.gz | |
| mv wasi-sdk-${WASI_SDK_VERSION}.0-x86_64-linux /opt/wasi-sdk | |
| - name: Build | |
| shell: bash | |
| run: cargo build --release | |
| - name: Upload CPython builddir | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: cpython-wasi | |
| path: cpython/builddir/wasi | |
| release: | |
| name: Build and release | |
| needs: linux | |
| runs-on: ${{ matrix.config.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| config: | |
| - { | |
| os: "ubuntu-latest", | |
| arch: "amd64", | |
| maturin_target: "x86_64", | |
| wasiSDK: "x86_64-linux", | |
| extension: "", | |
| buildArgs: "", | |
| target: "", | |
| targetDir: "target/release", | |
| } | |
| - { | |
| os: "ubuntu-latest", | |
| arch: "aarch64", | |
| maturin_target: "aarch64", | |
| wasiSDK: "x86_64-linux", | |
| extension: "", | |
| buildArgs: "--target aarch64-unknown-linux-gnu", | |
| target: "aarch64-unknown-linux-gnu", | |
| targetDir: "target/aarch64-unknown-linux-gnu/release", | |
| } | |
| - { | |
| os: "macos-latest", | |
| arch: "amd64", | |
| maturin_target: "x86_64", | |
| wasiSDK: "arm64-macos", | |
| extension: "", | |
| buildArgs: "", | |
| target: "", | |
| targetDir: "target/release", | |
| } | |
| - { | |
| os: "macos-latest", | |
| arch: "aarch64", | |
| maturin_target: "aarch64", | |
| wasiSDK: "arm64-macos", | |
| extension: "", | |
| buildArgs: "--target aarch64-apple-darwin", | |
| target: "aarch64-apple-darwin", | |
| targetDir: "target/aarch64-apple-darwin/release", | |
| } | |
| - { | |
| os: "windows-latest", | |
| arch: "amd64", | |
| maturin_target: "x64", | |
| wasiSDK: "x86_64-windows", | |
| extension: ".exe", | |
| buildArgs: "", | |
| target: "", | |
| targetDir: "target/release", | |
| } | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.14.0" | |
| - name: Install latest Rust stable toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-wasip2 ${{ matrix.config.target }} | |
| - uses: Swatinem/rust-cache@v2 | |
| if: matrix.config.os == 'ubuntu-latest' && matrix.config.arch == 'amd64' | |
| with: | |
| shared-key: "rust-cache-${{ hashFiles('./Cargo.lock') }}" | |
| cache-on-failure: "false" | |
| save-if: "false" | |
| - name: Set the release version (tag) | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| shell: bash | |
| run: echo "RELEASE_VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV | |
| - name: Set the release version (canary) | |
| if: github.ref == 'refs/heads/main' | |
| shell: bash | |
| run: echo "RELEASE_VERSION=canary" >> $GITHUB_ENV | |
| - name: Lowercase the runner OS name | |
| shell: bash | |
| run: | | |
| OS=$(echo "${{ runner.os }}" | tr '[:upper:]' '[:lower:]') | |
| echo "RUNNER_OS=$OS" >> $GITHUB_ENV | |
| - name: Download WASI-SDK | |
| shell: bash | |
| run: | | |
| cd /tmp | |
| curl -LO https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VERSION}/wasi-sdk-${WASI_SDK_VERSION}.0-${{ matrix.config.wasiSDK }}.tar.gz | |
| tar xf wasi-sdk-${WASI_SDK_VERSION}.0-${{ matrix.config.wasiSDK }}.tar.gz | |
| - name: Install WASI-SDK | |
| if: runner.os != 'Windows' | |
| shell: bash | |
| run: sudo mv /tmp/wasi-sdk-${WASI_SDK_VERSION}.0-${{ matrix.config.wasiSDK }} /opt/wasi-sdk | |
| - name: Install WASI-SDK on Windows | |
| if: runner.os == 'Windows' | |
| shell: bash | |
| run: echo "WASI_SDK_PATH=$(cygpath -m /tmp/wasi-sdk-${WASI_SDK_VERSION}.0-${{ matrix.config.wasiSDK }})" >> ${GITHUB_ENV} | |
| - name: Restore CPython | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: cpython-wasi | |
| path: cpython/builddir/wasi | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.config.maturin_target }} | |
| args: --release --out dist --features pyo3 | |
| manylinux: 2_28 | |
| docker-options: -v /opt/wasi-sdk:/opt/wasi-sdk | |
| before-script-linux: | | |
| rustup target add wasm32-wasip2 | |
| - name: Set up cross-compiled linux aarch64 build | |
| if: matrix.config.target == 'aarch64-unknown-linux-gnu' | |
| run: | | |
| sudo apt update | |
| sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu | |
| echo '[target.aarch64-unknown-linux-gnu]' >> ${HOME}/.cargo/config.toml | |
| echo 'linker = "aarch64-linux-gnu-gcc"' >> ${HOME}/.cargo/config.toml | |
| - name: Build | |
| shell: bash | |
| run: cargo build --release ${{ matrix.config.buildArgs }} | |
| - name: Package as tarfile | |
| shell: bash | |
| run: | | |
| mkdir -v _dist | |
| cp ${{ matrix.config.targetDir }}/componentize-py${{ matrix.config.extension }} \ | |
| _dist/componentize-py${{ matrix.config.extension }} | |
| cd _dist | |
| tar czf componentize-py-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz \ | |
| componentize-py${{ matrix.config.extension }} | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: componentize-py-${{ matrix.config.wasiSDK }}-${{ matrix.config.arch }} | |
| path: dist | |
| - name: Upload build artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: componentize-py-${{ matrix.config.wasiSDK }}-${{ matrix.config.arch }}-tar | |
| path: _dist/componentize-py-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz | |
| - name: Upload binary to Github release (tag) | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| file: _dist/componentize-py-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz | |
| tag: ${{ github.ref }} | |
| checksums: | |
| name: Generate checksums | |
| runs-on: ubuntu-latest | |
| needs: release | |
| steps: | |
| - name: Set the release version (tag) | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| shell: bash | |
| run: echo "RELEASE_VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV | |
| - name: Set the release version (canary) | |
| if: github.ref == 'refs/heads/main' | |
| shell: bash | |
| run: echo "RELEASE_VERSION=canary" >> $GITHUB_ENV | |
| - name: Download release assets | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: componentize-py-* | |
| merge-multiple: true | |
| - name: Generate checksums | |
| run: | | |
| sha256sum componentize-py-${{ env.RELEASE_VERSION }}*.tar.gz > checksums-${{ env.RELEASE_VERSION }}.txt | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: componentize-py-checksums | |
| path: checksums-${{ env.RELEASE_VERSION }}.txt | |
| - name: Upload checksums to Github release (tag) | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| file: checksums-${{ env.RELEASE_VERSION }}.txt | |
| tag: ${{ github.ref }} | |
| sdist: | |
| name: Build Python sdist | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| - name: Build sdist | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: sdist | |
| args: --out dist | |
| - name: Upload sdist | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: componentize-py-sdist | |
| path: dist | |
| update_canary_release: | |
| name: Update canary release | |
| needs: [checksums, sdist] | |
| if: github.ref == 'refs/heads/main' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| - name: Download release assets | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: componentize-py-* | |
| merge-multiple: true | |
| - name: Delete canary tag | |
| run: gh release delete canary --cleanup-tag -y | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Recreate canary tag and release | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| tag: canary | |
| allowUpdates: true | |
| prerelease: true | |
| artifacts: "checksums-canary.txt,componentize-py-canary*,componentize_py-*.whl,componentize_py-*.tar.gz" |