name: Release

on: 
  workflow_dispatch:
    inputs:
      dryRun:
        description: 'Do a dry run to preview instead of a real release'     
        required: true
        default: 'true'

jobs:
  authorize: 
    name: Authorize
    runs-on: ubuntu-18.04
    steps:
      - name: ${{ github.actor }} permission check to do a release
        uses: octokit/request-action@v2.0.0
        with:
          route: GET /repos/:repository/collaborators/${{ github.actor }}
          repository: ${{ github.repository }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  release:
    name: Release
    runs-on: ubuntu-18.04
    needs: [authorize]
    env:
      GIT_AUTHOR_NAME: amplitude-sdk-bot
      GIT_AUTHOR_EMAIL: amplitude-sdk-bot@users.noreply.github.com
      GIT_COMMITTER_NAME: amplitude-sdk-bot
      GIT_COMMITTER_EMAIL: amplitude-sdk-bot@users.noreply.github.com

    steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: node_modules cache
        uses: actions/cache@v2
        with:
          path: '**/node_modules'
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.8.x'
      - name: Install boto3 for deploy_s3.python
        run: pip install boto3==1.14.63

      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 10.x

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Run tests
        run: make test

      - name: Release --dry-run  # Uses release.config.js
        if: ${{ github.event.inputs.dryRun == 'true'}}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: ${{ secrets.AWS_REGION }}
          S3_BUCKET_NAME: ${{ secrets.S3_BUCKET_NAME }}
        run: npx semantic-release --dry-run

      - name: Release # Uses release.config.js
        if: ${{ github.event.inputs.dryRun == 'false'}}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: ${{ secrets.AWS_REGION }}
          S3_BUCKET_NAME: ${{ secrets.S3_BUCKET_NAME }}
        run: npx semantic-release
