name: Release plugin to production

on:
  pull_request:
    types:
      - closed
    branches:
      - 'master'
    paths-ignore:
      - '**.md'
      - '**.yml'
      - 'examples/**'
      - 'hooks/**'
      - 'resources/**'
      - 'testsScripts/**'
      - 'docs/**'
jobs:
  Deploy-To-Production:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          token: ${{ secrets.CI_DEV_GITHUB_TOKEN }}
          persist-credentials: true

      - 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: Determine release tag and release branch
        run: |
          TAG=$(echo "${{ steps.vars.outputs.branch }}" | grep -Eo '[0-9].[0-9]+.[0-9]+')
          echo "PLUGIN_VERSION=$TAG" >> $GITHUB_ENV
          echo "RELEASE_BRANCH_NAME=${{ steps.vars.outputs.branch }}" >> $GITHUB_ENV
          echo "push new release >> $TAG"

      - name: "Create release"
        env:
          TAG: ${{env.PLUGIN_VERSION}}
        uses: "actions/github-script@v5"
        with:
          github-token: "${{ secrets.CI_DEV_GITHUB_TOKEN }}"
          script: |
            try {
              await github.rest.repos.createRelease({
                draft: false,
                generate_release_notes: false,
                name: process.env.TAG,
                owner: context.repo.owner,
                prerelease: false,
                repo: context.repo.repo,
                tag_name: process.env.TAG
              });
            } catch (error) {
              core.setFailed(error.message);
            }
      - name: Push to NPM
        env:
          CI_NPM_TOKEN: ${{ secrets.CI_NPM_TOKEN }}
        run: |
          echo "//registry.npmjs.org/:_authToken=$CI_NPM_TOKEN" > ~/.npmrc
          npm publish

      - name: Generate and send slack report
        env:
          SLACK_TOKEN: ${{ secrets.CI_SLACK_TOKEN }}
          RELEASE_BRACH_NAME: ${{env.RELEASE_BRANCH_NAME}}
        run: |
          CHANGES=$(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 "$CHANGES" ]; then
            echo "Missing release notes for version ${{ env.PLUGIN_VERSION }} in RELEASENOTES.md"
            exit 1
          fi
          android_sdk_version=$(cat README.md | grep 'Android AppsFlyerSDK' | grep -Eo '[0-9].[0-9]+.[0-9]+')
          ios_sdk_version=$(cat README.md | grep 'iOS AppsFlyerSDK' | grep -Eo  '[0-9].[0-9]+.[0-9]+')
          curl -X POST -H 'Content-type: application/json' --data '{"jira_fixed_version": "'"${{env.PLUGIN_VERSION}}"'", "deploy_type": "Production", "install_tag": "latest", "git_branch": "'"$RELEASE_BRACH_NAME"'", "changes_and_fixes": "'"$CHANGES"'", "android_dependency": "'"$android_sdk_version"'", "ios_dependency": "'"$ios_sdk_version"'"}' "$SLACK_TOKEN"

