name: Deploy Canary Release

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout 🛎️
        uses: actions/checkout@v2
        with:
          # Fetch all history (needed for lerna / semantic release to correctly version)
          fetch-depth: 0
      # pulls all tags (needed for lerna / semantic release to correctly version)
      - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
      - name: Set up Node.js
        uses: actions/setup-node@master
        with:
          node-version: 14.x
          registry-url: https://registry.npmjs.org
          scope: '@opentelemetry'

      - name: restore lock files
        uses: actions/cache@master # must use unreleased master to cache multiple paths
        id: cache
        with:
          # must be done before bootstrap to not include node_modules files in the cache paths
          path: |
            package-lock.json
            packages/*/package-lock.json
            benchmark/*/package-lock.json
            backwards-compatability/*/package-lock.json
            metapackages/*/package-lock.json
            packages/*/package-lock.json
            integration-tests/*/package-lock.json
          key: ${{ runner.os }}-${{ hashFiles('**/package.json') }}

      - name: Install and Build (cache miss) 🔧
        if: steps.cache.outputs.cache-hit != 'true'
        run: |
          npm install --ignore-scripts
          npx lerna bootstrap --no-ci
          npm run compile

      - name: Install and Build (cache hit) 🔧
        if: steps.cache.outputs.cache-hit == 'true'
        run: |
          npm ci --ignore-scripts
          npx lerna bootstrap
          npm run compile

      - name: Publish
        run: npx lerna publish --canary --yes --no-verify-access
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      # Push new version tag to github
      - run: git push --tags
