name: "Build cooker"

on:
  push:
    branches:
     - cooker*
    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:
     - cooker*

  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: Generate cooker build ID
        run: |
          word1=$(shuf -n 1 ${GITHUB_WORKSPACE}/automation_tools/codename_wordlist.txt)
          capitalized_word1="$(tr '[:lower:]' '[:upper:]' <<< ${word1:0:1})${word1:1}"
          word2=$(shuf -n 1 ${GITHUB_WORKSPACE}/automation_tools/codename_wordlist.txt)
          capitalized_word2="$(tr '[:lower:]' '[:upper:]' <<< ${word2:0:1})${word2:1}"
          result=$capitalized_word1$capitalized_word2
          echo $result > ${GITHUB_WORKSPACE}/buildid
          echo "buildid=$result" >> $GITHUB_ENV
          echo "VersionID is $result"

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

      - name: "Adding flatpak portal for automated updates (cooker only)"
        run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_flatpak_portal_add.sh"

      # - name: "Updating release notes in appdata"
      #   run: "automation_tools/appdata_management.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-cooker.tar.gz -C ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker .
          hash=($(sha256sum ${GITHUB_WORKSPACE}/RetroDECK-Artifact-cooker.tar.gz))
          echo $hash > ${GITHUB_WORKSPACE}/RetroDECK-Artifact-cooker.sha
          mv -f RetroDECK-Artifact-cooker.* ${{ secrets.ARTIFACT_REPO }}
        continue-on-error: true

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

      - name: Set environment variable with current branch name
        run: echo "GITHUB_REF_SLUG=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV

      - name: Get commits since last release
        run: |
          # Get the latest release tag
          LATEST_TAG=$(git describe --tags --abbrev=0)
          # Get all commits since the latest release tag
          COMMITS=$(git log $LATEST_TAG..HEAD --pretty=format:"- %s")
          # Set the output variable
          echo "::set-output name=commits::$COMMITS"
        id: commits
        continue-on-error: true

      - name: Publish the flatpak in a new cooker release
        uses: ncipollo/release-action@v1
        with:
          tag: "${{ env.GITHUB_REF_SLUG }}-${{ env.buildid }}"
          body: |
            # Release Notes (Cooker)
            This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}.

            ## Commits since last release
            ${{ steps.commits.outputs.commits }}

            For the full release note for this build please refer to the channel [#BETA-TESTING](https://discord.gg/qQcrFvaA2C) on our Discord server.
      
            Cooker channel is provided for the community to test fixes and explore new functionality.
            Please DO NOT open issues or ask support on this build.

          artifacts: "RetroDECK-cooker.flatpak,RetroDECK-Artifact.tar.gz"
          allowUpdates: true
          makeLatest: true
          token: ${{ secrets.TRIGGER_BUILD_TOKEN }}
          repo: RetroDECK-cooker
        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-cooker.flatpak
        uses: actions/upload-artifact@v3
        with:
          name: retrodeck-flatpak
          path: RetroDECK-cooker.flatpak
        continue-on-error: true