#
# 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: "Python Release"

on:
  workflow_dispatch:
    inputs:
      version:
        description: 'Version'
        type: string
        default: 'master'


jobs:
  build_wheels:
    name: Build wheels on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-22.04, windows-2022, macos-11 ]

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-python@v4
        with:
          python-version: '3.8'

      - name: Install poetry
        run: pip install poetry

      - name: Set version
        run: python -m poetry version "${{ inputs.version }}"
        working-directory: ./python
        if: "${{ github.event.inputs.version != 'master' }}"

      # Publish the source distribution with the version that's in
      # the repository, otherwise the tests will fail
      - name: Compile source distribution
        run: python3 -m poetry build --format=sdist
        if: startsWith(matrix.os, 'ubuntu')
        working-directory: ./python

      - name: Build wheels
        uses: pypa/cibuildwheel@v2.16.0
        with:
          output-dir: wheelhouse
          config-file: "pyproject.toml"
        env:
          # Ignore 32 bit architectures
          CIBW_ARCHS: "auto64"
          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.8,<3.12"
          CIBW_TEST_REQUIRES: "pytest==7.4.2 moto==4.2.2"
          CIBW_TEST_EXTRAS: "s3fs,glue"
          CIBW_TEST_COMMAND: "pytest -Werror {project}/tests/avro/test_decoder.py"
          # There is an upstream issue with installing on MacOSX
          # https://github.com/pypa/cibuildwheel/issues/1603
          # Ignore tests for pypy since not all dependencies are compiled for it
          # and would require a local rust build chain
          CIBW_TEST_SKIP: "pp* *macosx*"

      - name: Add source distribution
        if: startsWith(matrix.os, 'ubuntu')
        run: ls -lah dist/* && cp dist/* wheelhouse/

      - uses: actions/upload-artifact@v3
        with:
          name: "release-${{ github.event.inputs.version }}"
          path: ./wheelhouse/*
