name: Prepare plugin for production

on:
  pull_request:
    types:
      - opened
    branches:
      - 'master'

jobs:
  Release-To-QA:
    if: startsWith(github.head_ref, 'releases/')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          token: ${{ secrets.CI_DEV_GITHUB_TOKEN }}
          persist-credentials: true
          ref: ${{ github.head_ref }}

      - name: Login to Github
        env:
          COMMIT_AUTHOR: ${{ secrets.CI_COMMIT_AUTHOR }}
          COMMIT_EMAIL: ${{ secrets.CI_COMMIT_EMAIL }}
          MY_PERSONAL_ACCESS_TOKEN: ${{ secrets.CI_DEV_GITHUB_TOKEN }}
        run: |
          git config --global user.name $COMMIT_AUTHOR
          git config --global user.email $COMMIT_EMAIL
          git config --global credential.helper 'cache --timeout=300'
          git config --global --add "credential.https://github.com.username" "x-access-token"
          echo "https://x-access-token:$MY_PERSONAL_ACCESS_TOKEN@github.com" > ~/.git-credentials
      - uses: mdecoleman/pr-branch-name@1.2.0
        id: vars
        with:
          repo-token: ${{ secrets.CI_DEV_GITHUB_TOKEN }}
      - name: Extract release versions from branch
        run: |
          plugin_version=$(echo "${{ steps.vars.outputs.branch }}" | grep -Eo '[0-9].[0-9]+.[0-9]+')
          plugin_rc_version=$(echo "${{ steps.vars.outputs.branch }}" | grep -Eo '[0-9].[0-9]+.[0-9]+-rc[0-9]+')
          # we export plugin_version and release branch name as env so we can use them in the next step
          echo "PLUGIN_VERSION=$plugin_version" >> $GITHUB_ENV
          echo "PLUGIN_RC_VERSION=$plugin_rc_version" >> $GITHUB_ENV
          echo "GIT_BRANCH_RELEASE=${{ steps.vars.outputs.branch }}" >> $GITHUB_ENV

      - name: Validate RELEASENOTES.md has release section
        run: |
          RELEASE_NOTES=$(awk -v ver="${{ env.PLUGIN_VERSION }}" '
            $0 ~ "^## " ver "$" { in_section=1; next }
            in_section && /^## / { exit }
            in_section { print }
          ' RELEASENOTES.md | sed '/^[[:space:]]*$/d')

          if [ -z "$RELEASE_NOTES" ]; then
            echo "Missing release notes for version ${{ env.PLUGIN_VERSION }} in RELEASENOTES.md"
            exit 1
          fi

          {
            echo "RELEASE_NOTES<<EOF"
            echo "$RELEASE_NOTES"
            echo "EOF"
          } >> "$GITHUB_ENV"

      - name: Prepare RC version locally for QA publish
        run: |
          sed -i -E -e "s/\"version\": \"[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)?\"/\"version\": \"${{ env.PLUGIN_RC_VERSION }}\"/g" package.json
          sed -i -E -e "s/version=\"[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)?\"/version=\"${{ env.PLUGIN_RC_VERSION }}\"/g" plugin.xml

      - name: Push RC version to NPM QA tag
        env:
          CI_NPM_TOKEN: ${{ secrets.CI_NPM_TOKEN }}
        run: |
          echo "//registry.npmjs.org/:_authToken=$CI_NPM_TOKEN" > ~/.npmrc
          npm publish --tag QA

      - name: Commit final release version to branch
        run: |
          sed -i -E -e "s/\"version\": \"[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)?\"/\"version\": \"${{ env.PLUGIN_VERSION }}\"/g" package.json
          sed -i -E -e "s/version=\"[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)?\"/version=\"${{ env.PLUGIN_VERSION }}\"/g" plugin.xml
          git add package.json plugin.xml

          if git diff --cached --quiet; then
            echo "No package/plugin version change detected; skipping commit"
            exit 0
          fi

          git commit -m "${{ env.PLUGIN_VERSION }}"
          git push origin HEAD:${{ env.GIT_BRANCH_RELEASE }}

      - name: Generate and send slack report
        env:
          SLACK_TOKEN: ${{ secrets.CI_SLACK_TOKEN }}
        run: |
          ios_sdk_version=$(cat README.md | grep 'iOS AppsFlyerSDK' | grep -Eo '[0-9].[0-9]+.[0-9]+')
          android_sdk_version=$(cat README.md | grep 'Android AppsFlyerSDK' | grep -Eo '[0-9].[0-9]+.[0-9]+')
          payload=$(jq -n \
            --arg jira_fixed_version "${{ env.PLUGIN_RC_VERSION }}" \
            --arg deploy_type "QA" \
            --arg install_tag "QA" \
            --arg git_branch "${{ env.GIT_BRANCH_RELEASE }}" \
            --arg changes_and_fixes "${{ env.RELEASE_NOTES }}" \
            --arg android_dependency "$android_sdk_version" \
            --arg ios_dependency "$ios_sdk_version" \
            '{
              jira_fixed_version: $jira_fixed_version,
              deploy_type: $deploy_type,
              install_tag: $install_tag,
              git_branch: $git_branch,
              changes_and_fixes: $changes_and_fixes,
              android_dependency: $android_dependency,
              ios_dependency: $ios_dependency
            }')
          curl -fS -X POST -H 'Content-type: application/json' --data "$payload" "$SLACK_TOKEN"
