name: Build and Release bsky-desktop

on:
  push:
    branches: [$default-branch]
  pull_request:
    branches: [$default-branch]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build-linux:
    name: Build bsky-desktop (Linux)
    runs-on: ubuntu-latest
    env:
      ext: "AppImage"
      GITHUB_TOKEN: ${{ secrets.GHT }}

    steps:
      - name: Checkout git repo
        uses: actions/checkout@v3

      - name: Setup node and npm
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Install dependencies
        run: npm install

      - name: Build (x64)
        run: npm run build -- --arch x64

      - name: Build (arm64)
        run: npm run build -- --arch arm64

      - name: Upload Linux Artifacts
        uses: actions/upload-artifact@v4
        id: upload-artifact
        with:
          name: linux-artifacts
          path: |
            dist/*.AppImage
            dist/latest*.yml

      - name: Generate checksum
        run: |
          sha256sum dist/*.AppImage > sha256sum.txt

      - name: Upload checksums
        uses: actions/upload-artifact@v4
        with:
          name: checksums
          path: sha256sum.txt

  build-windows:
    name: Build bsky-desktop (Windows)
    runs-on: windows-latest
    env:
      ext: "exe"
      GITHUB_TOKEN: ${{ secrets.GHT }}

    steps:
      - name: Checkout git repo
        uses: actions/checkout@v3

      - name: Setup node and npm
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Install dependencies
        run: npm install

      - name: Build (x64)
        run: npm run build -- --arch x64

      - name: Build (arm64)
        run: npm run build -- --arch arm64

      - name: Upload Windows Artifacts
        uses: actions/upload-artifact@v4
        id: upload-artifact
        with:
          name: windows-artifacts
          path: |
            dist/*.exe
            dist/latest*.yml

  build-macos:
    name: Build bsky-desktop (macOS)
    runs-on: macos-latest
    env:
      ext: "dmg"
      GITHUB_TOKEN: ${{ secrets.GHT }}

    steps:
      - name: Checkout git repo
        uses: actions/checkout@v3

      - name: Setup node and npm
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Install dependencies
        run: npm install

      - name: Build (x64)
        run: npm run build -- --arch x64

      - name: Build (arm64)
        run: npm run build -- --arch arm64

      - name: Upload macOS Artifacts
        uses: actions/upload-artifact@v4
        id: upload-artifact
        with:
          name: macos-artifacts
          path: |
            dist/*.dmg
            dist/latest*.yml

  release:
    name: Create Release
    runs-on: ubuntu-latest
    needs: [build-linux, build-windows, build-macos]
    outputs:
      version_tag: ${{ steps.version.outputs.version }}
    env:
      GITHUB_TOKEN: ${{ secrets.GHT }}

    steps:
      - name: Checkout git repo
        uses: actions/checkout@v3

      - name: Get app version
        id: version
        uses: pchynoweth/action-get-npm-version@1.1.1

      - name: Download Linux Artifacts
        uses: actions/download-artifact@v4
        with:
          name: linux-artifacts
          path: dist/linux

      - name: Download Windows Artifacts
        uses: actions/download-artifact@v4
        with:
          name: windows-artifacts
          path: dist/windows

      - name: Download macOS Artifacts
        uses: actions/download-artifact@v4
        with:
          name: macos-artifacts
          path: dist/macos

      - name: Display structure of downloaded files
        run: ls -R dist

      - name: Merge latest .ymls
        uses: mikefarah/yq@v4.44.6
        with:
          cmd: yq eval-all '. as $item ireduce ({}; . * $item )' dist/*/*.yml > merged.yml

      - name: Upload Release
        id: create_release
        uses: softprops/action-gh-release@v2.1.0
        with:
          tag_name: "v${{ steps.version.outputs.version }}"
          name: "bsky-desktop v${{ steps.version.outputs.version }}"
          generate_release_notes: true
          files: |
            dist/linux/*.AppImage
            dist/windows/*.exe
            dist/macos/*.dmg
            merged.yml

  aur:
    name: Publish to AUR
    runs-on: ubuntu-latest
    needs: release
    env:
      AUR_TOKEN: ${{ secrets.AUR_TOKEN }}

    steps:
      - name: Checkout git repo
        uses: actions/checkout@v3

      - name: Install jq
        run: sudo apt-get update && sudo apt-get install jq -y

      - name: Download checksums
        uses: actions/download-artifact@v4
        with:
          name: checksums
          path: .
      
      - name: List downloaded files
        run: ls -R

      - name: Show content of sha256sum.txt
        run: cat sha256sum.txt

      - name: Extract checksum from sha256sum.txt and change build version
        run: |
          echo releasever
          new_checksum=$(awk 'NR==1 { print $1 }' ./sha256sum.txt)
          sed -i "s|sha256sums=('SKIP' 'SKIP')|sha256sums=('$new_checksum' 'SKIP')|" ./build/PKGBUILD
          sed -i "s/^pkgver=.*$/pkgver=${{ needs.release.outputs.version_tag }}/" ./build/PKGBUILD

      - name: Publish AUR package
        uses: KSXGitHub/github-actions-deploy-aur@v3.0.1
        with:
          pkgname: bskydesktop
          pkgbuild: ./build/PKGBUILD
          commit_username: ${{ secrets.AUR_USERNAME }}
          commit_email: ${{ secrets.AUR_EMAIL }}
          ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
          commit_message: New Version
          ssh_keyscan_types: rsa,ecdsa,ed25519