# Copyright © SixtyFPS GmbH <info@slint.dev>
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0

name: Upload slint-compiler to Python Package Index

on:
  workflow_dispatch:
    inputs:
      release:
        type: boolean
        default: false
        required: false
        description: "Release? If false, publish to test.pypi.org, if true, publish to pypi.org"

jobs:
  build-wheels:
    name: Build wheels on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          [
            ubuntu-22.04,
            ubuntu-22.04-arm,
            windows-2022,
            windows-11-arm,
            macos-14,
          ]
    steps:
      - uses: actions/checkout@v6
      - uses: ./.github/actions/setup-rust
      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          working-directory: tools/compiler
          args: --release --out wheelhouse --find-interpreter
      - uses: actions/upload-artifact@v7
        with:
          name: wheels-${{ matrix.os }}
          path: tools/compiler/wheelhouse/*.whl

  build-sdist:
    name: Build source distribution
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: astral-sh/setup-uv@v7
      - name: Build sdist
        run: uv build --sdist -o dist tools/compiler
      - uses: actions/upload-artifact@v7
        with:
          name: sdist
          path: dist/*.tar.gz

  publish-to-test-pypi:
    if: ${{ github.event.inputs.release != 'true' }}
    needs: [build-wheels, build-sdist]
    runs-on: ubuntu-latest
    environment:
      name: testpypi
      url: https://test.pypi.org/p/slint-compiler
    permissions:
      id-token: write
    steps:
      - uses: astral-sh/setup-uv@v7
      - uses: actions/download-artifact@v8
        with:
          pattern: wheels-*
          path: dist
          merge-multiple: true
      - uses: actions/download-artifact@v8
        with:
          name: sdist
          path: dist
      - name: Publish to Test PyPI
        env:
          UV_PUBLISH_URL: https://test.pypi.org/legacy/
        run: uv publish dist/*

  publish-to-pypi:
    if: ${{ github.event.inputs.release == 'true' }}
    needs: [build-wheels, build-sdist]
    runs-on: ubuntu-latest
    environment:
      name: pypi
      url: https://pypi.org/p/slint-compiler
    permissions:
      id-token: write
    steps:
      - uses: astral-sh/setup-uv@v7
      - uses: actions/download-artifact@v8
        with:
          pattern: wheels-*
          path: dist
          merge-multiple: true
      - uses: actions/download-artifact@v8
        with:
          name: sdist
          path: dist
      - name: Publish to PyPI
        run: uv publish dist/*
