# This action is centrally managed in https://github.com/asyncapi/.github/
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo

# It does magic only if there is package.json file in the root of the project
name: Release - if Node project

on:
  push:
    branches:
      - master
      # below lines are not enough to have release supported for these branches
      # make sure configuration of `semantic-release` package mentiones these branches
      - next
      - next-major
      - beta
      - alpha
      - '**-release' # custom

jobs:

  test-nodejs:
    name: Test NodeJS release on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
      - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows
        run: |
          git config --global core.autocrlf false
          git config --global core.eol lf
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Check if Node.js project and has package.json
        id: packagejson
        run: test -e ./package.json && echo "::set-output name=exists::true" || echo "::set-output name=exists::false"
        shell: bash
      - if: steps.packagejson.outputs.exists == 'true'
        name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 14
          cache: 'npm'
          cache-dependency-path: '**/package-lock.json'
      - if: steps.packagejson.outputs.exists == 'true'
        name: Install dependencies
        run: npm install
      - if: steps.packagejson.outputs.exists == 'true'
        name: Run test
        run: npm test

  release:
    needs: [test-nodejs]
    name: Publish to any of NPM, Github, and Docker Hub
    runs-on: ubuntu-latest
    steps:
      - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows
        run: |
          git config --global core.autocrlf false
          git config --global core.eol lf
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Check if Node.js project and has package.json
        id: packagejson
        run: test -e ./package.json && echo "::set-output name=exists::true" || echo "::set-output name=exists::false"
      - if: steps.packagejson.outputs.exists == 'true'
        name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 14
      - if: steps.packagejson.outputs.exists == 'true'
        name: Install dependencies
        run: npm install
      - if: steps.packagejson.outputs.exists == 'true'
        name: Publish to any of NPM, Github, and Docker Hub
        id: release
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
          DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
          GIT_AUTHOR_NAME: asyncapi-bot
          GIT_AUTHOR_EMAIL: info@asyncapi.io
          GIT_COMMITTER_NAME: asyncapi-bot
          GIT_COMMITTER_EMAIL: info@asyncapi.io
        run: npm run release
