name: NPM - Release

on:
  push:
    branches: [main,integration,feature/**,bug/**,hotfix/**]
  pull_request:
    branches: [main,integration,feature/**,bug/**,hotfix/**]

env:
  Branches: main,integration,feature/**,bug/**,hotfix/**
  MainBranch: main
  NPMRegistry: https://registry.npmjs.org/
  InstallCommand: npm ci
  DeployCommand: npm run deploy
  Organization: lowcodeunit
  Repository: applications-flow
  Output: dist

jobs:
  build:
    # Build And Publish
    name: Build and Publish
    runs-on: ubuntu-latest
    steps:
      # checkout repository
      - name: Checkout Repository
        uses: actions/checkout@v2
        with:
          fetch-depth: '0'

      # set variables
      - name: Set variables
        id: vars
        run: |
          branch=${GITHUB_REF##*/}

          echo ::set-output name=branchName::$branch
           
          if [ "$branch" == "${{ env.MainBranch }}" ]
          then
              echo "::set-output name=versionBump::minor"
          else
              echo "::set-output name=versionBump::patch"
          fi

      - run: |
          echo "Set Variable Checks ${{ github.ref }}"
          echo "Current branch is ${{ steps.vars.outputs.branchName }}"
          echo "Version bump type is ${{ steps.vars.outputs.versionBump }}"

      # bump version and push tag
      - name: Bump version and push tag
        uses: fathym/github-tag-action@master
        id: versionBump
        env:
          DEFAULT_BUMP: ${{ steps.vars.outputs.versionBump }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          RELEASE_BRANCHES: .*
          WITH_V: false
      - run: echo "New version is ${{ steps.versionBump.outputs.new_tag }}"

      # replace text in package.json for main branch
      - name: replace version text for main branch
        if: ${{ steps.vars.outputs.branchName == env.MainBranch }}
        shell: pwsh
        run: (Get-Content -path package.json -Raw) -replace "version patch","version ${{ steps.versionBump.outputs.new_tag }} --no-git-tag-version -f" | Set-Content -Path package.json

      # replace text in package.json for dev branches
      - name: replace tag text for dev branches
        if: ${{ steps.vars.outputs.branchName != env.MainBranch }}
        shell: pwsh
        run: (Get-Content -path package.json -Raw) -replace "--access public","--access public --tag ${{ steps.vars.outputs.branchName }}" | Set-Content -Path package.json

      - name: replace version text for dev branches
        if: ${{ steps.vars.outputs.branchName != env.MainBranch }}
        shell: pwsh
        run: (Get-Content -path package.json -Raw) -replace "version patch","version ${{ steps.versionBump.outputs.new_tag }}-${{ steps.vars.outputs.branchName }} --no-git-tag-version -f" | Set-Content -Path package.json

      # run npm commands
      - uses: actions/setup-node@v2
        with:
          node-version: 14
          registry-url: ${{ env.NPMRegistry }}

      # install npm dependencies from package-lock.json
      - name: npm install
        run: ${{ env.InstallCommand }}

      # build & publish npm packages to npmjs.org
      - name: npm build & publish
        if: ${{ steps.versionBump.outputs.new_tag != '' }}
        run: ${{ env.DeployCommand }}
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
