# 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"
      - ".github/scripts/release_python/**"
  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@v7
      - name: Test release helper
        run: python3 -m unittest discover -s .github/scripts/release_python -p "test_*.py"
      - name: Prepare release candidate version
        if: ${{ startsWith(github.ref, 'refs/tags/') && contains(github.ref, '-') }}
        run: python3 .github/scripts/release_python/prepare.py
      - uses: PyO3/maturin-action@v1
        with:
          working-directory: "bindings/python"
          command: sdist
          args: -o dist
      - name: Upload sdist
        uses: actions/upload-artifact@v7
        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@v7
      - name: Prepare release candidate version
        if: ${{ startsWith(github.ref, 'refs/tags/') && contains(github.ref, '-') }}
        run: python .github/scripts/release_python/prepare.py
      - 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 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@v7
        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@v8
        with:
          pattern: wheels-*
          merge-multiple: true
          path: bindings/python/dist
      - name: Setup uv
        uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.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/*
