name: "Publish Tauri App"
on:
  release:
    types: [published]

jobs:
  # Windows-x86_64
  windows-x86_64:
    runs-on: windows-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with: 
          submodules: true
      - name: Setup node
        uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
        with:
          node-version-file: ".node-version"
          package-manager-cache: false
      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable # They use branch based releases
      - name: Install cinny dependencies
        run: cd cinny && npm ci
      - name: Install tauri dependencies
        run: npm ci
      - name: Build desktop app with Tauri
        uses: tauri-apps/tauri-action@73fb865345c54760d875b94642314f8c0c894afa # v0.6.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
          TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
          NODE_OPTIONS: "--max_old_space_size=4096"
      - name: Get app version (windows)
        run: |
          $json = (Get-Content "src-tauri\tauri.conf.json" -Raw) | ConvertFrom-Json
          $version = $json.version
          echo "Version: ${version}"
          echo "TAURI_VERSION=${version}" >> $Env:GITHUB_ENV
          echo "${Env:TAURI_VERSION}"
        shell: pwsh
      - name: Move msi
        run: Move-Item "src-tauri\target\release\bundle\msi\Cinny_${{ env.TAURI_VERSION }}_x64_en-US.msi" "src-tauri\target\release\bundle\msi\Cinny_desktop-x86_64.msi"
        shell: pwsh
      - name: Move msi.zip
        run: Move-Item "src-tauri\target\release\bundle\msi\Cinny_${{ env.TAURI_VERSION }}_x64_en-US.msi.zip" "src-tauri\target\release\bundle\msi\Cinny_desktop-x86_64.msi.zip"
        shell: pwsh
      - name: Move msi.zip.sig
        run: Move-Item "src-tauri\target\release\bundle\msi\Cinny_${{ env.TAURI_VERSION }}_x64_en-US.msi.zip.sig" "src-tauri\target\release\bundle\msi\Cinny_desktop-x86_64.msi.zip.sig"
        shell: pwsh
      - name: Upload tagged release
        uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
        with:
          files: |
            src-tauri/target/release/bundle/msi/Cinny_desktop-x86_64.msi
            src-tauri/target/release/bundle/msi/Cinny_desktop-x86_64.msi.zip
            src-tauri/target/release/bundle/msi/Cinny_desktop-x86_64.msi.zip.sig

  # Linux-x86_64
  linux-x86_64:
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with: 
          submodules: true
      - name: Setup node
        uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
        with:
          node-version-file: ".node-version"
          package-manager-cache: false
      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable # They use branch based releases
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
      - name: Install cinny dependencies
        run: cd cinny && npm ci
      - name: Install tauri dependencies
        run: npm ci
      - name: Build desktop app with Tauri
        uses: tauri-apps/tauri-action@73fb865345c54760d875b94642314f8c0c894afa # v0.6.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
          TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
          NODE_OPTIONS: "--max_old_space_size=4096"
      - name: Get app version
        id: vars
        run: echo "tag=$(jq .version src-tauri/tauri.conf.json | tr -d '"')" >> $GITHUB_OUTPUT
      - name: Move deb
        run: mv "src-tauri/target/release/bundle/deb/Cinny_${{ steps.vars.outputs.tag }}_amd64.deb" "src-tauri/target/release/bundle/deb/Cinny_desktop-x86_64.deb"
      - name: Move AppImage
        run: mv "src-tauri/target/release/bundle/appimage/Cinny_${{ steps.vars.outputs.tag }}_amd64.AppImage" "src-tauri/target/release/bundle/appimage/Cinny_desktop-x86_64.AppImage"
      - name: Move AppImage.tar.gz
        run: mv "src-tauri/target/release/bundle/appimage/Cinny_${{ steps.vars.outputs.tag }}_amd64.AppImage.tar.gz" "src-tauri/target/release/bundle/appimage/Cinny_desktop-x86_64.AppImage.tar.gz"
      - name: Move AppImage.tar.gz.sig
        run: mv "src-tauri/target/release/bundle/appimage/Cinny_${{ steps.vars.outputs.tag }}_amd64.AppImage.tar.gz.sig" "src-tauri/target/release/bundle/appimage/Cinny_desktop-x86_64.AppImage.tar.gz.sig"
      - name: Upload tagged release
        uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
        with:
          files: |
            src-tauri/target/release/bundle/deb/Cinny_desktop-x86_64.deb
            src-tauri/target/release/bundle/appimage/Cinny_desktop-x86_64.AppImage
            src-tauri/target/release/bundle/appimage/Cinny_desktop-x86_64.AppImage.tar.gz
            src-tauri/target/release/bundle/appimage/Cinny_desktop-x86_64.AppImage.tar.gz.sig

  # macos-universal
  macos-universal:
    runs-on: macos-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with: 
          submodules: true
      - name: Setup node
        uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
        with:
          node-version-file: ".node-version"
          package-manager-cache: false
      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable # They use branch based releases
        with:
          targets: aarch64-apple-darwin,x86_64-apple-darwin
      - name: Install cinny dependencies
        run: cd cinny && npm ci
      - name: Install tauri dependencies
        run: npm ci
      - name: Build desktop app with Tauri
        uses: tauri-apps/tauri-action@73fb865345c54760d875b94642314f8c0c894afa # v0.6.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
          TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
          NODE_OPTIONS: "--max_old_space_size=4096"
        with:
          args: "--target universal-apple-darwin"
      - name: Get app version
        id: vars
        run: echo "tag=$(jq .version src-tauri/tauri.conf.json | tr -d '"')" >> $GITHUB_OUTPUT
      - name: Move dmg
        run: mv "src-tauri/target/universal-apple-darwin/release/bundle/dmg/Cinny_${{ steps.vars.outputs.tag }}_universal.dmg" "src-tauri/target/universal-apple-darwin/release/bundle/dmg/Cinny_desktop-universal.dmg"
      - name: Move app.tar.gz
        run: mv "src-tauri/target/universal-apple-darwin/release/bundle/macos/Cinny.app.tar.gz" "src-tauri/target/universal-apple-darwin/release/bundle/macos/Cinny_desktop-universal.app.tar.gz"
      - name: Move app.tar.gz.sig
        run: mv "src-tauri/target/universal-apple-darwin/release/bundle/macos/Cinny.app.tar.gz.sig" "src-tauri/target/universal-apple-darwin/release/bundle/macos/Cinny_desktop-universal.app.tar.gz.sig"
      - name: Upload tagged release
        uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
        with:
          files: |
            src-tauri/target/universal-apple-darwin/release/bundle/dmg/Cinny_desktop-universal.dmg
            src-tauri/target/universal-apple-darwin/release/bundle/macos/Cinny_desktop-universal.app.tar.gz
            src-tauri/target/universal-apple-darwin/release/bundle/macos/Cinny_desktop-universal.app.tar.gz.sig

  # Upload release.json
  release-update:
    if: always()
    needs: [windows-x86_64, linux-x86_64, macos-universal]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      - name: Install dependencies
        run: npm ci
      - name: Run release.json
        run: npm run release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
