name: Build APK and Create GitHub Release
on:
  workflow_dispatch:
    inputs:
      version:
        description: "Release version without leading v. Example: 1.0.0. Leave empty to read the top CHANGELOG heading."
        required: false
        type: string
permissions:
  contents: write
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Set up Java 17
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: "17"
      - name: Set up Android SDK
        uses: android-actions/setup-android@v4
      - name: Set up Flutter
        uses: subosito/flutter-action@v2
        with:
          channel: stable
          cache: true
      - name: Install required Android SDK packages
        shell: bash
        run: |
          set -euo pipefail
          sdkmanager \
            "platform-tools" \
            "platforms;android-35" \
            "build-tools;34.0.0" \
            "build-tools;35.0.0" \
      - name: Get dependencies
        run: flutter pub get
      - name: Resolve version and tag
        id: meta
        shell: bash
        run: |
          set -euo pipefail
          INPUT_VERSION="${{ github.event.inputs.version }}"
          if [[ -n "${INPUT_VERSION}" ]]; then
            VERSION="${INPUT_VERSION#v}"
          else
            VERSION="$(python3 .github/scripts/get_version.py)"
          fi
          TAG="v${VERSION}"
          echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
          echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
      - name: Extract release notes from CHANGELOG.md
        shell: bash
        env:
          VERSION: ${{ steps.meta.outputs.version }}
        run: python3 .github/scripts/get_notes.py
      - name: Build release APK
        run: flutter build apk --release
      - name: Rename APK
        run: mv build/app/outputs/flutter-apk/app-release.apk build/app/outputs/flutter-apk/focusgram-release.apk
      - name: Upload APK artifact
        uses: actions/upload-artifact@v4
        with:
          name: focusgram-apk-${{ steps.meta.outputs.tag }}
          path: build/app/outputs/flutter-apk/focusgram-release.apk
          if-no-files-found: error
      - name: Create Git tag
        shell: bash
        env:
          TAG: ${{ steps.meta.outputs.tag }}
        run: |
          set -euo pipefail
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          if git ls-remote --exit-code --tags origin "refs/tags/${TAG}" >/dev/null 2>&1; then
            echo "Tag already exists on remote: ${TAG}"
            exit 1
          fi
          git tag -a "${TAG}" -m "Release ${TAG}"
          git push origin "${TAG}"
      - name: Create GitHub Release
        uses: softprops/action-gh-release@v3
        with:
          tag_name: ${{ steps.meta.outputs.tag }}
          name: FocusGram ${{ steps.meta.outputs.tag }}
          body_path: release_notes.md
          files: build/app/outputs/flutter-apk/focusgram-release.apk
          draft: false
          prerelease: false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}