
name: "Release"


on:
  release:
    types: [ published ]


jobs:
  pypi-deploy:
    if: "!github.event.release.prerelease"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install setuptools wheel twine
      - name: Build and publish
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
        run: |
          python setup.py sdist bdist_wheel
          twine upload dist/*

  deb-package:
    runs-on: ubuntu-latest
    steps:
      - name: Install Makedeb
        run: |
          wget -qO - 'https://proget.hunterwittenborn.com/debian-feeds/makedeb.pub' | gpg --dearmor | sudo tee /usr/share/keyrings/makedeb-archive-keyring.gpg &> /dev/null
          echo 'deb [signed-by=/usr/share/keyrings/makedeb-archive-keyring.gpg arch=all] https://proget.hunterwittenborn.com/ makedeb main' | sudo tee /etc/apt/sources.list.d/makedeb.list
          sudo apt update
          sudo apt install makedeb
      - name: Prepare source directory
        run: |
          git clone https://mpr.hunterwittenborn.com/rare.git build
          sed -i "s/pkgver=.*/pkgver=${{ github.event.release.tag_name }}/g" build/PKGBUILD

      - name: build deb
        run: |
          cd build
          makedeb -d
          mv *.deb Rare.deb

      - name: Upload to Releases
        uses: svenstaro/upload-release-action@2.2.1
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: build/Rare.deb
          asset_name: Rare-${{ github.event.release.tag_name }}.deb
          tag: ${{ github.ref }}
          overwrite: true

  appimage:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - name: Install build dependencies
        run: |
          sudo apt update
          sudo apt install python3 python3-pip python3-setuptools patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse
      - name: Install appimage-builder
        run: |
          sudo wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O /usr/local/bin/appimagetool
          sudo chmod +x /usr/local/bin/appimagetool
          sudo pip3 install appimage-builder
      - name: Build
        run: |
          cp rare/__main__.py .
          appimage-builder --skip-test
          mv Rare-*.AppImage Rare.AppImage
          mv Rare-*.AppImage.zsync Rare.AppImage.zsync

      - name: Upload to Releases
        uses: svenstaro/upload-release-action@2.2.1
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: Rare.AppImage
          asset_name: Rare-${{ github.event.release.tag_name }}.AppImage
          tag: ${{ github.ref }}
          overwrite: true
      - name: Upload zsync file to GitHub
        uses: svenstaro/upload-release-action@2.2.1
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: Rare.AppImage.zsync
          asset_name: Rare-${{ github.event.release.tag_name }}.AppImage.zsync
          tag: ${{ github.ref }}
          overwrite: true

  nuitka:
    runs-on: "windows-latest"
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.9'
          architecture: x64
      - name: Install build dependencies
        run: pip3 install nuitka ordered-set
      - name: Install target dependencies
        run: |
          pip3 install -r requirements.txt
          pip3 install -r requirements-presence.txt
      - name: Build
        run: >-
          python -m nuitka
          --assume-yes-for-downloads
          --msvc=latest
          --lto=yes
          --jobs=2
          --static-libpython=no
          --standalone
          --enable-plugin=anti-bloat
          --enable-plugin=pyqt5
          --show-modules
          --show-anti-bloat-changes
          --follow-stdlib
          --follow-imports
          --nofollow-import-to="*.tests"
          --nofollow-import-to="*.distutils"
          --prefer-source-code
          --include-package=pypresence
          --include-package-data=qtawesome
          --include-data-dir=rare\resources\images=rare\resources\images
          --include-data-files=rare\resources\languages=rare\resources\languages="*.qm"
          --windows-icon-from-ico=rare\resources\images\Rare.ico
          --windows-company-name=Rare
          --windows-product-name=Rare
          --windows-file-description=rare.exe
          --windows-file-version=${{ github.event.release.tag_name }}
          --windows-product-version=${{ github.event.release.tag_name }}
          --disable-console
          rare
      - name: Fix QtNetwork SSL
        run: |
          Copy-Item -Path "rare.dist\libcrypto-1_1.dll" -Destination "rare.dist\libcrypto-1_1-x64.dll"
          Copy-Item -Path "rare.dist\libssl-1_1.dll" -Destination "rare.dist\libssl-1_1-x64.dll"
      - name: Compress
        run: |
          python -c "import shutil; shutil.make_archive('Rare-Windows', 'zip', 'rare.dist')"

      - name: Upload to Releases
        uses: svenstaro/upload-release-action@2.2.1
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: Rare-Windows.zip
          asset_name: Rare-Windows-${{ github.event.release.tag_name }}.zip
          tag: ${{ github.ref }}
          overwrite: true

  cx_freeze:
    runs-on: "windows-latest"
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.9'
          architecture: x64
      - name: Install Build Dependencies
        run: pip3 install --upgrade cx_freeze wheel
      - name: Install Target Dependencies
        run: |
          pip3 install -r requirements.txt
          pip3 install -r requirements-presence.txt
      - name: Build
        run: |
          python freeze.py bdist_msi
          mv dist/*.msi dist/Rare-Windows.msi

      - name: Upload to Releases
        uses: svenstaro/upload-release-action@2.2.1
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: dist/Rare-Windows.msi
          asset_name: Rare-Windows-${{ github.event.release.tag_name }}.msi
          tag: ${{ github.ref }}
          overwrite: true

  mac_os:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      - name: Install Build Dependencies
        run: pip install pyinstaller
      - name: Install Target Dependencies
        run: |
          pip install -r requirements.txt
      - name: Move files
        run: mv rare/__main__.py __main__.py
      - name: Build
        run: >-
          pyinstaller -F --name Rare
          --add-data "rare/resources/languages/*:rare/resources/languages"
          --add-data "rare/resources/images/*:rare/resources/images/"
          --windowed
          --icon rare/resources/images/Rare.icns
          --hidden-import=legendary
          __main__.py
      - name: Create dmg
        run: |
          git clone https://github.com/create-dmg/create-dmg
          create-dmg/create-dmg Rare.dmg dist/Rare.App --volname Rare --volicon rare/resources/images/Rare.icns

      - name: upload to GitHub
        uses: svenstaro/upload-release-action@2.2.1
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: Rare.dmg
          asset_name: Rare-${{ github.event.release.tag_name }}.dmg
          tag: ${{ github.ref }}
          overwrite: true
