# 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 Build
on:
  pull_request:
    branches: ["master"]
  push:
    tags: ["*-rc*"]
    branches: ["master"]

jobs:
  generate-license:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - name: Generate license file
        run: python ./dev/create_license.py
      - uses: actions/upload-artifact@v3
        with:
          name: python-wheel-license
          path: LICENSE.txt

  build-python-mac-win:
    needs: [generate-license]
    name: Mac/Win
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.10"]
        os: [macos-latest, windows-latest]
    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install maturin==0.14.2

      - run: rm LICENSE.txt
      - name: Download LICENSE.txt
        uses: actions/download-artifact@v3
        with:
          name: python-wheel-license
          path: .

      - name: Build Python package
        run: maturin build --release --strip --locked

      - name: List Windows wheels
        if: matrix.os == 'windows-latest'
        run: dir target\wheels\

      - name: List Mac wheels
        if: matrix.os != 'windows-latest'
        run: find target/wheels/

      - name: Archive wheels
        uses: actions/upload-artifact@v3
        with:
          name: dist
          path: target/wheels/*

  build-manylinux:
    needs: [generate-license]
    name: Manylinux
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: rm LICENSE.txt
      - name: Download LICENSE.txt
        uses: actions/download-artifact@v3
        with:
          name: python-wheel-license
          path: .
      - run: cat LICENSE.txt
      - name: Build wheels
        run: |
          export RUSTFLAGS='-C target-cpu=skylake'
          docker run --rm -v $(pwd):/io \
            --workdir /io \
            ghcr.io/pyo3/maturin:v0.14.2 \
            build --release --manylinux 2014 --locked
      - name: Archive wheels
        uses: actions/upload-artifact@v3
        with:
          name: dist
          path: target/wheels/*

  build-sdist:
    needs: [generate-license]
    name: Source distribution
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: rm LICENSE.txt
      - name: Download LICENSE.txt
        uses: actions/download-artifact@v2
        with:
          name: python-wheel-license
          path: .
      - run: cat LICENSE.txt
      - name: Build sdist
        run: |
          docker run --rm -v $(pwd):/io \
            --workdir /io \
            ghcr.io/pyo3/maturin:v0.14.2 \
            build --release --sdist --locked
          find target/wheels/
      - name: Archive wheels
        uses: actions/upload-artifact@v2
        with:
          name: dist
          path: target/wheels/*

  # NOTE: PyPI publish needs to be done manually for now after release passed the vote
  # release:
  #   name: Publish in PyPI
  #   needs: [build-manylinux, build-python-mac-win]
  #   runs-on: ubuntu-latest
  #   steps:
  #     - uses: actions/download-artifact@v3
  #     - name: Publish to PyPI
  #       uses: pypa/gh-action-pypi-publish@master
  #       with:
  #         user: __token__
  #         password: ${{ secrets.pypi_password }}
