name: Release

on:
  workflow_dispatch:
    branches: [master]
  push:
    branches: [master]
    paths:
      - 'VERSION'

permissions:
  id-token: write
  contents: write

jobs:
  linux-build:
    name: Linux Build
    runs-on: "ubuntu-latest"
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: PDM
        run: python3.12 -m pip install pdm

      - name: Install libkrb5-dev
        run: sudo apt-get install -y libkrb5-dev

      - name: Installs dev deps and package
        run : PDM_BUILD_SCM_VERSION=$(cat VERSION) pdm install --dev

      - name: Build binary release
        run: |
          pdm run python3.12 -m nuitka --standalone --onefile --output-filename=ldeep.bin ldeep/__main__.py
          mv ldeep.bin ldeep_linux-amd64

      - name: Build Source Distribution
        run: PDM_BUILD_SCM_VERSION=$(cat VERSION) pdm build -d sdist --no-wheel

      - name: Upload Artifacts (binary)
        uses: actions/upload-artifact@v4
        with:
          name: linux
          path: ldeep_linux-amd64

      - name: Upload Artifacts (sdist)
        uses: actions/upload-artifact@v4
        with:
          name: sdist
          path: sdist/*

  windows-build:
    name: Windows Build
    runs-on: "windows-latest"
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - name: PDM
        run: python3 -m pip install pdm

      - name: Installs dev deps and package
        run: $env:PDM_BUILD_SCM_VERSION=gc "VERSION"; pdm install --dev

      - name: Build
        run: |
          pdm run python3 -m nuitka --standalone --assume-yes-for-downloads --output-filename=ldeep.exe --onefile ldeep/__main__.py
          mv ldeep.exe ldeep_windows-amd64.exe
      - name: Upload Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: windows
          path: ldeep_windows-amd64.exe

  macos-build:
    name: MacOS ARM64 Build
    runs-on: "macos-latest"
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: PDM
        run: python3.12 -m pip install pdm

      - name: Installs dev deps and package
        run: PDM_BUILD_SCM_VERSION=$(cat VERSION) pdm install --dev

      - name: Build
        run: |
          pdm run python3.12 -m nuitka --standalone --onefile --output-filename=ldeep.bin ldeep/__main__.py
          mv ldeep.bin ldeep_macos-arm64

      - name: Upload Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: macos
          path: ldeep_macos-arm64

  macos-amd-build:
    name: MacOS AMD64 Build
    runs-on: "macos-13"
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: PDM
        run: python3.12 -m pip install pdm

      - name: Installs dev deps and package
        run: PDM_BUILD_SCM_VERSION=$(cat VERSION) pdm install --dev

      - name: Build
        run: |
          pdm run python3.12 -m nuitka --standalone --onefile --output-filename=ldeep.bin ldeep/__main__.py
          mv ldeep.bin ldeep_macos-amd64

      - name: Upload Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: macos-amd
          path: ldeep_macos-amd64

  tagged-release:
    needs: [linux-build, windows-build, macos-build, macos-amd-build]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Get local version
        run: echo "version=$(cat VERSION)" >> $GITHUB_ENV

      - name: Create tag
        uses: rickstaa/action-create-tag@v1
        with:
          tag: ${{ env.version }}

      - name: Download all workflow run artifacts
        uses: actions/download-artifact@v4

      - name: Create the release
        uses: softprops/action-gh-release@v2
        with:
          tag_name: ${{ env.version }}
          generate_release_notes: true
          body: "${{ github.event.head_commit.message }}"
          files: |
            linux/ldeep_linux-amd64
            windows/ldeep_windows-amd64.exe
            macos/ldeep_macos-arm64
            macos-amd/ldeep_macos-amd64

      - name: Upload to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          packages-dir: sdist/