Fix release.yml #64
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: Release | |
| on: | |
| workflow_dispatch: | |
| push: | |
| tags: | |
| - "v*.*.*" | |
| permissions: | |
| contents: read | |
| jobs: | |
| format: | |
| name: Format | |
| strategy: | |
| matrix: | |
| platform: | |
| - runner: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| toolchain: [stable] | |
| runs-on: ${{ matrix.platform.runner }} | |
| steps: | |
| - name: Run checkout | |
| uses: actions/checkout@v6 | |
| - name: Install toolchain | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: ${{ matrix.toolchain }} | |
| target: ${{ matrix.platform.target }} | |
| components: rustfmt, clippy | |
| - name: Check format | |
| run: cargo fmt --all -- --check | |
| test: | |
| name: Test | |
| needs: [format] | |
| strategy: | |
| matrix: | |
| platform: | |
| - runner: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| - runner: ubuntu-24.04-arm | |
| target: aarch64-unknown-linux-gnu | |
| - runner: macos-latest | |
| target: aarch64-apple-darwin | |
| - runner: macos-15-intel | |
| target: x86_64-apple-darwin | |
| - runner: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| - runner: windows-latest | |
| target: aarch64-pc-windows-msvc | |
| skip_test_run: true | |
| toolchain: [stable] | |
| features: | |
| - value: "embed-ipadic" | |
| package_name: "lindera-python-ipadic" | |
| package_description: "Python binding for Lindera with IPADIC dictionary" | |
| runs-on: ${{ matrix.platform.runner }} | |
| steps: | |
| - name: Run checkout | |
| uses: actions/checkout@v6 | |
| - name: Install toolchain | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: ${{ matrix.toolchain }} | |
| target: ${{ matrix.platform.target }} | |
| components: rustfmt, clippy | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: 3.x | |
| - name: Run test | |
| shell: bash | |
| run: | | |
| if [ "${{ matrix.platform.skip_test_run }}" == "true" ]; then | |
| export PYO3_CROSS_PYTHON_VERSION=3.10 | |
| cargo check --target "${{ matrix.platform.target }}" --all-features | |
| else | |
| cargo test --target "${{ matrix.platform.target }}" --all-features | |
| fi | |
| linux: | |
| name: Linux | |
| needs: [test] | |
| strategy: | |
| matrix: | |
| platform: | |
| - runner: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| - runner: ubuntu-24.04-arm | |
| target: aarch64-unknown-linux-gnu | |
| toolchain: [stable] | |
| features: | |
| - value: "default" | |
| package_name: "lindera-python" | |
| package_description: "Python binding for Lindera (no embedded dictionaries)" | |
| - value: "embed-cjk" | |
| package_name: "lindera-python-cjk" | |
| package_description: "Python binding for Lindera with CJK dictionaries (IPADIC, ko-dic, CC-CEDICT)" | |
| - value: "embed-ipadic" | |
| package_name: "lindera-python-ipadic" | |
| package_description: "Python binding for Lindera with IPADIC dictionary" | |
| - value: "embed-unidic" | |
| package_name: "lindera-python-unidic" | |
| package_description: "Python binding for Lindera with UniDic dictionary" | |
| - value: "embed-ko-dic" | |
| package_name: "lindera-python-ko-dic" | |
| package_description: "Python binding for Lindera with ko-dic Korean dictionary" | |
| - value: "embed-cc-cedict" | |
| package_name: "lindera-python-cc-cedict" | |
| package_description: "Python binding for Lindera with CC-CEDICT Chinese dictionary" | |
| runs-on: ${{ matrix.platform.runner }} | |
| steps: | |
| - name: Run checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: 3.x | |
| - name: Create package-specific pyproject.toml | |
| run: | | |
| # Modify pyproject.toml in place | |
| sed -i "s/^name = \"lindera-python\"/name = \"${{ matrix.features.package_name }}\"/" pyproject.toml | |
| sed -i "s/^description = \".*\"/description = \"${{ matrix.features.package_description }}\"/" pyproject.toml | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| env: | |
| NODE_OPTIONS: "--max-old-space-size=8192" | |
| with: | |
| target: ${{ matrix.platform.target }} | |
| args: --release --out dist --find-interpreter --features=${{ matrix.features.value }} | |
| sccache: "true" | |
| manylinux: auto | |
| before-script-linux: | | |
| if command -v yum >/dev/null 2>&1; then | |
| yum install openssl-devel devtoolset-10-libatomic-devel perl-IPC-Cmd -y | |
| elif command -v apt-get >/dev/null 2>&1; then | |
| apt-get update && apt-get install libssl-dev pkg-config -y | |
| fi | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-${{ matrix.features.package_name }}-linux-${{ matrix.platform.target }}-${{ github.ref_name }} | |
| path: dist | |
| windows: | |
| name: Windows | |
| needs: [test] | |
| strategy: | |
| max-parallel: 1 | |
| matrix: | |
| platform: | |
| - runner: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| - runner: windows-latest | |
| target: aarch64-pc-windows-msvc | |
| toolchain: [stable] | |
| features: | |
| - value: "default" | |
| package_name: "lindera-python" | |
| package_description: "Python binding for Lindera (no embedded dictionaries)" | |
| - value: "embed-cjk" | |
| package_name: "lindera-python-cjk" | |
| package_description: "Python binding for Lindera with CJK dictionaries (IPADIC, ko-dic, CC-CEDICT)" | |
| - value: "embed-ipadic" | |
| package_name: "lindera-python-ipadic" | |
| package_description: "Python binding for Lindera with IPADIC dictionary" | |
| - value: "embed-unidic" | |
| package_name: "lindera-python-unidic" | |
| package_description: "Python binding for Lindera with UniDic dictionary" | |
| - value: "embed-ko-dic" | |
| package_name: "lindera-python-ko-dic" | |
| package_description: "Python binding for Lindera with ko-dic Korean dictionary" | |
| - value: "embed-cc-cedict" | |
| package_name: "lindera-python-cc-cedict" | |
| package_description: "Python binding for Lindera with CC-CEDICT Chinese dictionary" | |
| runs-on: ${{ matrix.platform.runner }} | |
| steps: | |
| - name: Run checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: 3.x | |
| - name: Create package-specific pyproject.toml | |
| shell: pwsh | |
| run: | | |
| # Replace package name and description in pyproject.toml | |
| $content = Get-Content pyproject.toml | |
| $content = $content -replace '^name = "lindera-python"', 'name = "${{ matrix.features.package_name }}"' | |
| $content = $content -replace '^description = ".*"', 'description = "${{ matrix.features.package_description }}"' | |
| Set-Content -Path pyproject.toml -Value $content | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| env: | |
| NODE_OPTIONS: "--max-old-space-size=8192" | |
| PYO3_CROSS_PYTHON_VERSION: ${{ contains(matrix.platform.target, 'aarch64') && '3.10' || '' }} | |
| with: | |
| target: ${{ matrix.platform.target }} | |
| args: --release --out dist --find-interpreter --features=${{ matrix.features.value }} | |
| sccache: "true" | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-${{ matrix.features.package_name }}-windows-${{ matrix.platform.target }}-${{ github.ref_name }} | |
| path: dist | |
| macos: | |
| name: macOS | |
| needs: [test] | |
| strategy: | |
| max-parallel: 1 | |
| matrix: | |
| platform: | |
| - runner: macos-latest | |
| target: aarch64-apple-darwin | |
| - runner: macos-15-intel | |
| target: x86_64-apple-darwin | |
| toolchain: [stable] | |
| features: | |
| - value: "default" | |
| package_name: "lindera-python" | |
| package_description: "Python binding for Lindera (no embedded dictionaries)" | |
| - value: "embed-cjk" | |
| package_name: "lindera-python-cjk" | |
| package_description: "Python binding for Lindera with CJK dictionaries (IPADIC, ko-dic, CC-CEDICT)" | |
| - value: "embed-ipadic" | |
| package_name: "lindera-python-ipadic" | |
| package_description: "Python binding for Lindera with IPADIC dictionary" | |
| - value: "embed-unidic" | |
| package_name: "lindera-python-unidic" | |
| package_description: "Python binding for Lindera with UniDic dictionary" | |
| - value: "embed-ko-dic" | |
| package_name: "lindera-python-ko-dic" | |
| package_description: "Python binding for Lindera with ko-dic Korean dictionary" | |
| - value: "embed-cc-cedict" | |
| package_name: "lindera-python-cc-cedict" | |
| package_description: "Python binding for Lindera with CC-CEDICT Chinese dictionary" | |
| runs-on: ${{ matrix.platform.runner }} | |
| steps: | |
| - name: Run checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: 3.x | |
| - name: Create package-specific pyproject.toml | |
| run: | | |
| # macOS uses BSD sed which requires empty string for -i | |
| sed -i '' "s/^name = \"lindera-python\"/name = \"${{ matrix.features.package_name }}\"/" pyproject.toml | |
| sed -i '' "s/^description = \".*\"/description = \"${{ matrix.features.package_description }}\"/" pyproject.toml | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| env: | |
| NODE_OPTIONS: "--max-old-space-size=8192" | |
| with: | |
| target: ${{ matrix.platform.target }} | |
| args: --release --out dist --find-interpreter --features=${{ matrix.features.value }} | |
| sccache: "true" | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-${{ matrix.features.package_name }}-macos-${{ matrix.platform.target }}-${{ github.ref_name }} | |
| path: dist | |
| sdist: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Run checkout | |
| uses: actions/checkout@v6 | |
| - name: Build sdist | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: sdist | |
| args: --out dist | |
| - name: Upload sdist | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-sdist | |
| path: dist | |
| release: | |
| name: GitHub Release | |
| needs: [linux, windows, macos, sdist] | |
| runs-on: ubuntu-latest | |
| if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} | |
| permissions: | |
| # Use to sign the release artifacts | |
| id-token: write | |
| # Used to upload release artifacts | |
| contents: write | |
| # Used to generate artifact attestation | |
| attestations: write | |
| steps: | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v7 | |
| - name: Generate artifact attestation | |
| uses: actions/attest-build-provenance@v3 | |
| with: | |
| subject-path: "wheels-*/*" | |
| - name: Create GitHub Release | |
| id: create_release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: wheels-*/* | |
| name: Release ${{ github.ref_name }} | |
| tag_name: ${{ github.ref_name }} | |
| draft: false | |
| prerelease: false | |
| generate_release_notes: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| publish-pypi: | |
| name: Publish to PyPI | |
| needs: [linux, windows, macos, sdist] | |
| runs-on: ubuntu-latest | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| permissions: | |
| id-token: write | |
| steps: | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v7 | |
| - name: Publish to PyPI | |
| uses: PyO3/maturin-action@v1 | |
| env: | |
| MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} | |
| with: | |
| command: upload | |
| args: --non-interactive --skip-existing wheels-*/* | |
| publish-crates: | |
| name: Publish to crates.io | |
| needs: [release] | |
| strategy: | |
| matrix: | |
| platform: | |
| - runner: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| toolchain: [stable] | |
| runs-on: ${{ matrix.platform.runner }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Install toolchain | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: ${{ matrix.toolchain }} | |
| components: rustfmt, clippy | |
| - name: Publish lindera-python | |
| run: | | |
| LINDERA_PYTHON_VERSION=$(cargo metadata --no-deps --format-version=1 | jq -r '.packages[] | select(.name=="lindera-python") | .version') | |
| LINDERA_PYTHON_VERSIONS=$(curl -s -XGET https://crates.io/api/v1/crates/lindera-python | jq -r 'select(.versions != null) | .versions[].num') | |
| if echo ${LINDERA_PYTHON_VERSIONS} | grep ${LINDERA_PYTHON_VERSION} >/dev/null; then | |
| echo "lindera-python ${LINDERA_PYTHON_VERSION} has already published" | |
| else | |
| cargo publish | |
| fi | |
| env: | |
| CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_TOKEN }} |