name: release

on:
  push:
    tags:
      - "*"
  workflow_dispatch:
    inputs:
      version:
        description: 'Version Number'
        required: true
        type: string

jobs:
  publish_obsidian_plugin:
    name: 💎 Publish Obsidian Plugin
    runs-on: ubuntu-latest
    permissions:
      contents: write
    defaults:
      run:
        shell: bash
        working-directory: src/interface/obsidian
    steps:
      - uses: actions/checkout@v3

      - name: Install Node
        uses: actions/setup-node@v3
        with:
          node-version: "lts/*"

      - name: ⚙️ Build Obsidian Plugin
        run: |
          yarn
          yarn run build --if-present

      - name: ⏫ Upload Obsidian Plugin main.js
        uses: actions/upload-artifact@v3
        with:
          if-no-files-found: error
          name: main.js
          path: src/interface/obsidian/main.js

      - name: ⏫ Upload Obsidian Plugin manifest.json
        uses: actions/upload-artifact@v3
        with:
          if-no-files-found: error
          name: manifest.json
          path: src/interface/obsidian/manifest.json

      - name: ⏫ Upload Obsidian Plugin styles.css
        uses: actions/upload-artifact@v3
        with:
          if-no-files-found: error
          name: styles.css
          path: src/interface/obsidian/styles.css

      - name: 🌈 Create Release
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          generate_release_notes: true
          files: |
            src/interface/obsidian/main.js
            src/interface/obsidian/manifest.json
            src/interface/obsidian/styles.css

  publish_desktop_apps:
    name: 🖥️ Publish Desktop Apps
    strategy:
      matrix:
        include:
        - os: ubuntu-20.04
          extension: deb
        - os: macos-latest
          extension: dmg
        - os: windows-latest
          extension: exe
    runs-on: ${{ matrix.os }}
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v3

      - name: Set up Python 3.9
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'

      - name: ⏬️ Install Dependencies
        shell: bash
        run: |
          if [ "$RUNNER_OS" == "Linux" ]; then
            sudo apt update && sudo apt install libegl1 libxcb-xinerama0 python3-tk -y
          fi
          python -m pip install --upgrade pip
          pip install pyinstaller

      - name: ⬇️ Install Khoj App
        run: |
          pip install --upgrade .

      - name: 📦 Package Khoj App
        shell: bash
        run: |
          # Setup Environment for Reproducible Builds
          export PYTHONHASHSEED=42
          export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)

          pyinstaller --noconfirm Khoj.spec
          if [ "$RUNNER_OS" == "Windows" ]; then
            mv dist/Khoj.exe dist/khoj_"$GITHUB_REF_NAME"_amd64.exe
          fi

      - name: 💻 Create Mac App DMG
        if: matrix.os == 'macos-latest'
        run: |
         # Install Mac DMG Creator
          brew install create-dmg
          # Copy app to separate dmg folder
          mkdir -p dist/dmg && cp -r dist/Khoj.app dist/dmg
          # Create disk image with the app
          create-dmg \
            --volname "Khoj" \
            --volicon "src/khoj/interface/web/assets/icons/favicon.icns" \
            --window-pos 200 120 \
            --window-size 600 300 \
            --icon-size 100 \
            --icon "Khoj.app" 175 120 \
            --hide-extension "Khoj.app" \
            --app-drop-link 425 120 \
            "dist/khoj_"$GITHUB_REF_NAME"_amd64.dmg" \
            "dist/dmg/"

      - uses: ruby/setup-ruby@v1
        if: matrix.os == 'ubuntu-20.04'
        with:
          ruby-version: '3.0'
      - name: 🐧 Create Debian Package
        if: matrix.os == 'ubuntu-20.04'
        shell: bash
        env:
          DEBIAN_PACKAGE_VERSION: ${{ inputs.version }}
        run: |
          # Install Debian Packager
          gem install fpm

          # Copy app files into expected output directory structure
          mkdir -p package/opt package/usr/share/applications package/usr/share/icons/hicolor/128x128/apps
          cp -r dist/Khoj package/opt/Khoj
          cp src/khoj/interface/web/assets/icons/favicon-128x128.png package/usr/share/icons/hicolor/128x128/apps/Khoj.png
          cp Khoj.desktop package/usr/share/applications

          # Fix permissions to be usable by non-root users
          find package/usr/share -type f -exec chmod 644 -- {} +
          chmod 755 package/opt/Khoj

          # Package the app
          if [ -z "$DEBIAN_PACKAGE_VERSION" ]; then
            DEBIAN_PACKAGE_VERSION=$(echo $GITHUB_REF_NAME | sed -E 's/v(.*)/\1/g')
          fi
          fpm -C package -s dir -t deb -n Khoj --version $DEBIAN_PACKAGE_VERSION -p dist/khoj_"$GITHUB_REF_NAME"_amd64.deb

      - uses: actions/upload-artifact@v3
        with:
          name: khoj_${{github.ref_name}}_amd64.${{matrix.extension}}
          path: dist/khoj_${{github.ref_name}}_amd64.${{matrix.extension}}

      - name: 🌈 Release
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          generate_release_notes: true
          files: dist/khoj_${{github.ref_name}}_amd64.${{matrix.extension}}
