name: 📣 Build release of QOwnNotes (Next)

on:
  workflow_dispatch:
#  push:
#    branches:
#      - main
#    tags-ignore:
#      - '*'
#    # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-including-paths
#    paths:
##      - 'src/**'
##      - 'tests/**'
#      - '.github/workflows/build-release-next.yml'
# For testing also on pull requests
#  pull_request:
#    paths:
#      - 'src/**'

defaults:
  run:
    working-directory: src

#--------------------------------------------------------------------------------
# Define application name & version
#--------------------------------------------------------------------------------

env:
  EXECUTABLE: "QOwnNotes"
  APPLICATION: "QOwnNotes"
  UNIXNAME: "QOwnNotes"
  QMAKE_PROJECT: "QOwnNotes.pro"
  PUBLISHER: "Patrizio Bekerle"
  REPO_DIR: "/home/runner/work/QOwnNotes"
  QT_MODULES: ""
  QMAKE: qmake
  CORES: 16

jobs:
  create_release:
    name: "🗃️️ Prepare release"
    permissions:
      contents: write # for actions/create-release to create a release
    runs-on: ubuntu-latest
    outputs:
      upload_url: ${{ steps.create_release.outputs.upload_url }}
      release_id: ${{ steps.create_release.outputs.id }}
    steps:
      - uses: actions/checkout@v6
      - name: Set Env
        run: |
          export VERSION=$(cat version.h | sed 's/[^0-9,.]//g')
          #export TAG=v${VERSION}.${GITHUB_RUN_ID}.${GITHUB_RUN_NUMBER}
          export TAG=v${VERSION}
          export RELEASE_TEXT=$(grep -Pzo "## ${VERSION}\n(\n|.)+?\n##" ../CHANGELOG.md | sed '$ d')
          echo "VERSION=${VERSION}" >> $GITHUB_ENV
          echo "TAG=${TAG}" >> $GITHUB_ENV
          # add multiline release text
          echo "RELEASE_TEXT<<EOF" >> $GITHUB_ENV
          echo "${RELEASE_TEXT}" >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV
      - name: Printenv
        run: |
          echo "VERSION=${VERSION}"
          echo "TAG=${TAG}"
          echo "RELEASE_TEXT=${RELEASE_TEXT}"
          printenv
  #      - name: Create release
  #        id: create_release
  #        uses: actions/create-release@v1
  #        env:
  #          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  #        with:
  #          tag_name: ${{ env.TAG }}
  #          release_name: Release v${{ env.VERSION }}
  #          body: ${{ env.RELEASE_TEXT }}
  #          draft: true
  #          prerelease: false

  #--------------------------------------------------------------------------------
  # Workflow jobs (GNU/Linux, macOS & Windows)
  #--------------------------------------------------------------------------------

  #
  # AppImage build
  #
  build-appimage:
    needs: create_release
    runs-on: ubuntu-22.04
    env:
      QT_VERSION: 5.15.2
      BUILD_DIR: build
    name: "🐧 AppImage Qt 5.15.2"
    steps:
      - name: "🧰 Checkout"
        uses: actions/checkout@v6
        with:
          submodules: recursive

      - name: "⚙️ Install Qt"
        uses: jurplel/install-qt-action@v4
        with:
          version: ${{env.QT_VERSION}}
          modules: ${{env.QT_MODULES}}
          aqtversion: "==2.0.0"
          setup-python: false
          cache: true

      - name: "⚙️ Install dependencies"
        run: |
          sudo apt-get update
          sudo apt install desktop-file-utils libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-composite0 libxcb-cursor0 libxcb-damage0 libxcb-dpms0 libxcb-dri2-0 libxcb-dri3-0 libxcb-ewmh2 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-record0 libxcb-render0 libxcb-res0 libxcb-screensaver0 libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-util1 libxkbcommon-x11-0
      - name: "🚧 Compile application"
        run: |
          echo "#define RELEASE \"AppImage\"" > release.h
          ${{env.QMAKE}} ${{env.QMAKE_PROJECT}} CONFIG+=release PREFIX=/usr
          lrelease QOwnNotes.pro
          make -j${{env.CORES}}
      - name: "⚙️ Install linuxdeploy"
        run: |
          wget https://github.com/linuxdeploy/linuxdeploy/releases/download/1-alpha-20240109-1/linuxdeploy-x86_64.AppImage
          wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/1-alpha-20240109-1/linuxdeploy-plugin-qt-x86_64.AppImage
          chmod +x linuxdeploy-x86_64.AppImage
          chmod +x linuxdeploy-plugin-qt-x86_64.AppImage
      - name: "📦 Create AppImage"
        run: |
          export QMAKE=${{env.REPO_DIR}}/Qt/${{env.QT_VERSION}}/gcc_64/bin/${{env.QMAKE}}
          export PATH=${{env.REPO_DIR}}/Qt/${{env.QT_VERSION}}/gcc_64/libexec:$PATH
          export EXTRA_QT_PLUGINS="svg;"
          cp ../icons/icon.png QOwnNotes.png
          ./linuxdeploy-x86_64.AppImage --appdir ${{env.BUILD_DIR}} -e ${{env.UNIXNAME}} -i ${{env.UNIXNAME}}.png -d PBE.QOwnNotes.desktop --plugin qt
          mkdir -p ${{env.BUILD_DIR}}/usr/languages && cp -r languages/*.qm ${{env.BUILD_DIR}}/usr/languages
          find ${{env.BUILD_DIR}}
          ./linuxdeploy-x86_64.AppImage --appdir ${{env.BUILD_DIR}} --output appimage
          rm linuxdeploy-x86_64.AppImage
          rm linuxdeploy-plugin-qt-x86_64.AppImage
          ls -hal *.AppImage
          find -iname "*.AppImage"
          mv *.AppImage ${{env.EXECUTABLE}}-x86_64.AppImage || true
          sha256sum ${{env.EXECUTABLE}}-x86_64.AppImage > ${{env.EXECUTABLE}}-x86_64.AppImage.sha256sum
          ls -hal *.AppImage
          find -iname "*.AppImage"
          pwd

      - name: "📤 Upload artifact: AppImage"
        uses: actions/upload-artifact@v6
        with:
          name: ${{env.EXECUTABLE}}-x86_64.AppImage
          path: src/${{env.EXECUTABLE}}-x86_64.AppImage
      - name: "📤 Upload artifact: AppImage sha256sum"
        uses: actions/upload-artifact@v6
        with:
          name: ${{env.EXECUTABLE}}-x86_64.AppImage.sha256sum
          path: src/${{env.EXECUTABLE}}-x86_64.AppImage.sha256sum
#  #
#  # Snap build
#  #
#  build-snap:
#    needs: create_release
#    runs-on: ubuntu-latest
##    container:
##      image: ghcr.io/pbek/qownnotes-ubuntu18-dev:latest
##      options: --user root
#    env:
#      QT_VERSION: 5.15.2
#    name: '🐧 Snap Qt 5.15.2'
#    steps:
#
#      - name: '🧰 Checkout'
#        uses: actions/checkout@v6
#        with:
#          submodules: recursive
#
#      - name: '⚙️ Set Env'
#        shell: bash
#        run: |
#          export VERSION=$(cat version.h | sed 's/[^0-9,.]//g')
#          echo "VERSION=${VERSION}" >> $GITHUB_ENV
#
##      - name: '⚙️ Install Snapcraft'
##        uses: samuelmeuli/action-snapcraft@v2
##        env:
##          SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_TOKEN_GH }}
##        with:
##          use_lxd: ${{ matrix.os == 'ubuntu-18.04' }}
###          snapcraft_token: ${{ secrets.SNAP_TOKEN_GH }}
#      - name: '⚙️ Cache Qt'
#        id: cache-qt
#        uses: actions/cache@v4
#        with:
#          path: ../Qt
#          key: ${{runner.os}}-qtcachedir-${{env.QT_VERSION}}
#      - name: '⚙️ Install Qt'
#        uses: jurplel/install-qt-action@v4
#        with:
#          version: ${{env.QT_VERSION}}
#          modules: ${{env.QT_MODULES}}
##          setup-python: false
#          cache: ${{steps.cache-qt.outputs.cache-hit}}
#      - name: '⚙️ Printenv'
#        shell: bash
#        run: |
#          echo "VERSION=${VERSION}"
#          printenv
#
#      - name: '🚧 Compile application'
#        uses: snapcore/action-build@v1
#        id: snapcraft
#
##      - name: '🚧 Compile application'
##        run: |
##          cd ..
##          lxd version
##          sudo usermod -a -G lxd ${USER}
##          newgrp lxd
##          sudo adduser --system --no-create-home --group lxduser # create system user
##          echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers # allow sudo without password
##          echo "lxduser ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers # allow sudo without password
##          ls -al /var/snap/lxd/common/lxd/unix.socket
##          sudo systemctl restart snap.lxd.daemon
##          cat /var/snap/lxd/common/config
##          ls -al /var/snap/lxd/common/lxd/unix.socket
##          sudo -u lxduser -g lxd snapcraft --use-lxd
##          ls
###        run: cd .. && sg lxd -c 'snapcraft --use-lxd' && ls
#
#  #    - name: Release Snap for Linux
#  #      uses: actions/upload-release-asset@v1
#  #      env:
#  #        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#  #      with:
#  #        upload_url: ${{ needs.create_release.outputs.upload_url }}
#  #        asset_path: ./qownnotes_${{ env.VERSION }}_amd64.snap
#  #        asset_name: QOwnNotes-amd64.snap
#  #        asset_content_type: application/octet-stream
#
#  #    - shell: bash
#  #      run: |
#  #        snapcraft --version
#  #        cd .. && pwd
#  #    - name: Deploy Snap
#  #      uses: snapcore/action-publish@v1
#  #      continue-on-error: true
#  #      env:
#  #        # `snapcraft export-login --snaps=qownnotes --acls package_access,package_push,package_update,package_release -`, token valid for one year
#  #        SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_TOKEN_GH }}
#  #      with:
#  #        snap: /home/runner/work/QOwnNotes/QOwnNotes/qownnotes_${{ env.VERSION }}_amd64.snap
#  #        release: stable
#
#      - name: '📤 Upload artifact: Snap'
#        uses: actions/upload-artifact@v6
#        with:
#          name: qownnotes_${{ env.VERSION }}_amd64.snap
#          path: /home/runner/work/QOwnNotes/QOwnNotes/qownnotes_${{ env.VERSION }}_amd64.snap
#
#      - name: '📤 Upload artifact: Snap logs'
#        uses: actions/upload-artifact@v6
#        with:
#          name: snapcraft-logs
#          path: /home/runner/.cache/snapcraft/log/snapcraft-*.log
#
