# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: Release Python Binding

on:
  push:
    tags:
      - "*"
  pull_request:
    branches:
      - main
    paths:
      - ".github/workflows/release_python.yml"
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  sdist:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: PyO3/maturin-action@v1
        with:
          working-directory: "bindings/python"
          command: sdist
          args: -o dist
      - name: Upload sdist
        uses: actions/upload-artifact@v6
        with:
          name: wheels-sdist
          path: bindings/python/dist

  wheels:
    runs-on: "${{ matrix.os }}"
    strategy:
      matrix:
        include:
          - { os: windows-latest }
          - { os: macos-15-intel, target: "x86_64-apple-darwin" }
          - { os: macos-15, target: "aarch64-apple-darwin" }
          - { os: ubuntu-latest, target: "x86_64" }
          - { os: ubuntu-latest, target: "aarch64", manylinux: "manylinux_2_28" }
          - { os: ubuntu-latest, target: "armv7l" }
          - { os: ubuntu-latest, target: "x86_64-unknown-linux-musl", manylinux: "musllinux_1_1" }
          - { os: ubuntu-latest, target: "aarch64-unknown-linux-musl", manylinux: "musllinux_1_1" }
          - { os: ubuntu-latest, target: "armv7-unknown-linux-musleabihf", manylinux: "musllinux_1_1" }
    steps:
      - uses: actions/checkout@v6
      - name: Setup Rust toolchain
        uses: ./.github/actions/setup
      - uses: PyO3/maturin-action@v1
        with:
          working-directory: "bindings/python"
          target: "${{ matrix.target }}"
          command: build
          args: --release -o dist -i python3.11 --features=pyo3/extension-module,services-all,abi3
          sccache: true
          manylinux: ${{ matrix.manylinux || 'auto' }}
      - uses: PyO3/maturin-action@v1
        with:
          working-directory: "bindings/python"
          target: "${{ matrix.target }}"
          command: build
          args: --release -o dist -i python3.10 --features=pyo3/extension-module,services-all
          sccache: true
          manylinux: ${{ matrix.manylinux || 'auto' }}
      - name: Build free-threaded wheels
        uses: PyO3/maturin-action@v1
        with:
          working-directory: "bindings/python"
          target: "${{ matrix.target }}"
          command: build
          args: --release -o dist -i python3.13t --features=pyo3/extension-module,services-all
          sccache: true
          manylinux: ${{ matrix.manylinux || 'auto' }}
      - name: Build python 3.14t
        uses: PyO3/maturin-action@v1
        with:
          working-directory: "bindings/python"
          target: "${{ matrix.target }}"
          command: build
          args: --release -o dist -i python3.14t --features=pyo3/extension-module,services-all
          sccache: true
          manylinux: ${{ matrix.manylinux || 'auto' }}

      - name: Upload wheels
        uses: actions/upload-artifact@v6
        with:
          name: wheels-${{ matrix.os }}-${{ matrix.target }}
          path: bindings/python/dist

  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    needs: [sdist, wheels]
    steps:
      - uses: actions/download-artifact@v7
        with:
          pattern: wheels-*
          merge-multiple: true
          path: bindings/python/dist
      - name: Setup uv
        uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
      - name: Publish to TestPyPI
        if: ${{ startsWith(github.ref, 'refs/tags/') && contains(github.ref, '-') }}
        run: |
          uv publish \
            --trusted-publishing automatic \
            --publish-url https://test.pypi.org/legacy/ \
            --check-url https://test.pypi.org/simple/opendal/ \
            bindings/python/dist/*
      - name: Publish to PyPI
        if: ${{ startsWith(github.ref, 'refs/tags/') && !contains(github.ref, '-') }}
        run: |
          uv publish \
            --trusted-publishing automatic \
            --check-url https://pypi.org/simple/opendal/ \
            bindings/python/dist/*
