name: "Build main"

on:
  push:
    branches:
     - main
    paths:
     - '.github/workflows/**'
     - 'automation_tools/**'
     - 'emu-configs/**'
     - 'es-configs/**'
     - 'functions/**'
     - 'rd-submodules/**'
     - '*.sh'
     - 'net.retrodeck.retrodeck.yml'
     - 'net.retrodeck.retrodeck.appdata.xml'
  pull_request: 
    branches:
     - main

  workflow_dispatch:


jobs:

  Building_RetroDECK:
    runs-on: self-hosted
    steps:

      # Circumventing this bug: https://github.com/flatpak/flatpak-builder/issues/317
      - name: Remove stuck mounts
        run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/*
        continue-on-error: true

      - name: Clone RetroDECK repo
        uses: actions/checkout@v3
        with:
          submodules: 'true'

      - name: "Install dependencies"
        run: "automation_tools/install_dependencies.sh"

      - name: Run pre-build automation tasks
        run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"

      - name: Read manifest content
        id: read_manifest
        run: echo "::set-output name=file_content::$(cat net.retrodeck.retrodeck.yml)"

      # - name: "Updating release notes in appdata"
      #   run: "automation_tools/appdata_management.sh"
        
      - name: Check versions (main only)
        id: check_version_string
        run: "automation_tools/main_version_checker.sh"

      - name: "[DEBUG] Outputting manifest"
        run: cat net.retrodeck.retrodeck.yml

      - name: "Build flatpak: download only"
        id: "flatpak-download"
        run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh"
        continue-on-error: true

      # Sometimes flatpak download fails, in this case it tries a second time
      - name: "Build flatpak: download only (retry)"
        if: steps.flatpak-download.outcome == 'failure'
        run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh"

      - name: Build flatpak
        run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_only.sh"

      - name: Create Artifact for flathub
        run: | 
          tar -czf ${GITHUB_WORKSPACE}/RetroDECK-Artifact.tar.gz -C ${GITHUB_WORKSPACE}/retrodeck-flatpak-main .
          hash=($(sha256sum ${GITHUB_WORKSPACE}/RetroDECK-Artifact.tar.gz))
          echo $hash > ${GITHUB_WORKSPACE}/RetroDECK-Artifact.sha
          mv -f RetroDECK-Artifact.* ${{ secrets.ARTIFACT_REPO }}

      - name: Create Bundle
        run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_bundle.sh"

      - name: Getting version info
        id: version
        run: |
          appdata="https://raw.githubusercontent.com/XargonWan/RetroDECK/main/net.retrodeck.retrodeck.appdata.xml"
          REL_VER=$(curl -s $appdata | xmlstarlet sel -t -v "//release/@version" | head -1)
          DES="$(curl -s $appdata | xmlstarlet sel -t -m "//release[1]" -v "description" -n | sed '1,2d;$d;s/^ */- /;/^- $/d')"
          echo "REL_VER=$REL_VER" >> $GITHUB_ENV
          echo -e "# Release Notes\n" >> "body.md"
          echo "$DES" >> "body.md"

      - name: Publish the flatpak in a new release
        uses: ncipollo/release-action@v1
        env:
          REL_VER: ${{ env.REL_VER }}
        with:
          tag: ${{ env.REL_VER }}
          name: "RetroDECK v${{ env.REL_VER }}"
          bodyFile: "body.md"
          artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz"
          allowUpdates: true
          makeLatest: true
          token: ${{ secrets.TRIGGER_BUILD_TOKEN }}
          repo: RetroDECK
        continue-on-error: true

      # In case it cannot publish the release at least it's providing the flatpak file for creating a manual release
      - name: Upload RetroDECK.flatpak
        uses: actions/upload-artifact@v3
        with:
          name: retrodeck-flatpak
          path: RetroDECK.flatpak
        continue-on-error: true