# This file is autogenerated by maturin v1.6.0 and then modified
# To update, run
#
#    maturin generate-ci github
#
name: kcl-python-bindings
on:
  push:
    branches:
      - main
    paths:
      - '**/Cargo.toml'
      - '**/Cargo.lock'
      - '**/rust-toolchain.toml'
      - 'rust/kcl-python-bindings/**'
      - '**.rs'
      - .github/workflows/kcl-python-bindings.yml
    tags:
      - 'kcl-*'
  pull_request:
    paths:
      - '**/Cargo.toml'
      - '**/Cargo.lock'
      - '**/rust-toolchain.toml'
      - 'rust/kcl-python-bindings/**'
      - '**.rs'
      - .github/workflows/kcl-python-bindings.yml
  workflow_dispatch:
permissions:
  contents: read
concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true
jobs:
  linux-x86_64:
    name: kcl-python-bindings (linux-x86_64)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: 3.x
      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          working-directory: rust/kcl-python-bindings
          target: x86_64
          args: --release --out dist --find-interpreter
          sccache: 'true'
          manylinux: auto
          before-script-linux: |
            yum install openssl-devel -y
      - name: Upload wheels
        uses: actions/upload-artifact@v4
        with:
          name: wheels-linux-x86_64
          path: rust/kcl-python-bindings/dist
  windows:
    name: kcl-python-bindings (windows)
    runs-on: windows-16-cores
    strategy:
      matrix:
        target:
          - x64
      fail-fast: false
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: 3.x
          architecture: ${{ matrix.target }}
      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          working-directory: rust/kcl-python-bindings
          target: ${{ matrix.target }}
          args: --release --out dist --find-interpreter
          sccache: 'true'
      - name: Upload wheels
        uses: actions/upload-artifact@v4
        with:
          name: wheels-windows-${{ matrix.target }}
          path: rust/kcl-python-bindings/dist
  macos:
    name: kcl-python-bindings (macos)
    runs-on: macos-latest
    strategy:
      matrix:
        target:
          - x86_64
          - aarch64
      fail-fast: false
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: 3.x
      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          working-directory: rust/kcl-python-bindings
          target: ${{ matrix.target }}
          args: --release --out dist --find-interpreter
          sccache: 'true'
      - name: Upload wheels
        uses: actions/upload-artifact@v4
        with:
          name: wheels-macos-${{ matrix.target }}
          path: rust/kcl-python-bindings/dist
  test:
    name: kcl-python-bindings (test)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install uv
        uses: astral-sh/setup-uv@v5
      - uses: actions-rust-lang/setup-rust-toolchain@v1
      - uses: taiki-e/install-action@just
      - name: Run tests
        run: |
          cd rust/kcl-python-bindings
          just setup-uv
          just test
        env:
          KITTYCAD_API_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}
          ZOO_HOST: https://api.dev.zoo.dev
  sdist:
    name: kcl-python-bindings (sdist)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install the latest version of uv
        uses: astral-sh/setup-uv@v5
      - name: Install codespell
        run: |
          uv venv .venv
          echo "VIRTUAL_ENV=.venv" >> $GITHUB_ENV
          echo "$PWD/.venv/bin" >> $GITHUB_PATH
          uv pip install pip --upgrade
      - name: Build sdist
        uses: PyO3/maturin-action@v1
        with:
          working-directory: rust/kcl-python-bindings
          command: sdist
          args: --out dist
      - name: Upload sdist
        uses: actions/upload-artifact@v4
        with:
          name: wheels-sdist
          path: rust/kcl-python-bindings/dist
  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: write
    if: startsWith(github.ref, 'refs/tags/')
    needs: [linux-x86_64, windows, macos, sdist]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/download-artifact@v4
        with:
          path: rust/kcl-python-bindings
      - name: Install the latest version of uv
        uses: astral-sh/setup-uv@v5
      - name: do uv things
        run: |
          cd rust/kcl-python-bindings
          uv venv .venv
          echo "VIRTUAL_ENV=.venv" >> $GITHUB_ENV
          echo "$PWD/.venv/bin" >> $GITHUB_PATH
          uv pip install pip --upgrade
      - name: Publish to PyPI
        uses: PyO3/maturin-action@v1
        env:
          MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
        with:
          working-directory: rust/kcl-python-bindings
          command: upload
          args: --non-interactive --skip-existing wheels-*/*
