name: Release

on:
  push:
    branches:
      - main

jobs:
  release:
    name: ${{ matrix.channel }}
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 1
      matrix:
        channel:
          - latest
          - dev

    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: Setup node
        uses: actions/setup-node@v2
        with:
          node-version: 12.x
          registry-url: https://registry.npmjs.org

      - name: Install dependencies
        run: yarn

      - name: Prepare release
        run: yarn prerelease

      # https://github.com/changesets/action
      - name: Create release pull request or Publish to npm
        if: matrix.channel == 'latest'
        uses: changesets/action@master
        with:
          publish: yarn changeset publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

      # https://github.com/atlassian/changesets/blob/master/docs/snapshot-releases.md
      - name: Release to @dev channel
        if: matrix.channel == 'dev'
        run: |
          yarn changeset version --snapshot
          yarn changeset publish --tag dev
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
